]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Correctly generate pre-UPDATE content for virtual columns that are used
authordrh <drh@noemail.net>
Thu, 31 Oct 2019 20:54:20 +0000 (20:54 +0000)
committerdrh <drh@noemail.net>
Thu, 31 Oct 2019 20:54:20 +0000 (20:54 +0000)
by foreign key constraints.  Ticket [b9befa4b83a660cc]

FossilOrigin-Name: 40d3282ec285d9f724f6548283f48b601510cf5284da17485723fd650a68f436

manifest
manifest.uuid
src/update.c
test/gencol1.test

index 7dd006225a8538c5b8d4bf22154033ab6b876628..c837271d2d9d47f48c5ad1dc10dc72a83df24280 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\sfew\ssimple\sTCL\stest\scases\sfor\sgenerated\scolumns.\s\s(Full\stest\scoverage\nof\sthe\sgenerated\scolumn\slogic\sis\sprovided\sseparately\sby\sTH3.)
-D 2019-10-31T17:13:17.010
+C Correctly\sgenerate\spre-UPDATE\scontent\sfor\svirtual\scolumns\sthat\sare\sused\nby\sforeign\skey\sconstraints.\s\sTicket\s[b9befa4b83a660cc]
+D 2019-10-31T20:54:20.920
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -593,7 +593,7 @@ F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
 F src/tokenize.c 7b17f6e2f20f6cbcb0b215025a86b7457c38451fc7622f705e553d7a488c572d
 F src/treeview.c 1de448df044dd9f011010b62966fb9b1bdde6e0a21173c686c9b2064227f6119
 F src/trigger.c 845ccc08f60716c58aa28fe6470385c18ef8c4e1d88c93dcf449bc13d464eb2e
-F src/update.c ae657f0db6a255011759ab9345ded7b54b828329a9dba04f94b4d4fa6e70e1ad
+F src/update.c 07a50767f7d3e26d4c887c31cd66448d700d3215caea6023acf7269336097df7
 F src/upsert.c b445315c8958d8f17ec3297d06842e61dacaad0633ccaec1e4e160de7e562212
 F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
 F src/util.c 10d910e04a4f3842042485e0df01a484f57f912c10b60b3a09ccddd5019bd138
@@ -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 6dd63ec525059f2235e494148bfa8c1ab506eb46e403a8d5bf13004f3b165631
+F test/gencol1.test 159b28fa98f256ba7ea272dce8449b9a8218ce58591ce25da5df5cc4b61a147a
 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 329820673a12ff6a6c8759f40989d4ccf272441064b0366a5f491695b55ad0e9
-R e7170d3b73879549c652c7bfb423787f
+P acedb5c7f7dc1d68bef62098d42ca59e1be7a5083bb03dc07c03b9f9d817158b
+R 1be119fb445ff01fe8cfe5427a3a8828
 U drh
-Z b826a93b8f760fe88872664a0ccdde39
+Z 669096ece6f155f81405fdaa75b25c9a
index e59896f02e956f44659e5853cce755ba9c8535bb..50038f8e4fd6dd90deb8785adc699394decc54a7 100644 (file)
@@ -1 +1 @@
-acedb5c7f7dc1d68bef62098d42ca59e1be7a5083bb03dc07c03b9f9d817158b
\ No newline at end of file
+40d3282ec285d9f724f6548283f48b601510cf5284da17485723fd650a68f436
\ No newline at end of file
index 816a6818be68bb4f4313c1efc5850b8753423c44..935e1d9377fbae9b25b9fbcf79ea617b95a9f749 100644 (file)
@@ -661,12 +661,9 @@ void sqlite3Update(
     oldmask |= sqlite3TriggerColmask(pParse, 
         pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError
     );
-    for(i=0, k=regOld; i<pTab->nCol; i++, k++){
+    for(i=0; i<pTab->nCol; i++){
       u32 colFlags = pTab->aCol[i].colFlags;
-      if( colFlags & COLFLAG_VIRTUAL ){
-        k--;
-        continue;
-      }
+      k = sqlite3TableColumnToStorage(pTab, i) + regOld;
       if( oldmask==0xffffffff
        || (i<32 && (oldmask & MASKBIT32(i))!=0)
        || (colFlags & COLFLAG_PRIMKEY)!=0
index 63e397b218b7ebfd40d16ce83b4d3d8b09b744e0..653513929b53600bafbd3950b521d6fa9a34710d 100644 (file)
@@ -145,4 +145,18 @@ foreach {tn schema} {
   } {30 null ntalo | 40 text balaya | 150 integer {} | 1010 real {} |}
 }
 
+# 2019-10-31 ticket b9befa4b83a660cc
+db close
+sqlite3 db :memory:
+do_execsql_test gencol1-3.100 {
+  PRAGMA foreign_keys = true;
+  CREATE TABLE t0(c0 PRIMARY KEY, c1, c2 AS (c0+c1-c3) REFERENCES t0, c3);
+  INSERT INTO t0 VALUES (0, 0, 0), (11, 5, 5);
+  UPDATE t0 SET c1 = c0, c3 = c0;
+  SELECT *, '|' FROM t0 ORDER BY +c0;
+} {0 0 0 0 | 11 11 11 11 |}
+do_catchsql_test gencol1-3.110 {
+  UPDATE t0 SET c1 = c0, c3 = c0+1;
+} {1 {FOREIGN KEY constraint failed}}
+
 finish_test