From 3517b312dcee9ab0fd4099f45587e82b30c54e03 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 9 Apr 2018 00:46:42 +0000 Subject: [PATCH 01/17] Fix a (harmless) signed integer overflow warning. FossilOrigin-Name: 43c2c60caf0ba105f57e32fc7fe6938dc29538c04d477a35b9b8bba2fb8fdd07 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/build.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 3baba8f82a..2dcc7b599f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\sLEMON\sto\sshow\sprecendence\sof\ssymbols\sand\sall\srules\sin\sthe\sreport\nthat\sis\sgenerated\sin\sparallel\sto\sthe\sparser. -D 2018-04-06T19:12:55.023 +C Fix\sa\s(harmless)\ssigned\sinteger\soverflow\swarning. +D 2018-04-09T00:46:42.147 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -435,7 +435,7 @@ F src/btmutex.c 0e9ce2d56159b89b9bc8e197e023ee11e39ff8ca F src/btree.c 9eb9531c65346bbfccf5325384b7db1849daf4db6601dcfe21ba5c5b20623b64 F src/btree.h 0866c0a08255142ea0e754aabd211c843cab32045c978a592a43152405ed0c84 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 -F src/build.c 5ac9eb8afcd3e8b8088cc954d867bd7860bdb19558d48d5220e3c4050e721626 +F src/build.c 61320fb84034c24313de699f3385c6bfe093c925b4df2931c6eb63d7c94ec62a F src/callback.c fe677cb5f5abb02f7a772a62a98c2f516426081df68856e8f2d5f950929b966a F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c bd9da3f1ff21b432564a16ef0b154cff03585dc43742842e99c58907c6cb4bef @@ -1717,7 +1717,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 7594e60935b0b5dcf764476dccdf9b403303818a0419a30bc2c16d58e44f6d04 -R ef1c977dfaed4c346b10d938399c3d50 +P 602fbd8149b53d8f0e9a223cc1aec912e7df03fca35071e8d707776ce225371c +R f3b5c5a80988cc5d56eaf38f6939e0a5 U drh -Z 131d6c9ff99d8e76f2b61b25cec666a3 +Z c4a7043373b61a2ea17d642e99e4923e diff --git a/manifest.uuid b/manifest.uuid index 065741c9db..78aa03eb24 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -602fbd8149b53d8f0e9a223cc1aec912e7df03fca35071e8d707776ce225371c \ No newline at end of file +43c2c60caf0ba105f57e32fc7fe6938dc29538c04d477a35b9b8bba2fb8fdd07 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 211ccf29d8..c286b4bbe7 100644 --- a/src/build.c +++ b/src/build.c @@ -1496,7 +1496,7 @@ void sqlite3ChangeCookie(Parse *pParse, int iDb){ Vdbe *v = pParse->pVdbe; assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, - db->aDb[iDb].pSchema->schema_cookie+1); + (int)(1+(unsigned)db->aDb[iDb].pSchema->schema_cookie)); } /* From fe55da387a9ef8c4d93abc4907bf9d89a06dc021 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 9 Apr 2018 11:43:58 +0000 Subject: [PATCH 02/17] Add a "flags" parameter to experimental API sqlite3changeset_apply_v2(). Also add the SQLITE_CHANGESETAPPLY_NOSAVEPOINT flag. FossilOrigin-Name: 3d29631fa7270b18f51de8cfe1285959e42ad9a673d5d2d5c016126f5f1b31a8 --- ext/session/session1.test | 43 ++++++++++++++++++++++++++++++++++++ ext/session/sqlite3session.c | 35 +++++++++++++++++------------ ext/session/sqlite3session.h | 32 +++++++++++++++++++++++++-- ext/session/test_session.c | 28 ++++++++++++++++++----- manifest | 20 ++++++++--------- manifest.uuid | 2 +- 6 files changed, 127 insertions(+), 33 deletions(-) diff --git a/ext/session/session1.test b/ext/session/session1.test index 9e3fc4b87a..f423a0cf4b 100644 --- a/ext/session/session1.test +++ b/ext/session/session1.test @@ -612,6 +612,49 @@ do_iterator_test $tn.12.2 * { {UPDATE t1 0 X.. {i 3 {} {} i 3} {{} {} {} {} t one}} } +#------------------------------------------------------------------------- +# Test that no savepoint is used if -nosavepoint is specified. +# +do_execsql_test $tn.13.1 { + CREATE TABLE x1(a INTEGER PRIMARY KEY, b)%WR%; +} +do_test $tn.13.2 { + execsql BEGIN + set C [changeset_from_sql { + INSERT INTO x1 VALUES(1, 'one'); + INSERT INTO x1 VALUES(2, 'two'); + INSERT INTO x1 VALUES(3, 'three'); + }] + execsql ROLLBACK + execsql { + INSERT INTO x1 VALUES(1, 'i'); + INSERT INTO x1 VALUES(2, 'ii'); + INSERT INTO x1 VALUES(3, 'iii'); + } +} {} + +proc xConflict {args} { + set ret [lindex $::CONFLICT_HANDLERS 0] + set ::CONFLICT_HANDLERS [lrange $::CONFLICT_HANDLERS 1 end] + set ret +} +do_test $tn.13.3 { + set CONFLICT_HANDLERS [list REPLACE REPLACE ABORT] + execsql BEGIN + catch { sqlite3changeset_apply_v2 db $C xConflict } msg + execsql { + SELECT * FROM x1 + } +} {1 i 2 ii 3 iii} +do_test $tn.13.3 { + set CONFLICT_HANDLERS [list REPLACE REPLACE ABORT] + execsql ROLLBACK + execsql BEGIN + catch { sqlite3changeset_apply_v2 -nosavepoint db $C xConflict } msg + execsql { SELECT * FROM x1 } +} {1 one 2 two 3 iii} +execsql ROLLBACK + }] } diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index a59d38c804..e432b894ca 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -4234,10 +4234,11 @@ static int sessionChangesetApply( sqlite3_changeset_iter *p /* Handle describing change and conflict */ ), void *pCtx, /* First argument passed to xConflict */ - void **ppRebase, int *pnRebase /* OUT: Rebase information */ + void **ppRebase, int *pnRebase, /* OUT: Rebase information */ + int flags /* SESSION_APPLY_XXX flags */ ){ int schemaMismatch = 0; - int rc; /* Return code */ + int rc = SQLITE_OK; /* Return code */ const char *zTab = 0; /* Name of current table */ int nTab = 0; /* Result of sqlite3Strlen30(zTab) */ SessionApplyCtx sApply; /* changeset_apply() context object */ @@ -4248,7 +4249,9 @@ static int sessionChangesetApply( pIter->in.bNoDiscard = 1; memset(&sApply, 0, sizeof(sApply)); sqlite3_mutex_enter(sqlite3_db_mutex(db)); - rc = sqlite3_exec(db, "SAVEPOINT changeset_apply", 0, 0, 0); + if( (flags & SQLITE_CHANGESETAPPLY_NOSAVEPOINT)==0 ){ + rc = sqlite3_exec(db, "SAVEPOINT changeset_apply", 0, 0, 0); + } if( rc==SQLITE_OK ){ rc = sqlite3_exec(db, "PRAGMA defer_foreign_keys = 1", 0, 0, 0); } @@ -4386,11 +4389,13 @@ static int sessionChangesetApply( } sqlite3_exec(db, "PRAGMA defer_foreign_keys = 0", 0, 0, 0); - if( rc==SQLITE_OK ){ - rc = sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); - }else{ - sqlite3_exec(db, "ROLLBACK TO changeset_apply", 0, 0, 0); - sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); + if( (flags & SQLITE_CHANGESETAPPLY_NOSAVEPOINT)==0 ){ + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); + }else{ + sqlite3_exec(db, "ROLLBACK TO changeset_apply", 0, 0, 0); + sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); + } } if( rc==SQLITE_OK && bPatchset==0 && ppRebase && pnRebase ){ @@ -4427,13 +4432,14 @@ int sqlite3changeset_apply_v2( sqlite3_changeset_iter *p /* Handle describing change and conflict */ ), void *pCtx, /* First argument passed to xConflict */ - void **ppRebase, int *pnRebase + void **ppRebase, int *pnRebase, + int flags ){ sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ int rc = sqlite3changeset_start(&pIter, nChangeset, pChangeset); if( rc==SQLITE_OK ){ rc = sessionChangesetApply( - db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase + db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags ); } return rc; @@ -4460,7 +4466,7 @@ int sqlite3changeset_apply( void *pCtx /* First argument passed to xConflict */ ){ return sqlite3changeset_apply_v2( - db, nChangeset, pChangeset, xFilter, xConflict, pCtx, 0, 0 + db, nChangeset, pChangeset, xFilter, xConflict, pCtx, 0, 0, 0 ); } @@ -4483,13 +4489,14 @@ int sqlite3changeset_apply_v2_strm( sqlite3_changeset_iter *p /* Handle describing change and conflict */ ), void *pCtx, /* First argument passed to xConflict */ - void **ppRebase, int *pnRebase + void **ppRebase, int *pnRebase, + int flags ){ sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ int rc = sqlite3changeset_start_strm(&pIter, xInput, pIn); if( rc==SQLITE_OK ){ rc = sessionChangesetApply( - db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase + db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags ); } return rc; @@ -4510,7 +4517,7 @@ int sqlite3changeset_apply_strm( void *pCtx /* First argument passed to xConflict */ ){ return sqlite3changeset_apply_v2_strm( - db, xInput, pIn, xFilter, xConflict, pCtx, 0, 0 + db, xInput, pIn, xFilter, xConflict, pCtx, 0, 0, 0 ); } diff --git a/ext/session/sqlite3session.h b/ext/session/sqlite3session.h index d4da20dbb9..a3def5f1df 100644 --- a/ext/session/sqlite3session.h +++ b/ext/session/sqlite3session.h @@ -1095,6 +1095,13 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** is only allocated and populated if one or more conflicts were encountered ** while applying the patchset. See comments surrounding the sqlite3_rebaser ** APIs for further details. +** +** The behavior of sqlite3changeset_apply_v2() and its streaming equivalent +** may be modified by passing a combination of +** [SQLITE_CHANGESETAPPLY_NOSAVEPOINT | supported flags] as the 9th parameter. +** +** Note that the sqlite3changeset_apply_v2() API is still experimental +** and therefore subject to change. */ int sqlite3changeset_apply( sqlite3 *db, /* Apply change to "main" db of this handle */ @@ -1125,9 +1132,28 @@ int sqlite3changeset_apply_v2( sqlite3_changeset_iter *p /* Handle describing change and conflict */ ), void *pCtx, /* First argument passed to xConflict */ - void **ppRebase, int *pnRebase + void **ppRebase, int *pnRebase, /* OUT: Rebase data */ + int flags /* Combination of SESSION_APPLY_* flags */ ); +/* +** CAPI3REF: Flags for sqlite3changeset_apply_v2 +** +** The following flags may passed via the 9th parameter to +** [sqlite3changeset_apply_v2] and [sqlite3changeset_apply_v2_strm]: +** +**
+**
SQLITE_CHANGESETAPPLY_NOSAVEPOINT
+** Usually, the sessions module encloses all operations performed by +** a single call to apply_v2() or apply_v2_strm() in a [SAVEPOINT]. The +** SAVEPOINT is committed if the changeset or patchset is successfully +** applied, or rolled back if an error occurs. Specifying this flag +** causes the sessions module to omit this savepoint. In this case, if the +** caller has an open transaction or savepoint when apply_v2() is called, +** it may revert the partially applied changeset by rolling it back. +*/ +#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 + /* ** CAPI3REF: Constants Passed To The Conflict Handler ** @@ -1388,6 +1414,7 @@ void sqlite3rebaser_delete(sqlite3_rebaser *p); ** ** **
Streaming functionNon-streaming equivalent
sqlite3changeset_apply_strm[sqlite3changeset_apply] +**
sqlite3changeset_apply_strm_v2[sqlite3changeset_apply_v2] **
sqlite3changeset_concat_strm[sqlite3changeset_concat] **
sqlite3changeset_invert_strm[sqlite3changeset_invert] **
sqlite3changeset_start_strm[sqlite3changeset_start] @@ -1497,7 +1524,8 @@ int sqlite3changeset_apply_v2_strm( sqlite3_changeset_iter *p /* Handle describing change and conflict */ ), void *pCtx, /* First argument passed to xConflict */ - void **ppRebase, int *pnRebase + void **ppRebase, int *pnRebase, + int flags ); int sqlite3changeset_concat_strm( int (*xInputA)(void *pIn, void *pData, int *pnData), diff --git a/ext/session/test_session.c b/ext/session/test_session.c index bdd144b5fc..3b6c24fd11 100644 --- a/ext/session/test_session.c +++ b/ext/session/test_session.c @@ -731,18 +731,34 @@ static int SQLITE_TCLAPI testSqlite3changesetApply( TestStreamInput sStr; void *pRebase = 0; int nRebase = 0; + int flags = 0; /* Flags for apply_v2() */ memset(&sStr, 0, sizeof(sStr)); sStr.nStream = test_tcl_integer(interp, SESSION_STREAM_TCL_VAR); + /* Check for the -nosavepoint flag */ + if( bV2 && objc>1 ){ + const char *z1 = Tcl_GetString(objv[1]); + int n = strlen(z1); + if( n>1 && n<=12 && 0==sqlite3_strnicmp("-nosavepoint", z1, n) ){ + flags = SQLITE_CHANGESETAPPLY_NOSAVEPOINT; + objc--; + objv++; + } + } + if( objc!=4 && objc!=5 ){ - Tcl_WrongNumArgs(interp, 1, objv, - "DB CHANGESET CONFLICT-SCRIPT ?FILTER-SCRIPT?" - ); + const char *zMsg; + if( bV2 ){ + zMsg = "?-nosavepoint? DB CHANGESET CONFLICT-SCRIPT ?FILTER-SCRIPT?"; + }else{ + zMsg = "DB CHANGESET CONFLICT-SCRIPT ?FILTER-SCRIPT?"; + } + Tcl_WrongNumArgs(interp, 1, objv, zMsg); return TCL_ERROR; } if( 0==Tcl_GetCommandInfo(interp, Tcl_GetString(objv[1]), &info) ){ - Tcl_AppendResult(interp, "no such handle: ", Tcl_GetString(objv[2]), 0); + Tcl_AppendResult(interp, "no such handle: ", Tcl_GetString(objv[1]), 0); return TCL_ERROR; } db = *(sqlite3 **)info.objClientData; @@ -759,7 +775,7 @@ static int SQLITE_TCLAPI testSqlite3changesetApply( }else{ rc = sqlite3changeset_apply_v2(db, nChangeset, pChangeset, (objc==5)?test_filter_handler:0, test_conflict_handler, (void *)&ctx, - &pRebase, &nRebase + &pRebase, &nRebase, flags ); } }else{ @@ -774,7 +790,7 @@ static int SQLITE_TCLAPI testSqlite3changesetApply( rc = sqlite3changeset_apply_v2_strm(db, testStreamInput, (void*)&sStr, (objc==5) ? test_filter_handler : 0, test_conflict_handler, (void *)&ctx, - &pRebase, &nRebase + &pRebase, &nRebase, flags ); } } diff --git a/manifest b/manifest index 2dcc7b599f..99cfce3ff9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\s(harmless)\ssigned\sinteger\soverflow\swarning. -D 2018-04-09T00:46:42.147 +C Add\sa\s"flags"\sparameter\sto\sexperimental\sAPI\ssqlite3changeset_apply_v2().\sAlso\nadd\sthe\sSQLITE_CHANGESETAPPLY_NOSAVEPOINT\sflag. +D 2018-04-09T11:43:58.567 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -379,7 +379,7 @@ F ext/rtree/sqlite3rtree.h 9c5777af3d2921c7b4ae4954e8e5697502289d28 F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024 F ext/session/changeset.c 4ccbaa4531944c24584bf6a61ba3a39c62b6267a -F ext/session/session1.test 736d7ff178662f0b717c37f46531b84a5ce0210ccb0c4edf629c55dbcbbc3ea1 +F ext/session/session1.test 4532116484f525110eb4cfff7030c59354c0cde9def4d109466b0df2b35ad5cc F ext/session/session2.test 284de45abae4cc1082bc52012ee81521d5ac58e0 F ext/session/session3.test ce9ce3dfa489473987f899e9f6a0f2db9bde3479 F ext/session/session4.test 6778997065b44d99c51ff9cece047ff9244a32856b328735ae27ddef68979c40 @@ -404,9 +404,9 @@ F ext/session/sessionfault2.test 555a8504de03d59b369ef20209585da5aeb2671dedabc45 F ext/session/sessionrebase.test 4e1bcfd26fd8ed8ac571746f56cceeb45184f4d65490ea0d405227cfc8a9cba8 F ext/session/sessionstat1.test 41cd97c2e48619a41cdf8ae749e1b25f34719de638689221aa43971be693bf4e F ext/session/sessionwor.test 2f3744236dc8b170a695b7d8ddc8c743c7e79fdc -F ext/session/sqlite3session.c 305010d5bc85f362584bfb72a5efea30e8826f13c44ab9dddd19484d627e2b5a -F ext/session/sqlite3session.h 85fd2dc3df1532b0695beb345e2ff375c2745a4654b405fcbe33afa18baa6cc7 -F ext/session/test_session.c f253742ea01b089326f189b5ae15a5b55c1c9e97452e4a195ee759ba51b404d5 +F ext/session/sqlite3session.c 2d29bbd888599b94b2c8b31ff433675e008273a4d225b336508b18e6187fec1d +F ext/session/sqlite3session.h c01820d5b6e73e86d88008f4d1c1c7dfb83422963018292b864028a0400ceccf +F ext/session/test_session.c dba36c6c0153b22501112d3e8882b5c946cf617c955153b6712bd2f8ba1428c0 F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04 F ext/userauth/userauth.c 3410be31283abba70255d71fd24734e017a4497f @@ -1717,7 +1717,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 602fbd8149b53d8f0e9a223cc1aec912e7df03fca35071e8d707776ce225371c -R f3b5c5a80988cc5d56eaf38f6939e0a5 -U drh -Z c4a7043373b61a2ea17d642e99e4923e +P 43c2c60caf0ba105f57e32fc7fe6938dc29538c04d477a35b9b8bba2fb8fdd07 +R 21c05c965caaf57e504e2c1c78a6bf82 +U dan +Z 920b588edeffe44ebf0eb4cdf592b8b3 diff --git a/manifest.uuid b/manifest.uuid index 78aa03eb24..3bfe6363f7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -43c2c60caf0ba105f57e32fc7fe6938dc29538c04d477a35b9b8bba2fb8fdd07 \ No newline at end of file +3d29631fa7270b18f51de8cfe1285959e42ad9a673d5d2d5c016126f5f1b31a8 \ No newline at end of file From 0f1631db06e8db3d4111e6436509f03737888123 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 9 Apr 2018 13:58:20 +0000 Subject: [PATCH 03/17] Improvements to ".wheretrace" output. FossilOrigin-Name: ea2e5b34bf35ade602dfcef359b64f810674f304fda14326b7f2dedefcc5f340 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/where.c | 10 ++++++---- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index 99cfce3ff9..9b7c0e6907 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\s"flags"\sparameter\sto\sexperimental\sAPI\ssqlite3changeset_apply_v2().\sAlso\nadd\sthe\sSQLITE_CHANGESETAPPLY_NOSAVEPOINT\sflag. -D 2018-04-09T11:43:58.567 +C Improvements\sto\s".wheretrace"\soutput. +D 2018-04-09T13:58:20.646 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -574,7 +574,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c aa9cffc7a2bad6b826a86c8562dd4978398720ed41cb8ee7aa9d054eb8b456a0 F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f -F src/where.c 7cae47e813393d70c6d327fdf000fcb30f76b1b0b5a5b52ff6402e0c658de32c +F src/where.c f24ffd41cd3a186731817bb7f05ea9a6c4f0474235b6b8a718985db5f8cb9822 F src/whereInt.h 2610cb87dd95509995b63decc674c60f2757697a206cfe0c085ee53d9c43cfff F src/wherecode.c 982b7450c53fb272f61a1d20c93e960260ea4dfe8e2e9bacc190e2a041a1f1a4 F src/whereexpr.c 53532be687e12f3cd314f1e204cd4fbdac7ad250e918a182b048121e16e828ae @@ -1717,7 +1717,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 43c2c60caf0ba105f57e32fc7fe6938dc29538c04d477a35b9b8bba2fb8fdd07 -R 21c05c965caaf57e504e2c1c78a6bf82 -U dan -Z 920b588edeffe44ebf0eb4cdf592b8b3 +P 3d29631fa7270b18f51de8cfe1285959e42ad9a673d5d2d5c016126f5f1b31a8 +R a3e1d350ba10e0a0ac49b5488df74692 +U drh +Z ec0176626c070d831f4c88641f08cfc9 diff --git a/manifest.uuid b/manifest.uuid index 3bfe6363f7..da41f5ff45 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3d29631fa7270b18f51de8cfe1285959e42ad9a673d5d2d5c016126f5f1b31a8 \ No newline at end of file +ea2e5b34bf35ade602dfcef359b64f810674f304fda14326b7f2dedefcc5f340 \ No newline at end of file diff --git a/src/where.c b/src/where.c index 8c1e3cd01f..b4b79b3599 100644 --- a/src/where.c +++ b/src/where.c @@ -2373,8 +2373,8 @@ static int whereLoopAddBtreeIndex( pNew = pBuilder->pNew; if( db->mallocFailed ) return SQLITE_NOMEM_BKPT; - WHERETRACE(0x800, ("BEGIN addBtreeIdx(%s), nEq=%d\n", - pProbe->zName, pNew->u.btree.nEq)); + WHERETRACE(0x800, ("BEGIN %s.addBtreeIdx(%s), nEq=%d\n", + pProbe->pTable->zName,pProbe->zName, pNew->u.btree.nEq)); assert( (pNew->wsFlags & WHERE_VIRTUALTABLE)==0 ); assert( (pNew->wsFlags & WHERE_TOP_LIMIT)==0 ); @@ -2660,8 +2660,8 @@ static int whereLoopAddBtreeIndex( pNew->wsFlags = saved_wsFlags; } - WHERETRACE(0x800, ("END addBtreeIdx(%s), nEq=%d, rc=%d\n", - pProbe->zName, saved_nEq, rc)); + WHERETRACE(0x800, ("END %s.addBtreeIdx(%s), nEq=%d, rc=%d\n", + pProbe->pTable->zName, pProbe->zName, saved_nEq, rc)); return rc; } @@ -3244,6 +3244,7 @@ static int whereLoopAddVirtual( } /* First call xBestIndex() with all constraints usable. */ + WHERETRACE(0x800, ("BEGIN %s.addVirtual()\n", pSrc->pTab->zName)); WHERETRACE(0x40, (" VirtualOne: all usable\n")); rc = whereLoopAddVirtualOne(pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn); @@ -3319,6 +3320,7 @@ static int whereLoopAddVirtual( if( p->needToFreeIdxStr ) sqlite3_free(p->idxStr); sqlite3DbFreeNN(pParse->db, p); + WHERETRACE(0x800, ("END %s.addVirtual(), rc=%d\n", pSrc->pTab->zName, rc)); return rc; } #endif /* SQLITE_OMIT_VIRTUALTABLE */ From 67ecf1f5c243a693fad2e10d8b9e1f61beb35d44 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 9 Apr 2018 14:26:44 +0000 Subject: [PATCH 04/17] Fix the fts5 xBestIndex method so that it is not confused by "IS", "!=", "REGEXP", "GLOB" or "LIKE" operators. FossilOrigin-Name: a0ca4ddbbf179b8f0a5f30c127f2f8c92b6d45a08be3e1ef2194e44ebcc28120 --- ext/fts5/fts5_main.c | 10 ++++++++-- ext/fts5/test/fts5aa.test | 12 ++++++++++++ manifest | 16 ++++++++-------- manifest.uuid | 2 +- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c index d59cd5b7cc..d00eaa1f4f 100644 --- a/ext/fts5/fts5_main.c +++ b/ext/fts5/fts5_main.c @@ -535,6 +535,12 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ aColMap[1] = nCol; aColMap[2] = nCol+1; + assert( SQLITE_INDEX_CONSTRAINT_EQnConstraint; i++){ struct sqlite3_index_constraint *p = &pInfo->aConstraint[i]; @@ -553,11 +559,11 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ pInfo->estimatedCost = 1e50; return SQLITE_OK; } - }else{ + }else if( p->op<=SQLITE_INDEX_CONSTRAINT_MATCH ){ int j; for(j=1; jiCol] && p->op & pC->op && p->usable ){ + if( iCol==aColMap[pC->iCol] && (p->op & pC->op) && p->usable ){ pC->iConsIndex = i; idxFlags |= pC->fts5op; } diff --git a/ext/fts5/test/fts5aa.test b/ext/fts5/test/fts5aa.test index 67cb62012a..6fa3ad8e63 100644 --- a/ext/fts5/test/fts5aa.test +++ b/ext/fts5/test/fts5aa.test @@ -591,6 +591,18 @@ do_execsql_test 22.1 { SELECT rowid FROM t9('a*') } {1} +#------------------------------------------------------------------------- +do_execsql_test 23.0 { + CREATE VIRTUAL TABLE t10 USING fts5(x, detail=%DETAIL%); + CREATE TABLE t11(x); +} +do_execsql_test 23.1 { + SELECT * FROM t11, t10 WHERE t11.x = t10.x AND t10.rowid IS NULL; +} +do_execsql_test 23.2 { + SELECT * FROM t11, t10 WHERE t10.rowid IS NULL; +} + } expand_all_sql db diff --git a/manifest b/manifest index 9b7c0e6907..7d97e98c73 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improvements\sto\s".wheretrace"\soutput. -D 2018-04-09T13:58:20.646 +C Fix\sthe\sfts5\sxBestIndex\smethod\sso\sthat\sit\sis\snot\sconfused\sby\s"IS",\s"!=",\n"REGEXP",\s"GLOB"\sor\s"LIKE"\soperators. +D 2018-04-09T14:26:44.938 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -114,7 +114,7 @@ F ext/fts5/fts5_config.c 5af9c360e99669d29f06492c370892394aba0857 F ext/fts5/fts5_expr.c c23a2e4c14c401a147c4a730460e5b37057627bf4be95515ee281cd87f4d277c F ext/fts5/fts5_hash.c 32be400cf761868c9db33efe81a06eb19a17c5402ad477ee9efb51301546dd55 F ext/fts5/fts5_index.c 22b71d0e9e4b3ddd123a39ae27174e0012da2806f91b64087a68584f13f189de -F ext/fts5/fts5_main.c 24868f88ab2a865defbba7a92eebeb726cc991eb092b71b5f5508f180c72605b +F ext/fts5/fts5_main.c da46761a7e9b582083fcb9f5a3ee50086205fb91f4e68d984a9946e64218e297 F ext/fts5/fts5_storage.c 4bec8a1b3905978b22a67bca5f4a3cfdb94af234cf51efb36f4f2d733d278634 F ext/fts5/fts5_tcl.c 39bcbae507f594aad778172fa914cad0f585bf92fd3b078c686e249282db0d95 F ext/fts5/fts5_test_mi.c 65864ba1e5c34a61d409c4c587e0bbe0466eb4f8f478d85dc42a92caad1338e6 @@ -126,7 +126,7 @@ F ext/fts5/fts5_vocab.c 1cd79854cb21543e66507b25b0578bc1b20aa6a1349b7feceb8e8fed F ext/fts5/fts5parse.y eb526940f892ade5693f22ffd6c4f2702543a9059942772526eac1fde256bb05 F ext/fts5/mkportersteps.tcl 5acf962d2e0074f701620bb5308155fa1e4a63ba F ext/fts5/test/fts5_common.tcl b01c584144b5064f30e6c648145a2dd6bc440841 -F ext/fts5/test/fts5aa.test 6e2fdb0ee667c05f41921e7ec345cae874be651670900918e9ccc539514b9356 +F ext/fts5/test/fts5aa.test 87f4b50e755b52c6192c76ceccf4247d462bb44b52fa17358f273d8ce5d975f0 F ext/fts5/test/fts5ab.test 9205c839332c908aaad2b01ab8670ece8b161e8f2ec8a9fabf18ca9385880bb7 F ext/fts5/test/fts5ac.test a7aa7e1fefc6e1918aa4d3111d5c44a09177168e962c5fd2cca9620de8a7ed6d F ext/fts5/test/fts5ad.test e8cf959dfcd57c8e46d6f5f25665686f3b6627130a9a981371dafdf6482790de @@ -1717,7 +1717,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 3d29631fa7270b18f51de8cfe1285959e42ad9a673d5d2d5c016126f5f1b31a8 -R a3e1d350ba10e0a0ac49b5488df74692 -U drh -Z ec0176626c070d831f4c88641f08cfc9 +P ea2e5b34bf35ade602dfcef359b64f810674f304fda14326b7f2dedefcc5f340 +R 8f9fac69a6facd3d2fe7d071e9eeb654 +U dan +Z 8f666f7374638cab02f381eabf013e4e diff --git a/manifest.uuid b/manifest.uuid index da41f5ff45..c8bdc18d28 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ea2e5b34bf35ade602dfcef359b64f810674f304fda14326b7f2dedefcc5f340 \ No newline at end of file +a0ca4ddbbf179b8f0a5f30c127f2f8c92b6d45a08be3e1ef2194e44ebcc28120 \ No newline at end of file From 337679be4e1c7269eb19654b46dea3a6b6231d3a Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 9 Apr 2018 15:57:54 +0000 Subject: [PATCH 05/17] Enhance the query planner so that it detects when the xBestIndex method of a virtual table gives out-of-sequence argvIndex values and reports an error. Secondary fix for ticket [2b8aed9f7c9e6]. FossilOrigin-Name: 9506ec14fb9e58986c1b79a3ca78430ad94b10966944c864e0429a7688dd1454 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/where.c | 13 +++++++++++-- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 7d97e98c73..a447a754dc 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sfts5\sxBestIndex\smethod\sso\sthat\sit\sis\snot\sconfused\sby\s"IS",\s"!=",\n"REGEXP",\s"GLOB"\sor\s"LIKE"\soperators. -D 2018-04-09T14:26:44.938 +C Enhance\sthe\squery\splanner\sso\sthat\sit\sdetects\swhen\sthe\sxBestIndex\smethod\nof\sa\svirtual\stable\sgives\sout-of-sequence\sargvIndex\svalues\sand\sreports\san\nerror.\s\sSecondary\sfix\sfor\sticket\s[2b8aed9f7c9e6]. +D 2018-04-09T15:57:54.452 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -574,7 +574,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c aa9cffc7a2bad6b826a86c8562dd4978398720ed41cb8ee7aa9d054eb8b456a0 F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f -F src/where.c f24ffd41cd3a186731817bb7f05ea9a6c4f0474235b6b8a718985db5f8cb9822 +F src/where.c d6e5f2056e9a60251e79780fc598a5943e88a3c0fa0019d54922e59f99019287 F src/whereInt.h 2610cb87dd95509995b63decc674c60f2757697a206cfe0c085ee53d9c43cfff F src/wherecode.c 982b7450c53fb272f61a1d20c93e960260ea4dfe8e2e9bacc190e2a041a1f1a4 F src/whereexpr.c 53532be687e12f3cd314f1e204cd4fbdac7ad250e918a182b048121e16e828ae @@ -1717,7 +1717,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 ea2e5b34bf35ade602dfcef359b64f810674f304fda14326b7f2dedefcc5f340 -R 8f9fac69a6facd3d2fe7d071e9eeb654 -U dan -Z 8f666f7374638cab02f381eabf013e4e +P a0ca4ddbbf179b8f0a5f30c127f2f8c92b6d45a08be3e1ef2194e44ebcc28120 +R 1af7937ba1b801b99e6369015e55beae +U drh +Z d6c99c4e35e451694f089e81619701c1 diff --git a/manifest.uuid b/manifest.uuid index c8bdc18d28..bb4eac9bad 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a0ca4ddbbf179b8f0a5f30c127f2f8c92b6d45a08be3e1ef2194e44ebcc28120 \ No newline at end of file +9506ec14fb9e58986c1b79a3ca78430ad94b10966944c864e0429a7688dd1454 \ No newline at end of file diff --git a/src/where.c b/src/where.c index b4b79b3599..a1cf743d1b 100644 --- a/src/where.c +++ b/src/where.c @@ -3099,9 +3099,9 @@ static int whereLoopAddVirtualOne( || pNew->aLTerm[iTerm]!=0 || pIdxCons->usable==0 ){ - rc = SQLITE_ERROR; sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pTab->zName); - return rc; + testcase( pIdxInfo->needToFreeIdxStr ); + return SQLITE_ERROR; } testcase( iTerm==nConstraint-1 ); testcase( j==0 ); @@ -3129,6 +3129,15 @@ static int whereLoopAddVirtualOne( pNew->u.vtab.omitMask &= ~mNoOmit; pNew->nLTerm = mxTerm+1; + for(i=0; i<=mxTerm; i++){ + if( pNew->aLTerm[i]==0 ){ + /* The non-zero argvIdx values must be contiguous. Raise an + ** error if they are not */ + sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pTab->zName); + testcase( pIdxInfo->needToFreeIdxStr ); + return SQLITE_ERROR; + } + } assert( pNew->nLTerm<=pNew->nLSlot ); pNew->u.vtab.idxNum = pIdxInfo->idxNum; pNew->u.vtab.needFree = pIdxInfo->needToFreeIdxStr; From a5746e0317a6b1385fd6bdb751812126d7c9dc7f Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 9 Apr 2018 20:36:09 +0000 Subject: [PATCH 06/17] Minor changes to the input grammar resulting in a faster and slightly smaller parser. FossilOrigin-Name: a2c443c0ee9a0e0b2d10298b8a74ff00a1a66e3f96f4093348f0fef977587204 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/parse.y | 51 +++++++++++++++++++++++++++++++-------------------- src/select.c | 4 +--- 4 files changed, 40 insertions(+), 31 deletions(-) diff --git a/manifest b/manifest index a447a754dc..76f3841527 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\sthe\squery\splanner\sso\sthat\sit\sdetects\swhen\sthe\sxBestIndex\smethod\nof\sa\svirtual\stable\sgives\sout-of-sequence\sargvIndex\svalues\sand\sreports\san\nerror.\s\sSecondary\sfix\sfor\sticket\s[2b8aed9f7c9e6]. -D 2018-04-09T15:57:54.452 +C Minor\schanges\sto\sthe\sinput\sgrammar\sresulting\sin\sa\sfaster\sand\sslightly\ssmaller\nparser. +D 2018-04-09T20:36:09.127 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -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 140bbc53b5f67f731239f7fc8704a4f1e60cbbc10fb84bf9577322f974725f19 +F src/parse.y 22ca6e5bb34bbf94e4f91bb1cae6fefad7c03c2e0f29fe9b14b4192e8421f234 F src/pcache.c 135ef0bc6fb2e3b7178d49ab5c9176254c8a691832c1bceb1156b2fbdd0869bd F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170 F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880 @@ -491,7 +491,7 @@ F src/printf.c d3b7844ddeb11fbbdd38dd84d09c9c1ac171d21fb038473c3aa97981201cc660 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 66c73fcb7719b8ff0e841b58338f13604ff3e2b50a723f9b8f383595735262f6 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac -F src/select.c 16d1f3510cef527e25067d04253e347c899346800d74f31629735295e9fac8ae +F src/select.c dfcd77a9bec9d2bcb221ed93c153cb38cc609faa6404e2dc0ae9491aac110112 F src/shell.c.in d6a07811aa9f3b10200c15ab8dd4b6b998849a3b0c8b125bfa980329a33c26a6 F src/sqlite.h.in e0be726ea6e4e6571724d39d242472ecd8bd1ba6f84ade88e1641bde98a6d02b F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1717,7 +1717,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 a0ca4ddbbf179b8f0a5f30c127f2f8c92b6d45a08be3e1ef2194e44ebcc28120 -R 1af7937ba1b801b99e6369015e55beae +P 9506ec14fb9e58986c1b79a3ca78430ad94b10966944c864e0429a7688dd1454 +R e690430bc32db63ab4d1aceaf2f9c6b6 U drh -Z d6c99c4e35e451694f089e81619701c1 +Z b10e98c6c331ff64a752723ddb2a8a6c diff --git a/manifest.uuid b/manifest.uuid index bb4eac9bad..a1959b5ef6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9506ec14fb9e58986c1b79a3ca78430ad94b10966944c864e0429a7688dd1454 \ No newline at end of file +a2c443c0ee9a0e0b2d10298b8a74ff00a1a66e3f96f4093348f0fef977587204 \ No newline at end of file diff --git a/src/parse.y b/src/parse.y index 6b31e4c483..c82177a86f 100644 --- a/src/parse.y +++ b/src/parse.y @@ -464,7 +464,7 @@ cmd ::= select(X). { } } -select(A) ::= with(W) selectnowith(X). { +select(A) ::= WITH wqlist(W) selectnowith(X). { Select *p = X; if( p ){ p->pWith = W; @@ -472,7 +472,24 @@ select(A) ::= with(W) selectnowith(X). { }else{ sqlite3WithDelete(pParse->db, W); } - A = p; /*A-overwrites-W*/ + A = p; +} +select(A) ::= WITH RECURSIVE wqlist(W) selectnowith(X). { + Select *p = X; + if( p ){ + p->pWith = W; + parserDoubleLinkSelect(pParse, p); + }else{ + sqlite3WithDelete(pParse->db, W); + } + A = p; +} +select(A) ::= selectnowith(X). { + Select *p = X; + if( p ){ + parserDoubleLinkSelect(pParse, p); + } + A = p; /*A-overwrites-X*/ } selectnowith(A) ::= oneselect(A). @@ -666,7 +683,9 @@ dbnm(A) ::= DOT nm(X). {A = X;} %type fullname {SrcList*} %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);} -fullname(A) ::= nm(X) dbnm(Y). +fullname(A) ::= nm(X). + {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/} +fullname(A) ::= nm(X) DOT nm(Y). {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/} %type joinop {int} @@ -762,16 +781,14 @@ limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y). /////////////////////////// The DELETE statement ///////////////////////////// // %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT -cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W) +cmd ::= with DELETE FROM fullname(X) indexed_opt(I) where_opt(W) orderby_opt(O) limit_opt(L). { - sqlite3WithPush(pParse, C, 1); sqlite3SrcListIndexedBy(pParse, X, &I); sqlite3DeleteFrom(pParse,X,W,O,L); } %endif %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT -cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W). { - sqlite3WithPush(pParse, C, 1); +cmd ::= with DELETE FROM fullname(X) indexed_opt(I) where_opt(W). { sqlite3SrcListIndexedBy(pParse, X, &I); sqlite3DeleteFrom(pParse,X,W,0,0); } @@ -786,18 +803,16 @@ where_opt(A) ::= WHERE expr(X). {A = X;} ////////////////////////// The UPDATE command //////////////////////////////// // %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT -cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y) +cmd ::= with UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y) where_opt(W) orderby_opt(O) limit_opt(L). { - sqlite3WithPush(pParse, C, 1); sqlite3SrcListIndexedBy(pParse, X, &I); sqlite3ExprListCheckLength(pParse,Y,"set list"); sqlite3Update(pParse,X,Y,W,R,O,L); } %endif %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT -cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y) +cmd ::= with UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y) where_opt(W). { - sqlite3WithPush(pParse, C, 1); sqlite3SrcListIndexedBy(pParse, X, &I); sqlite3ExprListCheckLength(pParse,Y,"set list"); sqlite3Update(pParse,X,Y,W,R,0,0); @@ -824,13 +839,11 @@ setlist(A) ::= LP idlist(X) RP EQ expr(Y). { ////////////////////////// The INSERT command ///////////////////////////////// // -cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S). { - sqlite3WithPush(pParse, W, 1); +cmd ::= with insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S). { sqlite3Insert(pParse, X, S, F, R); } -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); } @@ -1488,15 +1501,13 @@ anylist ::= anylist ANY. //////////////////////// COMMON TABLE EXPRESSIONS //////////////////////////// -%type with {With*} %type wqlist {With*} -%destructor with {sqlite3WithDelete(pParse->db, $$);} %destructor wqlist {sqlite3WithDelete(pParse->db, $$);} -with(A) ::= . {A = 0;} +with ::= . %ifndef SQLITE_OMIT_CTE -with(A) ::= WITH wqlist(W). { A = W; } -with(A) ::= WITH RECURSIVE wqlist(W). { A = W; } +with ::= WITH wqlist(W). { sqlite3WithPush(pParse, W, 1); } +with ::= WITH RECURSIVE wqlist(W). { sqlite3WithPush(pParse, W, 1); } wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. { A = sqlite3WithAdd(pParse, 0, &X, Y, Z); /*A-overwrites-X*/ diff --git a/src/select.c b/src/select.c index fa804f173e..4ee752173a 100644 --- a/src/select.c +++ b/src/select.c @@ -4378,9 +4378,7 @@ static int selectExpander(Walker *pWalker, Select *p){ } pTabList = p->pSrc; pEList = p->pEList; - if( OK_IF_ALWAYS_TRUE(p->pWith) ){ - sqlite3WithPush(pParse, p->pWith, 0); - } + sqlite3WithPush(pParse, p->pWith, 0); /* Make sure cursor numbers have been assigned to all entries in ** the FROM clause of the SELECT statement. From eb557618d2dc24d39c5377f3f23bd1feb9dd81c7 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 10 Apr 2018 00:53:36 +0000 Subject: [PATCH 07/17] Update the top-level README.md file to point to the whynotget.html document. Put it on the correct branch, this time. FossilOrigin-Name: a52e3cddea58b838e94e09a8488220a4406ff37d2cad8da05799d47fcf95ea38 --- README.md | 7 ++++--- manifest | 13 +++++++------ manifest.uuid | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index a92e5ae24e..8c8cc95c74 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,10 @@ This repository contains the complete source code for the SQLite database engine. Some test scripts are also included. However, many other test scripts and most of the documentation are managed separately. -If you are reading this on a Git mirror someplace, you are doing it wrong. -The [official repository](https://www.sqlite.org/src/) is better. Go there -now. +SQLite [does not use Git](https://sqlite.org/whynotgit.html). +If you are reading this on GitHub, then you are looking at an +unofficial mirror. See for the official +repository. ## Obtaining The Code diff --git a/manifest b/manifest index 76f3841527..fd693666f1 100644 --- a/manifest +++ b/manifest @@ -1,11 +1,11 @@ -C Minor\schanges\sto\sthe\sinput\sgrammar\sresulting\sin\sa\sfaster\sand\sslightly\ssmaller\nparser. -D 2018-04-09T20:36:09.127 +C Update\sthe\stop-level\sREADME.md\sfile\sto\spoint\sto\sthe\swhynotget.html\sdocument.\nPut\sit\son\sthe\scorrect\sbranch,\sthis\stime. +D 2018-04-10T00:53:36.702 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc bdcad21b027a56a73e54a1121cfb9edd0a35c0abfa53aa12c2f996006ff99960 -F README.md 1d5342ebda97420f114283e604e5fe99b0da939d63b76d492eabbaae23488276 +F README.md 7764d56778d567913ef11c82da9ab94aefa0826f7c243351e4e2d7adaef6f373 F VERSION cdf91ac446255ecf3d8f6d8c3ee40d64123235ae5b3cef29d344e61b45ec3759 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 @@ -1717,7 +1717,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 9506ec14fb9e58986c1b79a3ca78430ad94b10966944c864e0429a7688dd1454 -R e690430bc32db63ab4d1aceaf2f9c6b6 +P a2c443c0ee9a0e0b2d10298b8a74ff00a1a66e3f96f4093348f0fef977587204 +Q +7dfd4543da7ef741852252d3c78ba89a919d737787e9e5118579e35fdfdeb24c +R 0f6e1b77512b319f22d2d1b23202330f U drh -Z b10e98c6c331ff64a752723ddb2a8a6c +Z d8f4c1112385d7bbc06fc019e3a5dc65 diff --git a/manifest.uuid b/manifest.uuid index a1959b5ef6..fa34707383 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a2c443c0ee9a0e0b2d10298b8a74ff00a1a66e3f96f4093348f0fef977587204 \ No newline at end of file +a52e3cddea58b838e94e09a8488220a4406ff37d2cad8da05799d47fcf95ea38 \ No newline at end of file From a2ce1b99a853031e18f1b283b5f1397712867726 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 10 Apr 2018 10:37:33 +0000 Subject: [PATCH 08/17] Remove an unnecessary SQLITE_UNTESTABLE compile-time conditional from the command-line shell. FossilOrigin-Name: 80b75a34a2a4c11bc35b8638f8f05d999db416c81edc1a1c81aa5029f0301da1 --- manifest | 13 ++++++------- manifest.uuid | 2 +- src/shell.c.in | 2 -- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index fd693666f1..a34bb1af75 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sthe\stop-level\sREADME.md\sfile\sto\spoint\sto\sthe\swhynotget.html\sdocument.\nPut\sit\son\sthe\scorrect\sbranch,\sthis\stime. -D 2018-04-10T00:53:36.702 +C Remove\san\sunnecessary\sSQLITE_UNTESTABLE\scompile-time\sconditional\sfrom\nthe\scommand-line\sshell. +D 2018-04-10T10:37:33.563 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -492,7 +492,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 66c73fcb7719b8ff0e841b58338f13604ff3e2b50a723f9b8f383595735262f6 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac F src/select.c dfcd77a9bec9d2bcb221ed93c153cb38cc609faa6404e2dc0ae9491aac110112 -F src/shell.c.in d6a07811aa9f3b10200c15ab8dd4b6b998849a3b0c8b125bfa980329a33c26a6 +F src/shell.c.in cc960721e56ebc1a78773bb5d2f5608b54275f945cbe49e4afe919d6888062a7 F src/sqlite.h.in e0be726ea6e4e6571724d39d242472ecd8bd1ba6f84ade88e1641bde98a6d02b F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 83a3c4ce93d650bedfd1aa558cb85a516bd6d094445ee989740827d0d944368d @@ -1717,8 +1717,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 a2c443c0ee9a0e0b2d10298b8a74ff00a1a66e3f96f4093348f0fef977587204 -Q +7dfd4543da7ef741852252d3c78ba89a919d737787e9e5118579e35fdfdeb24c -R 0f6e1b77512b319f22d2d1b23202330f +P a52e3cddea58b838e94e09a8488220a4406ff37d2cad8da05799d47fcf95ea38 +R 1ca2d9126463cf9663e1c4be8dfad8da U drh -Z d8f4c1112385d7bbc06fc019e3a5dc65 +Z b4d5a07dae0cf868c3649de369a52705 diff --git a/manifest.uuid b/manifest.uuid index fa34707383..b8819a72d5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a52e3cddea58b838e94e09a8488220a4406ff37d2cad8da05799d47fcf95ea38 \ No newline at end of file +80b75a34a2a4c11bc35b8638f8f05d999db416c81edc1a1c81aa5029f0301da1 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 2a90eae198..ddbf825951 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -3733,7 +3733,6 @@ static FILE *output_file_open(const char *zFile, int bTextMode){ return f; } -#if !defined(SQLITE_UNTESTABLE) #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) /* ** A routine for handling output from sqlite3_trace(). @@ -3756,7 +3755,6 @@ static int sql_trace_callback( return 0; } #endif -#endif /* ** A no-op routine that runs with the ".breakpoint" doc-command. This is From a1054dcc3f50b212ffe89d3fa25e60261341b5ba Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 10 Apr 2018 12:10:01 +0000 Subject: [PATCH 09/17] Fix a problem causing the LEFT JOIN strength reduction optimization to be incorrectly applied in some cases where the WHERE clause of the query contains a filter expression of the form NOT(x AND y). Ticket [1e39b966]. FossilOrigin-Name: 38d319c153641ea4138fab2d5a47c31a86f57a071a1e1c299ca54c980cfb2b60 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/expr.c | 1 + test/join.test | 5 +++++ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index a34bb1af75..3aeba4b730 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\san\sunnecessary\sSQLITE_UNTESTABLE\scompile-time\sconditional\sfrom\nthe\scommand-line\sshell. -D 2018-04-10T10:37:33.563 +C Fix\sa\sproblem\scausing\sthe\sLEFT\sJOIN\sstrength\sreduction\soptimization\sto\sbe\nincorrectly\sapplied\sin\ssome\scases\swhere\sthe\sWHERE\sclause\sof\sthe\squery\scontains\na\sfilter\sexpression\sof\sthe\sform\sNOT(x\sAND\sy).\sTicket\s[1e39b966]. +D 2018-04-10T12:10:01.900 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -443,7 +443,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 8db4c97f630e7d83f884ea75caf1ffd0988c160e9d530194d93721c80821e0f6 F src/dbstat.c edabb82611143727511a45ca0859b8cd037851ebe756ae3db289859dd18b6f91 F src/delete.c 20c8788451dc737a967c87ea53ad43544d617f5b57d32ccce8bd52a0daf9e89b -F src/expr.c 0d4345e0e153cd6082ece69b4a0fdd0934d15bcd3925c74063cb8f65219a6f3c +F src/expr.c 397c3ca2f53623ca0752d0034ded54f9d037a5e2d3eb6e1e8e1745e0ee53bae5 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c d617daf66b5515e2b42c1405b2b4984c30ca50fb705ab164271a9bf66c69e331 F src/func.c 94f42cba2cc1c34aeaa441022ba0170ec3fec4bba54db4e0ded085c6dc0fdc51 @@ -1005,7 +1005,7 @@ F test/ioerr4.test f130fe9e71008577b342b8874d52984bd04ede2c F test/ioerr5.test 2edfa4fb0f896f733071303b42224df8bedd9da4 F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b F test/istrue.test d6e659764da5ccc03adcdba18fe77d7917ba5e4abd04ef14bd4e4cf43e024b5b -F test/join.test 730e3e8d511289531efca01f8684f98da1e6de51eacf95c5960d0c46e77719e3 +F test/join.test 6fa8e2bad2f16eefc26358d919b1ade8744e98818fea02f5e590c4efed9641c2 F test/join2.test f5ea0fd3b0a441c8e439706339dcd17cec63a896a755c04a30bfd442ecce1190 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916 @@ -1717,7 +1717,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 a52e3cddea58b838e94e09a8488220a4406ff37d2cad8da05799d47fcf95ea38 -R 1ca2d9126463cf9663e1c4be8dfad8da -U drh -Z b4d5a07dae0cf868c3649de369a52705 +P 80b75a34a2a4c11bc35b8638f8f05d999db416c81edc1a1c81aa5029f0301da1 +R 268cf390c5eefe5014937b7dc42c93ef +U dan +Z d112124ec27666e320885da591f69555 diff --git a/manifest.uuid b/manifest.uuid index b8819a72d5..0fa6c15601 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -80b75a34a2a4c11bc35b8638f8f05d999db416c81edc1a1c81aa5029f0301da1 \ No newline at end of file +38d319c153641ea4138fab2d5a47c31a86f57a071a1e1c299ca54c980cfb2b60 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 5180044a5d..6516348e72 100644 --- a/src/expr.c +++ b/src/expr.c @@ -5018,6 +5018,7 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune; switch( pExpr->op ){ + case TK_NOT: case TK_ISNULL: case TK_IS: case TK_OR: diff --git a/test/join.test b/test/join.test index 21cef43412..da29e03e59 100644 --- a/test/join.test +++ b/test/join.test @@ -806,6 +806,11 @@ do_execsql_test join-15.105 { FROM t1 LEFT JOIN t2 WHERE a IN (1,3,x,y); } {1 2 {} {} x 3 4 {} {} x} +do_execsql_test join-15.106 { + SELECT *, 'x' + FROM t1 LEFT JOIN t2 + WHERE NOT ( 'x'='y' AND t2.y=1 ); +} {1 2 {} {} x 3 4 {} {} x} do_execsql_test join-15.110 { DROP TABLE t1; DROP TABLE t2; From 032495a34ed1a3cc0ed84b7c2cc4d3eaa7a84725 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 10 Apr 2018 12:33:42 +0000 Subject: [PATCH 10/17] Increase the version number to 3.23.1. FossilOrigin-Name: 9488c87b54ace8a92a52a368e8cf161dfdd24201bd6b60d50e88c2d92d592f0c --- VERSION | 2 +- configure | 18 +++++++++--------- manifest | 16 ++++++++-------- manifest.uuid | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/VERSION b/VERSION index ee893b7e0e..9b2f2a1688 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.23.0 +3.23.1 diff --git a/configure b/configure index 3df19e8ec5..baead2ea36 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sqlite 3.23.0. +# Generated by GNU Autoconf 2.69 for sqlite 3.23.1. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -726,8 +726,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.23.0' -PACKAGE_STRING='sqlite 3.23.0' +PACKAGE_VERSION='3.23.1' +PACKAGE_STRING='sqlite 3.23.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1465,7 +1465,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.23.0 to adapt to many kinds of systems. +\`configure' configures sqlite 3.23.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1530,7 +1530,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.23.0:";; + short | recursive ) echo "Configuration of sqlite 3.23.1:";; esac cat <<\_ACEOF @@ -1655,7 +1655,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.23.0 +sqlite configure 3.23.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2074,7 +2074,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.23.0, which was +It was created by sqlite $as_me 3.23.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -12242,7 +12242,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.23.0, which was +This file was extended by sqlite $as_me 3.23.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -12308,7 +12308,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sqlite config.status 3.23.0 +sqlite config.status 3.23.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/manifest b/manifest index 3aeba4b730..79813a95f2 100644 --- a/manifest +++ b/manifest @@ -1,12 +1,12 @@ -C Fix\sa\sproblem\scausing\sthe\sLEFT\sJOIN\sstrength\sreduction\soptimization\sto\sbe\nincorrectly\sapplied\sin\ssome\scases\swhere\sthe\sWHERE\sclause\sof\sthe\squery\scontains\na\sfilter\sexpression\sof\sthe\sform\sNOT(x\sAND\sy).\sTicket\s[1e39b966]. -D 2018-04-10T12:10:01.900 +C Increase\sthe\sversion\snumber\sto\s3.23.1. +D 2018-04-10T12:33:42.665 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc bdcad21b027a56a73e54a1121cfb9edd0a35c0abfa53aa12c2f996006ff99960 F README.md 7764d56778d567913ef11c82da9ab94aefa0826f7c243351e4e2d7adaef6f373 -F VERSION cdf91ac446255ecf3d8f6d8c3ee40d64123235ae5b3cef29d344e61b45ec3759 +F VERSION 7169eb6959db9ad1b7004ae3b754ef6e703eb7d8dde3b07d2e63103413eb25fb F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 @@ -32,7 +32,7 @@ F autoconf/tea/win/rules.vc c511f222b80064096b705dbeb97060ee1d6b6d63 F config.guess 226d9a188c6196f3033ffc651cbc9dcee1a42977 F config.h.in 6376abec766e9a0785178b1823b5a587e9f1ccbc F config.sub 9ebe4c3b3dab6431ece34f16828b594fb420da55 -F configure 2c71f331b463e987567a2dd942f728534f1aa7a174551e08a7b31b328e9da4ff x +F configure 41d0e05b0d289c1c981aafe5c4070713c8e70b5a7d3472360764a3fce08a82a8 x F configure.ac d4529ebb26ae046269334f1dac65f2b1d6927c2efe22b2ec24dce24dfe4f83dd F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/lemon.html 278113807f49d12d04179a93fab92b5b917a08771152ca7949d34e928efa3941 @@ -1717,7 +1717,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 80b75a34a2a4c11bc35b8638f8f05d999db416c81edc1a1c81aa5029f0301da1 -R 268cf390c5eefe5014937b7dc42c93ef -U dan -Z d112124ec27666e320885da591f69555 +P 38d319c153641ea4138fab2d5a47c31a86f57a071a1e1c299ca54c980cfb2b60 +R 5db76e2402f7f79c269b14c320c75348 +U drh +Z eb997ef34dc2cc6ec584fc96a7895aa6 diff --git a/manifest.uuid b/manifest.uuid index 0fa6c15601..4be36e62f7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -38d319c153641ea4138fab2d5a47c31a86f57a071a1e1c299ca54c980cfb2b60 \ No newline at end of file +9488c87b54ace8a92a52a368e8cf161dfdd24201bd6b60d50e88c2d92d592f0c \ No newline at end of file From 6831dbedeb285ec35984521c556fc302982f636f Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 10 Apr 2018 14:29:51 +0000 Subject: [PATCH 11/17] When testing, avoid injecting an OOM fault into a file-control call made by SQLite on an unopened file-descriptor. FossilOrigin-Name: 9c1a5eba3ec37c877af4b83c6f8c05b7140304f3d23e49832ba63e321247fc8d --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/os.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 79813a95f2..a0874eb4a0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Increase\sthe\sversion\snumber\sto\s3.23.1. -D 2018-04-10T12:33:42.665 +C When\stesting,\savoid\sinjecting\san\sOOM\sfault\sinto\sa\sfile-control\scall\smade\sby\nSQLite\son\san\sunopened\sfile-descriptor. +D 2018-04-10T14:29:51.757 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -471,7 +471,7 @@ F src/mutex_noop.c 9d4309c075ba9cc7249e19412d3d62f7f94839c4 F src/mutex_unix.c aaf9ebc3f89df28483c52208497a99a02cc3650011422fc9d4c57e4392f7fe58 F src/mutex_w32.c 7670d770c94bbfe8289bec9d7f1394c5a00a57c37f892aab6b6612d085255235 F src/notify.c 9711a7575036f0d3040ba61bc6e217f13a9888e7 -F src/os.c 4d83f700d77ac5ad598c970041669040cb3c21147356dffa558f5f8b9291fda7 +F src/os.c 1cb0d1d1b3a4267966dee6e292d2b2cdf88e47c0c59cebff27ecafac052dd165 F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 @@ -1717,7 +1717,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 38d319c153641ea4138fab2d5a47c31a86f57a071a1e1c299ca54c980cfb2b60 -R 5db76e2402f7f79c269b14c320c75348 -U drh -Z eb997ef34dc2cc6ec584fc96a7895aa6 +P 9488c87b54ace8a92a52a368e8cf161dfdd24201bd6b60d50e88c2d92d592f0c +R a4afc80fcfd3b80f6df302d3be0764c0 +U dan +Z a59b86949016abdeb8b70bf8aab7af70 diff --git a/manifest.uuid b/manifest.uuid index 4be36e62f7..f21ffec4b8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9488c87b54ace8a92a52a368e8cf161dfdd24201bd6b60d50e88c2d92d592f0c \ No newline at end of file +9c1a5eba3ec37c877af4b83c6f8c05b7140304f3d23e49832ba63e321247fc8d \ No newline at end of file diff --git a/src/os.c b/src/os.c index 1637c098ab..997f97121f 100644 --- a/src/os.c +++ b/src/os.c @@ -125,6 +125,7 @@ int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){ ** routine has no return value since the return value would be meaningless. */ int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ + if( id->pMethods==0 ) return SQLITE_NOTFOUND; #ifdef SQLITE_TEST if( op!=SQLITE_FCNTL_COMMIT_PHASETWO && op!=SQLITE_FCNTL_LOCK_TIMEOUT @@ -142,7 +143,6 @@ int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ DO_OS_MALLOC_TEST(id); } #endif - if( id->pMethods==0 ) return SQLITE_NOTFOUND; return id->pMethods->xFileControl(id, op, pArg); } void sqlite3OsFileControlHint(sqlite3_file *id, int op, void *pArg){ From 0493222ff89b3c3d1c8ca0e6bc57891e5877d54e Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 10 Apr 2018 15:31:56 +0000 Subject: [PATCH 12/17] Fix a problem causing the LEFT JOIN strength reduction optimization to be incorrectly applied in some cases where the WHERE clause of the query contains a filter expression of the form "lhs.x IS NOT ?". FossilOrigin-Name: 1fdaf2c34431adcac1c7ff29aae0623c4cbaa6a7f38e843c786bd407d8b3e730 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 3 +++ test/join.test | 5 +++++ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index a0874eb4a0..6df2faa567 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\stesting,\savoid\sinjecting\san\sOOM\sfault\sinto\sa\sfile-control\scall\smade\sby\nSQLite\son\san\sunopened\sfile-descriptor. -D 2018-04-10T14:29:51.757 +C Fix\sa\sproblem\scausing\sthe\sLEFT\sJOIN\sstrength\sreduction\soptimization\sto\sbe\nincorrectly\sapplied\sin\ssome\scases\swhere\sthe\sWHERE\sclause\sof\sthe\squery\scontains\na\sfilter\sexpression\sof\sthe\sform\s"lhs.x\sIS\sNOT\s?". +D 2018-04-10T15:31:56.297 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -443,7 +443,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 8db4c97f630e7d83f884ea75caf1ffd0988c160e9d530194d93721c80821e0f6 F src/dbstat.c edabb82611143727511a45ca0859b8cd037851ebe756ae3db289859dd18b6f91 F src/delete.c 20c8788451dc737a967c87ea53ad43544d617f5b57d32ccce8bd52a0daf9e89b -F src/expr.c 397c3ca2f53623ca0752d0034ded54f9d037a5e2d3eb6e1e8e1745e0ee53bae5 +F src/expr.c 6a41ceb27924dcfb6dc910a283ce74e136c9c305aba87a5acbfca32f5c49caa7 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c d617daf66b5515e2b42c1405b2b4984c30ca50fb705ab164271a9bf66c69e331 F src/func.c 94f42cba2cc1c34aeaa441022ba0170ec3fec4bba54db4e0ded085c6dc0fdc51 @@ -1005,7 +1005,7 @@ F test/ioerr4.test f130fe9e71008577b342b8874d52984bd04ede2c F test/ioerr5.test 2edfa4fb0f896f733071303b42224df8bedd9da4 F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b F test/istrue.test d6e659764da5ccc03adcdba18fe77d7917ba5e4abd04ef14bd4e4cf43e024b5b -F test/join.test 6fa8e2bad2f16eefc26358d919b1ade8744e98818fea02f5e590c4efed9641c2 +F test/join.test 2ad9d7fe10e0cc06bc7803c22e5533be11cdadbc592f5f95d789a873b57a5a66 F test/join2.test f5ea0fd3b0a441c8e439706339dcd17cec63a896a755c04a30bfd442ecce1190 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916 @@ -1717,7 +1717,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 9488c87b54ace8a92a52a368e8cf161dfdd24201bd6b60d50e88c2d92d592f0c -R a4afc80fcfd3b80f6df302d3be0764c0 +P 9c1a5eba3ec37c877af4b83c6f8c05b7140304f3d23e49832ba63e321247fc8d +R 4cac5ebce3c2344d130b0b75df1b28c6 U dan -Z a59b86949016abdeb8b70bf8aab7af70 +Z b1aec716bc0469f55f9b3573e327725e diff --git a/manifest.uuid b/manifest.uuid index f21ffec4b8..896d531216 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9c1a5eba3ec37c877af4b83c6f8c05b7140304f3d23e49832ba63e321247fc8d \ No newline at end of file +1fdaf2c34431adcac1c7ff29aae0623c4cbaa6a7f38e843c786bd407d8b3e730 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 6516348e72..eac5476f73 100644 --- a/src/expr.c +++ b/src/expr.c @@ -5018,6 +5018,7 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune; switch( pExpr->op ){ + case TK_ISNOT: case TK_NOT: case TK_ISNULL: case TK_IS: @@ -5025,6 +5026,8 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ case TK_CASE: case TK_IN: case TK_FUNCTION: + testcase( pExpr->op==TK_ISNOT ); + testcase( pExpr->op==TK_NOT ); testcase( pExpr->op==TK_ISNULL ); testcase( pExpr->op==TK_IS ); testcase( pExpr->op==TK_OR ); diff --git a/test/join.test b/test/join.test index da29e03e59..8c6f463bca 100644 --- a/test/join.test +++ b/test/join.test @@ -811,6 +811,11 @@ do_execsql_test join-15.106 { FROM t1 LEFT JOIN t2 WHERE NOT ( 'x'='y' AND t2.y=1 ); } {1 2 {} {} x 3 4 {} {} x} +do_execsql_test join-15.107 { + SELECT *, 'x' + FROM t1 LEFT JOIN t2 + WHERE t2.y IS NOT 'abc' +} {1 2 {} {} x 3 4 {} {} x} do_execsql_test join-15.110 { DROP TABLE t1; DROP TABLE t2; From 80aab206a485086f794cd6a4e8337c83365ca039 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 10 Apr 2018 17:39:29 +0000 Subject: [PATCH 13/17] Version 3.23.1 FossilOrigin-Name: 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b --- manifest | 13 ++++++++----- manifest.uuid | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/manifest b/manifest index 6df2faa567..550f1d6c68 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\scausing\sthe\sLEFT\sJOIN\sstrength\sreduction\soptimization\sto\sbe\nincorrectly\sapplied\sin\ssome\scases\swhere\sthe\sWHERE\sclause\sof\sthe\squery\scontains\na\sfilter\sexpression\sof\sthe\sform\s"lhs.x\sIS\sNOT\s?". -D 2018-04-10T15:31:56.297 +C Version\s3.23.1 +D 2018-04-10T17:39:29.721 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -1717,7 +1717,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 9c1a5eba3ec37c877af4b83c6f8c05b7140304f3d23e49832ba63e321247fc8d +P 1fdaf2c34431adcac1c7ff29aae0623c4cbaa6a7f38e843c786bd407d8b3e730 R 4cac5ebce3c2344d130b0b75df1b28c6 -U dan -Z b1aec716bc0469f55f9b3573e327725e +T +bgcolor * #d0c0ff +T +sym-release * +T +sym-version-3.23.1 * +U drh +Z 96974a1a3d914d4bcb8af6c333b7c418 diff --git a/manifest.uuid b/manifest.uuid index 896d531216..7055af6db3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1fdaf2c34431adcac1c7ff29aae0623c4cbaa6a7f38e843c786bd407d8b3e730 \ No newline at end of file +4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b \ No newline at end of file From 8384e43c18a0fff07c0ea2df8903841cef500199 Mon Sep 17 00:00:00 2001 From: mistachkin Date: Tue, 10 Apr 2018 18:56:21 +0000 Subject: [PATCH 14/17] Include the 'sqlite3rebaser_' APIs in the Windows '.def' file. FossilOrigin-Name: 56e4965f7ac850c59596120878434f5ef023e77919ef9416d20812eac764bac1 --- Makefile.msc | 2 +- autoconf/Makefile.msc | 2 +- manifest | 21 +++++++++------------ manifest.uuid | 2 +- tool/mkmsvcmin.tcl | 2 +- 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/Makefile.msc b/Makefile.msc index 43d4a379a2..7d32af239e 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -1672,7 +1672,7 @@ $(SQLITE3DLL): $(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP) sqlite3.def: libsqlite3.lib echo EXPORTS > sqlite3.def dumpbin /all libsqlite3.lib \ - | $(TCLSH_CMD) $(TOP)\tool\replace.tcl include "^\s+1 _?(sqlite3(?:session|changeset|changegroup)?_[^@]*)(?:@\d+)?$$" \1 \ + | $(TCLSH_CMD) $(TOP)\tool\replace.tcl include "^\s+1 _?(sqlite3(?:session|changeset|changegroup|rebaser)?_[^@]*)(?:@\d+)?$$" \1 \ | sort >> sqlite3.def # <> diff --git a/autoconf/Makefile.msc b/autoconf/Makefile.msc index d99549b966..dbcb8c9880 100644 --- a/autoconf/Makefile.msc +++ b/autoconf/Makefile.msc @@ -966,7 +966,7 @@ Replace.exe: sqlite3.def: Replace.exe $(LIBOBJ) echo EXPORTS > sqlite3.def dumpbin /all $(LIBOBJ) \ - | .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset|changegroup)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \ + | .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset|changegroup|rebaser)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \ | sort >> sqlite3.def $(SQLITE3EXE): shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H) diff --git a/manifest b/manifest index 550f1d6c68..4d2685944b 100644 --- a/manifest +++ b/manifest @@ -1,10 +1,10 @@ -C Version\s3.23.1 -D 2018-04-10T17:39:29.721 +C Include\sthe\s'sqlite3rebaser_'\sAPIs\sin\sthe\sWindows\s'.def'\sfile. +D 2018-04-10T18:56:21.837 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 -F Makefile.msc bdcad21b027a56a73e54a1121cfb9edd0a35c0abfa53aa12c2f996006ff99960 +F Makefile.msc 43dd6ae2e5a2bb8df7bfc9ed85935129caffeafb8c1803d24c5d038b1e74c8ca F README.md 7764d56778d567913ef11c82da9ab94aefa0826f7c243351e4e2d7adaef6f373 F VERSION 7169eb6959db9ad1b7004ae3b754ef6e703eb7d8dde3b07d2e63103413eb25fb F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@ -13,7 +13,7 @@ F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am 2c274948734e03c51790ff51468f91db8d570bcca864284d9c6d6e777264cd7e -F autoconf/Makefile.msc 1223d1520e0b833041ad87b377fae61cc3e08d14c5aae4c1a9e36249225bd4e6 +F autoconf/Makefile.msc 6a46d0659d6e4a25346102bcba40a7fb4b0b8b2dc4faabdf0187488c6dd580d6 F autoconf/README.first 6c4f34fe115ff55d4e8dbfa3cecf04a0188292f7 F autoconf/README.txt 4f04b0819303aabaa35fff5f7b257fb0c1ef95f1 F autoconf/configure.ac 18fca06f884213be062dd5e07c5297079cc45893d9cd3f522ce426e715033e3d @@ -1646,7 +1646,7 @@ F tool/mkautoconfamal.sh 422fc365358a2e92876ffc62971a0ff28ed472fc8bcf9de0df921c7 F tool/mkccode.tcl 86463e68ce9c15d3041610fedd285ce32a5cf7a58fc88b3202b8b76837650dbe x F tool/mkctimec.tcl dd183b73ae1c28249669741c250525f0407e579a70482371668fd5f130d9feb3 F tool/mkkeywordhash.c 2e852ac0dfdc5af18886dc1ce7e9676d11714ae3df0a282dc7d90b3a0fe2033c -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,10 +1717,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 1fdaf2c34431adcac1c7ff29aae0623c4cbaa6a7f38e843c786bd407d8b3e730 -R 4cac5ebce3c2344d130b0b75df1b28c6 -T +bgcolor * #d0c0ff -T +sym-release * -T +sym-version-3.23.1 * -U drh -Z 96974a1a3d914d4bcb8af6c333b7c418 +P 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b +R cf8331c45ba4583fd3f926761aab3520 +U mistachkin +Z 052337a7502d1a648ca59d978c462084 diff --git a/manifest.uuid b/manifest.uuid index 7055af6db3..332ccafbd2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b \ No newline at end of file +56e4965f7ac850c59596120878434f5ef023e77919ef9416d20812eac764bac1 \ No newline at end of file diff --git a/tool/mkmsvcmin.tcl b/tool/mkmsvcmin.tcl index 1d646ef9f5..764641faee 100644 --- a/tool/mkmsvcmin.tcl +++ b/tool/mkmsvcmin.tcl @@ -83,7 +83,7 @@ Replace.exe: sqlite3.def: Replace.exe $(LIBOBJ) echo EXPORTS > sqlite3.def dumpbin /all $(LIBOBJ) \\ - | .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset|changegroup)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \\ + | .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset|changegroup|rebaser)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \\ | sort >> sqlite3.def }]] From d6189eafa4d0290f644819f091a2138ce8d2f647 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 11 Apr 2018 14:11:53 +0000 Subject: [PATCH 15/17] Minor simplification to internal function generateSortTail(). FossilOrigin-Name: f32cdb41ca213cfcfe0bb5bfe56930d43e55525fa5640274b00f1ccce7f69634 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/select.c | 9 +++------ 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index 4d2685944b..4739c8e9b2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Include\sthe\s'sqlite3rebaser_'\sAPIs\sin\sthe\sWindows\s'.def'\sfile. -D 2018-04-10T18:56:21.837 +C Minor\ssimplification\sto\sinternal\sfunction\sgenerateSortTail(). +D 2018-04-11T14:11:53.499 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -491,7 +491,7 @@ F src/printf.c d3b7844ddeb11fbbdd38dd84d09c9c1ac171d21fb038473c3aa97981201cc660 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 66c73fcb7719b8ff0e841b58338f13604ff3e2b50a723f9b8f383595735262f6 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac -F src/select.c dfcd77a9bec9d2bcb221ed93c153cb38cc609faa6404e2dc0ae9491aac110112 +F src/select.c 41e857c107be5fb972b87a4cbb948c8b1191f339c1e32a65742581573932e119 F src/shell.c.in cc960721e56ebc1a78773bb5d2f5608b54275f945cbe49e4afe919d6888062a7 F src/sqlite.h.in e0be726ea6e4e6571724d39d242472ecd8bd1ba6f84ade88e1641bde98a6d02b F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1717,7 +1717,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 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b -R cf8331c45ba4583fd3f926761aab3520 -U mistachkin -Z 052337a7502d1a648ca59d978c462084 +P 56e4965f7ac850c59596120878434f5ef023e77919ef9416d20812eac764bac1 +R 48bda25c5666e906d4ef80813706fd24 +U dan +Z 085cbe7783541af0757121e42293d25a diff --git a/manifest.uuid b/manifest.uuid index 332ccafbd2..961ddab67e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -56e4965f7ac850c59596120878434f5ef023e77919ef9416d20812eac764bac1 \ No newline at end of file +f32cdb41ca213cfcfe0bb5bfe56930d43e55525fa5640274b00f1ccce7f69634 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 4ee752173a..3e765c8464 100644 --- a/src/select.c +++ b/src/select.c @@ -1247,7 +1247,6 @@ static void generateSortTail( int iCol; int nKey; int iSortTab; /* Sorter cursor to read from */ - int nSortData; /* Trailing values to read from sorter */ int i; int bSeq; /* True if sorter record includes seq. no. */ struct ExprList_item *aOutEx = p->pEList->a; @@ -1262,11 +1261,9 @@ static void generateSortTail( if( eDest==SRT_Output || eDest==SRT_Coroutine || eDest==SRT_Mem ){ regRowid = 0; regRow = pDest->iSdst; - nSortData = nColumn; }else{ regRowid = sqlite3GetTempReg(pParse); regRow = sqlite3GetTempRange(pParse, nColumn); - nSortData = nColumn; } nKey = pOrderBy->nExpr - pSort->nOBSat; if( pSort->sortFlags & SORTFLAG_UseSorter ){ @@ -1275,7 +1272,7 @@ static void generateSortTail( if( pSort->labelBkOut ){ addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); } - sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, nKey+1+nSortData); + sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, nKey+1+nColumn); if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce); addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak); VdbeCoverage(v); @@ -1288,10 +1285,10 @@ static void generateSortTail( iSortTab = iTab; bSeq = 1; } - for(i=0, iCol=nKey+bSeq-1; i=0; i--){ + for(i=nColumn-1; i>=0; i--){ int iRead; if( aOutEx[i].u.x.iOrderByCol ){ iRead = aOutEx[i].u.x.iOrderByCol-1; From 84fbff18d0f9df6086c9cfdeaab468c1f06f141c Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 11 Apr 2018 16:04:01 +0000 Subject: [PATCH 16/17] Prohibit bound parameters in the arguments to table-valued functions within a trigger. Problem discovered by OSSFuzz. FossilOrigin-Name: b7178209152452e82f5908513385018524472640d67547927d6b4c0aa0c15a46 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/attach.c | 3 +++ test/triggerE.test | 1 + 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 4739c8e9b2..8ec777c56f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\ssimplification\sto\sinternal\sfunction\sgenerateSortTail(). -D 2018-04-11T14:11:53.499 +C Prohibit\sbound\sparameters\sin\sthe\sarguments\sto\stable-valued\sfunctions\swithin\na\strigger.\s\sProblem\sdiscovered\sby\sOSSFuzz. +D 2018-04-11T16:04:01.145 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -427,7 +427,7 @@ F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a F src/alter.c cf7a8af45cb0ace672f47a1b29ab24092a9e8cd8d945a9974e3b5d925f548594 F src/analyze.c 71fbbeb7b25417592f54d869fe90c28b48e4cecb9926ef9b06d90fb0aec48941 -F src/attach.c f6f212c43dddba79dfcb723fb9470785f3ff55bde8953cd9d2546f3022070a41 +F src/attach.c bbdf97bb366d94d2bafff8ef611b3bee7b5f54d695531790d896a7a17e126317 F src/auth.c 6277d63837357549fe14e723490d6dc1a38768d71c795c5eb5c0f8a99f918f73 F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 @@ -1487,7 +1487,7 @@ F test/triggerA.test fe5597f47ee21bacb4936dc827994ed94161e332 F test/triggerB.test 56780c031b454abac2340dbb3b71ac5c56c3d7fe F test/triggerC.test 302d8995f5ffe63bbc15053abb3ef7a39cf5a092 F test/triggerD.test 8e7f3921a92a5797d472732108109e44575fa650 -F test/triggerE.test 15fa63f1097db1f83dd62d121616006978063d1f +F test/triggerE.test d9e9b364dfd527c84ac0de53045406325487feecb32888d482eca64421a50d99 F test/triggerF.test 6a8c22bd058cf467f0c7d112afe87f7a8c579c0c4681b914b8f19020f48528a4 F test/triggerG.test d5caeef6144ede2426dd13211fd72248241ff2ebc68e12a4c0bf30f5faa21499 F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1 @@ -1717,7 +1717,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 56e4965f7ac850c59596120878434f5ef023e77919ef9416d20812eac764bac1 -R 48bda25c5666e906d4ef80813706fd24 -U dan -Z 085cbe7783541af0757121e42293d25a +P f32cdb41ca213cfcfe0bb5bfe56930d43e55525fa5640274b00f1ccce7f69634 +R 7c8229c67bab778254c73d883b02f8cd +U drh +Z d47d1a7f91fccc9da7ff7a7b98373d3d diff --git a/manifest.uuid b/manifest.uuid index 961ddab67e..ad5c4d6fa3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f32cdb41ca213cfcfe0bb5bfe56930d43e55525fa5640274b00f1ccce7f69634 \ No newline at end of file +b7178209152452e82f5908513385018524472640d67547927d6b4c0aa0c15a46 \ No newline at end of file diff --git a/src/attach.c b/src/attach.c index f85952f7c6..5d0e2def20 100644 --- a/src/attach.c +++ b/src/attach.c @@ -502,6 +502,9 @@ int sqlite3FixSrcList( if( sqlite3FixSelect(pFix, pItem->pSelect) ) return 1; if( sqlite3FixExpr(pFix, pItem->pOn) ) return 1; #endif + if( pItem->fg.isTabFunc && sqlite3FixExprList(pFix, pItem->u1.pFuncArg) ){ + return 1; + } } return 0; } diff --git a/test/triggerE.test b/test/triggerE.test index a82ac9d2a5..8b010fa176 100644 --- a/test/triggerE.test +++ b/test/triggerE.test @@ -57,6 +57,7 @@ foreach {tn defn} { 7 { BEFORE DELETE ON t1 BEGIN SELECT * FROM t2 ORDER BY ?; END; } 8 { BEFORE UPDATE ON t1 BEGIN UPDATE t2 SET c = ?; END; } 9 { BEFORE UPDATE ON t1 BEGIN UPDATE t2 SET c = 1 WHERE d = ?; END; } + 10 { AFTER INSERT ON t1 BEGIN SELECT * FROM pragma_stats(?); END; } } { catchsql {drop trigger tr1} do_catchsql_test 1.1.$tn "CREATE TRIGGER tr1 $defn" [list 1 $errmsg] From 2424aa723b6b208b0b53d6f7408555d04b04e14a Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 11 Apr 2018 17:10:54 +0000 Subject: [PATCH 17/17] Help the parser run faster by avoiding the "explain ::= ." production. FossilOrigin-Name: d7ec7b5970df9e542401f8299e098a5039d1875e2e3383dad06a0ec998589b6e --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/parse.y | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 8ec777c56f..d6f09a69bf 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Prohibit\sbound\sparameters\sin\sthe\sarguments\sto\stable-valued\sfunctions\swithin\na\strigger.\s\sProblem\sdiscovered\sby\sOSSFuzz. -D 2018-04-11T16:04:01.145 +C Help\sthe\sparser\srun\sfaster\sby\savoiding\sthe\s"explain\s::=\s."\sproduction. +D 2018-04-11T17:10:54.632 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -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 22ca6e5bb34bbf94e4f91bb1cae6fefad7c03c2e0f29fe9b14b4192e8421f234 +F src/parse.y e3c4116efb7d693df412bd42a96c88c6463704d31a29342c2fa671f6e91ecb26 F src/pcache.c 135ef0bc6fb2e3b7178d49ab5c9176254c8a691832c1bceb1156b2fbdd0869bd F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170 F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880 @@ -1717,7 +1717,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 f32cdb41ca213cfcfe0bb5bfe56930d43e55525fa5640274b00f1ccce7f69634 -R 7c8229c67bab778254c73d883b02f8cd +P b7178209152452e82f5908513385018524472640d67547927d6b4c0aa0c15a46 +R 12b886afc6216ee0a5a2b22cc4bff5a5 U drh -Z d47d1a7f91fccc9da7ff7a7b98373d3d +Z 93376c77c8408e036fdadd56852c955d diff --git a/manifest.uuid b/manifest.uuid index ad5c4d6fa3..c807fee2e0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b7178209152452e82f5908513385018524472640d67547927d6b4c0aa0c15a46 \ No newline at end of file +d7ec7b5970df9e542401f8299e098a5039d1875e2e3383dad06a0ec998589b6e \ No newline at end of file diff --git a/src/parse.y b/src/parse.y index c82177a86f..26dde6ee24 100644 --- a/src/parse.y +++ b/src/parse.y @@ -114,9 +114,9 @@ input ::= cmdlist. cmdlist ::= cmdlist ecmd. cmdlist ::= ecmd. ecmd ::= SEMI. -ecmd ::= explain cmdx SEMI. -explain ::= . +ecmd ::= cmdx SEMI. %ifndef SQLITE_OMIT_EXPLAIN +ecmd ::= explain cmdx. explain ::= EXPLAIN. { pParse->explain = 1; } explain ::= EXPLAIN QUERY PLAN. { pParse->explain = 2; } %endif SQLITE_OMIT_EXPLAIN