]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add missing column translations to foreign key logic.
authordrh <drh@noemail.net>
Fri, 1 Nov 2019 12:14:30 +0000 (12:14 +0000)
committerdrh <drh@noemail.net>
Fri, 1 Nov 2019 12:14:30 +0000 (12:14 +0000)
Ticket [c28a01da72f8957c]

FossilOrigin-Name: bc6a43e7ee6353b9ef3dea4309c77e170a1c798eefcfaa7636bf5a93e51c47ee

manifest
manifest.uuid
src/delete.c
src/fkey.c
test/gencol1.test

index b70e3b01ee4bf428e1b549997cbb2e0167bf9fa8..d0a9210fc2aad57298d509e6d0faa9aaec104672 100644 (file)
--- 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
index f0de16cbeab585517f437c098736fb241df50288..c419d1a1e6d2b89e704719c841b80504ac4d92c0 100644 (file)
@@ -1 +1 @@
-cc6a40818387f78f89499f09e3f1c4655c7396af1cba2596c7fb2f23f3e9755f
\ No newline at end of file
+bc6a43e7ee6353b9ef3dea4309c77e170a1c798eefcfaa7636bf5a93e51c47ee
\ No newline at end of file
index e3a0abc2c095bcff9b55b01c53210e02cb175068..3f9f398c416043c9aa7f0dedae93d9124cf1721d 100644 (file)
@@ -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);
       }
     }
 
index c57fb1465791bbd888beab175bd06fa5ca621f1a..7647cf323c6f6d933885ff2479c1008ef7cf4e1f 100644 (file)
@@ -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;
index 653513929b53600bafbd3950b521d6fa9a34710d..8b1c65be6193f90ce58555e2a9027eacb7ab5854 100644 (file)
@@ -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