1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- # 2006 February 16
- #
- # The author disclaims copyright to this source code. In place of
- # a legal notice, here is a blessing:
- #
- # May you do good and not evil.
- # May you find forgiveness for yourself and forgive others.
- # May you share freely, never taking more than you give.
- #
- #***********************************************************************
- #
- # This file contains code to verify that the SQLITE_UTF16_ALIGNED
- # flag passed into the sqlite3_create_collation() function insures
- # that all strings passed to that function are aligned on an even
- # byte boundary.
- #
- # $Id: utf16align.test,v 1.2 2008/11/07 03:29:34 drh Exp $
- set testdir [file dirname $argv0]
- source $testdir/tester.tcl
- # Skip this entire test if we do not support UTF16
- #
- ifcapable !utf16 {
- finish_test
- return
- }
- # Create a database with a UTF16 encoding. Put in lots of string
- # data of varying lengths.
- #
- do_test utf16align-1.0 {
- set unaligned_string_counter 0
- add_alignment_test_collations [sqlite3_connection_pointer db]
- execsql {
- PRAGMA encoding=UTF16;
- CREATE TABLE t1(
- id INTEGER PRIMARY KEY,
- spacer TEXT,
- a TEXT COLLATE utf16_aligned,
- b TEXT COLLATE utf16_unaligned
- );
- INSERT INTO t1(a) VALUES("abc");
- INSERT INTO t1(a) VALUES("defghi");
- INSERT INTO t1(a) VALUES("jklmnopqrstuv");
- INSERT INTO t1(a) VALUES("wxyz0123456789-");
- UPDATE t1 SET b=a||'-'||a;
- INSERT INTO t1(a,b) SELECT a||b, b||a FROM t1;
- INSERT INTO t1(a,b) SELECT a||b, b||a FROM t1;
- INSERT INTO t1(a,b) SELECT a||b, b||a FROM t1;
- INSERT INTO t1(a,b) VALUES('one','two');
- INSERT INTO t1(a,b) SELECT a, b FROM t1;
- UPDATE t1 SET spacer = CASE WHEN rowid&1 THEN 'x' ELSE 'xx' END;
- SELECT count(*) FROM t1;
- }
- } 66
- do_test utf16align-1.1 {
- set unaligned_string_counter
- } 0
- # Creating an index that uses the unaligned collation. We should see
- # some unaligned strings passed to the collating function.
- #
- do_test utf16align-1.2 {
- execsql {
- CREATE INDEX t1i1 ON t1(spacer, b);
- }
- # puts $unaligned_string_counter
- expr {$unaligned_string_counter>0}
- } 1
- # Create another index that uses the aligned collation. This time
- # there should be no unaligned accesses
- #
- do_test utf16align-1.3 {
- set unaligned_string_counter 0
- execsql {
- CREATE INDEX t1i2 ON t1(spacer, a);
- }
- expr {$unaligned_string_counter>0}
- } 0
- integrity_check utf16align-1.4
- # ticket #3482
- #
- db close
- sqlite3 db :memory:
- do_test utf16align-2.1 {
- db eval {
- PRAGMA encoding=UTF16be;
- SELECT hex(ltrim(x'6efcda'));
- }
- } {6EFC}
- finish_test
|