1
0
Fork 0
mirror of https://github.com/DBD-SQLite/DBD-SQLite synced 2025-06-07 22:28:47 -04:00

removed FTS3Transitional (will be published as a separate distribution, since very few users will ever need it).

This commit is contained in:
Laurent Dami 2010-09-07 09:45:24 +00:00
parent 63cc430ee3
commit f509d383a2
3 changed files with 4 additions and 138 deletions

View file

@ -1723,10 +1723,10 @@ at runtime; however, since FTS3 was never advertised in versions prior
to 1.31, the change should be invisible to the vast majority of to 1.31, the change should be invisible to the vast majority of
C<DBD::SQLite> users. If, however, there are any applications C<DBD::SQLite> users. If, however, there are any applications
that nevertheless were built using the "Standard Query" syntax, that nevertheless were built using the "Standard Query" syntax,
they have to be migrated; but the conversion they have to be migrated, because the precedence of the C<OR> operator
function provided in in L<DBD::SQLite::FTS3Transitional> has changed. Conversion from old to new syntax can be
is there to help. automated through L<DBD::SQLite::FTS3Transitional>, published
in a separate distribution.
=head2 Tokenizers =head2 Tokenizers

View file

@ -1,99 +0,0 @@
package DBD::SQLite::FTS3Transitional;
use 5.006;
use strict;
use warnings;
no warnings 'uninitialized';
use Exporter ();
our $VERSION = '1.30_06';
our @ISA = 'Exporter';
our @EXPORT_OK = qw/fts3_convert/;
sub fts3_convert {
my $in = shift;
my $out = "";
# decompose input string into tokens
my @tokens = $in =~ / - # minus sign
| \bOR\b # OR keyword
| ".*?" # phrase query
| \S+ # term
/xg;
# build the output string
while (@tokens) {
# -a => (NOT a)
if ($tokens[0] eq '-') {
my (undef, $right) = splice(@tokens, 0, 2);
$out .= " (NOT $right)";
}
# a OR b => (a OR b)
elsif (@tokens >= 2 && $tokens[1] eq 'OR') {
my ($left, undef, $right) = splice(@tokens, 0, 3);
if ($right eq '-') {
$right = "NOT " . shift @tokens;
}
$out .= " ($left OR $right)";
}
# plain term
else {
$out .= " " . shift @tokens;
}
}
return $out;
}
1;
__END__
=head1 NAME
DBD::SQLite::FTS3Transitional - helper function for migrating FTS3 applications
=head1 SYNOPSIS
use DBD::SQLite::FTS3Transitional qw/fts3_convert/;
my $new_match_syntax = fts3_convert($old_match_syntax);
my $sql = "SELECT ... FROM ... WHERE col MATCH $new_match_syntax";
=head1 DESCRIPTION
Starting from version 1.31, C<DBD::SQLite> uses the new, recommended
"Enhanced Query Syntax" for binary set operators in fulltext FTS3 queries
(AND, OR, NOT, possibly nested with parenthesis).
Previous versions of C<DBD::SQLite> used the
"Standard Query Syntax" (see L<http://www.sqlite.org/fts3.html#section_3_2>).
This module helps converting SQLite application built with the old,
"Standard" query syntax, to the new "Extended" syntax.
=head1 FUNCTIONS
=head2 fts3_convert
Takes as input a string for the MATCH clause in a FTS3 fulltext search;
returns the same clause rewritten in new, "Extended" syntax.
=head1 AUTHOR
Laurent Dami E<lt>dami@cpan.orgE<gt>
=head1 COPYRIGHT
Copyright 2010 Laurent Dami.
This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the
LICENSE file included with this module.
=cut

View file

@ -1,35 +0,0 @@
#!/usr/bin/perl
use strict;
BEGIN {
$| = 1;
$^W = 1;
}
use t::lib::Test;
use Test::More;
use Test::NoWarnings;
my @tests = (
['foo bar' => 'foo bar' ],
['foo -bar' => 'foo (NOT bar)' ],
['foo* -bar*' => 'foo* (NOT bar*)' ],
['foo bar OR bie buz' => 'foo (bar OR bie) buz' ],
['-foo bar OR -bie buz' => '(NOT foo) (bar OR NOT bie) buz'],
['"kyrie eleison" OR "christe eleison"'
=> '("kyrie eleison" OR "christe eleison")'],
);
plan tests => 1 + @tests;
use DBD::SQLite::FTS3Transitional qw/fts3_convert/;
foreach my $t (@tests) {
my ($old_syntax, $expected_new) = @$t;
my $new = fts3_convert($old_syntax);
$new =~ s/^\s+//;
is($new, $expected_new, $old_syntax);
}