Fix a problem with foreign keys and generated columns discovered by
Manuel Rigger. FossilOrigin-Name: 27c0fdab1ba4d4993b164eb4b777c63e82aa247c3fa406121dc8ed94970a0b35
This commit is contained in:
parent
5102cf8df5
commit
7fe2fc0dcb
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
C Early\sdetection\sand\sreporting\sof\stoo\sfew\scolumns\sin\san\srtree\sCREATE\sVIRTUAL\nTABLE\sstatement.
|
||||
D 2019-12-06T19:07:44.980
|
||||
C Fix\sa\sproblem\swith\sforeign\skeys\sand\sgenerated\scolumns\sdiscovered\sby\nManuel\sRigger.
|
||||
D 2019-12-07T00:22:18.329
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@ -471,7 +471,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
|
||||
F src/btree.c d22498af716953400e314d2d98d1dac3ea5c3b01e0fd243ef9e9b132c74114ec
|
||||
F src/btree.h f27a33c49280209a93385e218306c4ee5f46ba8d7649d2f81a7166b282232484
|
||||
F src/btreeInt.h 91806f01fd1145a9a86ba3042f25c38d8faf6002701bf5e780742cf88bcff437
|
||||
F src/build.c 66b148378024f568108d0d9b6ef9b447ebcc99e1f7ce837b78f19351e6729bbc
|
||||
F src/build.c ed6cc3e7e209d92b0ed2fa780c95b1a3aa7ecdd46a97671cfcca95079789bcc9
|
||||
F src/callback.c 88615dfc0a82167b65b452b4b305dbf86be77200b3343c6ffc6d03e92a01d181
|
||||
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
|
||||
F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251
|
||||
@ -479,7 +479,7 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
|
||||
F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
|
||||
F src/dbstat.c 6c407e549406c10fde9ac3987f6d734459205239ad370369bc5fcd683084a4fa
|
||||
F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4
|
||||
F src/expr.c 208f7345cf977ec3ca4804ecb9b22b24171d8da932ad2a658594052904e98b7c
|
||||
F src/expr.c 947911a1826673add2311e8650aeaf9c2809706dfaa45fc2445a5ff32f70693d
|
||||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||
F src/fkey.c 92a248ec0fa4ed8ab60c98d9b188ce173aaf218f32e7737ba77deb2a684f9847
|
||||
F src/func.c ed33e38cd642058182a31a3f518f2e34f4bbe53aa483335705c153c4d3e50b12
|
||||
@ -1022,7 +1022,7 @@ F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
|
||||
F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
|
||||
F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536
|
||||
F test/gcfault.test dd28c228a38976d6336a3fc42d7e5f1ad060cb8c
|
||||
F test/gencol1.test 0efde3919b81a05491ad6f37e59d81901b6fa5723596b21accfe269df9b3cf06
|
||||
F test/gencol1.test 037c5c26dddd984ba7ea11bd16996377f72523a4126804b1bbecafc833fccb47
|
||||
F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98
|
||||
F test/having.test e4098a4b8962f9596035c3b87a8928a10648acc509f1bb8d6f96413bbf79a1b3
|
||||
F test/hexlit.test 4a6a5f46e3c65c4bf1fa06f5dd5a9507a5627751
|
||||
@ -1852,7 +1852,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 97fb5a72f91a44d579466e67c33aa862384c4d1c95c2010cf4ae9dbd172bbcfb
|
||||
R a5df17bc4bd57a47c10dfaaa183b435c
|
||||
P ef73107f475e40e6bdd8b722e96992070f81fd2b7a3cb718ec8f251c89ca3e81
|
||||
R aaef2d23c9db8d375ded121b4d30b560
|
||||
U drh
|
||||
Z 9d3d6a264e3c59291c05378e70901570
|
||||
Z 7e4775d6900f8a2f69645687a14dafa0
|
||||
|
@ -1 +1 @@
|
||||
ef73107f475e40e6bdd8b722e96992070f81fd2b7a3cb718ec8f251c89ca3e81
|
||||
27c0fdab1ba4d4993b164eb4b777c63e82aa247c3fa406121dc8ed94970a0b35
|
@ -947,13 +947,15 @@ i16 sqlite3StorageColumnToTable(Table *pTab, i16 iCol){
|
||||
** the end.
|
||||
**
|
||||
** If SQLITE_OMIT_GENERATED_COLUMNS then there are no virtual columns and
|
||||
** this routine is a no-op macro.
|
||||
** this routine is a no-op macro. If the pTab does not have any virtual
|
||||
** columns, then this routine is no-op that always return iCol. If iCol
|
||||
** is negative (indicating the ROWID column) then this routine return iCol.
|
||||
*/
|
||||
i16 sqlite3TableColumnToStorage(Table *pTab, i16 iCol){
|
||||
int i;
|
||||
i16 n;
|
||||
assert( iCol<pTab->nCol );
|
||||
if( (pTab->tabFlags & TF_HasVirtual)==0 ) return iCol;
|
||||
if( (pTab->tabFlags & TF_HasVirtual)==0 || iCol<0 ) return iCol;
|
||||
for(i=0, n=0; i<iCol; i++){
|
||||
if( (pTab->aCol[i].colFlags & COLFLAG_VIRTUAL)==0 ) n++;
|
||||
}
|
||||
|
@ -4136,7 +4136,7 @@ expr_code_doover:
|
||||
Table *pTab = pExpr->y.pTab;
|
||||
int iCol = pExpr->iColumn;
|
||||
int p1 = pExpr->iTable * (pTab->nCol+1) + 1
|
||||
+ (iCol>=0 ? sqlite3TableColumnToStorage(pTab, iCol) : -1);
|
||||
+ sqlite3TableColumnToStorage(pTab, iCol);
|
||||
|
||||
assert( pExpr->iTable==0 || pExpr->iTable==1 );
|
||||
assert( iCol>=-1 && iCol<pTab->nCol );
|
||||
|
@ -272,4 +272,60 @@ do_execsql_test gencol1-10.10 {
|
||||
PRAGMA integrity_check;
|
||||
} {ok}
|
||||
|
||||
# 2019-12-06 Found by mrigger
|
||||
#
|
||||
sqlite3 db :memory:
|
||||
do_execsql_test gencol1-11.10 {
|
||||
PRAGMA foreign_keys = true;
|
||||
CREATE TABLE t0(
|
||||
c0,
|
||||
c1 INTEGER PRIMARY KEY,
|
||||
c2 BLOB UNIQUE DEFAULT x'00',
|
||||
c3 BLOB GENERATED ALWAYS AS (1),
|
||||
FOREIGN KEY(c1) REFERENCES t0(c2)
|
||||
);
|
||||
}
|
||||
do_catchsql_test gencol1-11.20 {
|
||||
INSERT OR REPLACE INTO t0(c0, c1) VALUES (2, 1), (1, 0)
|
||||
} {1 {FOREIGN KEY constraint failed}}
|
||||
do_execsql_test gencol1-11.30 {
|
||||
DROP TABLE t0;
|
||||
CREATE TABLE t0(
|
||||
c0,
|
||||
c1 INTEGER PRIMARY KEY,
|
||||
c3 BLOB GENERATED ALWAYS AS (1),
|
||||
c2 BLOB UNIQUE DEFAULT x'00',
|
||||
FOREIGN KEY(c1) REFERENCES t0(c2)
|
||||
);
|
||||
}
|
||||
do_catchsql_test gencol1-11.40 {
|
||||
INSERT OR REPLACE INTO t0(c0, c1) VALUES (2, 1), (1, 0)
|
||||
} {1 {FOREIGN KEY constraint failed}}
|
||||
do_execsql_test gencol1-11.50 {
|
||||
DROP TABLE t0;
|
||||
CREATE TABLE t0(
|
||||
c0,
|
||||
c3 BLOB GENERATED ALWAYS AS (1),
|
||||
c1 INTEGER PRIMARY KEY,
|
||||
c2 BLOB UNIQUE DEFAULT x'00',
|
||||
FOREIGN KEY(c1) REFERENCES t0(c2)
|
||||
);
|
||||
}
|
||||
do_catchsql_test gencol1-11.60 {
|
||||
INSERT OR REPLACE INTO t0(c0, c1) VALUES (2, 1), (1, 0)
|
||||
} {1 {FOREIGN KEY constraint failed}}
|
||||
do_execsql_test gencol1-11.70 {
|
||||
DROP TABLE t0;
|
||||
CREATE TABLE t0(
|
||||
c3 BLOB GENERATED ALWAYS AS (1),
|
||||
c0,
|
||||
c1 INTEGER PRIMARY KEY,
|
||||
c2 BLOB UNIQUE DEFAULT x'00',
|
||||
FOREIGN KEY(c1) REFERENCES t0(c2)
|
||||
);
|
||||
}
|
||||
do_catchsql_test gencol1-11.80 {
|
||||
INSERT OR REPLACE INTO t0(c0, c1) VALUES (2, 1), (1, 0)
|
||||
} {1 {FOREIGN KEY constraint failed}}
|
||||
|
||||
finish_test
|
||||
|
Loading…
x
Reference in New Issue
Block a user