]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Remove unreachable branches. 100% MC/DC in TH3 now.
authordrh <drh@noemail.net>
Tue, 17 Apr 2018 21:59:34 +0000 (21:59 +0000)
committerdrh <drh@noemail.net>
Tue, 17 Apr 2018 21:59:34 +0000 (21:59 +0000)
FossilOrigin-Name: 558865d5c3c297155e1be5ea73effb46a995ea146bd745b23330c94782c6c45b

manifest
manifest.uuid
src/parse.y
src/upsert.c

index de4e59529afd6458fff5ee376b909aceec8198f3..4ca26a51c3210812f99feb4af58aa4fe41664dc4 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Added\sa\scomment\son\sthe\sassert()\sadded\sto\sthe\sprevious\scheck-in.
-D 2018-04-17T20:09:27.587
+C Remove\sunreachable\sbranches.\s\s100%\sMC/DC\sin\sTH3\snow.
+D 2018-04-17T21:59:34.011
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
@@ -480,7 +480,7 @@ F src/os_win.c eb03c6d52f893bcd7fdd4c6006674c13c1b5e49543fec98d605201af2997171c
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
 F src/pager.c 1bb6a57fa0465296a4d6109a1a64610a0e7adde1f3acf3ef539a9d972908ce8f
 F src/pager.h c571b064df842ec8f2e90855dead9acf4cbe0d1b2c05afe0ef0d0145f7fd0388
-F src/parse.y 06555966b12b7c71b5c3e0ced8c36f4cab6ba11c2af0ec29307597310129eda6
+F src/parse.y 5419576595156433738781705c6a5a6534a470c763a6d36b8fb4b7d5ea6cae99
 F src/pcache.c 135ef0bc6fb2e3b7178d49ab5c9176254c8a691832c1bceb1156b2fbdd0869bd
 F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170
 F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880
@@ -557,7 +557,7 @@ F src/tokenize.c 5b0c661a85f783d35b9883830736eeb63be4aefc4f6b7d9cd081d48782c041e
 F src/treeview.c 14d5d1254702ec96876aa52642cb31548612384134970409fae333b25b39d6bb
 F src/trigger.c fcb566b0df7bdefed4bff7e31aa7efa1c77cc0549e4ac79879d69490208ff966
 F src/update.c 5787acf0a12a20cf31c0c50db644a667590f720e404b3616bc2efeb9bd5bbc06
-F src/upsert.c e83fd8c0540873c4799e6aa7c433c65f0ae0d64e43f0fd9612f28f164de32823
+F src/upsert.c 3e152ac4073449bef7f13ed9d932eee86399c9180bd92fc201a2bfa7ee3e7b0e
 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157
 F src/vacuum.c 762ee9bbf8733d87d8cd06f58d950e881982e416f8c767334a40ffd341b6bff5
@@ -1722,7 +1722,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 1ddbb0ff5586ef5ca987e4309979f24f95eea883ed68937094a2db2d61e75657
-R 4b15eb8ad168544401a47db62c30df7b
+P 542547c1ce770a1427d3023d8c8fdcb2db7b1e017bc111e3484641f97e42381a
+R eaa343ed18594cb5b1fe2123e6ffcceb
 U drh
-Z cc1dfa21474d817de97141d68ee2edec
+Z bbeb2696ee9f7be52525aa3a7c3c7f63
index 74136eba4fa789ce8262f62a7b0864b5665f68f8..cb231033d71a01ff7833afd6f7d178938b96dc37 100644 (file)
@@ -1 +1 @@
-542547c1ce770a1427d3023d8c8fdcb2db7b1e017bc111e3484641f97e42381a
\ No newline at end of file
+558865d5c3c297155e1be5ea73effb46a995ea146bd745b23330c94782c6c45b
\ No newline at end of file
index e9a096df5779c6117e003f7688f5f878e432d542..f6d1e1714b11e89a30a86c8230e868764e0436be 100644 (file)
@@ -864,7 +864,10 @@ cmd ::= with insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S)
 }
 cmd ::= with insert_cmd(R) INTO fullname(X) idlist_opt(F) AS nm(A) select(S)
         upsert(U). {
-  if( X ) X->a[0].zAlias = sqlite3NameFromToken(pParse->db, &A);
+  /* X could only be NULL following a OOM, but an OOM would have been detected
+  ** and stopped the parse long before this rule reduces. */
+  assert( X!=0 );
+  X->a[0].zAlias = sqlite3NameFromToken(pParse->db, &A);
   sqlite3Insert(pParse, X, S, F, R, U);
 }
 cmd ::= with insert_cmd(R) INTO fullname(X) idlist_opt(F) DEFAULT VALUES.
@@ -873,7 +876,12 @@ cmd ::= with insert_cmd(R) INTO fullname(X) idlist_opt(F) DEFAULT VALUES.
 }
 
 %type upsert {Upsert*}
-%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
+
+// Because upsert only occurs at the tip end of the INSERT rule for cmd,
+// there is never a case where the value of the upsert pointer will not
+// be destroyed by the cmd action.  So comment-out the destructor to
+// avoid unreachable code.
+//%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
 upsert(A) ::= . { A = 0; }
 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW)
               DO UPDATE SET setlist(Z) where_opt(W).
index e1af0a0b771360c1cee41ad89ecd9fdca2cad866..25fcf6d6703317943b4f887a126f940c8055081a 100644 (file)
@@ -114,7 +114,7 @@ int sqlite3UpsertAnalyzeTarget(
   if( HasRowid(pTab) 
    && pTarget->nExpr==1
    && (pTerm = pTarget->a[0].pExpr)->op==TK_COLUMN
-   && (pTerm->iColumn==XN_ROWID || pTerm->iColumn==pTab->iPKey)
+   && pTerm->iColumn==XN_ROWID
   ){
     /* The conflict-target is the rowid of the primary table */
     assert( pUpsert->pUpsertIdx==0 );