Snapshot of upstream SQLite 3.34.1
[sqlcipher.git] / test / quote.test
blob553e96a0b6f79567450976b0de33417c6186598f
1 # 2001 September 15
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
6 #    May you do good and not evil.
7 #    May you find forgiveness for yourself and forgive others.
8 #    May you share freely, never taking more than you give.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library.  The
12 # focus of this file is the ability to specify table and column names
13 # as quoted strings.
15 # $Id: quote.test,v 1.7 2007/04/25 11:32:30 drh Exp $
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
19 set testprefix quote
21 # Create a table with a strange name and with strange column names.
23 do_test quote-1.0 {
24   catchsql {CREATE TABLE '@abc' ( '#xyz' int, '!pqr' text );}
25 } {0 {}}
27 # Insert, update and query the table.
29 do_test quote-1.1 {
30   catchsql {INSERT INTO '@abc' VALUES(5,'hello')}
31 } {0 {}}
32 do_test quote-1.2.1 {
33   catchsql {SELECT * FROM '@abc'}
34 } {0 {5 hello}}
35 do_test quote-1.2.2 {
36   catchsql {SELECT * FROM [@abc]}  ;# SqlServer compatibility
37 } {0 {5 hello}}
38 do_test quote-1.2.3 {
39   catchsql {SELECT * FROM `@abc`}  ;# MySQL compatibility
40 } {0 {5 hello}}
41 do_test quote-1.3 {
42   catchsql {
43     SELECT '@abc'.'!pqr', '@abc'.'#xyz'+5 FROM '@abc'
44   }
45 } {0 {hello 10}}
46 do_test quote-1.3.1 {
47   catchsql {
48     SELECT '!pqr', '#xyz'+5 FROM '@abc'
49   }
50 } {0 {!pqr 5}}
51 do_test quote-1.3.2 {
52   catchsql {
53     SELECT "!pqr", "#xyz"+5 FROM '@abc'
54   }
55 } {0 {hello 10}}
56 do_test quote-1.3.3 {
57   catchsql {
58     SELECT [!pqr], `#xyz`+5 FROM '@abc'
59   }
60 } {0 {hello 10}}
61 do_test quote-1.3.4 {
62   set r [catch {
63     execsql {SELECT '@abc'.'!pqr', '@abc'.'#xyz'+5 FROM '@abc'}
64   } msg ]
65   lappend r $msg
66 } {0 {hello 10}}
67 do_test quote-1.4 {
68   set r [catch {
69     execsql {UPDATE '@abc' SET '#xyz'=11}
70   } msg ]
71   lappend r $msg
72 } {0 {}}
73 do_test quote-1.5 {
74   set r [catch {
75     execsql {SELECT '@abc'.'!pqr', '@abc'.'#xyz'+5 FROM '@abc'}
76   } msg ]
77   lappend r $msg
78 } {0 {hello 16}}
80 # Drop the table with the strange name.
82 do_test quote-1.6 {
83   set r [catch {
84     execsql {DROP TABLE '@abc'}
85   } msg ]
86   lappend r $msg
87 } {0 {}}
89 #-------------------------------------------------------------------------
90 # Check that it is not possible to use double-quotes for a string
91 # constant in a CHECK constraint or CREATE INDEX statement. However, 
92 # SQLite can load such a schema from disk.
94 reset_db 
95 sqlite3_db_config db SQLITE_DBCONFIG_DQS_DDL 0
96 sqlite3_db_config db SQLITE_DBCONFIG_DQS_DML 1
97 do_execsql_test 2.0 {
98   CREATE TABLE t1(x, y, z);
100 foreach {tn sql errname} {
101   1 { CREATE TABLE xyz(a, b, c CHECK (c!="null") ) } null
102   2 { CREATE INDEX i2 ON t1(x, y, z||"abc") }        abc
103   3 { CREATE INDEX i3 ON t1("w") }                   w
104   4 { CREATE INDEX i4 ON t1(x) WHERE z="w" }         w
105 } {
106   do_catchsql_test 2.1.$tn $sql [list 1 "no such column: $errname"]
109 do_execsql_test 2.2 {
110   PRAGMA writable_schema = 1;
111   CREATE TABLE xyz(a, b, c CHECK (c!="null") );
112   CREATE INDEX i2 ON t1(x, y, z||"abc");
113   CREATE INDEX i3 ON t1("w");
114   CREATE INDEX i4 ON t1(x) WHERE z="w";
117 db close
118 sqlite3 db test.db
120 do_execsql_test 2.3.1 {
121   INSERT INTO xyz VALUES(1, 2, 3);
123 do_catchsql_test 2.3.2 {
124   INSERT INTO xyz VALUES(1, 2, 'null');
125 } {1 {CHECK constraint failed: c!="null"}}
127 do_execsql_test 2.4 {
128   INSERT INTO t1 VALUES(1, 2, 3);
129   INSERT INTO t1 VALUES(4, 5, 'w');
130   SELECT * FROM t1 WHERE z='w';
131 } {4 5 w}
132 do_execsql_test 2.5 {
133   SELECT sql FROM sqlite_master;
134 } {
135   {CREATE TABLE t1(x, y, z)}
136   {CREATE TABLE xyz(a, b, c CHECK (c!="null") )}
137   {CREATE INDEX i2 ON t1(x, y, z||"abc")}
138   {CREATE INDEX i3 ON t1("w")}
139   {CREATE INDEX i4 ON t1(x) WHERE z="w"}
144 finish_test