15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 2007 June 20
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The author disclaims copyright to this source code.  In place of
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# a legal notice, here is a blessing:
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#    May you do good and not evil.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#    May you find forgiveness for yourself and forgive others.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#    May you share freely, never taking more than you give.
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#***********************************************************************
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This file implements regression tests for SQLite library.  The
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# focus of this script is making sure collations pass through the
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# unary + operator.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# $Id: collate8.test,v 1.2 2008/08/25 12:14:09 drh Exp $
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set testdir [file dirname $argv0]
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)source $testdir/tester.tcl
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.1 {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CREATE TABLE t1(a TEXT COLLATE nocase);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    INSERT INTO t1 VALUES('aaa');
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    INSERT INTO t1 VALUES('BBB');
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    INSERT INTO t1 VALUES('ccc');
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    INSERT INTO t1 VALUES('DDD');
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a FROM t1 ORDER BY a;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {aaa BBB ccc DDD}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.2 {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT rowid FROM t1 WHERE a<'ccc' ORDER BY 1
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {1 2}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.3 {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT rowid FROM t1 WHERE a<'ccc' COLLATE binary ORDER BY 1
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {1 2 4}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.4 {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT rowid FROM t1 WHERE +a<'ccc' ORDER BY 1
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {1 2}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.5 {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a FROM t1 ORDER BY +a
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {aaa BBB ccc DDD}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.11 {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a AS x FROM t1 ORDER BY "x";
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {aaa BBB ccc DDD}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.12 {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a AS x FROM t1 WHERE x<'ccc' ORDER BY 1
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {aaa BBB}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.13 {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a AS x FROM t1 WHERE x<'ccc' COLLATE binary ORDER BY [x]
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {aaa BBB DDD}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.14 {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a AS x FROM t1 WHERE +x<'ccc' ORDER BY 1
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {aaa BBB}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-1.15 {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a AS x FROM t1 ORDER BY +x
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {aaa BBB ccc DDD}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# When a result-set column is aliased into a WHERE clause, make sure the
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# collating sequence logic works correctly.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-2.1 {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CREATE TABLE t2(a);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    INSERT INTO t2 VALUES('abc');
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    INSERT INTO t2 VALUES('ABC');
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a AS x FROM t2 WHERE x='abc';
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {abc}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-2.2 {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a AS x FROM t2 WHERE x='abc' COLLATE nocase;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {abc ABC}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-2.3 {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a AS x FROM t2 WHERE (x COLLATE nocase)='abc';
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {abc ABC}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-2.4 {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a COLLATE nocase AS x FROM t2 WHERE x='abc';
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {abc ABC}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-2.5 {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a COLLATE nocase AS x FROM t2 WHERE (x COLLATE binary)='abc';
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {abc}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-2.6 {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a COLLATE nocase AS x FROM t2 WHERE x='abc' COLLATE binary;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {abc ABC}
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-2.7 {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT * FROM t2 WHERE (a COLLATE nocase)='abc' COLLATE binary;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {abc ABC}
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do_test collate8-2.8 {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execsql {
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SELECT a COLLATE nocase AS x FROM t2 WHERE 'abc'=x COLLATE binary;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {abc}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)finish_test
126