# This is a test for correct handling of upgraded strings without # the sqlite_unicode parameter. use strict; use warnings; use lib "t/lib"; use SQLiteTest; use DBD::SQLite::Constants; use Test::More; use if -d ".git", "Test::FailWarnings"; { my $dbh = connect_ok( dbfile => 'foo', RaiseError => 1 ); $dbh->{sqlite_string_mode} = DBD::SQLite::Constants::DBD_SQLITE_STRING_MODE_BYTES; my $tbl_name = "\xe9p\xe9e"; utf8::encode $tbl_name; my $str = "CREATE TABLE $tbl_name ( col1 TEXT )"; utf8::upgrade $str; $dbh->do($str); my $master_ar = $dbh->selectall_arrayref('SELECT * FROM sqlite_master', { Slice => {} }); is( $master_ar->[0]{'name'}, $tbl_name, 'do() takes correct string value', ); #---------------------------------------------------------------------- my $dummy_str = "SELECT '$tbl_name'"; utf8::upgrade $dummy_str; my $sth = $dbh->prepare($dummy_str); $sth->execute(); my $row = $sth->fetchrow_arrayref(); is( $row->[0], $tbl_name, 'prepare() takes correct string value', ); #---------------------------------------------------------------------- my $tbl_name_ug = $tbl_name; utf8::upgrade $tbl_name_ug; my $sth2 = $dbh->prepare('SELECT ?'); $sth2->execute( do { my $v = $tbl_name_ug } ); $row = $sth2->fetchrow_arrayref(); is( $row->[0], $tbl_name, 'execute() takes correct string value', ); } done_testing;