package Wiki::Toolkit::Setup::DBIxFTSMySQL; use strict; use vars qw( $VERSION ); $VERSION = 0.04; use DBI; use DBIx::FullTextSearch; use Carp; =head1 NAME Wiki::Toolkit::Setup::DBIxFTSMySQL - set up fulltext indexes for Wiki::Toolkit =head1 SYNOPSIS use Wiki::Toolkit::Setup::DBIxFTSMySQL; Wiki::Toolkit::Setup::DBIxFTSMySQL::setup($dbname, $dbuser, $dbpass, $dbhost); Omit $dbhost if the database is local. =head1 DESCRIPTION Set up DBIx::FullTextSearch indexes for use with Wiki::Toolkit. Has only one function, C, which takes as arguments B the database name, the username and the password B a database handle . The username must be able to create and drop tables in the database. The $dbhost argument is optional -- omit it if the database is local. Note that any pre-existing L indexes stored in the database will be I by this function, so if you have existing data you probably want to use the C parameter to get it re-indexed. =cut sub setup { my $dbh = _get_dbh( @_ ); # Drop FTS indexes if they already exist. my $fts = DBIx::FullTextSearch->open($dbh, "_content_and_title_fts"); $fts->drop if $fts; $fts = DBIx::FullTextSearch->open($dbh, "_title_fts"); $fts->drop if $fts; # Set up FullText indexes and index anything already extant. my $fts_all = DBIx::FullTextSearch->create($dbh, "_content_and_title_fts", frontend => "table", backend => "phrase", table_name => "node", column_name => ["name","text"], column_id_name => "name", stemmer => "en-uk"); my $fts_title = DBIx::FullTextSearch->create($dbh, "_title_fts", frontend => "table", backend => "phrase", table_name => "node", column_name => "name", column_id_name => "name", stemmer => "en-uk"); my $sql = "SELECT name FROM node"; my $sth = $dbh->prepare($sql); $sth->execute(); while (my ($name, $version) = $sth->fetchrow_array) { $fts_title->index_document($name); $fts_all->index_document($name); } $sth->finish; } sub _get_dbh { return $_[0] if ( ref $_[0] and ref $_[0] eq 'DBI::db' ); my ($dbname, $dbuser, $dbpass, $dbhost) = @_; my $dsn = "dbi:mysql:$dbname"; $dsn .= ";host=$dbhost" if $dbhost; my $dbh = DBI->connect($dsn, $dbuser, $dbpass, { PrintError => 1, RaiseError => 1, AutoCommit => 1 } ) or croak DBI::errstr; return $dbh; } =head1 AUTHOR Kake Pugh (kake@earth.li). =head1 COPYRIGHT Copyright (C) 2002-2004 Kake Pugh. All Rights Reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L, L, L =cut 1;