1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Fix a problem in the legacy genfkey code to do with column names that require quoting.

FossilOrigin-Name: 273ccbf18af5191807678a0a0c09cda82408b29c
This commit is contained in:
dan
2009-10-08 13:42:28 +00:00
parent ce3745329c
commit 8b6d37d8bc
4 changed files with 74 additions and 14 deletions

View File

@ -1,5 +1,5 @@
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
@ -161,7 +161,7 @@ F src/random.c 676b9d7ac820fe81e6fb2394ac8c10cff7f38628
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
@ -734,7 +734,7 @@ F test/zeroblob.test caaecfb4f908f7bc086ed238668049f96774d688
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
@ -756,7 +756,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
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

View File

@ -1 +1 @@
533703d78ab4330b2dc8e08aaba89b4667e46331
273ccbf18af5191807678a0a0c09cda82408b29c

View File

@ -876,8 +876,8 @@ static int genfkey_create_triggers(
", '/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)"
@ -891,9 +891,9 @@ static int genfkey_create_triggers(
", '/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/;' "
@ -908,9 +908,9 @@ static int genfkey_create_triggers(
", '/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/;' "

View File

@ -292,3 +292,63 @@ do_test genfkey-5.5 {
}
} {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}