mirror of
				https://github.com/sqlite/sqlite.git
				synced 2025-11-03 16:53:36 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# 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
 |