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
C<DBD::SQLite> users. If, however, there are any applications
that nevertheless were built using the "Standard Query" syntax,
they have to be migrated; but the conversion
function provided in in L<DBD::SQLite::FTS3Transitional>
is there to help.
they have to be migrated, because the precedence of the C<OR> operator
has changed. Conversion from old to new syntax can be
automated through L<DBD::SQLite::FTS3Transitional>, published
in a separate distribution.
=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);
}