From: drh Date: Fri, 1 Nov 2019 12:14:30 +0000 (+0000) Subject: Add missing column translations to foreign key logic. X-Git-Tag: version-3.31.0~356 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f09a14fbc34a130a9508707e435e24318ae07364;p=thirdparty%2Fsqlite.git Add missing column translations to foreign key logic. Ticket [c28a01da72f8957c] FossilOrigin-Name: bc6a43e7ee6353b9ef3dea4309c77e170a1c798eefcfaa7636bf5a93e51c47ee --- diff --git a/manifest b/manifest index b70e3b01ee..d0a9210fc2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\spotential\sarray\sbounds\soverflow\sin\sthe\smkkeywordhash.c\scode\sgenerator.\nAlso\sadd\smarks\sto\somit\skeywords\sspecific\sto\sgenerated\scolumns\swhen\sbuilding\nwith\s-DSQLITE_OMIT_GENERATED_COLUMNS. -D 2019-11-01T10:49:15.808 +C Add\smissing\scolumn\stranslations\sto\sforeign\skey\slogic.\nTicket\s[c28a01da72f8957c] +D 2019-11-01T12:14:30.508 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -477,10 +477,10 @@ F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251 F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c c12833de69cb655751487d2c5a59607e36be1c58ba1f4bd536609909ad47b319 -F src/delete.c d08c9e01a2664afd12edcfa3a9c6578517e8ff8735f35509582693adbe0edeaf +F src/delete.c fbe8a2978a35201624ecaaabdaf83917c101e31cf451a7be0cf06d9049fad54e F src/expr.c a02db128337ca28c34fc3574a640f247881bc4d14c1debf5adc3ecf25dd74992 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 -F src/fkey.c ac56f02ffe7a3dff311654f86e3c2fd1ff2eb38862b0c07fd908d8cc0fb4a9a2 +F src/fkey.c 3c177deff52d6d62eac09700866293e193aa92e9866d00c6eb45a37bdae354a1 F src/func.c ed33e38cd642058182a31a3f518f2e34f4bbe53aa483335705c153c4d3e50b12 F src/global.c a1a8d698762ddd9a1543aac26c1e0029b20fcc3fcb56bfa41ec8cea2368f2798 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 @@ -1021,7 +1021,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 159b28fa98f256ba7ea272dce8449b9a8218ce58591ce25da5df5cc4b61a147a +F test/gencol1.test 987474537c4e871a7ca7bcdb7113005abe2577f29a7a204325a8cbb819cd3079 F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98 F test/having.test e4098a4b8962f9596035c3b87a8928a10648acc509f1bb8d6f96413bbf79a1b3 F test/hexlit.test 4a6a5f46e3c65c4bf1fa06f5dd5a9507a5627751 @@ -1849,7 +1849,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 f12e743e19a04ecbf7eb69b675082f2e4dda05b38cd81f6588a1ce95dfc57ada -R a19e7b395a0485b418d66f725ce1e9ee +P cc6a40818387f78f89499f09e3f1c4655c7396af1cba2596c7fb2f23f3e9755f +R 820f9a4caca1b4851fd8f80b80fa0910 U drh -Z 60eb5202ef4aac4c6596aee0e04e6735 +Z 7c3a3f1de9ace471607f207972976d3d diff --git a/manifest.uuid b/manifest.uuid index f0de16cbea..c419d1a1e6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cc6a40818387f78f89499f09e3f1c4655c7396af1cba2596c7fb2f23f3e9755f \ No newline at end of file +bc6a43e7ee6353b9ef3dea4309c77e170a1c798eefcfaa7636bf5a93e51c47ee \ No newline at end of file diff --git a/src/delete.c b/src/delete.c index e3a0abc2c0..3f9f398c41 100644 --- a/src/delete.c +++ b/src/delete.c @@ -737,7 +737,8 @@ void sqlite3GenerateRowDelete( testcase( mask!=0xffffffff && iCol==31 ); testcase( mask!=0xffffffff && iCol==32 ); if( mask==0xffffffff || (iCol<=31 && (mask & MASKBIT32(iCol))!=0) ){ - sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, iCol, iOld+iCol+1); + int kk = sqlite3TableColumnToStorage(pTab, iCol); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, iCol, iOld+kk+1); } } diff --git a/src/fkey.c b/src/fkey.c index c57fb14657..7647cf323c 100644 --- a/src/fkey.c +++ b/src/fkey.c @@ -483,7 +483,7 @@ static Expr *exprTableRegister( if( pExpr ){ if( iCol>=0 && iCol!=pTab->iPKey ){ pCol = &pTab->aCol[iCol]; - pExpr->iTable = regBase + iCol + 1; + pExpr->iTable = regBase + sqlite3TableColumnToStorage(pTab,iCol) + 1; pExpr->affExpr = pCol->affinity; zColl = pCol->zColl; if( zColl==0 ) zColl = db->pDfltColl->zName; diff --git a/test/gencol1.test b/test/gencol1.test index 653513929b..8b1c65be61 100644 --- a/test/gencol1.test +++ b/test/gencol1.test @@ -159,4 +159,21 @@ do_catchsql_test gencol1-3.110 { UPDATE t0 SET c1 = c0, c3 = c0+1; } {1 {FOREIGN KEY constraint failed}} +# 2019-11-01 ticket c28a01da72f8957c +db close +sqlite3 db :memory: +do_execsql_test gencol1-4.100 { + CREATE TABLE t0 ( + c0, + c1 a UNIQUE AS (1), + c2, + c3 REFERENCES t0(c1) + ); + PRAGMA foreign_keys = true; + INSERT INTO t0(c0,c2,c3) VALUES(0,0,1); +} {} +do_catchsql_test gencol1-4.110 { + REPLACE INTO t0(c0,c2,c3) VALUES(0,0,0),(0,0,0); +} {1 {FOREIGN KEY constraint failed}} + finish_test