Annotation of embedaddon/sqlite3/test/collate9.test, revision 1.1
1.1 ! misho 1: #
! 2: # 2007 November 12
! 3: #
! 4: # The author disclaims copyright to this source code. In place of
! 5: # a legal notice, here is a blessing:
! 6: #
! 7: # May you do good and not evil.
! 8: # May you find forgiveness for yourself and forgive others.
! 9: # May you share freely, never taking more than you give.
! 10: #
! 11: #***********************************************************************
! 12: # This file implements regression tests for SQLite library. The
! 13: # focus of this script is making sure that the names of collation
! 14: # sequences may be quoted using double quotes in SQL statements.
! 15: #
! 16: # $Id: collate9.test,v 1.2 2008/07/10 00:32:42 drh Exp $
! 17:
! 18: set testdir [file dirname $argv0]
! 19: source $testdir/tester.tcl
! 20:
! 21: proc reverse_sort {lhs rhs} {
! 22: return [string compare $rhs $lhs]
! 23: }
! 24: db collate "reverse sort" reverse_sort
! 25:
! 26: # This procedure executes the SQL. Then it checks to see if the OP_Sort
! 27: # opcode was executed. If an OP_Sort did occur, then "sort" is appended
! 28: # to the result. If no OP_Sort happened, then "nosort" is appended.
! 29: #
! 30: # This procedure is used to check to make sure sorting is or is not
! 31: # occurring as expected.
! 32: #
! 33: proc cksort {sql} {
! 34: set ::sqlite_sort_count 0
! 35: set data [execsql $sql]
! 36: if {$::sqlite_sort_count} {set x sort} {set x nosort}
! 37: lappend data $x
! 38: return $data
! 39: }
! 40:
! 41: # Test plan:
! 42: #
! 43: # collate9-1.* - Test collation sequences attached to table columns
! 44: # collate9-2.* - Test collation sequences attached to expressions
! 45: # collate9-3.* - Test collation sequences attached to an index
! 46: # collate9-4.* - Test collation sequences as an argument to REINDEX
! 47: #
! 48:
! 49: do_test collate9-1.1 {
! 50: execsql {
! 51: CREATE TABLE xy(x COLLATE "reverse sort", y COLLATE binary);
! 52: INSERT INTO xy VALUES('one', 'one');
! 53: INSERT INTO xy VALUES('two', 'two');
! 54: INSERT INTO xy VALUES('three', 'three');
! 55: }
! 56: } {}
! 57: do_test collate9-1.2 {
! 58: execsql {
! 59: SELECT x FROM xy ORDER BY x
! 60: }
! 61: } {two three one}
! 62: do_test collate9-1.3 {
! 63: execsql {
! 64: SELECT y FROM xy ORDER BY y
! 65: }
! 66: } {one three two}
! 67: do_test collate9-1.4 {
! 68: cksort {
! 69: SELECT x FROM xy ORDER BY x
! 70: }
! 71: } {two three one sort}
! 72: do_test collate9-1.5 {
! 73: execsql {
! 74: CREATE INDEX xy_i ON xy(x)
! 75: }
! 76: } {}
! 77: do_test collate9-1.6 {
! 78: cksort {
! 79: SELECT x FROM xy ORDER BY x
! 80: }
! 81: } {two three one nosort}
! 82:
! 83: do_test collate9-2.1 {
! 84: execsql {
! 85: SELECT x, x < 'seven' FROM xy ORDER BY x
! 86: }
! 87: } {two 1 three 1 one 0}
! 88: do_test collate9-2.2 {
! 89: execsql {
! 90: SELECT y, y < 'seven' FROM xy ORDER BY x
! 91: }
! 92: } {two 0 three 0 one 1}
! 93: do_test collate9-2.3 {
! 94: execsql {
! 95: SELECT y, y COLLATE "reverse sort" < 'seven' FROM xy ORDER BY x
! 96: }
! 97: } {two 1 three 1 one 0}
! 98: do_test collate9-2.4 {
! 99: execsql {
! 100: SELECT y FROM xy ORDER BY y
! 101: }
! 102: } {one three two}
! 103: do_test collate9-2.5 {
! 104: execsql {
! 105: SELECT y FROM xy ORDER BY y COLLATE "reverse sort"
! 106: }
! 107: } {two three one}
! 108: do_test collate9-2.6 {
! 109: execsql {
! 110: SELECT y COLLATE "reverse sort" AS aaa FROM xy ORDER BY aaa
! 111: }
! 112: } {two three one}
! 113:
! 114: do_test collate9-3.1 {
! 115: execsql {
! 116: CREATE INDEX xy_i2 ON xy(y COLLATE "reverse sort");
! 117: }
! 118: } {}
! 119: do_test collate9-3.2 {
! 120: cksort {
! 121: SELECT y FROM xy ORDER BY y
! 122: }
! 123: } {one three two sort}
! 124: do_test collate9-3.3 {
! 125: cksort {
! 126: SELECT y FROM xy ORDER BY y COLLATE "reverse sort"
! 127: }
! 128: } {two three one nosort}
! 129: do_test collate9-3.4 {
! 130: cksort {
! 131: SELECT y AS aaa FROM xy ORDER BY aaa
! 132: }
! 133: } {one three two sort}
! 134: do_test collate9-3.5 {
! 135: cksort {
! 136: SELECT y COLLATE "reverse sort" AS aaa FROM xy ORDER BY aaa
! 137: }
! 138: } {two three one nosort}
! 139:
! 140: ifcapable reindex {
! 141: do_test collate9-4.1 {
! 142: execsql {
! 143: REINDEX "reverse sort"
! 144: }
! 145: } {}
! 146:
! 147: # Modify the "reverse sort" collation so that it now sorts in the same
! 148: # order as binary.
! 149: proc reverse_sort {lhs rhs} {
! 150: return [string compare $lhs $rhs]
! 151: }
! 152:
! 153: # The integrity check should now fail because the indexes created using
! 154: # "reverse sort" are no longer in sync with the collation sequence
! 155: # implementation.
! 156: do_test collate9-4.2 {
! 157: expr {"ok" eq [execsql { PRAGMA integrity_check }]}
! 158: } {0}
! 159:
! 160: do_test collate9-4.3 {
! 161: execsql {
! 162: REINDEX "reverse sort"
! 163: }
! 164: } {}
! 165:
! 166: # Integrity check should now pass.
! 167: do_test collate9-4.4 {
! 168: expr {"ok" eq [execsql { PRAGMA integrity_check }]}
! 169: } {1}
! 170:
! 171: do_test collate9-4.5 {
! 172: cksort {
! 173: SELECT x FROM xy ORDER BY x COLLATE "reverse sort"
! 174: }
! 175: } {one three two nosort}
! 176: }
! 177:
! 178: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>