|
Packit |
723767 |
#!/usr/bin/perl
|
|
Packit |
723767 |
|
|
Packit |
723767 |
use strict;
|
|
Packit |
723767 |
BEGIN {
|
|
Packit |
723767 |
$| = 1;
|
|
Packit |
723767 |
$^W = 1;
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
|
|
Packit |
723767 |
use lib "t/lib";
|
|
Packit |
723767 |
use SQLiteTest qw/connect_ok @CALL_FUNCS/;
|
|
Packit |
723767 |
use Test::More;
|
|
Packit |
723767 |
|
|
Packit |
723767 |
my @words = qw{
|
|
Packit |
723767 |
berger Bergère bergère Bergere
|
|
Packit |
723767 |
HOT hôte
|
|
Packit |
723767 |
hétéroclite hétaïre hêtre héraut
|
|
Packit |
723767 |
HAT hâter
|
|
Packit |
723767 |
fétu fête fève ferme
|
|
Packit |
723767 |
};
|
|
Packit |
723767 |
my @regexes = qw( ^b\\w+ (?i:^b\\w+) );
|
|
Packit |
723767 |
|
|
Packit |
723767 |
BEGIN {
|
|
Packit |
723767 |
if ($] < 5.008005) {
|
|
Packit |
723767 |
plan skip_all => 'Unicode is not supported before 5.8.5';
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
|
|
Packit |
723767 |
plan tests => 2 * (3 + 2 * @regexes) * @CALL_FUNCS;
|
|
Packit |
723767 |
|
|
Packit |
723767 |
BEGIN {
|
|
Packit |
723767 |
# Sadly perl for windows (and probably sqlite, too) may hang
|
|
Packit |
723767 |
# if the system locale doesn't support european languages.
|
|
Packit |
723767 |
# en-us should be a safe default. if it doesn't work, use 'C'.
|
|
Packit |
723767 |
if ( $^O eq 'MSWin32') {
|
|
Packit |
723767 |
use POSIX 'locale_h';
|
|
Packit |
723767 |
setlocale(LC_COLLATE, 'en-us');
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
use locale;
|
|
Packit |
723767 |
|
|
Packit |
723767 |
use DBD::SQLite;
|
|
Packit |
723767 |
|
|
Packit |
723767 |
|
|
Packit |
723767 |
|
|
Packit |
723767 |
foreach my $call_func (@CALL_FUNCS) {
|
|
Packit |
723767 |
|
|
Packit |
723767 |
for my $use_unicode (0, 1) {
|
|
Packit |
723767 |
|
|
Packit |
723767 |
# connect
|
|
Packit |
723767 |
my $dbh = connect_ok( RaiseError => 1, sqlite_unicode => $use_unicode );
|
|
Packit |
723767 |
|
|
Packit |
723767 |
# The following tests are about ordering, so don't reverse!
|
|
Packit |
723767 |
if ($dbh->selectrow_array('PRAGMA reverse_unordered_selects')) {
|
|
Packit |
723767 |
$dbh->do('PRAGMA reverse_unordered_selects = OFF');
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
|
|
Packit |
723767 |
# populate test data
|
|
Packit |
723767 |
my @vals = @words;
|
|
Packit |
723767 |
if ($use_unicode) {
|
|
Packit |
723767 |
utf8::upgrade($_) foreach @vals;
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
|
|
Packit |
723767 |
$dbh->do( 'CREATE TEMP TABLE regexp_test ( txt )' );
|
|
Packit |
723767 |
$dbh->do( "INSERT INTO regexp_test VALUES ( '$_' )" ) foreach @vals;
|
|
Packit |
723767 |
|
|
Packit |
723767 |
foreach my $regex (@regexes) {
|
|
Packit |
723767 |
my @perl_match = grep {/$regex/} @vals;
|
|
Packit |
723767 |
my $sql = "SELECT txt from regexp_test WHERE txt REGEXP '$regex' "
|
|
Packit |
723767 |
. "COLLATE perllocale";
|
|
Packit |
723767 |
my $db_match = $dbh->selectcol_arrayref($sql);
|
|
Packit |
723767 |
|
|
Packit |
723767 |
is_deeply(\@perl_match, $db_match, "REGEXP '$regex'");
|
|
Packit |
723767 |
|
|
Packit |
723767 |
my @perl_antimatch = grep {!/$regex/} @vals;
|
|
Packit |
723767 |
$sql =~ s/REGEXP/NOT REGEXP/;
|
|
Packit |
723767 |
my $db_antimatch = $dbh->selectcol_arrayref($sql);
|
|
Packit |
723767 |
is_deeply(\@perl_antimatch, $db_antimatch, "NOT REGEXP '$regex'");
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
|
|
Packit |
723767 |
# null
|
|
Packit |
723767 |
{
|
|
Packit |
723767 |
my $sql = "SELECT txt from regexp_test WHERE txt REGEXP NULL "
|
|
Packit |
723767 |
. "COLLATE perllocale";
|
|
Packit |
723767 |
my $db_match = $dbh->selectcol_arrayref($sql);
|
|
Packit |
723767 |
|
|
Packit |
723767 |
is_deeply([], $db_match, "REGEXP NULL");
|
|
Packit |
723767 |
|
|
Packit |
723767 |
$sql =~ s/REGEXP/NOT REGEXP/;
|
|
Packit |
723767 |
my $db_antimatch = $dbh->selectcol_arrayref($sql);
|
|
Packit |
723767 |
is_deeply([], $db_antimatch, "NOT REGEXP NULL");
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
}
|
|
Packit |
723767 |
|