Annotation of embedaddon/sqlite3/test/collate6.test, revision 1.1
1.1 ! misho 1: #
! 2: # 2001 September 15
! 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 collation sequences in concert with triggers.
! 14: #
! 15: # $Id: collate6.test,v 1.4 2007/07/30 14:40:48 danielk1977 Exp $
! 16:
! 17: set testdir [file dirname $argv0]
! 18: source $testdir/tester.tcl
! 19:
! 20: # There are no tests in this file that will work without
! 21: # trigger support.
! 22: #
! 23: ifcapable {!trigger} {
! 24: finish_test
! 25: return
! 26: }
! 27:
! 28: # Create a case-insensitive collation type NOCASE for use in testing.
! 29: # Normally, capital letters are less than their lower-case counterparts.
! 30: db collate NOCASE nocase_collate
! 31: proc nocase_collate {a b} {
! 32: return [string compare -nocase $a $b]
! 33: }
! 34:
! 35: #
! 36: # Tests are organized as follows:
! 37: # collate6-1.* - triggers.
! 38: #
! 39:
! 40: do_test collate6-1.0 {
! 41: execsql {
! 42: CREATE TABLE collate6log(a, b);
! 43: CREATE TABLE collate6tab(a COLLATE NOCASE, b COLLATE BINARY);
! 44: }
! 45: } {}
! 46:
! 47: # Test that the default collation sequence applies to new.* references
! 48: # in WHEN clauses.
! 49: do_test collate6-1.1 {
! 50: execsql {
! 51: CREATE TRIGGER collate6trig BEFORE INSERT ON collate6tab
! 52: WHEN new.a = 'a' BEGIN
! 53: INSERT INTO collate6log VALUES(new.a, new.b);
! 54: END;
! 55: }
! 56: } {}
! 57: do_test collate6-1.2 {
! 58: execsql {
! 59: INSERT INTO collate6tab VALUES('a', 'b');
! 60: SELECT * FROM collate6log;
! 61: }
! 62: } {a b}
! 63: do_test collate6-1.3 {
! 64: execsql {
! 65: INSERT INTO collate6tab VALUES('A', 'B');
! 66: SELECT * FROM collate6log;
! 67: }
! 68: } {a b A B}
! 69: do_test collate6-1.4 {
! 70: execsql {
! 71: DROP TRIGGER collate6trig;
! 72: DELETE FROM collate6log;
! 73: }
! 74: } {}
! 75:
! 76: # Test that the default collation sequence applies to new.* references
! 77: # in the body of triggers.
! 78: do_test collate6-1.5 {
! 79: execsql {
! 80: CREATE TRIGGER collate6trig BEFORE INSERT ON collate6tab BEGIN
! 81: INSERT INTO collate6log VALUES(new.a='a', new.b='b');
! 82: END;
! 83: }
! 84: } {}
! 85: do_test collate6-1.6 {
! 86: execsql {
! 87: INSERT INTO collate6tab VALUES('a', 'b');
! 88: SELECT * FROM collate6log;
! 89: }
! 90: } {1 1}
! 91: do_test collate6-1.7 {
! 92: execsql {
! 93: INSERT INTO collate6tab VALUES('A', 'B');
! 94: SELECT * FROM collate6log;
! 95: }
! 96: } {1 1 1 0}
! 97: do_test collate6-1.8 {
! 98: execsql {
! 99: DROP TRIGGER collate6trig;
! 100: DELETE FROM collate6log;
! 101: }
! 102: } {}
! 103:
! 104: do_test collate6-1.9 {
! 105: execsql {
! 106: DROP TABLE collate6tab;
! 107: }
! 108: } {}
! 109:
! 110: # Test that an explicit collation sequence overrides an implicit
! 111: # one attached to a 'new' reference.
! 112: #
! 113: do_test collate6-2.1 {
! 114: execsql {
! 115: CREATE TABLE abc(a COLLATE binary, b, c);
! 116: CREATE TABLE def(a, b, c);
! 117: CREATE TRIGGER abc_t1 AFTER INSERT ON abc BEGIN
! 118: INSERT INTO def SELECT * FROM abc WHERE a < new.a COLLATE nocase;
! 119: END
! 120: }
! 121: } {}
! 122: do_test collate6-2.2 {
! 123: execsql {
! 124: INSERT INTO abc VALUES('One', 'Two', 'Three');
! 125: INSERT INTO abc VALUES('one', 'two', 'three');
! 126: SELECT * FROM def;
! 127: }
! 128: } {}
! 129: do_test collate6-2.3 {
! 130: execsql {
! 131: UPDATE abc SET a = 'four' WHERE a = 'one';
! 132: CREATE TRIGGER abc_t2 AFTER UPDATE ON abc BEGIN
! 133: INSERT INTO def SELECT * FROM abc WHERE a < new.a COLLATE nocase;
! 134: END;
! 135: SELECT * FROM def;
! 136: }
! 137: } {}
! 138:
! 139: # At one point the 6-3.2 (but not 6-3.1) was causing an assert() to fail.
! 140: #
! 141: do_test collate6-3.1 {
! 142: execsql {
! 143: SELECT 1 FROM sqlite_master WHERE name COLLATE nocase = 'hello';
! 144: }
! 145: } {}
! 146: do_test collate6-3.2 {
! 147: execsql {
! 148: SELECT 1 FROM sqlite_master WHERE 'hello' = name COLLATE nocase;
! 149: }
! 150: } {}
! 151:
! 152:
! 153: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>