-C Add\stests\sto\stest/e_fkey.test.
-D 2009-10-08T11:57:25
+C Fix\sa\sproblem\sin\sthe\slegacy\sgenfkey\scode\sto\sdo\swith\scolumn\snames\sthat\srequire\squoting.
+D 2009-10-08T13:42:28
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/resolve.c 941843301f6fda6c6350839c6955a172441a0782
F src/rowset.c c64dafba1f9fd876836c8db8682966b9d197eb1f
F src/select.c 1d0a13137532321b4364f964e46f057d271691e3
-F src/shell.c d6e64471aafb81f355262533393169a70529847a
+F src/shell.c 270231b3f587f1f86391b9994fdfcd5d472c3fdf
F src/sqlite.h.in 2c9fa83525b14fe3dda38146fb3005847d57a14e
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
F src/sqliteInt.h 61c55f5f83c63813903f374e9b33173572f0559a
F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439
F tool/genfkey.README cf68fddd4643bbe3ff8e31b8b6d8b0a1b85e20f4
-F tool/genfkey.test 405a43d54f1646bfaa7a84b03bb959aef62a3a49
+F tool/genfkey.test 4196a8928b78f51d54ef58e99e99401ab2f0a7e5
F tool/lemon.c 0eb9829c494dfcea449de36ad677efe7f0742801
F tool/lempar.c 2ed70b3fc896a47e07fedfe543324f008f53d223
F tool/mkkeywordhash.c 8c9f8e3253555101aaa4bf7a0459cbfc8ddc41cc
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 5806925283b889867567c4ad92518bad000e9d9d
-R 97b0c9624c1352ee1bd2b4c1a280677a
+P 533703d78ab4330b2dc8e08aaba89b4667e46331
+R ab684cf0fa4376c5eb1747e06c0968a4
U dan
-Z b579362d2c03d6f47ae2f91d34cdcb70
+Z 3e243fab4d4da81ce8aeeb768378731e
-533703d78ab4330b2dc8e08aaba89b4667e46331
\ No newline at end of file
+273ccbf18af5191807678a0a0c09cda82408b29c
\ No newline at end of file
", '/ref/', dq(to_tbl)"
", '/key_notnull/', sj('new.' || dq(from_col) || ' IS NOT NULL', ' AND ')"
- ", '/fkey_list/', sj(to_col, ', ')"
- ", '/rkey_list/', sj(from_col, ', ')"
+ ", '/fkey_list/', sj(dq(to_col), ', ')"
+ ", '/rkey_list/', sj(dq(from_col), ', ')"
", '/cond1/', sj(multireplace('new./from/ == /to/'"
", '/from/', dq(from_col)"
", '/update_action/', CASE on_update "
"WHEN 'SET NULL' THEN "
"multireplace('UPDATE /tbl/ SET /setlist/ WHERE /where/;' "
- ", '/setlist/', sj(from_col||' = NULL',', ')"
+ ", '/setlist/', sj(dq(from_col)||' = NULL',', ')"
", '/tbl/', dq(from_tbl)"
- ", '/where/', sj(from_col||' = old.'||dq(to_col),' AND ')"
+ ", '/where/', sj(dq(from_col)||' = old.'||dq(to_col),' AND ')"
")"
"WHEN 'CASCADE' THEN "
"multireplace('UPDATE /tbl/ SET /setlist/ WHERE /where/;' "
", '/delete_action/', CASE on_delete "
"WHEN 'SET NULL' THEN "
"multireplace('UPDATE /tbl/ SET /setlist/ WHERE /where/;' "
- ", '/setlist/', sj(from_col||' = NULL',', ')"
+ ", '/setlist/', sj(dq(from_col)||' = NULL',', ')"
", '/tbl/', dq(from_tbl)"
- ", '/where/', sj(from_col||' = old.'||dq(to_col),' AND ')"
+ ", '/where/', sj(dq(from_col)||' = old.'||dq(to_col),' AND ')"
")"
"WHEN 'CASCADE' THEN "
"multireplace('DELETE FROM /tbl/ WHERE /where/;' "
}
} {0 {}}
+# Test also column names that require quoting.
+do_test genfkey-6.1 {
+ execsql {
+ DROP TABLE "t.3";
+ DROP TABLE t13;
+ CREATE TABLE p(
+ "a.1 first", "b.2 second",
+ UNIQUE("a.1 first", "b.2 second")
+ );
+ CREATE TABLE c(
+ "c.1 I", "d.2 II",
+ FOREIGN KEY("c.1 I", "d.2 II")
+ REFERENCES p("a.1 first", "b.2 second")
+ ON UPDATE CASCADE ON DELETE CASCADE
+ );
+ }
+} {}
+do_test genfkey-6.2 {
+ set rc [catch {exec ./sqlite3 test.db .genfkey} msg]
+} {0}
+do_test genfkey-6.3 {
+ execsql $msg
+ execsql {
+ INSERT INTO p VALUES('A', 'B');
+ INSERT INTO p VALUES('C', 'D');
+ INSERT INTO c VALUES('A', 'B');
+ INSERT INTO c VALUES('C', 'D');
+ UPDATE p SET "a.1 first" = 'X' WHERE rowid = 1;
+ DELETE FROM p WHERE rowid = 2;
+ }
+ execsql { SELECT * FROM c }
+} {X B}
+
+do_test genfkey-6.4 {
+ execsql {
+ DROP TABLE p;
+ DROP TABLE c;
+ CREATE TABLE parent("a.1", PRIMARY KEY("a.1"));
+ CREATE TABLE child("b.2", FOREIGN KEY("b.2") REFERENCES parent("a.1"));
+ }
+ set rc [catch {exec ./sqlite3 test.db .genfkey} msg]
+} {0}
+do_test genfkey-6.5 {
+ execsql $msg
+ execsql {
+ INSERT INTO parent VALUES(1);
+ INSERT INTO child VALUES(1);
+ }
+ catchsql { UPDATE parent SET "a.1"=0 }
+} {1 {constraint failed}}
+do_test genfkey-6.6 {
+ catchsql { UPDATE child SET "b.2"=7 }
+} {1 {constraint failed}}
+do_test genfkey-6.7 {
+ execsql {
+ SELECT * FROM parent;
+ SELECT * FROM child;
+ }
+} {1 1}
+