readded DBIx::FullTextSearch because it's almost impossible to add locally
This commit is contained in:
parent
a5b07a2599
commit
598ccd1766
12 changed files with 5558 additions and 0 deletions
78
lib/DBIx/FullTextSearch/String.pm
Normal file
78
lib/DBIx/FullTextSearch/String.pm
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
|
||||
package DBIx::FullTextSearch::String;
|
||||
use DBIx::FullTextSearch;
|
||||
use strict;
|
||||
use vars qw! @ISA !;
|
||||
@ISA = qw! DBIx::FullTextSearch !;
|
||||
|
||||
# Create creates the conversion table that converts string names of
|
||||
# documents to numbers
|
||||
sub _create_tables {
|
||||
my $fts = shift;
|
||||
$fts->{'doc_id_table'} = $fts->{'table'} . '_docid'
|
||||
unless defined $fts->{'doc_id_table'};
|
||||
|
||||
unless($fts->{'name_length'}){
|
||||
return "The parameter name_length has to be specified.";
|
||||
}
|
||||
|
||||
my $CREATE_DOCID = <<EOF;
|
||||
create table $fts->{'doc_id_table'} (
|
||||
name varchar($fts->{'name_length'}) binary not null,
|
||||
id $DBIx::FullTextSearch::BITS_TO_INT{$fts->{'doc_id_bits'}} unsigned not null auto_increment,
|
||||
primary key (id),
|
||||
unique (name)
|
||||
)
|
||||
EOF
|
||||
my $dbh = $fts->{'dbh'};
|
||||
$dbh->do($CREATE_DOCID) or return $dbh->errstr;
|
||||
push @{$fts->{'created_tables'}}, $fts->{'doc_id_table'};
|
||||
return;
|
||||
}
|
||||
|
||||
sub get_id_for_name {
|
||||
my ($self, $string) = @_;
|
||||
my $dbh = $self->{'dbh'};
|
||||
my $doc_id_table = $self->{'doc_id_table'};
|
||||
|
||||
my $name_to_id_sth = ( defined $self->{'name_to_id_sth'}
|
||||
? $self->{'name_to_id_sth'}
|
||||
: $self->{'name_to_id_sth'} = $dbh->prepare("select id from $doc_id_table where name = ?") or die $dbh->errstr);
|
||||
my $id = $dbh->selectrow_array($name_to_id_sth, {}, $string);
|
||||
if (not defined $id) {
|
||||
my $new_name_sth = (defined $self->{'new_name_sth'}
|
||||
? $self->{'new_name_sth'}
|
||||
: $self->{'new_name_sth'} =
|
||||
$dbh->prepare("insert into $doc_id_table values (?, null)") or die $dbh->errstr );
|
||||
$new_name_sth->execute($string) or die $new_name_sth->errstr;
|
||||
$id = $new_name_sth->{'mysql_insertid'};
|
||||
}
|
||||
$id;
|
||||
}
|
||||
|
||||
sub index_document {
|
||||
my ($self, $string, $data) = @_;
|
||||
my $id = $self->get_id_for_name($string);
|
||||
$self->SUPER::index_document($id, $data);
|
||||
}
|
||||
|
||||
sub delete_document {
|
||||
my ($self, $doc_id) = @_;
|
||||
|
||||
$self->SUPER::delete_document($self->get_id_for_name($doc_id));
|
||||
}
|
||||
|
||||
sub contains_hashref {
|
||||
my $self = shift;
|
||||
my $res = $self->SUPER::contains_hashref(@_);
|
||||
return unless keys %$res;
|
||||
|
||||
my $doc_id_table = $self->{'doc_id_table'};
|
||||
|
||||
my $data = $self->{'dbh'}->selectall_arrayref("select name, id from $doc_id_table where id in (" . join(',', ('?') x keys %$res).")", {}, keys %$res);
|
||||
return { map { ( $_->[0], $res->{$_->[1]} ) } @$data };
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue