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:
parent
63cc430ee3
commit
f509d383a2
3 changed files with 4 additions and 138 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue