1use strict; 2use warnings; 3no if $] >= 5.022, "warnings", "locale"; 4use lib "t/lib"; 5use SQLiteTest; 6use Test::More; 7use if -d ".git", "Test::FailWarnings"; 8use DBI; 9 10my $dbh = connect_ok(RaiseError => 1, PrintError => 0); 11 12sub locale_tokenizer { 13 return sub { 14 my $string = shift; 15 16 use locale; 17 my $regex = qr/\w+/; 18 my $term_index = 0; 19 20 return sub { # closure 21 $string =~ /$regex/g or return; # either match, or no more token 22 my ($start, $end) = ($-[0], $+[0]); 23 my $len = $end-$start; 24 my $term = substr($string, $start, $len); 25 return ($term, $len, $start, $end, $term_index++); 26 } 27 }; 28} 29 30# "main::locale_tokenizer" is considered as another column name 31# because of the comma after "tokenize=perl" 32eval { 33 $dbh->do('CREATE VIRTUAL TABLE FIXMESSAGE USING FTS3(MESSAGE, tokenize=perl, "main::locale_tokenizer");'); 34}; 35ok $@, "cause an error but not segfault"; 36 37done_testing; 38