~ubuntu-branches/ubuntu/karmic/gears/karmic

« back to all changes in this revision

Viewing changes to third_party/sqlite_google/test/collate6.test

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Lesicnik
  • Date: 2009-04-30 19:15:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090430191525-0790sb5wzg8ou0xb
Tags: upstream-0.5.21.0~svn3334+dfsg
ImportĀ upstreamĀ versionĀ 0.5.21.0~svn3334+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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