]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge changes from trunk.
authordrh <drh@noemail.net>
Thu, 12 Apr 2018 12:25:45 +0000 (12:25 +0000)
committerdrh <drh@noemail.net>
Thu, 12 Apr 2018 12:25:45 +0000 (12:25 +0000)
FossilOrigin-Name: 9f6f11805eb7cc02f7eb3044250f3981d46d2dbf0c421bd73e7f8b437390db25

1  2 
manifest
manifest.uuid
src/parse.y

diff --cc manifest
index 4b5d0efffe988118ed6b9f1361755f9025d59e68,d6f09a69bfdf49515773f4324a93ce55d7d0071b..a87dd9e7a31bb3b6cb1307e43bf10715d5501ca9
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Update\sthe\stop-level\sREADME.md\sfile\sto\spoint\sto\sthe\swhynotget.html\sdocument.
- D 2018-04-10T00:30:47.835
 -C Help\sthe\sparser\srun\sfaster\sby\savoiding\sthe\s"explain\s::=\s."\sproduction.
 -D 2018-04-11T17:10:54.632
++C Merge\schanges\sfrom\strunk.
++D 2018-04-12T12:25:45.560
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
  F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3
@@@ -480,7 -480,7 +480,7 @@@ F src/os_win.c eb03c6d52f893bcd7fdd4c60
  F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
  F src/pager.c 1bb6a57fa0465296a4d6109a1a64610a0e7adde1f3acf3ef539a9d972908ce8f
  F src/pager.h c571b064df842ec8f2e90855dead9acf4cbe0d1b2c05afe0ef0d0145f7fd0388
- F src/parse.y 2779b5f1a24508825b7b883d73ba1632f9cc1715ffbf7b0b864b98f867742aa9
 -F src/parse.y e3c4116efb7d693df412bd42a96c88c6463704d31a29342c2fa671f6e91ecb26
++F src/parse.y 306ece8a7ccc4d38e29d6b86d8707dfcc62c85901e32ffe30f8e4909c3d768b8
  F src/pcache.c 135ef0bc6fb2e3b7178d49ab5c9176254c8a691832c1bceb1156b2fbdd0869bd
  F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170
  F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880
@@@ -1645,8 -1645,8 +1645,8 @@@ F tool/max-limits.c cbb635fbb37ae4d05f2
  F tool/mkautoconfamal.sh 422fc365358a2e92876ffc62971a0ff28ed472fc8bcf9de0df921c736fdeca5e
  F tool/mkccode.tcl 86463e68ce9c15d3041610fedd285ce32a5cf7a58fc88b3202b8b76837650dbe x
  F tool/mkctimec.tcl dd183b73ae1c28249669741c250525f0407e579a70482371668fd5f130d9feb3
 -F tool/mkkeywordhash.c 2e852ac0dfdc5af18886dc1ce7e9676d11714ae3df0a282dc7d90b3a0fe2033c
 +F tool/mkkeywordhash.c 9f5fee138b7f8d0ccde7baad1564db8de36e76e1bd1ee7a417a1fe6cecf599fb
- F tool/mkmsvcmin.tcl 8baf26690b80d861d0ac341b29880eec6ade39e4f11fe690271ded9cb90563a3
+ F tool/mkmsvcmin.tcl cad0c7b54d7dd92bc87d59f36d4cc4f070eb2e625f14159dc2f5c4204e6a13ea
  F tool/mkopcodec.tcl d1b6362bd3aa80d5520d4d6f3765badf01f6c43c
  F tool/mkopcodeh.tcl 4ee2a30ccbd900dc4d5cdb61bdab87cd2166cd2affcc78c9cc0b8d22a65b2eee
  F tool/mkopts.tcl 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa
@@@ -1717,7 -1717,7 +1717,7 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P 5cc2a5a315a2f26b392811de45b3dc352873a173c2c6c65f37ce2e5f88a71cd2
- R 016bd43547f1b597517ec5be295b6171
 -P b7178209152452e82f5908513385018524472640d67547927d6b4c0aa0c15a46
 -R 12b886afc6216ee0a5a2b22cc4bff5a5
++P 7dfd4543da7ef741852252d3c78ba89a919d737787e9e5118579e35fdfdeb24c d7ec7b5970df9e542401f8299e098a5039d1875e2e3383dad06a0ec998589b6e
++R 22c0de7699239b37705a12f37b4c7dac
  U drh
- Z 9f4176f366ae165e6c012c7b6ab0f60d
 -Z 93376c77c8408e036fdadd56852c955d
++Z 5bc8368030e26095e5c80de69174e4cd
diff --cc manifest.uuid
index 9fa72ef2313dfccce26c9631aba37a18e1ee4262,c807fee2e0d9728df1951b46d7f1fa433913b432..ef759a0fc7002bcd9c96f1da660f3bdc075770eb
@@@ -1,1 -1,1 +1,1 @@@
- 7dfd4543da7ef741852252d3c78ba89a919d737787e9e5118579e35fdfdeb24c
 -d7ec7b5970df9e542401f8299e098a5039d1875e2e3383dad06a0ec998589b6e
++9f6f11805eb7cc02f7eb3044250f3981d46d2dbf0c421bd73e7f8b437390db25
diff --cc src/parse.y
index f24b1b638550de9837f5d0cb924a7af706df4b0b,26dde6ee245bf182963f546bcaea012b7e41ef6f..45ead78665a8f8f62ce9f895aeff3e79ccb3befd
@@@ -858,47 -839,12 +873,45 @@@ setlist(A) ::= LP idlist(X) RP EQ expr(
  
  ////////////////////////// The INSERT command /////////////////////////////////
  //
- cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S)
 -cmd ::= with insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S). {
 -  sqlite3Insert(pParse, X, S, F, R);
++cmd ::= with insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S)
 +        upsert(U). {
-   sqlite3WithPush(pParse, W, 1);
 +  sqlite3Insert(pParse, X, S, F, upsertType(pParse, R, U.e), U.p);
  }
- cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) DEFAULT VALUES.
+ cmd ::= with insert_cmd(R) INTO fullname(X) idlist_opt(F) DEFAULT VALUES.
  {
-   sqlite3WithPush(pParse, W, 1);
 -  sqlite3Insert(pParse, X, 0, F, R);
 +  sqlite3Insert(pParse, X, 0, F, R, 0);
 +}
 +
 +%type upsert {struct Upsert}
 +%destructor upsert {sqlite3ExprListDelete(pParse->db,$$.p);}
 +upsert(A) ::= . {
 +  A.p = 0;
 +  A.e = OE_None;
 +}
 +upsert(A) ::= ON CONFLICT DO UPDATE SET setlist(X). {
 +  A.p = X;  /*A-overwrites-X*/
 +  A.e = OE_Update;
 +}
 +upsert(A) ::= ON CONFLICT DO NOTHING. {
 +  A.p = 0;
 +  A.e = OE_Ignore;
 +}
 +
 +%include {
 +  /* Compute and return the correct conflict resolution strategy for an
 +  ** INSERT statement.  If the statement begins with REPLACE or with
 +  ** INSERT OR, and it contains an ON CONFLICT clause, throw an error.
 +  */
 +  static int upsertType(Parse *pParse, int orconf, int upsertType){
 +    if( upsertType!=OE_None ){
 +      if( orconf!=OE_Default ){
 +        sqlite3ErrorMsg(pParse, "ON CONFLICT clause not allowed");
 +      }
 +      return upsertType;
 +    }else{
 +      return orconf;
 +    }
 +  }
  }
  
  %type insert_cmd {int}