From b5f0e4057895bf48f78f5f1a43b561621fea76cf Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 15 Jan 2020 16:20:16 +0000 Subject: [PATCH 01/30] Do not allow the "PRAGMA encoding" statement to change the database encoding if TEMP content exists, or content in any other attached database. Formerly, encoding changes were allowed if just the main database file was empty. Ticket [a08879a4a476eea9]. FossilOrigin-Name: 03b003c988d27f3aa1b1e44972ee5a3c7e44ad667ec7f2b8a31d0411c66583d3 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/pragma.c | 15 +++++++++++---- test/enc2.test | 14 +++++++++++++- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index db3464521a..9f6e191bcb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\surifuncs.c\sextension\s(used\sfor\stesting\sand\sdebugging\sonly)\sso\sthat\nthe\ssqlite3_filename_database()\sSQL\sfunction\sand\sits\ssiblings\scorrectly\shandle\nan\sinvalid\sschema\sname\spassed\sin\sas\sthe\sargument. -D 2020-01-14T16:50:09.276 +C Do\snot\sallow\sthe\s"PRAGMA\sencoding"\sstatement\sto\schange\sthe\sdatabase\nencoding\sif\sTEMP\scontent\sexists,\sor\scontent\sin\sany\sother\sattached\ndatabase.\s\sFormerly,\sencoding\schanges\swere\sallowed\sif\sjust\sthe\smain\ndatabase\sfile\swas\sempty.\s\sTicket\s[a08879a4a476eea9]. +D 2020-01-15T16:20:16.110 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -524,7 +524,7 @@ F src/parse.y c8d2de64db469fd56e0fa24da46cd8ec8523eb98626567d2708df371b47fdc3f F src/pcache.c 385ff064bca69789d199a98e2169445dc16e4291fa807babd61d4890c3b34177 F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c 6596e10baf3d8f84cc1585d226cf1ab26564a5f5caf85a15757a281ff977d51a -F src/pragma.c 9145cc0d7309b49d383fe15deca9ab592830b8b532e7fb25e9e36b6f470cbf66 +F src/pragma.c 0d49d43b22d66397aa026db505457f6683d8a66cd0a4f9db2e6776156bda716c F src/pragma.h 9f86a3a3a0099e651189521c8ad03768df598974e7bbdc21c7f9bb6125592fbd F src/prepare.c 6049beb71385f017af6fc320d2c75a4e50b75e280c54232442b785fbb83df057 F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 @@ -848,7 +848,7 @@ F test/e_walckpt.test 28c371a6bb5e5fe7f31679c1df1763a19d19e8a0 F test/e_walhook.test 01b494287ba9e60b70f6ebf3c6c62e0ffe01788e344a4846b08e5de0b344cb66 F test/emptytable.test a38110becbdfa6325cd65cb588dca658cd885f62 F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea -F test/enc2.test 83437a79ba1545a55fb549309175c683fb334473 +F test/enc2.test 848bf05f15b011719f478dddb7b5e9aea35e39e457493cba4c4eef75d849a5ec F test/enc3.test 6807f7a7740a00361ca8d0ccd66bc60c8dc5f2b6 F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020 F test/eqp.test 84879b63e3110552bf8ce648a3507dc3ceb72109ecec83c2aef0db37a27f6382 @@ -1857,7 +1857,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 54bf04811951db6c894f272f870e3e41f8f5e05a25c1115efbbdbd0d8bba54be -R ef60df967e796bd9bfc273160d5104d4 +P 3d7434a9d85dae9135473d1c58c22ac01a282e654807aa10be9b39f127291594 +R 8a9a1a9f3b4869ab1515f6774449d079 U drh -Z 6fa8f0dab0c264087d10e9adb2b33207 +Z 4597b9944f2bad0f6e2f950727bac08b diff --git a/manifest.uuid b/manifest.uuid index cea784779f..0b9836a8e1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3d7434a9d85dae9135473d1c58c22ac01a282e654807aa10be9b39f127291594 \ No newline at end of file +03b003c988d27f3aa1b1e44972ee5a3c7e44ad667ec7f2b8a31d0411c66583d3 \ No newline at end of file diff --git a/src/pragma.c b/src/pragma.c index 9c292e1631..4d33e8c471 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -1824,10 +1824,17 @@ void sqlite3Pragma( ** will be overwritten when the schema is next loaded. If it does not ** already exists, it will be created to use the new encoding value. */ - if( - !(DbHasProperty(db, 0, DB_SchemaLoaded)) || - DbHasProperty(db, 0, DB_Empty) - ){ + int canChangeEnc = 1; /* True if allowed to change the encoding */ + int i; /* For looping over all attached databases */ + for(i=0; inDb; i++){ + if( db->aDb[i].pBt!=0 + && DbHasProperty(db,i,DB_SchemaLoaded) + && !DbHasProperty(db,i,DB_Empty) + ){ + canChangeEnc = 0; + } + } + if( canChangeEnc ){ for(pEnc=&encnames[0]; pEnc->zName; pEnc++){ if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){ SCHEMA_ENC(db) = ENC(db) = diff --git a/test/enc2.test b/test/enc2.test index 3eb3aa27c3..81e7bfd68c 100644 --- a/test/enc2.test +++ b/test/enc2.test @@ -13,7 +13,6 @@ # various suported unicode encodings (UTF-8, UTF-16, UTF-16le and # UTF-16be). # -# $Id: enc2.test,v 1.29 2007/10/09 08:29:32 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -552,4 +551,17 @@ do_test enc2-10.1 { } } {t1 t2} +# 2020-01-15 ticket a08879a4a476eea9 +# Do not allow a database connection encoding change unless *all* +# attached databases are empty. +# +reset_db +do_execsql_test enc2-11.10 { + PRAGMA encoding=UTF8; + CREATE TEMP TABLE t1(x); + INSERT INTO t1 VALUES('this is a test'); + PRAGMA encoding=UTF16; + SELECT * FROM t1; +} {{this is a test}} + finish_test From 7d07a5f4e0590e7c688508307f3bd53af2626b23 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 16 Jan 2020 11:51:09 +0000 Subject: [PATCH 02/30] Clean up the definitions of the TERM_ constants in the code generator. Formatting only - no logic changes. FossilOrigin-Name: af06f80a590e20f64fa2f630e85fa728c266ea4696b975cc5f2ab72a3b914379 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/whereInt.h | 26 +++++++++++++------------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index 9f6e191bcb..22100ee7ab 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sallow\sthe\s"PRAGMA\sencoding"\sstatement\sto\schange\sthe\sdatabase\nencoding\sif\sTEMP\scontent\sexists,\sor\scontent\sin\sany\sother\sattached\ndatabase.\s\sFormerly,\sencoding\schanges\swere\sallowed\sif\sjust\sthe\smain\ndatabase\sfile\swas\sempty.\s\sTicket\s[a08879a4a476eea9]. -D 2020-01-15T16:20:16.110 +C Clean\sup\sthe\sdefinitions\sof\sthe\sTERM_\sconstants\sin\sthe\scode\sgenerator.\nFormatting\sonly\s-\sno\slogic\schanges. +D 2020-01-16T11:51:09.331 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -618,7 +618,7 @@ F src/wal.c 15a2845769f51ba132f9cf0b2c7a6887a91fc8437892dbcce9fcdc68b66d60a1 F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d F src/where.c df2bea0e0122e853d9f1a8ec68920744166d2a524e338eba92e5470538ecd1f9 -F src/whereInt.h e1d1db6bbec0ba4f345acc338f956c8237a6f06413afa68c6414e82fb5b06745 +F src/whereInt.h 9157228db086f436a574589f8cc5749bd971e94017c552305ad9ec472ed2e098 F src/wherecode.c ec8870d6fe79668dd12d7edc65ae9771828d6cdfe478348c8abd872a89fdbadd F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396 F src/window.c f8ba2ee12a19b51d3ba42c16277c74185ee9215306bc0d5a03974ade8b5bc98f @@ -1857,7 +1857,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 3d7434a9d85dae9135473d1c58c22ac01a282e654807aa10be9b39f127291594 -R 8a9a1a9f3b4869ab1515f6774449d079 +P 03b003c988d27f3aa1b1e44972ee5a3c7e44ad667ec7f2b8a31d0411c66583d3 +R d7ffc973c7d36b1e5540da71f4b7e63a U drh -Z 4597b9944f2bad0f6e2f950727bac08b +Z 2da9b3045dcf43023df4f4ed55be732d diff --git a/manifest.uuid b/manifest.uuid index 0b9836a8e1..e32d827dd7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -03b003c988d27f3aa1b1e44972ee5a3c7e44ad667ec7f2b8a31d0411c66583d3 \ No newline at end of file +af06f80a590e20f64fa2f630e85fa728c266ea4696b975cc5f2ab72a3b914379 \ No newline at end of file diff --git a/src/whereInt.h b/src/whereInt.h index dbc6f1872a..74101624d5 100644 --- a/src/whereInt.h +++ b/src/whereInt.h @@ -274,22 +274,22 @@ struct WhereTerm { /* ** Allowed values of WhereTerm.wtFlags */ -#define TERM_DYNAMIC 0x01 /* Need to call sqlite3ExprDelete(db, pExpr) */ -#define TERM_VIRTUAL 0x02 /* Added by the optimizer. Do not code */ -#define TERM_CODED 0x04 /* This term is already coded */ -#define TERM_COPIED 0x08 /* Has a child */ -#define TERM_ORINFO 0x10 /* Need to free the WhereTerm.u.pOrInfo object */ -#define TERM_ANDINFO 0x20 /* Need to free the WhereTerm.u.pAndInfo obj */ -#define TERM_OR_OK 0x40 /* Used during OR-clause processing */ +#define TERM_DYNAMIC 0x0001 /* Need to call sqlite3ExprDelete(db, pExpr) */ +#define TERM_VIRTUAL 0x0002 /* Added by the optimizer. Do not code */ +#define TERM_CODED 0x0004 /* This term is already coded */ +#define TERM_COPIED 0x0008 /* Has a child */ +#define TERM_ORINFO 0x0010 /* Need to free the WhereTerm.u.pOrInfo object */ +#define TERM_ANDINFO 0x0020 /* Need to free the WhereTerm.u.pAndInfo obj */ +#define TERM_OR_OK 0x0040 /* Used during OR-clause processing */ #ifdef SQLITE_ENABLE_STAT4 -# define TERM_VNULL 0x80 /* Manufactured x>NULL or x<=NULL term */ +# define TERM_VNULL 0x0080 /* Manufactured x>NULL or x<=NULL term */ #else -# define TERM_VNULL 0x00 /* Disabled if not using stat4 */ +# define TERM_VNULL 0x0000 /* Disabled if not using stat4 */ #endif -#define TERM_LIKEOPT 0x100 /* Virtual terms from the LIKE optimization */ -#define TERM_LIKECOND 0x200 /* Conditionally this LIKE operator term */ -#define TERM_LIKE 0x400 /* The original LIKE operator */ -#define TERM_IS 0x800 /* Term.pExpr is an IS operator */ +#define TERM_LIKEOPT 0x0100 /* Virtual terms from the LIKE optimization */ +#define TERM_LIKECOND 0x0200 /* Conditionally this LIKE operator term */ +#define TERM_LIKE 0x0400 /* The original LIKE operator */ +#define TERM_IS 0x0800 /* Term.pExpr is an IS operator */ #define TERM_VARSELECT 0x1000 /* Term.pExpr contains a correlated sub-query */ /* From 7db212a70b6520832a22e98f5f506c6cc7826f3e Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 16 Jan 2020 12:25:14 +0000 Subject: [PATCH 03/30] Fix an SQL syntax error in the comment on the omit-left-join optimization. No changes to code. FossilOrigin-Name: 86b5e5a20e967af7ac444ff0a40c2e8b93b7e5c505eebf6d3753a341b05503a8 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/where.c | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 22100ee7ab..ceb2dae77e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Clean\sup\sthe\sdefinitions\sof\sthe\sTERM_\sconstants\sin\sthe\scode\sgenerator.\nFormatting\sonly\s-\sno\slogic\schanges. -D 2020-01-16T11:51:09.331 +C Fix\san\sSQL\ssyntax\serror\sin\sthe\scomment\son\sthe\somit-left-join\soptimization.\nNo\schanges\sto\scode. +D 2020-01-16T12:25:14.066 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -617,7 +617,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 15a2845769f51ba132f9cf0b2c7a6887a91fc8437892dbcce9fcdc68b66d60a1 F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d -F src/where.c df2bea0e0122e853d9f1a8ec68920744166d2a524e338eba92e5470538ecd1f9 +F src/where.c 2005d0511e05e5f7b6fb3be514b44f264f23d45f3b0cc5e150c63e3006a003e5 F src/whereInt.h 9157228db086f436a574589f8cc5749bd971e94017c552305ad9ec472ed2e098 F src/wherecode.c ec8870d6fe79668dd12d7edc65ae9771828d6cdfe478348c8abd872a89fdbadd F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396 @@ -1857,7 +1857,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 03b003c988d27f3aa1b1e44972ee5a3c7e44ad667ec7f2b8a31d0411c66583d3 -R d7ffc973c7d36b1e5540da71f4b7e63a +P af06f80a590e20f64fa2f630e85fa728c266ea4696b975cc5f2ab72a3b914379 +R 9a8c9df7f9259d9aaa9715d05b9ca046 U drh -Z 2da9b3045dcf43023df4f4ed55be732d +Z c83be37898e2cd5899ddcac01ce6852d diff --git a/manifest.uuid b/manifest.uuid index e32d827dd7..aa609bb64a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -af06f80a590e20f64fa2f630e85fa728c266ea4696b975cc5f2ab72a3b914379 \ No newline at end of file +86b5e5a20e967af7ac444ff0a40c2e8b93b7e5c505eebf6d3753a341b05503a8 \ No newline at end of file diff --git a/src/where.c b/src/where.c index 7fb27191a3..e7447deec2 100644 --- a/src/where.c +++ b/src/where.c @@ -4908,14 +4908,14 @@ WhereInfo *sqlite3WhereBegin( ** then table t2 can be omitted from the following: ** ** SELECT v1, v3 FROM t1 - ** LEFT JOIN t2 USING (t1.ipk=t2.ipk) - ** LEFT JOIN t3 USING (t1.ipk=t3.ipk) + ** LEFT JOIN t2 ON (t1.ipk=t2.ipk) + ** LEFT JOIN t3 ON (t1.ipk=t3.ipk) ** ** or from: ** ** SELECT DISTINCT v1, v3 FROM t1 ** LEFT JOIN t2 - ** LEFT JOIN t3 USING (t1.ipk=t3.ipk) + ** LEFT JOIN t3 ON (t1.ipk=t3.ipk) */ notReady = ~(Bitmask)0; if( pWInfo->nLevel>=2 From 39df24a3f02495e5ef6bb5ea8ce029a2c1e377e6 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 16 Jan 2020 16:12:07 +0000 Subject: [PATCH 04/30] Do not allow the constant-propagation optimization to apple to ON/USING clause terms as it does not help and it might cause downstream problems. FossilOrigin-Name: 1bc783da63d58b05c690468b569cb2787846357b63c1100d11777666c5787bf4 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/select.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index ceb2dae77e..589036cf37 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sSQL\ssyntax\serror\sin\sthe\scomment\son\sthe\somit-left-join\soptimization.\nNo\schanges\sto\scode. -D 2020-01-16T12:25:14.066 +C Do\snot\sallow\sthe\sconstant-propagation\soptimization\sto\sapple\sto\sON/USING\sclause\nterms\sas\sit\sdoes\snot\shelp\sand\sit\smight\scause\sdownstream\sproblems. +D 2020-01-16T16:12:07.234 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -531,7 +531,7 @@ F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 1139e3157c710c6e6f04fe726f4e0d8bdb1ae89a276d3b0ca4975af163141c9c F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 -F src/select.c 924b61cef57033a8ca1ed3dcffd02445a7dd0c837cc849b2e4117251cac831f5 +F src/select.c 3e3a7ba46c65db13cb44780cd56d359d5b61b2032fdd8ca5c74ce5be24efd86f F src/shell.c.in 1b2a636ba5b676f844a2af2a5f719b5c4ace7c6825d56270e2ae912b2a5fc840 F src/sqlite.h.in cedb3737511a45ae35fba6e4d6c250ae36f6b82da0de38113efa1a3bc83ee105 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1857,7 +1857,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 af06f80a590e20f64fa2f630e85fa728c266ea4696b975cc5f2ab72a3b914379 -R 9a8c9df7f9259d9aaa9715d05b9ca046 +P 86b5e5a20e967af7ac444ff0a40c2e8b93b7e5c505eebf6d3753a341b05503a8 +R cc8e50e04b84aeefee1ded906a1ade6f U drh -Z c83be37898e2cd5899ddcac01ce6852d +Z d1f8c00b81ee1b1195ac54f2ade425f3 diff --git a/manifest.uuid b/manifest.uuid index aa609bb64a..ee3d45a0b3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -86b5e5a20e967af7ac444ff0a40c2e8b93b7e5c505eebf6d3753a341b05503a8 \ No newline at end of file +1bc783da63d58b05c690468b569cb2787846357b63c1100d11777666c5787bf4 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 8df63dfffe..723ca9cb11 100644 --- a/src/select.c +++ b/src/select.c @@ -4233,7 +4233,7 @@ static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){ int i; WhereConst *pConst; if( pExpr->op!=TK_COLUMN ) return WRC_Continue; - if( ExprHasProperty(pExpr, EP_FixedCol) ) return WRC_Continue; + if( ExprHasProperty(pExpr, EP_FixedCol|EP_FromJoin) ) return WRC_Continue; pConst = pWalker->u.pConst; for(i=0; inConst; i++){ Expr *pColumn = pConst->apExpr[i*2]; From 1d7d8c8f74b44fb54fb15539a4191ea68110f471 Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 16 Jan 2020 16:32:57 +0000 Subject: [PATCH 05/30] Add the SQLITE_FCNTL_CKPT_DONE file-control for the use of custom VFSs. FossilOrigin-Name: 3cc39e5069c8a6a32ecc49c571593615c0f347cadcd3e0325b7f9a11ddc1f546 --- manifest | 17 +++++++++-------- manifest.uuid | 2 +- src/sqlite.h.in | 7 +++++++ src/wal.c | 4 ++++ 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 589036cf37..17f6b9628b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sallow\sthe\sconstant-propagation\soptimization\sto\sapple\sto\sON/USING\sclause\nterms\sas\sit\sdoes\snot\shelp\sand\sit\smight\scause\sdownstream\sproblems. -D 2020-01-16T16:12:07.234 +C Add\sthe\sSQLITE_FCNTL_CKPT_DONE\sfile-control\sfor\sthe\suse\sof\scustom\sVFSs. +D 2020-01-16T16:32:57.014 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -533,7 +533,7 @@ F src/resolve.c 1139e3157c710c6e6f04fe726f4e0d8bdb1ae89a276d3b0ca4975af163141c9c F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 3e3a7ba46c65db13cb44780cd56d359d5b61b2032fdd8ca5c74ce5be24efd86f F src/shell.c.in 1b2a636ba5b676f844a2af2a5f719b5c4ace7c6825d56270e2ae912b2a5fc840 -F src/sqlite.h.in cedb3737511a45ae35fba6e4d6c250ae36f6b82da0de38113efa1a3bc83ee105 +F src/sqlite.h.in 8ec22eb7e2a3d391be7d13024755bfd65a5ef6a752c0469b0f652162270d38b6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h b0f776a0d042b23b6bcbb6b0943e8a3768c7f0b438a275e7168f0204e223a4db F src/sqliteInt.h 7a29ba700a51eeb925731749a570cf3859f6a58ed94797ecf47508875b0ba279 @@ -614,7 +614,7 @@ F src/vdbesort.c a3be032cc3fee0e3af31773af4a7a6f931b7230a34f53282ccf1d9a2a72343b F src/vdbetrace.c fa3bf238002f0bbbdfb66cc8afb0cea284ff9f148d6439bc1f6f2b4c3b7143f0 F src/vtab.c 7b704a90515a239c6cdba6a66b1bb3a385e62326cceb5ecb05ec7a091d6b8515 F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 -F src/wal.c 15a2845769f51ba132f9cf0b2c7a6887a91fc8437892dbcce9fcdc68b66d60a1 +F src/wal.c dbc77159e6734c2d64343cb8624ad245d89dd79a5010750fce8118b3fa7be2e8 F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d F src/where.c 2005d0511e05e5f7b6fb3be514b44f264f23d45f3b0cc5e150c63e3006a003e5 @@ -1857,7 +1857,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 86b5e5a20e967af7ac444ff0a40c2e8b93b7e5c505eebf6d3753a341b05503a8 -R cc8e50e04b84aeefee1ded906a1ade6f -U drh -Z d1f8c00b81ee1b1195ac54f2ade425f3 +P 1bc783da63d58b05c690468b569cb2787846357b63c1100d11777666c5787bf4 +R 80504a1042b11d4fc82dfce4d645489e +T +closed 1a6f689bce2c8ffa86d86285ec20f3a9ae0e0ad342aad3c728a80353b06e6cd5 +U dan +Z a53296d214905bace013996b2ef38802 diff --git a/manifest.uuid b/manifest.uuid index ee3d45a0b3..6a1e8181ea 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1bc783da63d58b05c690468b569cb2787846357b63c1100d11777666c5787bf4 \ No newline at end of file +3cc39e5069c8a6a32ecc49c571593615c0f347cadcd3e0325b7f9a11ddc1f546 \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index c61c0e8b31..a9f56aabed 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -1111,6 +1111,12 @@ struct sqlite3_io_methods { ** called. This file control is the only mechanism to detect changes that ** happen either internally or externally and that are associated with ** a particular attached database. +** +**
  • [[SQLITE_FCNTL_CKPT_DONE]] +** The [SQLITE_FCNTL_CKPT_DONE] opcode is invoked from within a checkpoint +** in wal mode after the client has finished copying pages from the wal +** file to the database file, but before the *-shm file is updated to +** record the fact that the pages have been checkpointed. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -1148,6 +1154,7 @@ struct sqlite3_io_methods { #define SQLITE_FCNTL_LOCK_TIMEOUT 34 #define SQLITE_FCNTL_DATA_VERSION 35 #define SQLITE_FCNTL_SIZE_LIMIT 36 +#define SQLITE_FCNTL_CKPT_DONE 37 /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE diff --git a/src/wal.c b/src/wal.c index 3d4a541d5e..9873f8bf0a 100644 --- a/src/wal.c +++ b/src/wal.c @@ -1913,6 +1913,10 @@ static int walCheckpoint( rc = sqlite3OsSync(pWal->pDbFd, CKPT_SYNC_FLAGS(sync_flags)); } } + if( rc==SQLITE_OK ){ + rc = sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_CKPT_DONE, 0); + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; + } if( rc==SQLITE_OK ){ pInfo->nBackfill = mxSafeFrame; } From be0330e8537db0907df048fb21360cfd7db5e381 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 16 Jan 2020 17:53:24 +0000 Subject: [PATCH 06/30] New testcase() macros in select.c, for coverage of the change from two check-ins ago. FossilOrigin-Name: 52206488f315803df73f964774270ef4783923407a2567936f56b0a1a88b4400 --- manifest | 15 +++++++-------- manifest.uuid | 2 +- src/select.c | 6 +++++- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 17f6b9628b..9b8be33ef3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\sSQLITE_FCNTL_CKPT_DONE\sfile-control\sfor\sthe\suse\sof\scustom\sVFSs. -D 2020-01-16T16:32:57.014 +C New\stestcase()\smacros\sin\sselect.c,\sfor\scoverage\sof\sthe\schange\sfrom\stwo\ncheck-ins\sago. +D 2020-01-16T17:53:24.598 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -531,7 +531,7 @@ F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 1139e3157c710c6e6f04fe726f4e0d8bdb1ae89a276d3b0ca4975af163141c9c F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 -F src/select.c 3e3a7ba46c65db13cb44780cd56d359d5b61b2032fdd8ca5c74ce5be24efd86f +F src/select.c 28211b0eeeaf572624fa443515c90bca5c4f46bd1f01c3f688d1b85c308d3224 F src/shell.c.in 1b2a636ba5b676f844a2af2a5f719b5c4ace7c6825d56270e2ae912b2a5fc840 F src/sqlite.h.in 8ec22eb7e2a3d391be7d13024755bfd65a5ef6a752c0469b0f652162270d38b6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1857,8 +1857,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 1bc783da63d58b05c690468b569cb2787846357b63c1100d11777666c5787bf4 -R 80504a1042b11d4fc82dfce4d645489e -T +closed 1a6f689bce2c8ffa86d86285ec20f3a9ae0e0ad342aad3c728a80353b06e6cd5 -U dan -Z a53296d214905bace013996b2ef38802 +P 3cc39e5069c8a6a32ecc49c571593615c0f347cadcd3e0325b7f9a11ddc1f546 +R d5c03b214a6317967c8cdbf225c787f4 +U drh +Z e9b86b3d2b67c195211aeb33d5c3a16a diff --git a/manifest.uuid b/manifest.uuid index 6a1e8181ea..2bcf568be1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3cc39e5069c8a6a32ecc49c571593615c0f347cadcd3e0325b7f9a11ddc1f546 \ No newline at end of file +52206488f315803df73f964774270ef4783923407a2567936f56b0a1a88b4400 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 723ca9cb11..d15be56c27 100644 --- a/src/select.c +++ b/src/select.c @@ -4233,7 +4233,11 @@ static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){ int i; WhereConst *pConst; if( pExpr->op!=TK_COLUMN ) return WRC_Continue; - if( ExprHasProperty(pExpr, EP_FixedCol|EP_FromJoin) ) return WRC_Continue; + if( ExprHasProperty(pExpr, EP_FixedCol|EP_FromJoin) ){ + testcase( ExprHasProperty(pExpr, EP_FixedCol) ); + testcase( ExprHasProperty(pExpr, EP_FromJoin) ); + return WRC_Continue; + } pConst = pWalker->u.pConst; for(i=0; inConst; i++){ Expr *pColumn = pConst->apExpr[i*2]; From d1eb23cd26f755acd002b7e334feaebe22232d06 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 17 Jan 2020 11:18:54 +0000 Subject: [PATCH 07/30] Fix a case in "fuzz.test" that could fail, as non-deterministic functions may no longer appear in CHECK constraints. FossilOrigin-Name: a370871e21bd1028ac968ca4f48e6b5f75e647ac40d4342aeb0504a848452908 --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/fuzz_common.tcl | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 9b8be33ef3..9ce9390326 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C New\stestcase()\smacros\sin\sselect.c,\sfor\scoverage\sof\sthe\schange\sfrom\stwo\ncheck-ins\sago. -D 2020-01-16T17:53:24.598 +C Fix\sa\scase\sin\s"fuzz.test"\sthat\scould\sfail,\sas\snon-deterministic\sfunctions\smay\sno\slonger\sappear\sin\sCHECK\sconstraints. +D 2020-01-17T11:18:54.424 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1011,7 +1011,7 @@ F test/fuzz.test 96083052bf5765e4518c1ba686ce2bab785670d1 F test/fuzz2.test 76dc35b32b6d6f965259508508abce75a6c4d7e1 F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c31 F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 -F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b +F test/fuzz_common.tcl b7197de6ed1ee8250a4f82d67876f4561b42ee8cbbfc6160dcb66331bad3f830 F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 F test/fuzzcheck.c 0df68e0df3b93a8c8fc24c9873127c7d78024b51444193545f985dbc90ac024e F test/fuzzdata1.db d36e88741b4f23bcbaaf55b006290669d03c6c891cf13c7b3a53bc1b097b693f @@ -1857,7 +1857,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 3cc39e5069c8a6a32ecc49c571593615c0f347cadcd3e0325b7f9a11ddc1f546 -R d5c03b214a6317967c8cdbf225c787f4 -U drh -Z e9b86b3d2b67c195211aeb33d5c3a16a +P 52206488f315803df73f964774270ef4783923407a2567936f56b0a1a88b4400 +R 6a20818abd6126a5dc5d8ddd16c1fa8b +U dan +Z 1e3c42c09e904809a1f34fee172e0379 diff --git a/manifest.uuid b/manifest.uuid index 2bcf568be1..e91b9a8277 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -52206488f315803df73f964774270ef4783923407a2567936f56b0a1a88b4400 \ No newline at end of file +a370871e21bd1028ac968ca4f48e6b5f75e647ac40d4342aeb0504a848452908 \ No newline at end of file diff --git a/test/fuzz_common.tcl b/test/fuzz_common.tcl index 4ab7dff5c9..520555bd29 100644 --- a/test/fuzz_common.tcl +++ b/test/fuzz_common.tcl @@ -363,6 +363,7 @@ proc do_fuzzy_test {testname args} { lappend ::fuzzyopts(-errorlist) {ORDER BY} lappend ::fuzzyopts(-errorlist) {GROUP BY} lappend ::fuzzyopts(-errorlist) {datatype mismatch} + lappend ::fuzzyopts(-errorlist) {non-deterministic functions prohibited} for {set ii 0} {$ii < $::fuzzyopts(-repeats)} {incr ii} { do_test ${testname}.$ii { From a369d98b9ac002b05c8e20d4a6e8c33ed7c6a2b7 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 17 Jan 2020 15:45:59 +0000 Subject: [PATCH 08/30] Update test script instrfault.test to account for the fact that bound blob values cast to text values are now intepreted using the text encoding of the database, instead of always as utf-8. FossilOrigin-Name: 4d6cb28811c01599e34c0394fe5ed17d47f14893c860590c9b4660bef68eb294 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/instrfault.test | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 9ce9390326..30c1e43541 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scase\sin\s"fuzz.test"\sthat\scould\sfail,\sas\snon-deterministic\sfunctions\smay\sno\slonger\sappear\sin\sCHECK\sconstraints. -D 2020-01-17T11:18:54.424 +C Update\stest\sscript\sinstrfault.test\sto\saccount\sfor\sthe\sfact\sthat\sbound\sblob\svalues\scast\sto\stext\svalues\sare\snow\sintepreted\susing\sthe\stext\sencoding\sof\sthe\sdatabase,\sinstead\sof\salways\sas\sutf-8. +D 2020-01-17T15:45:59.670 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1074,7 +1074,7 @@ F test/insert4.test fb9e0f752c75f453555990250b449f6d123ae6a3ebf054d14e4470de4498 F test/insert5.test 394f96728d1258f406fe5f5aeb0aaf29487c39a6 F test/insertfault.test ac63d14ea3b49c573673a572f4014b9117383a03e497c58f308b5c776e4a7f74 F test/instr.test 107df2b9b74a4b59315916b575590a08f2a714de0754abe541f10a0971d0a2a4 -F test/instrfault.test 0f870b218ea17cd477bb19ed330eecdb460dd53a +F test/instrfault.test 95e28efade652e6d51ae11b377088fe523a581a07ec428009e152a4dd0e0f44c F test/intarray.test bb976b0b3df0ebb6a2eddfb61768280440e672beba5460ed49679ea984ccf440 F test/interrupt.test 16ea879ec728cb76414c148c5f24afd5d1f91054 F test/interrupt2.test e4408ca770a6feafbadb0801e54a0dcd1a8d108d @@ -1857,7 +1857,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 52206488f315803df73f964774270ef4783923407a2567936f56b0a1a88b4400 -R 6a20818abd6126a5dc5d8ddd16c1fa8b +P a370871e21bd1028ac968ca4f48e6b5f75e647ac40d4342aeb0504a848452908 +R 8a3578c77eeaaedd9218cc9c477d2616 U dan -Z 1e3c42c09e904809a1f34fee172e0379 +Z 3da4f38707b9e39ca3e9c04ff2b9d096 diff --git a/manifest.uuid b/manifest.uuid index e91b9a8277..09dba437cf 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a370871e21bd1028ac968ca4f48e6b5f75e647ac40d4342aeb0504a848452908 \ No newline at end of file +4d6cb28811c01599e34c0394fe5ed17d47f14893c860590c9b4660bef68eb294 \ No newline at end of file diff --git a/test/instrfault.test b/test/instrfault.test index 0ddb12c84b..848e46e4c2 100644 --- a/test/instrfault.test +++ b/test/instrfault.test @@ -69,7 +69,7 @@ foreach {enc} { do_faultsim_test 1.$enc.4 -faults oom-t* -prep { set ::stmt [sqlite3_prepare_v2 db "SELECT instr(?, ?)" -1 dummy] sqlite3_bind_blob $::stmt 1 $::HAYSTACK [string length $::HAYSTACK] - sqlite3_bind_text $::stmt 2 $::NEEDLE [string length $::NEEDLE] + sqlite3_bind_blob $::stmt 2 $::NEEDLE [string length $::NEEDLE] } -body { set rc [sqlite3_step $::stmt] if {$rc=="SQLITE_NOMEM"} { error "out of memory" } From 915530dcc800919a197d5e3c3e9ae8cc14851d5e Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 17 Jan 2020 16:47:07 +0000 Subject: [PATCH 09/30] Improved rounding in the 'unixepoch' feature of the date and time functions. FossilOrigin-Name: c9abf1bd2d2496ced9ef4619cd997933cd58452e6ab527ba70746c9975104b6a --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/date.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 30c1e43541..e4296d5c2e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\stest\sscript\sinstrfault.test\sto\saccount\sfor\sthe\sfact\sthat\sbound\sblob\svalues\scast\sto\stext\svalues\sare\snow\sintepreted\susing\sthe\stext\sencoding\sof\sthe\sdatabase,\sinstead\sof\salways\sas\sutf-8. -D 2020-01-17T15:45:59.670 +C Improved\srounding\sin\sthe\s'unixepoch'\sfeature\sof\sthe\sdate\sand\stime\sfunctions. +D 2020-01-17T16:47:07.892 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -479,7 +479,7 @@ F src/build.c bd2f382562b08f14748d54402220be1082c2f8ff8973fad47e45a381c438f9bf F src/callback.c c547d00963ae28100117b4fb1f0f32242109b5804374ee3bfe01138a54da7f76 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251 -F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041 +F src/date.c 6c408fdd2e9ddf6e8431aba76315a2d061bea2cec8fbb75e25d7c1ba08274712 F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 0f55297469d4244ab7df395849e1af98eb5e95816af7c661e7d2d8402dea23da F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4 @@ -1857,7 +1857,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 a370871e21bd1028ac968ca4f48e6b5f75e647ac40d4342aeb0504a848452908 -R 8a3578c77eeaaedd9218cc9c477d2616 -U dan -Z 3da4f38707b9e39ca3e9c04ff2b9d096 +P 4d6cb28811c01599e34c0394fe5ed17d47f14893c860590c9b4660bef68eb294 +R 8a133b71d0beb94bc5fe229d4942915c +U drh +Z 1fba68fad8f22ba34b83ab745c2e9833 diff --git a/manifest.uuid b/manifest.uuid index 09dba437cf..7bf77c4d58 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4d6cb28811c01599e34c0394fe5ed17d47f14893c860590c9b4660bef68eb294 \ No newline at end of file +c9abf1bd2d2496ced9ef4619cd997933cd58452e6ab527ba70746c9975104b6a \ No newline at end of file diff --git a/src/date.c b/src/date.c index e271210679..6a8defc668 100644 --- a/src/date.c +++ b/src/date.c @@ -688,7 +688,7 @@ static int parseModifier( r = p->s*1000.0 + 210866760000000.0; if( r>=0.0 && r<464269060800000.0 ){ clearYMD_HMS_TZ(p); - p->iJD = (sqlite3_int64)r; + p->iJD = (sqlite3_int64)(r + 0.5); p->validJD = 1; p->rawS = 0; rc = 0; From ef9f719d0b2dfe76284be2a87e54b2ada07e3f0a Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 17 Jan 2020 19:14:08 +0000 Subject: [PATCH 10/30] Fix #ifdefs so it compiles cleanly with all SQLITE_OMIT compile-time options. Update compile-time option testing. FossilOrigin-Name: 7584e4b649d57767aac3906da6b06549d5b772aaa69f469c623ae5da834d54d5 --- manifest | 24 ++++++++++++------------ manifest.uuid | 2 +- src/func.c | 2 ++ src/insert.c | 2 ++ src/main.c | 2 ++ src/select.c | 8 +++++++- src/util.c | 2 ++ src/vdbemem.c | 4 ++++ tool/omittest.tcl | 11 ++++++++--- 9 files changed, 40 insertions(+), 17 deletions(-) diff --git a/manifest b/manifest index e4296d5c2e..535246c54b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improved\srounding\sin\sthe\s'unixepoch'\sfeature\sof\sthe\sdate\sand\stime\sfunctions. -D 2020-01-17T16:47:07.892 +C Fix\s#ifdefs\sso\sit\scompiles\scleanly\swith\sall\sSQLITE_OMIT\scompile-time\soptions.\nUpdate\scompile-time\soption\stesting. +D 2020-01-17T19:14:08.891 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -486,16 +486,16 @@ F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4 F src/expr.c 003c59158b33d7f3b198122cb0d1e13c06517cc3932e56b42283eb0e96696d66 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 92a248ec0fa4ed8ab60c98d9b188ce173aaf218f32e7737ba77deb2a684f9847 -F src/func.c 259496e4856bd0a3215d16804992f3339f3e8db29f129a5a7285c341488bbe9c +F src/func.c 92249abc3fd7e52b249ca8eb2d15a617f70819d2fa4c777a4a33552b89bfb322 F src/global.c 59601d885a0dbbfbd22ed2d030424a5e7f1b9809a17ca46686058bbc4a55e980 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38 F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 -F src/insert.c 5ba8fd376f539240939ae76b5bc9fa7ad9a0d86e9914ecd11eb7002204138c11 +F src/insert.c 2fe4d7f67078a68650f16e4efe73207899e21702e6b9d2e8ad1894c76dcad352 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 8cd803f1747c03a50b32fe87ebfb5851998d0cdafefe02737daa95e0616b42bb -F src/main.c da8b42cee9b83cc923bf23d1945c9fb48cf57cb0422d5fe43a1ff88dc453b97b +F src/main.c 430db07f140a2455784b504af1a56fe49134a79dd479a203370490031708d48f F src/malloc.c eaa4dc9602ce28b077f7de2eb275db2be270c5cc56d7fec5466301bd9b80e2f5 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -531,7 +531,7 @@ F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 1139e3157c710c6e6f04fe726f4e0d8bdb1ae89a276d3b0ca4975af163141c9c F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 -F src/select.c 28211b0eeeaf572624fa443515c90bca5c4f46bd1f01c3f688d1b85c308d3224 +F src/select.c 1b787876c0f3052ccd27490a350ab181281e9833f455ee273bee0a0c8a94765d F src/shell.c.in 1b2a636ba5b676f844a2af2a5f719b5c4ace7c6825d56270e2ae912b2a5fc840 F src/sqlite.h.in 8ec22eb7e2a3d391be7d13024755bfd65a5ef6a752c0469b0f652162270d38b6 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -601,7 +601,7 @@ F src/trigger.c a40d50e88bd3355f1d2a73f0a3b2d6b42eae26ca4219001b82ef0d064439badc F src/update.c 9ad19af96aff95dc02a923a99f97c1bc0b909009a29a2914b796f786b9ac0c60 F src/upsert.c 2920de71b20f04fe25eb00b655d086f0ba60ea133c59d7fa3325c49838818e78 F src/utf.c 736ff76753236ffbc8b5b939f5e0607f28aeaa7c780b3a56b419228f0a81c87b -F src/util.c e5f3971160154e5c9b660fd119b02ec4890e87cd18a5bc4d45ee60cddbb9e6a2 +F src/util.c d035b09df9cecbc0e8f07c34b815acbf0d43c8adc8d2c540e3dc92eecb27855a F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf F src/vdbe.c 35dcc7d43c2635853773d994b052061283a4e5b0e60e799cef83e410d90f3145 F src/vdbe.h defd693289c7bb8d325f109be9490c77138061211a116827da7244b6015a4934 @@ -609,7 +609,7 @@ F src/vdbeInt.h 30d3e8b991547cdf39025e416a0a737b0416d46747af70ae058f60e2e0466fe7 F src/vdbeapi.c 1252d80c548711e47a6d84dae88ed4e95d3fbb4e7bd0eaa1347299af7efddf02 F src/vdbeaux.c ff690e6c9314ef281de7c06f8c8c33393f0afca80aabb1fe69836dcf2d60b0bf F src/vdbeblob.c 253ed82894924c362a7fa3079551d3554cd1cdace39aa833da77d3bc67e7c1b1 -F src/vdbemem.c ad9e6217635f2b04df98bc57b12c98cefc9c0a1745cca47f4e8109119213253d +F src/vdbemem.c 6200af702c87105d5b00d8ac5f5fa2c6d8f796aa974dbe2d15dcd95379ba1fa7 F src/vdbesort.c a3be032cc3fee0e3af31773af4a7a6f931b7230a34f53282ccf1d9a2a72343be F src/vdbetrace.c fa3bf238002f0bbbdfb66cc8afb0cea284ff9f148d6439bc1f6f2b4c3b7143f0 F src/vtab.c 7b704a90515a239c6cdba6a66b1bb3a385e62326cceb5ecb05ec7a091d6b8515 @@ -1800,7 +1800,7 @@ F tool/mksqlite3h.tcl 080873e3856eceb9d289a08a00c4b30f875ea3feadcbece796bd509b15 F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b F tool/mkvsix.tcl b9e0777a213c23156b6542842c238479e496ebf5 F tool/offsets.c fe4262fdfa378e8f5499a42136d17bf3b98f6091 -F tool/omittest.tcl 27f9413c3343bac200a28d81e8234adb0f5e141c4771893cb19b40235a91f1e0 +F tool/omittest.tcl 6616fbf384f0f630113eab27d41d4530435dd94e2883307759988b45f0604a3b F tool/opcodesum.tcl 740ed206ba8c5040018988129abbf3089a0ccf4a F tool/pagesig.c ff0ca355fd3c2398e933da5e22439bbff89b803b F tool/replace.tcl 60f91e8dd06ab81f74d213ecbd9c9945f32ac048 @@ -1857,7 +1857,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 4d6cb28811c01599e34c0394fe5ed17d47f14893c860590c9b4660bef68eb294 -R 8a133b71d0beb94bc5fe229d4942915c +P c9abf1bd2d2496ced9ef4619cd997933cd58452e6ab527ba70746c9975104b6a +R 78ab34995171428871c77c466fa8b08a U drh -Z 1fba68fad8f22ba34b83ab745c2e9833 +Z 326389f638ab9279b86bd4c2cd08b041 diff --git a/manifest.uuid b/manifest.uuid index 7bf77c4d58..c0ef800e4b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c9abf1bd2d2496ced9ef4619cd997933cd58452e6ab527ba70746c9975104b6a \ No newline at end of file +7584e4b649d57767aac3906da6b06549d5b772aaa69f469c623ae5da834d54d5 \ No newline at end of file diff --git a/src/func.c b/src/func.c index be4975afcc..36ab571760 100644 --- a/src/func.c +++ b/src/func.c @@ -16,7 +16,9 @@ #include "sqliteInt.h" #include #include +#ifndef SQLITE_OMIT_FLOATING_POINT #include +#endif #include "vdbeInt.h" /* diff --git a/src/insert.c b/src/insert.c index e3035c8d0a..93f22a8cbf 100644 --- a/src/insert.c +++ b/src/insert.c @@ -1640,6 +1640,7 @@ void sqlite3GenerateConstraintChecks( } if( b2ndPass ) break; /* Never need more than 2 passes */ b2ndPass = 1; +#ifndef SQLITE_OMIT_GENERATED_COLUMNS if( nSeenReplace>0 && (pTab->tabFlags & TF_HasGenerated)!=0 ){ /* If any NOT NULL ON CONFLICT REPLACE constraints fired on the ** first pass, recomputed values for all generated columns, as @@ -1647,6 +1648,7 @@ void sqlite3GenerateConstraintChecks( */ sqlite3ComputeGeneratedColumns(pParse, regNewData+1, pTab); } +#endif } /* end of 2-pass loop */ } /* end if( has-not-null-constraints ) */ diff --git a/src/main.c b/src/main.c index 995061fec7..903f187a9f 100644 --- a/src/main.c +++ b/src/main.c @@ -3904,6 +3904,7 @@ int sqlite3_test_control(int op, ...){ ** This test-control also resets the PRNG so that the new seed will ** be used for the next call to sqlite3_randomness(). */ +#ifndef SQLITE_OMIT_WSD case SQLITE_TESTCTRL_PRNG_SEED: { int x = va_arg(ap, int); int y; @@ -3914,6 +3915,7 @@ int sqlite3_test_control(int op, ...){ sqlite3_randomness(0,0); break; } +#endif /* ** sqlite3_test_control(BITVEC_TEST, size, program) diff --git a/src/select.c b/src/select.c index d15be56c27..971f7375a3 100644 --- a/src/select.c +++ b/src/select.c @@ -2496,7 +2496,9 @@ static int multiSelectValues( assert( p->selFlags & SF_Values ); assert( p->op==TK_ALL || (p->op==TK_SELECT && p->pPrior==0) ); assert( p->pNext==0 || p->pEList->nExpr==p->pNext->pEList->nExpr ); +#ifndef SQLITE_OMIT_WINDOWFUNC if( p->pWin ) return -1; +#endif if( p->pPrior==0 ) break; assert( p->pPrior->pNext==p ); p = p->pPrior; @@ -3859,7 +3861,9 @@ static int flattenSubquery( if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0 /* (17b) */ || (pSub1->pPrior && pSub1->op!=TK_ALL) /* (17a) */ || pSub1->pSrc->nSrc<1 /* (17c) */ +#ifndef SQLITE_OMIT_WINDOWFUNC || pSub1->pWin /* (17e) */ +#endif ){ return 0; } @@ -4966,7 +4970,7 @@ static int selectExpander(Walker *pWalker, Select *p){ if( !IsVirtual(pTab) && cannotBeFunction(pParse, pFrom) ){ return WRC_Abort; } -#if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE) +#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_VIRTUALTABLE) if( IsVirtual(pTab) || pTab->pSelect ){ i16 nCol; u8 eCodeOrig = pWalker->eCode; @@ -6118,7 +6122,9 @@ int sqlite3Select( */ if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct && sqlite3ExprListCompare(sSort.pOrderBy, pEList, -1)==0 +#ifndef SQLITE_OMIT_WINDOWFUNC && p->pWin==0 +#endif ){ p->selFlags &= ~SF_Distinct; pGroupBy = p->pGroupBy = sqlite3ExprListDup(db, pEList, 0); diff --git a/src/util.c b/src/util.c index 88ac6d39f8..3e3a9244ac 100644 --- a/src/util.c +++ b/src/util.c @@ -17,7 +17,9 @@ */ #include "sqliteInt.h" #include +#ifndef SQLITE_OMIT_FLOATING_POINT #include +#endif /* ** Routine needed to support the testcase() macro. diff --git a/src/vdbemem.c b/src/vdbemem.c index 464e8ffdc5..ddb6b2c113 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -1559,7 +1559,11 @@ static int valueFromExpr( if( pVal->flags & MEM_Real ){ pVal->u.r = -pVal->u.r; }else if( pVal->u.i==SMALLEST_INT64 ){ +#ifndef SQLITE_OMIT_FLOATING_POINT pVal->u.r = -(double)SMALLEST_INT64; +#else + pVal->u.r = LARGEST_INT64; +#endif MemSetTypeFlag(pVal, MEM_Real); }else{ pVal->u.i = -pVal->u.i; diff --git a/tool/omittest.tcl b/tool/omittest.tcl index fc51127a6c..120fc2afdd 100644 --- a/tool/omittest.tcl +++ b/tool/omittest.tcl @@ -98,7 +98,7 @@ proc run_quick_test {dir omit_symbol_list} { } if {$::SKIP_RUN} { - puts "Skip testing $dir." + # puts "Skip testing $dir." } else { # Run the test suite. puts -nonewline "Testing $dir..." @@ -127,7 +127,7 @@ proc process_options {argv} { } else { set ::MAKEFILE ./Makefile.linux-gcc ;# Default value } - set ::SKIP_RUN 0 ;# Default to attempt test + set ::SKIP_RUN 1 ;# Default to attempt test set ::TARGET testfixture ;# Default thing to build for {set i 0} {$i < [llength $argv]} {incr i} { @@ -150,6 +150,9 @@ proc process_options {argv} { -{1,2}skip_run { set ::SKIP_RUN 1 } + -{1,2}run { + set ::SKIP_RUN 0 + } -{1,2}help { puts $::USAGE_MESSAGE @@ -192,6 +195,7 @@ proc main {argv} { SQLITE_OMIT_BETWEEN_OPTIMIZATION \ SQLITE_OMIT_BLOB_LITERAL \ SQLITE_OMIT_BTREECOUNT \ + SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA \ SQLITE_OMIT_CAST \ SQLITE_OMIT_CHECK \ SQLITE_OMIT_COMPILEOPTION_DIAGS \ @@ -207,16 +211,17 @@ proc main {argv} { SQLITE_OMIT_FLAG_PRAGMAS \ SQLITE_OMIT_FLOATING_POINT \ SQLITE_OMIT_FOREIGN_KEY \ + SQLITE_OMIT_GENERATED_COLUMNS \ SQLITE_OMIT_GET_TABLE \ SQLITE_OMIT_HEX_INTEGER \ SQLITE_OMIT_INCRBLOB \ SQLITE_OMIT_INTEGRITY_CHECK \ + SQLITE_OMIT_INTROSPECTION_PRAGMAS \ SQLITE_OMIT_LIKE_OPTIMIZATION \ SQLITE_OMIT_LOAD_EXTENSION \ SQLITE_OMIT_LOCALTIME \ SQLITE_OMIT_LOOKASIDE \ SQLITE_OMIT_MEMORYDB \ - SQLITE_OMIT_MEMORY_ALLOCATION \ SQLITE_OMIT_OR_OPTIMIZATION \ SQLITE_OMIT_PAGER_PRAGMAS \ SQLITE_OMIT_PARSER_TRACE \ From 929a9406785cc0a5cdea6a4943e89bd84474efa1 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 17 Jan 2020 21:12:22 +0000 Subject: [PATCH 11/30] The compress() function should not be deterministic since the same input can have multiple possible compressed outputs. The uncompress() function, on the other hand, is deterministic. FossilOrigin-Name: 84f314902c48336849081c7e9fe2a52caf171b8215a1c6e80cded0700c447eb1 --- ext/misc/compress.c | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/misc/compress.c b/ext/misc/compress.c index ab9f5de69c..2e7a31636d 100644 --- a/ext/misc/compress.c +++ b/ext/misc/compress.c @@ -120,7 +120,7 @@ int sqlite3_compress_init( SQLITE_EXTENSION_INIT2(pApi); (void)pzErrMsg; /* Unused parameter */ rc = sqlite3_create_function(db, "compress", 1, - SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC, + SQLITE_UTF8 | SQLITE_INNOCUOUS, 0, compressFunc, 0, 0); if( rc==SQLITE_OK ){ rc = sqlite3_create_function(db, "uncompress", 1, diff --git a/manifest b/manifest index 535246c54b..1c8ed3f2c8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\s#ifdefs\sso\sit\scompiles\scleanly\swith\sall\sSQLITE_OMIT\scompile-time\soptions.\nUpdate\scompile-time\soption\stesting. -D 2020-01-17T19:14:08.891 +C The\scompress()\sfunction\sshould\snot\sbe\sdeterministic\ssince\sthe\ssame\sinput\scan\nhave\smultiple\spossible\scompressed\soutputs.\s\sThe\suncompress()\sfunction,\son\sthe\nother\shand,\sis\sdeterministic. +D 2020-01-17T21:12:22.060 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -287,7 +287,7 @@ F ext/misc/btreeinfo.c 4f0ebf278f46e68e6306c667917766cebc5550fd35d5de17847988e22 F ext/misc/carray.c 91e9a7f512fda934894bed30464552fffa7d3073b5be04189ae0bd0c59f26bfd F ext/misc/closure.c dbfd8543b2a017ae6b1a5843986b22ddf99ff126ec9634a2f4047cd14c85c243 F ext/misc/completion.c a0efe03edfdc4f717c61e6c9b0bfe2708ff7878010dae3174980a68fdf76aabc -F ext/misc/compress.c 3ed77691a3ce9e50921ae2b133dc176bb4d5587fdb57bde5872c4e5c348ce0bc +F ext/misc/compress.c 3354c77a7c8e86e07d849916000cdac451ed96500bfb5bd83b20eb61eee012c9 F ext/misc/csv.c 3ed979c1eb35e35a98b30ef545a2facf62994594217681d9138b4b75faf6b0d7 F ext/misc/dbdata.c e316fba936571584e55abd5b974a32a191727a6b746053a0c9d439bd2cf93940 F ext/misc/dbdump.c baf6e37447c9d6968417b1cd34cbedb0b0ab3f91b5329501d8a8d5be3287c336 @@ -1857,7 +1857,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 c9abf1bd2d2496ced9ef4619cd997933cd58452e6ab527ba70746c9975104b6a -R 78ab34995171428871c77c466fa8b08a +P 7584e4b649d57767aac3906da6b06549d5b772aaa69f469c623ae5da834d54d5 +R 156cc8b54e50887352c1a93801b4222b U drh -Z 326389f638ab9279b86bd4c2cd08b041 +Z b5ea892b96b0c5b7230c6293f4f7e928 diff --git a/manifest.uuid b/manifest.uuid index c0ef800e4b..e493c0d3f0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7584e4b649d57767aac3906da6b06549d5b772aaa69f469c623ae5da834d54d5 \ No newline at end of file +84f314902c48336849081c7e9fe2a52caf171b8215a1c6e80cded0700c447eb1 \ No newline at end of file From 2d58b7f40f38519b9fdff0f604d19c4b39ae0008 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 17 Jan 2020 23:27:41 +0000 Subject: [PATCH 12/30] Fix a typo in a comment. No code changes. FossilOrigin-Name: 4363f69c3ad5a9859471547cab713f1acabd5fce13872cc1ddaa972d6c1dfb35 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/build.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 1c8ed3f2c8..e46d27773d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\scompress()\sfunction\sshould\snot\sbe\sdeterministic\ssince\sthe\ssame\sinput\scan\nhave\smultiple\spossible\scompressed\soutputs.\s\sThe\suncompress()\sfunction,\son\sthe\nother\shand,\sis\sdeterministic. -D 2020-01-17T21:12:22.060 +C Fix\sa\stypo\sin\sa\scomment.\s\sNo\scode\schanges. +D 2020-01-17T23:27:41.622 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -475,7 +475,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 7af5ff0f88ba856c2681f6eeb457590b24f787e994f18cbdb44c2de2d33f757e F src/btree.h 6111552f19ed7a40f029cf4b33badc6fef9880314fffd80a945f0b7f43ab7471 F src/btreeInt.h 6794084fad08c9750b45145743c0e3e5c27c94dee89f26dd8df7073314934fd2 -F src/build.c bd2f382562b08f14748d54402220be1082c2f8ff8973fad47e45a381c438f9bf +F src/build.c 2394d2c853088106dfc1cf485d609f20e6421d7c84892b795824e454f78e50ad F src/callback.c c547d00963ae28100117b4fb1f0f32242109b5804374ee3bfe01138a54da7f76 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251 @@ -1857,7 +1857,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 7584e4b649d57767aac3906da6b06549d5b772aaa69f469c623ae5da834d54d5 -R 156cc8b54e50887352c1a93801b4222b +P 84f314902c48336849081c7e9fe2a52caf171b8215a1c6e80cded0700c447eb1 +R 2fb32354b475f2376d5f16975a73a479 U drh -Z b5ea892b96b0c5b7230c6293f4f7e928 +Z fdbc0760a597e5c298156985f89293eb diff --git a/manifest.uuid b/manifest.uuid index e493c0d3f0..aeee56f7e4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -84f314902c48336849081c7e9fe2a52caf171b8215a1c6e80cded0700c447eb1 \ No newline at end of file +4363f69c3ad5a9859471547cab713f1acabd5fce13872cc1ddaa972d6c1dfb35 \ No newline at end of file diff --git a/src/build.c b/src/build.c index f0435aacec..a7dc36ff54 100644 --- a/src/build.c +++ b/src/build.c @@ -2268,8 +2268,8 @@ void sqlite3EndTable( ** expression to a NULL. This prevents code generators that operate ** on the expression from inserting extra parts into the expression ** tree that have been allocated from lookaside memory, which is - ** illegal in a schema and will lead to errors heap corruption when - ** the database connection closes. */ + ** illegal in a schema and will lead to errors or heap corruption + ** when the database connection closes. */ sqlite3ExprDelete(db, pX); p->aCol[ii].pDflt = sqlite3ExprAlloc(db, TK_NULL, 0, 0); } From 1ee02a1ce5a471966c3e5cc04af74ed16b1be6ce Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 18 Jan 2020 13:53:46 +0000 Subject: [PATCH 13/30] Fix the VDBE so that it correctly handles the sequence of operations OP_OpenEphemeral, OP_OpenDup, OP_OpenEphemeral, and OP_OpenDup in that order on the same cursor. FossilOrigin-Name: a1be6ee0188911448c064e2c25fb0ca1daad50f3d50fb49a34430bd09736b4a9 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/vdbe.c | 6 ++---- test/with3.test | 24 ++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index e46d27773d..8a051f8faa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\stypo\sin\sa\scomment.\s\sNo\scode\schanges. -D 2020-01-17T23:27:41.622 +C Fix\sthe\sVDBE\sso\sthat\sit\scorrectly\shandles\sthe\ssequence\sof\soperations\nOP_OpenEphemeral,\sOP_OpenDup,\sOP_OpenEphemeral,\sand\sOP_OpenDup\sin\sthat\norder\son\sthe\ssame\scursor. +D 2020-01-18T13:53:46.126 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -603,7 +603,7 @@ F src/upsert.c 2920de71b20f04fe25eb00b655d086f0ba60ea133c59d7fa3325c49838818e78 F src/utf.c 736ff76753236ffbc8b5b939f5e0607f28aeaa7c780b3a56b419228f0a81c87b F src/util.c d035b09df9cecbc0e8f07c34b815acbf0d43c8adc8d2c540e3dc92eecb27855a F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf -F src/vdbe.c 35dcc7d43c2635853773d994b052061283a4e5b0e60e799cef83e410d90f3145 +F src/vdbe.c 562acbbe042b8ebff4a676870c242eaa3d3c3bf1967ed76e88f56adebd88aac5 F src/vdbe.h defd693289c7bb8d325f109be9490c77138061211a116827da7244b6015a4934 F src/vdbeInt.h 30d3e8b991547cdf39025e416a0a737b0416d46747af70ae058f60e2e0466fe7 F src/vdbeapi.c 1252d80c548711e47a6d84dae88ed4e95d3fbb4e7bd0eaa1347299af7efddf02 @@ -1739,7 +1739,7 @@ F test/windowerr.test a8b752402109c15aa1c5efe1b93ccb0ce1ef84fa964ae1cd6684dd0b3c F test/windowfault.test 8e3b69abe0eea9595ba3940afd9c63644e11966ed8815734b67f1479a8e9891a F test/with1.test 386d1c1763a9d369fd08ea03145869b6313ba263e1a102df5a275007000d1b47 F test/with2.test e0030e2f0267a910d6c0e4f46f2dfe941c1cc0d4f659ba69b3597728e7e8f1ab -F test/with3.test 7de8dff2891aca0f9453463e4a2d6eb995baf137827d5596116fee53e22a4e29 +F test/with3.test 13b3336739da648a9e4dfa11bb04e73a920c97620041007c5f75d5d14084c346 F test/with4.test 257be66c0c67fee1defbbac0f685c3465e2cad037f21ce65f23f86084f198205 F test/withM.test 693b61765f2b387b5e3e24a4536e2e82de15ff64 F test/without_rowid1.test 9cfb83705c506e3849fa7efc88a3c9a15f9a50bf9b1516b41757a7cef9bba8c3 @@ -1857,7 +1857,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 84f314902c48336849081c7e9fe2a52caf171b8215a1c6e80cded0700c447eb1 -R 2fb32354b475f2376d5f16975a73a479 +P 4363f69c3ad5a9859471547cab713f1acabd5fce13872cc1ddaa972d6c1dfb35 +R d839bc11e031796b84492fdd1d8db21c U drh -Z fdbc0760a597e5c298156985f89293eb +Z 98479fb559bee0ab85da5c957cd37687 diff --git a/manifest.uuid b/manifest.uuid index aeee56f7e4..4e4a0be977 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4363f69c3ad5a9859471547cab713f1acabd5fce13872cc1ddaa972d6c1dfb35 \ No newline at end of file +a1be6ee0188911448c064e2c25fb0ca1daad50f3d50fb49a34430bd09736b4a9 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 14c83bd1f8..b885f14a5b 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -3917,15 +3917,13 @@ case OP_OpenEphemeral: { assert( pOp->p1>=0 ); assert( pOp->p2>=0 ); pCx = p->apCsr[pOp->p1]; - if( pCx ){ + if( pCx && pCx->pBtx ){ /* If the ephermeral table is already open, erase all existing content ** so that the table is empty again, rather than creating a new table. */ assert( pCx->isEphemeral ); pCx->seqCount = 0; pCx->cacheStatus = CACHE_STALE; - if( pCx->pBtx ){ - rc = sqlite3BtreeClearTable(pCx->pBtx, pCx->pgnoRoot, 0); - } + rc = sqlite3BtreeClearTable(pCx->pBtx, pCx->pgnoRoot, 0); }else{ pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, CURTYPE_BTREE); if( pCx==0 ) goto no_mem; diff --git a/test/with3.test b/test/with3.test index eebb9d6546..2a67727a38 100644 --- a/test/with3.test +++ b/test/with3.test @@ -173,5 +173,29 @@ do_execsql_test 4.1 { ); } {1} +# 2020-01-18 chrome ticket 1043236 +# Correct handling of the sequence: +# OP_OpenEphem +# OP_OpenDup +# Op_OpenEphem +# OP_OpenDup +# +do_execsql_test 4.2 { + SELECT ( + WITH t1(a) AS (VALUES(1)) + SELECT ( + WITH t2(b) AS ( + WITH t3(c) AS ( + WITH t4(d) AS (VALUES('elvis')) + SELECT t4a.d FROM t4 AS t4a JOIN t4 AS t4b LEFT JOIN t4 AS t4c + ) + SELECT c FROM t3 WHERE a = 1 + ) + SELECT t2a.b FROM t2 AS t2a JOIN t2 AS t2x + ) + FROM t1 GROUP BY 1 + ) + GROUP BY 1; +} {elvis} finish_test From cea7b5d57ed75761f276a0a400e6586eb422a4e8 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 18 Jan 2020 14:50:06 +0000 Subject: [PATCH 14/30] Add extra front margin to the fake empty filename returned by sqlite3PagerFilename() for an in-memory or TEMP database. FossilOrigin-Name: fee945671a19a93287f9bfadc346f9821fb1311c7fc75b95a6a48d1419c840e7 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/pager.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 8a051f8faa..a7b439b8bf 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sVDBE\sso\sthat\sit\scorrectly\shandles\sthe\ssequence\sof\soperations\nOP_OpenEphemeral,\sOP_OpenDup,\sOP_OpenEphemeral,\sand\sOP_OpenDup\sin\sthat\norder\son\sthe\ssame\scursor. -D 2020-01-18T13:53:46.126 +C Add\sextra\sfront\smargin\sto\sthe\sfake\sempty\sfilename\sreturned\sby\nsqlite3PagerFilename()\sfor\san\sin-memory\sor\sTEMP\sdatabase. +D 2020-01-18T14:50:06.802 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -518,7 +518,7 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_unix.c ad7640c04eed946052a3b12856362a773d0a717696707313037186df0e2b59f2 F src/os_win.c 035a813cbd17f355bdcad7ab894af214a9c13a1db8aeac902365350b98cd45a7 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c 52a2923ebd6ca0e2ce917b5860ffe893a344481b5fa4c2a2568ad156168bc558 +F src/pager.c 40d3aa2c6cdc56011b9cdc8190f01838beca29cf3b28215313fd29205e8b728c F src/pager.h 71fe1d5016ec54d0cc5d344cd474e563450b438c59f535e8c1ec8a13b1373f14 F src/parse.y c8d2de64db469fd56e0fa24da46cd8ec8523eb98626567d2708df371b47fdc3f F src/pcache.c 385ff064bca69789d199a98e2169445dc16e4291fa807babd61d4890c3b34177 @@ -1857,7 +1857,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 4363f69c3ad5a9859471547cab713f1acabd5fce13872cc1ddaa972d6c1dfb35 -R d839bc11e031796b84492fdd1d8db21c +P a1be6ee0188911448c064e2c25fb0ca1daad50f3d50fb49a34430bd09736b4a9 +R 0a585b2e54cceb8bd02bf68727c1a877 U drh -Z 98479fb559bee0ab85da5c957cd37687 +Z f5bf42617ec17bfaad2139412ca6e04d diff --git a/manifest.uuid b/manifest.uuid index 4e4a0be977..9b9f4852aa 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a1be6ee0188911448c064e2c25fb0ca1daad50f3d50fb49a34430bd09736b4a9 \ No newline at end of file +fee945671a19a93287f9bfadc346f9821fb1311c7fc75b95a6a48d1419c840e7 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index d023682b2a..7f8d053a99 100644 --- a/src/pager.c +++ b/src/pager.c @@ -7036,8 +7036,8 @@ int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){ ** sqlite3_uri_parameter() and sqlite3_filename_database() and friends. */ const char *sqlite3PagerFilename(const Pager *pPager, int nullIfMemDb){ - static const char zFake[] = { 0x01, 0x00, 0x00, 0x00 }; - return (nullIfMemDb && pPager->memDb) ? &zFake[2] : pPager->zFilename; + static const char zFake[] = { 0x00, 0x01, 0x00, 0x00, 0x00 }; + return (nullIfMemDb && pPager->memDb) ? &zFake[3] : pPager->zFilename; } /* From 591711751e2c8f42acf223ea99afad52128ba9ac Mon Sep 17 00:00:00 2001 From: mistachkin Date: Sat, 18 Jan 2020 19:02:20 +0000 Subject: [PATCH 15/30] Fix harmless compiler warning seen with MSVC. FossilOrigin-Name: cd0437ba5b13593ebe4ec30d6236623183f8cfa30ca8a0612662eccb282a863e --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/vdbe.c | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index a7b439b8bf..42865a4334 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sextra\sfront\smargin\sto\sthe\sfake\sempty\sfilename\sreturned\sby\nsqlite3PagerFilename()\sfor\san\sin-memory\sor\sTEMP\sdatabase. -D 2020-01-18T14:50:06.802 +C Fix\sharmless\scompiler\swarning\sseen\swith\sMSVC. +D 2020-01-18T19:02:20.512 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -603,7 +603,7 @@ F src/upsert.c 2920de71b20f04fe25eb00b655d086f0ba60ea133c59d7fa3325c49838818e78 F src/utf.c 736ff76753236ffbc8b5b939f5e0607f28aeaa7c780b3a56b419228f0a81c87b F src/util.c d035b09df9cecbc0e8f07c34b815acbf0d43c8adc8d2c540e3dc92eecb27855a F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf -F src/vdbe.c 562acbbe042b8ebff4a676870c242eaa3d3c3bf1967ed76e88f56adebd88aac5 +F src/vdbe.c e3dd230ece613409507523e68436764cc20638bb77ba2f416097de5b37235ce1 F src/vdbe.h defd693289c7bb8d325f109be9490c77138061211a116827da7244b6015a4934 F src/vdbeInt.h 30d3e8b991547cdf39025e416a0a737b0416d46747af70ae058f60e2e0466fe7 F src/vdbeapi.c 1252d80c548711e47a6d84dae88ed4e95d3fbb4e7bd0eaa1347299af7efddf02 @@ -1857,7 +1857,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 a1be6ee0188911448c064e2c25fb0ca1daad50f3d50fb49a34430bd09736b4a9 -R 0a585b2e54cceb8bd02bf68727c1a877 -U drh -Z f5bf42617ec17bfaad2139412ca6e04d +P fee945671a19a93287f9bfadc346f9821fb1311c7fc75b95a6a48d1419c840e7 +R 7bbc575165e9b40bddc3ed0e01914017 +U mistachkin +Z 29a5be4714ea18aa44a20b20a4026bdd diff --git a/manifest.uuid b/manifest.uuid index 9b9f4852aa..9130892347 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fee945671a19a93287f9bfadc346f9821fb1311c7fc75b95a6a48d1419c840e7 \ No newline at end of file +cd0437ba5b13593ebe4ec30d6236623183f8cfa30ca8a0612662eccb282a863e \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index b885f14a5b..b9d2d12505 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -514,7 +514,7 @@ void sqlite3VdbeMemPrettyPrint(Mem *pMem, StrAccum *pStr){ } }else if( f & MEM_Str ){ int j; - int c; + u8 c; if( f & MEM_Dyn ){ c = 'z'; assert( (f & (MEM_Static|MEM_Ephem))==0 ); @@ -529,7 +529,7 @@ void sqlite3VdbeMemPrettyPrint(Mem *pMem, StrAccum *pStr){ } sqlite3_str_appendf(pStr, " %c%d[", c, pMem->n); for(j=0; j<25 && jn; j++){ - u8 c = pMem->z[j]; + c = pMem->z[j]; sqlite3_str_appendchar(pStr, 1, (c>=0x20&&c<=0x7f) ? c : '.'); } sqlite3_str_appendf(pStr, "]%s", encnames[pMem->enc]); From a01fda7113a61a1b02b6903c056e29f3919e0949 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 18 Jan 2020 19:07:00 +0000 Subject: [PATCH 16/30] Disable a redundant test case that uses a very large stack, and hence is unable to run with -fsanitize=undefined,address. FossilOrigin-Name: 3c63f68e12af36e9fd9a3dd4daec9402e75e80bcd819d39c0215a427fd0d7803 --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/tclsqlite.test | 7 ++++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 42865a4334..c5cac87658 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarning\sseen\swith\sMSVC. -D 2020-01-18T19:02:20.512 +C Disable\sa\sredundant\stest\scase\sthat\suses\sa\svery\slarge\sstack,\sand\shence\nis\sunable\sto\srun\swith\s-fsanitize=undefined,address. +D 2020-01-18T19:07:00.937 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1404,7 +1404,7 @@ F test/tabfunc01.test 5ca6d004157a3e886a55a9387b960cc0db41acd88753eb597ff409ec6c F test/table.test eb3463b7add9f16a5bb836badf118cf391b809d09fdccd1f79684600d07ec132 F test/tableapi.test ecbcc29c4ab62c1912c3717c48ea5c5e59f7d64e4a91034e6148bd2b82f177f4 F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930 -F test/tclsqlite.test 6f8705d09377e2f2ff482ab181a1388773953a280623fff2ccab0e87d2bc10a2 +F test/tclsqlite.test 79a473f5797e317c08f2c4f8192edb3eea6a67329b1087453328b66a7cb31070 F test/tempdb.test 4cdaa23ddd8acb4d79cbb1b68ccdfd09b0537aaba909ca69a876157c2a2cbd08 F test/tempdb2.test 353864e96fd3ae2f70773d0ffbf8b1fe48589b02c2ec05013b540879410c3440 F test/tempfault.test 0c0d349c9a99bf5f374655742577f8712c647900 @@ -1857,7 +1857,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 fee945671a19a93287f9bfadc346f9821fb1311c7fc75b95a6a48d1419c840e7 -R 7bbc575165e9b40bddc3ed0e01914017 -U mistachkin -Z 29a5be4714ea18aa44a20b20a4026bdd +P cd0437ba5b13593ebe4ec30d6236623183f8cfa30ca8a0612662eccb282a863e +R 46d6fae77c45d0d0c7c9db97f81cc917 +U drh +Z 52b7230249f9370da62df185e5b3adaf diff --git a/manifest.uuid b/manifest.uuid index 9130892347..0fa2f3ad40 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cd0437ba5b13593ebe4ec30d6236623183f8cfa30ca8a0612662eccb282a863e \ No newline at end of file +3c63f68e12af36e9fd9a3dd4daec9402e75e80bcd819d39c0215a427fd0d7803 \ No newline at end of file diff --git a/test/tclsqlite.test b/test/tclsqlite.test index b01da0ec23..c111325bcb 100644 --- a/test/tclsqlite.test +++ b/test/tclsqlite.test @@ -371,9 +371,10 @@ ifcapable tclvar { db function r1 userfunc_r1 execsql {SELECT r1(10)} } {55} - do_test tcl-9.11 { - execsql {SELECT r1(100)} - } {5050} + # Fails under -fsanitize=address,undefined due to stack overflow + # do_test tcl-9.11 { + # execsql {SELECT r1(100)} + # } {5050} } # Tests for the new transaction method From f71eb2091fdb165ab97f7e50cb8cbdc6d39a0a86 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 18 Jan 2020 19:46:42 +0000 Subject: [PATCH 17/30] Do not use memcpy() of zero bytes when initializing a pager. This avoids a warning. FossilOrigin-Name: cca437788e092b21ed1784dd94d4b1c7204ff1717538d276a10880d1345904bd --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/pager.c | 10 ++++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index c5cac87658..e0b84f124d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Disable\sa\sredundant\stest\scase\sthat\suses\sa\svery\slarge\sstack,\sand\shence\nis\sunable\sto\srun\swith\s-fsanitize=undefined,address. -D 2020-01-18T19:07:00.937 +C Do\snot\suse\smemcpy()\sof\szero\sbytes\swhen\sinitializing\sa\spager.\s\sThis\savoids\na\swarning. +D 2020-01-18T19:46:42.954 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -518,7 +518,7 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_unix.c ad7640c04eed946052a3b12856362a773d0a717696707313037186df0e2b59f2 F src/os_win.c 035a813cbd17f355bdcad7ab894af214a9c13a1db8aeac902365350b98cd45a7 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c 40d3aa2c6cdc56011b9cdc8190f01838beca29cf3b28215313fd29205e8b728c +F src/pager.c 302a18da8b247881808cd65009e1ac7c8b6e5cefb22ed9a1c330ed47b73e94ab F src/pager.h 71fe1d5016ec54d0cc5d344cd474e563450b438c59f535e8c1ec8a13b1373f14 F src/parse.y c8d2de64db469fd56e0fa24da46cd8ec8523eb98626567d2708df371b47fdc3f F src/pcache.c 385ff064bca69789d199a98e2169445dc16e4291fa807babd61d4890c3b34177 @@ -1857,7 +1857,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 cd0437ba5b13593ebe4ec30d6236623183f8cfa30ca8a0612662eccb282a863e -R 46d6fae77c45d0d0c7c9db97f81cc917 +P 3c63f68e12af36e9fd9a3dd4daec9402e75e80bcd819d39c0215a427fd0d7803 +R 0fa85a9d25ff75c3f2a3977560ee15f3 U drh -Z 52b7230249f9370da62df185e5b3adaf +Z 19c31381e7a9c501b7f49796334ab78f diff --git a/manifest.uuid b/manifest.uuid index 0fa2f3ad40..ccb7e488b4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3c63f68e12af36e9fd9a3dd4daec9402e75e80bcd819d39c0215a427fd0d7803 \ No newline at end of file +cca437788e092b21ed1784dd94d4b1c7204ff1717538d276a10880d1345904bd \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 7f8d053a99..ae75aeb7cf 100644 --- a/src/pager.c +++ b/src/pager.c @@ -4911,11 +4911,13 @@ int sqlite3PagerOpen( /* Fill in the Pager.zFilename and pPager.zQueryParam fields */ pPtr[0] = '\003'; pPtr[1] = 0; pPtr += 2; pPager->zFilename = (char*)pPtr; - memcpy(pPtr, zPathname, nPathname); pPtr += nPathname + 1; - if( zUri ){ - memcpy(pPtr, zUri, nUriByte); /* pPtr += nUriByte; // not needed */ + if( nPathname>0 ){ + memcpy(pPtr, zPathname, nPathname); pPtr += nPathname + 1; + if( zUri ){ + memcpy(pPtr, zUri, nUriByte); /* pPtr += nUriByte; // not needed */ + } + /* Double-zero terminator implied by the sqlite3MallocZero */ } - /* Double-zero terminator implied by the sqlite3MallocZero */ if( nPathname ) sqlite3DbFree(0, zPathname); pPager->pVfs = pVfs; From fe7046044cb94686eaba8291c24267d17d1357b7 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 18 Jan 2020 21:34:31 +0000 Subject: [PATCH 18/30] Allow non-deterministic function in CHECK constraints. It turns out that PostgreSQL, MySQL, and SQLServer all allow this. We should be the the exception. Ticket [830277d9db6c3ba1] FossilOrigin-Name: 8c8ce526adb60b8061e55151599ca8b11f1ec2e968d3bacc73a2a249e9e95ee1 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/resolve.c | 9 ++++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index e0b84f124d..a4cc24dea1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\suse\smemcpy()\sof\szero\sbytes\swhen\sinitializing\sa\spager.\s\sThis\savoids\na\swarning. -D 2020-01-18T19:46:42.954 +C Allow\snon-deterministic\sfunction\sin\sCHECK\sconstraints.\s\sIt\sturns\sout\sthat\nPostgreSQL,\sMySQL,\sand\sSQLServer\sall\sallow\sthis.\s\sWe\sshould\sbe\sthe\sthe\nexception.\s\sTicket\s[830277d9db6c3ba1] +D 2020-01-18T21:34:31.513 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -529,7 +529,7 @@ F src/pragma.h 9f86a3a3a0099e651189521c8ad03768df598974e7bbdc21c7f9bb6125592fbd F src/prepare.c 6049beb71385f017af6fc320d2c75a4e50b75e280c54232442b785fbb83df057 F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c 1139e3157c710c6e6f04fe726f4e0d8bdb1ae89a276d3b0ca4975af163141c9c +F src/resolve.c f0781c9e180028b279bc4ff079ad54f4727223d470c8d2343643fcaf79b67740 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 1b787876c0f3052ccd27490a350ab181281e9833f455ee273bee0a0c8a94765d F src/shell.c.in 1b2a636ba5b676f844a2af2a5f719b5c4ace7c6825d56270e2ae912b2a5fc840 @@ -1857,7 +1857,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 3c63f68e12af36e9fd9a3dd4daec9402e75e80bcd819d39c0215a427fd0d7803 -R 0fa85a9d25ff75c3f2a3977560ee15f3 +P cca437788e092b21ed1784dd94d4b1c7204ff1717538d276a10880d1345904bd +R cfb97b89ceebcc77ca634e507b5bc335 U drh -Z 19c31381e7a9c501b7f49796334ab78f +Z a2cb91ca17276dd4cb33a8149a6720ac diff --git a/manifest.uuid b/manifest.uuid index ccb7e488b4..43c62a8695 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cca437788e092b21ed1784dd94d4b1c7204ff1717538d276a10880d1345904bd \ No newline at end of file +8c8ce526adb60b8061e55151599ca8b11f1ec2e968d3bacc73a2a249e9e95ee1 \ No newline at end of file diff --git a/src/resolve.c b/src/resolve.c index 3e5ac16e2e..119a07fd2a 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -868,11 +868,14 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ ExprSetProperty(pExpr,EP_ConstFunc); } if( (pDef->funcFlags & SQLITE_FUNC_CONSTANT)==0 ){ - /* Date/time functions that use 'now', and other functions like + /* Clearly non-deterministic functions like random(), but also + ** date/time functions that use 'now', and other functions like ** sqlite_version() that might change over time cannot be used - ** in an index. */ + ** in an index or generated column. Curiously, they can be used + ** in a CHECK constraint. SQLServer, MySQL, and PostgreSQL all + ** all this. */ sqlite3ResolveNotValid(pParse, pNC, "non-deterministic functions", - NC_SelfRef, 0); + NC_IdxExpr|NC_PartIdx|NC_GenCol, 0); }else{ assert( (NC_SelfRef & 0xff)==NC_SelfRef ); /* Must fit in 8 bits */ pExpr->op2 = pNC->ncFlags & NC_SelfRef; From 76a1fce53b5ff2b97d166eda9cae9ba570551dcb Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 18 Jan 2020 22:20:14 +0000 Subject: [PATCH 19/30] In the TCL interface, add the ability to change the SQLITE_DBCONFIG_TRUSTED_SCHEMA setting using the "db config" method. FossilOrigin-Name: 1accfa8cf05856b03cecab7a2cd0c0337842a0003cfbec207b6f0acdd93e8f15 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/tclsqlite.c | 14 ++++++++------ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index a4cc24dea1..c08011a418 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Allow\snon-deterministic\sfunction\sin\sCHECK\sconstraints.\s\sIt\sturns\sout\sthat\nPostgreSQL,\sMySQL,\sand\sSQLServer\sall\sallow\sthis.\s\sWe\sshould\sbe\sthe\sthe\nexception.\s\sTicket\s[830277d9db6c3ba1] -D 2020-01-18T21:34:31.513 +C In\sthe\sTCL\sinterface,\sadd\sthe\sability\sto\schange\sthe\nSQLITE_DBCONFIG_TRUSTED_SCHEMA\ssetting\susing\sthe\s"db\sconfig"\smethod. +D 2020-01-18T22:20:14.429 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -540,7 +540,7 @@ F src/sqliteInt.h 7a29ba700a51eeb925731749a570cf3859f6a58ed94797ecf47508875b0ba2 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 9ff2210207c6c3b4d9631a8241a7d45ab1b26a0e9c84cb07a9b5ce2de9a3b278 F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 -F src/tclsqlite.c f2dae14bfe7a35c94b6d515df88071014678ec39dafebdcf8e6bde91d62516c1 +F src/tclsqlite.c 97590069efaba5a4928ecffb606e3771dd93ee8e6bf248a62a6507c37a2b2e46 F src/test1.c 4d0ab2f67053a4fff87d1d3586ecc0e5322a1fc45dd4119ab11dc96de44f17a1 F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5 F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644 @@ -1857,7 +1857,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 cca437788e092b21ed1784dd94d4b1c7204ff1717538d276a10880d1345904bd -R cfb97b89ceebcc77ca634e507b5bc335 +P 8c8ce526adb60b8061e55151599ca8b11f1ec2e968d3bacc73a2a249e9e95ee1 +R ec478fb26dbc9dcbaf2d54caefd8db72 U drh -Z a2cb91ca17276dd4cb33a8149a6720ac +Z 9d0667f67a9f685f4dfa2d4200f19001 diff --git a/manifest.uuid b/manifest.uuid index 43c62a8695..481a77d717 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8c8ce526adb60b8061e55151599ca8b11f1ec2e968d3bacc73a2a249e9e95ee1 \ No newline at end of file +1accfa8cf05856b03cecab7a2cd0c0337842a0003cfbec207b6f0acdd93e8f15 \ No newline at end of file diff --git a/src/tclsqlite.c b/src/tclsqlite.c index 6a8b52b6bc..2cae5804a0 100644 --- a/src/tclsqlite.c +++ b/src/tclsqlite.c @@ -2341,20 +2341,22 @@ static int SQLITE_TCLAPI DbObjCmd( const char *zName; int op; } aDbConfig[] = { + { "defensive", SQLITE_DBCONFIG_DEFENSIVE }, + { "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL }, + { "dqs_dml", SQLITE_DBCONFIG_DQS_DML }, { "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY }, + { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG }, { "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER }, { "enable_view", SQLITE_DBCONFIG_ENABLE_VIEW }, { "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER }, + { "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE }, + { "legacy_file_format", SQLITE_DBCONFIG_LEGACY_FILE_FORMAT }, { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION }, { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE }, - { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG }, - { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP }, { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE }, - { "defensive", SQLITE_DBCONFIG_DEFENSIVE }, + { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP }, + { "trusted_schema", SQLITE_DBCONFIG_TRUSTED_SCHEMA }, { "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA }, - { "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE }, - { "dqs_dml", SQLITE_DBCONFIG_DQS_DML }, - { "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL }, }; Tcl_Obj *pResult; int ii; From 38e14fbd5f1a2c4265d6463c2e1d195cc9dce7e2 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 18 Jan 2020 23:52:45 +0000 Subject: [PATCH 20/30] Documentation improvements. FossilOrigin-Name: 535afe150939d06342fbbed4ca1b6a1472fde51ac9edd4b4b583b87d90f509c2 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/sqlite.h.in | 31 ++++++++++++++++++++++--------- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index c08011a418..ce71df5195 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sthe\sTCL\sinterface,\sadd\sthe\sability\sto\schange\sthe\nSQLITE_DBCONFIG_TRUSTED_SCHEMA\ssetting\susing\sthe\s"db\sconfig"\smethod. -D 2020-01-18T22:20:14.429 +C Documentation\simprovements. +D 2020-01-18T23:52:45.348 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -533,7 +533,7 @@ F src/resolve.c f0781c9e180028b279bc4ff079ad54f4727223d470c8d2343643fcaf79b67740 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 1b787876c0f3052ccd27490a350ab181281e9833f455ee273bee0a0c8a94765d F src/shell.c.in 1b2a636ba5b676f844a2af2a5f719b5c4ace7c6825d56270e2ae912b2a5fc840 -F src/sqlite.h.in 8ec22eb7e2a3d391be7d13024755bfd65a5ef6a752c0469b0f652162270d38b6 +F src/sqlite.h.in 71e469c466eccd7d76da5938f2e236b92d089b5acb930f1c8cb6ce2fa6b247b0 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h b0f776a0d042b23b6bcbb6b0943e8a3768c7f0b438a275e7168f0204e223a4db F src/sqliteInt.h 7a29ba700a51eeb925731749a570cf3859f6a58ed94797ecf47508875b0ba279 @@ -1857,7 +1857,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 8c8ce526adb60b8061e55151599ca8b11f1ec2e968d3bacc73a2a249e9e95ee1 -R ec478fb26dbc9dcbaf2d54caefd8db72 +P 1accfa8cf05856b03cecab7a2cd0c0337842a0003cfbec207b6f0acdd93e8f15 +R 29b7711c1f60da42c820d7e3846b599d U drh -Z 9d0667f67a9f685f4dfa2d4200f19001 +Z 20349bd0de5a257598311cb224dc97d2 diff --git a/manifest.uuid b/manifest.uuid index 481a77d717..c8e714af7c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1accfa8cf05856b03cecab7a2cd0c0337842a0003cfbec207b6f0acdd93e8f15 \ No newline at end of file +535afe150939d06342fbbed4ca1b6a1472fde51ac9edd4b4b583b87d90f509c2 \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index a9f56aabed..7ac66c3fb1 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -4973,9 +4973,20 @@ int sqlite3_reset(sqlite3_stmt *pStmt); ** ** ^The fourth parameter may also optionally include the [SQLITE_DIRECTONLY] ** flag, which if present prevents the function from being invoked from -** within VIEWs or TRIGGERs. For security reasons, the [SQLITE_DIRECTONLY] -** flag is recommended for any application-defined SQL function that has -** side-effects. +** within VIEWs, TRIGGERs, CHECK constraints, generated column expressions, +** index expressions, or the WHERE clause of partial indexes. +** +** +** For best security, the [SQLITE_DIRECTONLY] flag is recommended for +** all application-defined SQL functions that do not need to be +** used inside of triggers, view, CHECK constraints, or other elements of +** the database schema. This flags is especially recommended for SQL +** functions that have side effects or reveal internal application state. +** Without this flag, an attacker might be able to modify the schema of +** a database file to include invocations of the function with parameters +** chosen by the attacker, which the application will then execute when +** the database file is opened and read. +** ** ** ^(The fifth parameter is an arbitrary pointer. The implementation of the ** function can gain access to this pointer using [sqlite3_user_data()].)^ @@ -5101,18 +5112,20 @@ int sqlite3_create_window_function( ** The [abs|abs() function] is deterministic, for example, but ** [randomblob|randomblob()] is not. Functions must ** be deterministic in order to be used in certain contexts such as -** [CHECK constraints] or [generated columns]. SQLite might also optimize -** deterministic functions by factoring them out of inner loops. +** with the WHERE clause of [partial indexes] or in [generated columns]. +** SQLite might also optimize deterministic functions by factoring them +** out of inner loops. ** ** ** [[SQLITE_DIRECTONLY]]
    SQLITE_DIRECTONLY
    ** The SQLITE_DIRECTONLY flag means that the function may only be invoked ** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in ** schema structures such as [CHECK constraints], [DEFAULT clauses], -** [expression indexes], [partial indexes], or [generated columns]. This is -** a security feature which is recommended for all -** [application-defined SQL functions] that have side-effects or that -** could potentially leak sensitive information. +** [expression indexes], [partial indexes], or [generated columns]. +** The SQLITE_DIRECTONLY flags is a security feature which is recommended +** for all [application-defined SQL functions], and especially for functions +** that have side-effects or that could potentially leak sensitive +** information. **
    ** ** [[SQLITE_INNOCUOUS]]
    SQLITE_INNOCUOUS
    From 4b86e20485fc8efc1d15c4707d869ab7f264ebcf Mon Sep 17 00:00:00 2001 From: drh Date: Sun, 19 Jan 2020 20:37:26 +0000 Subject: [PATCH 21/30] Enhancement to the CLI to allow the ".parameter init" command to work even if defensive mode is turned on. FossilOrigin-Name: 4d46255096671ae7be33081e81bb25561304e069f459ffa7587f1f19381a1851 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 4 ++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index ce71df5195..c6ba95999b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Documentation\simprovements. -D 2020-01-18T23:52:45.348 +C Enhancement\sto\sthe\sCLI\sto\sallow\sthe\s".parameter\sinit"\scommand\sto\swork\neven\sif\sdefensive\smode\sis\sturned\son. +D 2020-01-19T20:37:26.299 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -532,7 +532,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c f0781c9e180028b279bc4ff079ad54f4727223d470c8d2343643fcaf79b67740 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 1b787876c0f3052ccd27490a350ab181281e9833f455ee273bee0a0c8a94765d -F src/shell.c.in 1b2a636ba5b676f844a2af2a5f719b5c4ace7c6825d56270e2ae912b2a5fc840 +F src/shell.c.in c2e20c43a44fb5588a6c27ce60589538fbf4794fd7686f5b2598eca22eaae1fa F src/sqlite.h.in 71e469c466eccd7d76da5938f2e236b92d089b5acb930f1c8cb6ce2fa6b247b0 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h b0f776a0d042b23b6bcbb6b0943e8a3768c7f0b438a275e7168f0204e223a4db @@ -1857,7 +1857,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 1accfa8cf05856b03cecab7a2cd0c0337842a0003cfbec207b6f0acdd93e8f15 -R 29b7711c1f60da42c820d7e3846b599d +P 535afe150939d06342fbbed4ca1b6a1472fde51ac9edd4b4b583b87d90f509c2 +R 1531a276d37927ddd2ce25198eb53af3 U drh -Z 20349bd0de5a257598311cb224dc97d2 +Z 1873164af3e1828813bad7046bad8fa1 diff --git a/manifest.uuid b/manifest.uuid index c8e714af7c..4241bd8c4c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -535afe150939d06342fbbed4ca1b6a1472fde51ac9edd4b4b583b87d90f509c2 \ No newline at end of file +4d46255096671ae7be33081e81bb25561304e069f459ffa7587f1f19381a1851 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index f355737f59..0532f046ce 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -2761,6 +2761,9 @@ static void restore_debug_trace_modes(void){ /* Create the TEMP table used to store parameter bindings */ static void bind_table_init(ShellState *p){ int wrSchema = 0; + int defensiveMode = 0; + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, -1, &defensiveMode); + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, 0, 0); sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, -1, &wrSchema); sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, 1, 0); sqlite3_exec(p->db, @@ -2770,6 +2773,7 @@ static void bind_table_init(ShellState *p){ ") WITHOUT ROWID;", 0, 0, 0); sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, wrSchema, 0); + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, defensiveMode, 0); } /* From be03cc9fcf199ba0e74f00bb391918717e86a1cf Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 20 Jan 2020 14:42:09 +0000 Subject: [PATCH 22/30] In the fuzzcheck test program, reduce the default expression depth limit from 1000 to 500 to avoid stack-overflow problems when running stress tests using clang ASAN. FossilOrigin-Name: 63d886f4ce3c770498b8bdad45b04143a3f63197d81793bde107450aba4a9c87 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/fuzzcheck.c | 11 +++++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index c6ba95999b..99c48db20e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhancement\sto\sthe\sCLI\sto\sallow\sthe\s".parameter\sinit"\scommand\sto\swork\neven\sif\sdefensive\smode\sis\sturned\son. -D 2020-01-19T20:37:26.299 +C In\sthe\sfuzzcheck\stest\sprogram,\sreduce\sthe\sdefault\sexpression\sdepth\slimit\nfrom\s1000\sto\s500\sto\savoid\sstack-overflow\sproblems\swhen\srunning\sstress\stests\nusing\sclang\sASAN. +D 2020-01-20T14:42:09.493 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1013,7 +1013,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 F test/fuzz_common.tcl b7197de6ed1ee8250a4f82d67876f4561b42ee8cbbfc6160dcb66331bad3f830 F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 -F test/fuzzcheck.c 0df68e0df3b93a8c8fc24c9873127c7d78024b51444193545f985dbc90ac024e +F test/fuzzcheck.c a9746aa49843827f960bc875cc70e04b0cfcd3e10e6676e3abc402ad190e165f F test/fuzzdata1.db d36e88741b4f23bcbaaf55b006290669d03c6c891cf13c7b3a53bc1b097b693f F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -1857,7 +1857,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 535afe150939d06342fbbed4ca1b6a1472fde51ac9edd4b4b583b87d90f509c2 -R 1531a276d37927ddd2ce25198eb53af3 +P 4d46255096671ae7be33081e81bb25561304e069f459ffa7587f1f19381a1851 +R 763d19098498df493f3b146f30ba61d0 U drh -Z 1873164af3e1828813bad7046bad8fa1 +Z 3cfea19fe4fc4879265658e2adbc5ee0 diff --git a/manifest.uuid b/manifest.uuid index 4241bd8c4c..f1b4d69cc4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4d46255096671ae7be33081e81bb25561304e069f459ffa7587f1f19381a1851 \ No newline at end of file +63d886f4ce3c770498b8bdad45b04143a3f63197d81793bde107450aba4a9c87 \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index 4f3321f0a1..5add53c19d 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -462,6 +462,9 @@ static unsigned int mxProgressCb = 2000; /* Maximum string length in SQLite */ static int lengthLimit = 1000000; +/* Maximum expression depth */ +static int depthLimit = 500; + /* Limit on the amount of heap memory that can be used */ static sqlite3_int64 heapLimit = 1000000000; @@ -789,6 +792,9 @@ int runCombinedDbSqlInput(const uint8_t *aData, size_t nByte){ if( lengthLimit>0 ){ sqlite3_limit(cx.db, SQLITE_LIMIT_LENGTH, lengthLimit); } + if( depthLimit>0 ){ + sqlite3_limit(cx.db, SQLITE_LIMIT_EXPR_DEPTH, depthLimit); + } sqlite3_hard_heap_limit64(heapLimit); if( nDb>=20 && aDb[18]==2 && aDb[19]==2 ){ @@ -1304,6 +1310,7 @@ static void showHelp(void){ " --export-sql DIR Write SQL to file(s) in DIR. Also works with --sqlid\n" " --help Show this help text\n" " --info Show information about SOURCE-DB w/o running tests\n" +" --limit-depth N Limit expression depth to N\n" " --limit-mem N Limit memory used by test SQLite instance to N bytes\n" " --limit-vdbe Panic if any test runs for more than 100,000 cycles\n" " --load-sql ARGS... Load SQL scripts fron files into SOURCE-DB\n" @@ -1406,6 +1413,10 @@ int main(int argc, char **argv){ if( strcmp(z,"info")==0 ){ infoFlag = 1; }else + if( strcmp(z,"limit-depth")==0 ){ + if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]); + depthLimit = integerValue(argv[++i]); + }else if( strcmp(z,"limit-mem")==0 ){ if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]); nMem = integerValue(argv[++i]); From cbf1c8c25bf0f7f654fe213e9598e699c0e68231 Mon Sep 17 00:00:00 2001 From: mistachkin Date: Tue, 21 Jan 2020 01:45:27 +0000 Subject: [PATCH 23/30] Improvements to the autoconf TEA Makefile for MSVC. FossilOrigin-Name: cffcf12f03906debeac6a974534b4439a4952cc72767e3bcb8e6d91da944d69f --- autoconf/tea/configure.ac | 2 +- autoconf/tea/win/makefile.vc | 49 ++++++++++++++++++++---------------- manifest | 16 ++++++------ manifest.uuid | 2 +- 4 files changed, 37 insertions(+), 32 deletions(-) diff --git a/autoconf/tea/configure.ac b/autoconf/tea/configure.ac index 7fca05b2e7..f6bea0f87a 100644 --- a/autoconf/tea/configure.ac +++ b/autoconf/tea/configure.ac @@ -19,7 +19,7 @@ dnl to configure the system for the local environment. # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- -AC_INIT([sqlite], [3.7.4]) +AC_INIT([sqlite], [3.31.0]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. diff --git a/autoconf/tea/win/makefile.vc b/autoconf/tea/win/makefile.vc index a5e4627707..88b66f173c 100644 --- a/autoconf/tea/win/makefile.vc +++ b/autoconf/tea/win/makefile.vc @@ -153,7 +153,7 @@ Please `cd` to its location first. # #------------------------------------------------------------------------- -PROJECT = sqlite3 +PROJECT = tclsqlite3 !include "rules.vc" # nmakehelp -V will search the file for tag, skips until a @@ -162,18 +162,15 @@ PROJECT = sqlite3 !if [echo REM = This file is generated from Makefile.vc > versions.vc] !endif -# get project version from row "AC_INIT([sqlite], [3.7.14])" +# get project version from row "AC_INIT([sqlite], [3.x.y])" !if [echo DOTVERSION = \>> versions.vc] \ - && [nmakehlp -V ..\configure.in AC_INIT >> versions.vc] + && [nmakehlp -V ..\configure.ac AC_INIT >> versions.vc] !endif !include "versions.vc" VERSION = $(DOTVERSION:.=) STUBPREFIX = $(PROJECT)stub -DLLOBJS = \ - $(TMP_DIR)\tclsqlite3.obj - #------------------------------------------------------------------------- # Target names and paths ( shouldn't need changing ) #------------------------------------------------------------------------- @@ -182,7 +179,7 @@ BINROOT = . ROOT = .. PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib -PRJLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT) +PRJLIBNAME = $(PROJECT).$(EXT) PRJLIB = $(OUT_DIR)\$(PRJLIBNAME) PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib @@ -204,6 +201,17 @@ DOCDIR = $(ROOT)\doc TOOLSDIR = $(ROOT)\tools COMPATDIR = $(ROOT)\compat +### Figure out where the primary source code file(s) is/are. +!if exist("$(ROOT)\..\..\sqlite3.c") && exist("$(ROOT)\..\..\src\tclsqlite.c") +SQL_INCLUDES = -I"$(ROOT)\..\.." +SQLITE_SRCDIR = $(ROOT)\..\.. +TCLSQLITE_SRCDIR = $(ROOT)\..\..\src +DLLOBJS = $(TMP_DIR)\sqlite3.obj $(TMP_DIR)\tclsqlite.obj +!else +TCLSQLITE_SRCDIR = $(ROOT)\generic +DLLOBJS = $(TMP_DIR)\tclsqlite3.obj +!endif + #--------------------------------------------------------------------- # Compile flags #--------------------------------------------------------------------- @@ -223,7 +231,7 @@ cdebug = -Z7 -WX -Od -GZ !endif ### Declarations common to all compiler options -cflags = -nologo -c -W3 -YX -Fp$(TMP_DIR)^\ +cflags = -nologo -c -W3 -D_CRT_SECURE_NO_WARNINGS -YX -Fp$(TMP_DIR)^\ !if $(MSVCRT) !if $(DEBUG) @@ -239,8 +247,8 @@ crt = -MT !endif !endif -INCLUDES = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" \ - -I"$(ROOT)\.." +INCLUDES = $(SQL_INCLUDES) $(TCL_INCLUDES) -I"$(WINDIR)" \ + -I"$(GENERICDIR)" -I"$(ROOT)\.." BASE_CLFAGS = $(cflags) $(cdebug) $(crt) $(INCLUDES) \ -DSQLITE_3_SUFFIX_ONLY=1 -DSQLITE_ENABLE_RTREE=1 \ -DSQLITE_ENABLE_FTS3=1 -DSQLITE_OMIT_DEPRECATED=1 @@ -341,20 +349,17 @@ $(PRJSTUBLIB): $(PRJSTUBOBJS) # Implicit rules #--------------------------------------------------------------------- -{$(WINDIR)}.c{$(TMP_DIR)}.obj:: - $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< -$< -<< +$(TMP_DIR)\sqlite3.obj: $(SQLITE_SRCDIR)\sqlite3.c + $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ \ + -c $(SQLITE_SRCDIR)\sqlite3.c -{$(GENERICDIR)}.c{$(TMP_DIR)}.obj:: - $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< -$< -<< +$(TMP_DIR)\tclsqlite.obj: $(TCLSQLITE_SRCDIR)\tclsqlite.c + $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ \ + -c $(TCLSQLITE_SRCDIR)\tclsqlite.c -{$(COMPATDIR)}.c{$(TMP_DIR)}.obj:: - $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< -$< -<< +$(TMP_DIR)\tclsqlite3.obj: $(TCLSQLITE_SRCDIR)\tclsqlite3.c + $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ \ + -c $(TCLSQLITE_SRCDIR)\tclsqlite3.c {$(WINDIR)}.rc{$(TMP_DIR)}.res: $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \ diff --git a/manifest b/manifest index 99c48db20e..acb3dbc976 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sthe\sfuzzcheck\stest\sprogram,\sreduce\sthe\sdefault\sexpression\sdepth\slimit\nfrom\s1000\sto\s500\sto\savoid\sstack-overflow\sproblems\swhen\srunning\sstress\stests\nusing\sclang\sASAN. -D 2020-01-20T14:42:09.493 +C Improvements\sto\sthe\sautoconf\sTEA\sMakefile\sfor\sMSVC. +D 2020-01-21T01:45:27.164 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -22,13 +22,13 @@ F autoconf/configure.ac 3cd933b959fe514eebd1ca1717dfddbf2c9b825b6bc2c5f744deaf5d F autoconf/tea/Makefile.in b438a7020446c8a8156e8d97c8914a04833da6fd F autoconf/tea/README 3e9a3c060f29a44344ab50aec506f4db903fb873 F autoconf/tea/aclocal.m4 52c47aac44ce0ddb1f918b6993e8beb8eee88f43 -F autoconf/tea/configure.ac 8aa16e3f0a5ca7959d4af198f46934ec187d395f +F autoconf/tea/configure.ac 6f379dfd46ace5caa97791acae07675eff62cada9800fc7bb36c789ecb7f17ac F autoconf/tea/doc/sqlite3.n e1fe45d4f5286ee3d0ccc877aca2a0def488e9bb F autoconf/tea/license.terms 13bd403c9610fd2b76ece0ab50c4c5eda933d523 F autoconf/tea/pkgIndex.tcl.in 3ef61715cf1c7bdcff56947ffadb26bc991ca39d F autoconf/tea/tclconfig/install-sh bdd5e293591621ae60d9824d86a4b1c5f22c3d00 F autoconf/tea/tclconfig/tcl.m4 66ddf0a5d5e4b1d29bff472c0985fd7fa89d0fb5 -F autoconf/tea/win/makefile.vc f89d0184d0eee5f7e356ea407964dcd139939928 +F autoconf/tea/win/makefile.vc 71915591c07cd5137711dc40ba3e127deb3f4531b9aad220b724cf5b451362bd F autoconf/tea/win/nmakehlp.c 247538ad8e8c508f33c03ec1fbd67d3a07ef6291 F autoconf/tea/win/rules.vc c511f222b80064096b705dbeb97060ee1d6b6d63 F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6 @@ -1857,7 +1857,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 4d46255096671ae7be33081e81bb25561304e069f459ffa7587f1f19381a1851 -R 763d19098498df493f3b146f30ba61d0 -U drh -Z 3cfea19fe4fc4879265658e2adbc5ee0 +P 63d886f4ce3c770498b8bdad45b04143a3f63197d81793bde107450aba4a9c87 +R 1a84dba822e408edb325a118d22b4de3 +U mistachkin +Z 8e9a8733a67aea5cb8b7a007ac22bd6e diff --git a/manifest.uuid b/manifest.uuid index f1b4d69cc4..28b5759933 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -63d886f4ce3c770498b8bdad45b04143a3f63197d81793bde107450aba4a9c87 \ No newline at end of file +cffcf12f03906debeac6a974534b4439a4952cc72767e3bcb8e6d91da944d69f \ No newline at end of file From 988af251d86f57e57b77f0bf3e651bab2ff9f343 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 21 Jan 2020 12:29:02 +0000 Subject: [PATCH 24/30] Fix the series.c and spellfix.c extensions to use SQLITE_VTAB_INNOCUOUS correctly. Fix the documentation on sqlite3_vtab_config() to take into account SQLITE_VTAB_INNOCUOUS and SQLITE_VTAB_DIRECTONLY. FossilOrigin-Name: 9265cb7f026c0e959bd034d4cd94fe597744e0dd455d0a20736ee5f5bee880c8 --- ext/misc/series.c | 2 +- ext/misc/spellfix.c | 2 +- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/sqlite.h.in | 12 +++++++++--- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ext/misc/series.c b/ext/misc/series.c index d24959001f..ac93f1fc4c 100644 --- a/ext/misc/series.c +++ b/ext/misc/series.c @@ -126,7 +126,7 @@ static int seriesConnect( pNew = *ppVtab = sqlite3_malloc( sizeof(*pNew) ); if( pNew==0 ) return SQLITE_NOMEM; memset(pNew, 0, sizeof(*pNew)); - sqlite3_vtab_config(db, SQLITE_INNOCUOUS); + sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); } return rc; } diff --git a/ext/misc/spellfix.c b/ext/misc/spellfix.c index b7d4468d9e..3b78d9f07d 100644 --- a/ext/misc/spellfix.c +++ b/ext/misc/spellfix.c @@ -2069,7 +2069,7 @@ static int spellfix1Init( if( pNew->zTableName==0 ){ rc = SQLITE_NOMEM; }else{ - sqlite3_vtab_config(db, SQLITE_INNOCUOUS); + sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); rc = sqlite3_declare_vtab(db, "CREATE TABLE x(word,rank,distance,langid, " "score, matchlen, phonehash HIDDEN, " diff --git a/manifest b/manifest index acb3dbc976..f8c3401293 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improvements\sto\sthe\sautoconf\sTEA\sMakefile\sfor\sMSVC. -D 2020-01-21T01:45:27.164 +C Fix\sthe\sseries.c\sand\sspellfix.c\sextensions\sto\suse\sSQLITE_VTAB_INNOCUOUS\ncorrectly.\s\sFix\sthe\sdocumentation\son\ssqlite3_vtab_config()\sto\stake\sinto\naccount\sSQLITE_VTAB_INNOCUOUS\sand\sSQLITE_VTAB_DIRECTONLY. +D 2020-01-21T12:29:02.631 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -311,11 +311,11 @@ F ext/misc/regexp.c 246244c714267f303df76acf73dcf110cf2eaf076896aaaba8db6d6d21a1 F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c F ext/misc/scrub.c db9fff56fed322ca587d73727c6021b11ae79ce3f31b389e1d82891d144f22ad -F ext/misc/series.c a733a77d152983cc5d337c9df7b358ad17cfb44965476843cd03e2f571054914 +F ext/misc/series.c 4057dda3579b38ff88b2d3b13b4dd92dbd9d6f90dac2b55c19b0a8ed87ee4959 F ext/misc/sha1.c 1190aec0d9d886d9f5ffdf891142a626812327d11472c0cade3489db3b7b140a F ext/misc/shathree.c 135b7c145db4a09b1650c3e7aff9cb538763a9a361e834c015dd1aaf8d5c9a00 F ext/misc/showauth.c 732578f0fe4ce42d577e1c86dc89dd14a006ab52 -F ext/misc/spellfix.c 5cb7e1876925508aeef0e5ecd5ec8dab6089e09fa44cbf4322d5cb7a821a53f9 +F ext/misc/spellfix.c 94df9bbfa514a563c1484f684a2df3d128a2f7209a84ca3ca100c68a0163e29f F ext/misc/sqlar.c c9e5d58544e1506135806a1e0f525f92d4bb6bb125348dce469d778fb334fbce F ext/misc/stmt.c 8a8dc4675042e4551e4afe99b8d0cc7a4a2fc1a8dacc0a9ce1b1bbff145da93d F ext/misc/templatevtab.c 8a16a91a5ceaccfcbd6aaaa56d46828806e460dd194965b3f77bf38f14b942c4 @@ -533,7 +533,7 @@ F src/resolve.c f0781c9e180028b279bc4ff079ad54f4727223d470c8d2343643fcaf79b67740 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 1b787876c0f3052ccd27490a350ab181281e9833f455ee273bee0a0c8a94765d F src/shell.c.in c2e20c43a44fb5588a6c27ce60589538fbf4794fd7686f5b2598eca22eaae1fa -F src/sqlite.h.in 71e469c466eccd7d76da5938f2e236b92d089b5acb930f1c8cb6ce2fa6b247b0 +F src/sqlite.h.in 75d0304247a2154122d6d06f12219c1e29291d72304f0eeef4c1ec6b1409b443 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h b0f776a0d042b23b6bcbb6b0943e8a3768c7f0b438a275e7168f0204e223a4db F src/sqliteInt.h 7a29ba700a51eeb925731749a570cf3859f6a58ed94797ecf47508875b0ba279 @@ -1857,7 +1857,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 63d886f4ce3c770498b8bdad45b04143a3f63197d81793bde107450aba4a9c87 -R 1a84dba822e408edb325a118d22b4de3 -U mistachkin -Z 8e9a8733a67aea5cb8b7a007ac22bd6e +P cffcf12f03906debeac6a974534b4439a4952cc72767e3bcb8e6d91da944d69f +R 001bb5c955de0c6c88c2ac069af9f4e6 +U drh +Z 64b8ca1480a3ca93149154c746b9a654 diff --git a/manifest.uuid b/manifest.uuid index 28b5759933..1bb3b98380 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cffcf12f03906debeac6a974534b4439a4952cc72767e3bcb8e6d91da944d69f \ No newline at end of file +9265cb7f026c0e959bd034d4cd94fe597744e0dd455d0a20736ee5f5bee880c8 \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 7ac66c3fb1..6b32b6487a 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -9010,14 +9010,20 @@ int sqlite3_wal_checkpoint_v2( ** If this interface is invoked outside the context of an xConnect or ** xCreate virtual table method then the behavior is undefined. ** -** At present, there is only one option that may be configured using -** this function. (See [SQLITE_VTAB_CONSTRAINT_SUPPORT].) Further options -** may be added in the future. +** In the call sqlite3_vtab_config(D,C,...) the D parameter is the +** [database connection] in which the virtual table is being created and +** which is passed in as the first argument to the [xConnect] or [xCreate] +** method that is invoking sqlite3_vtab_config(). The C parameter is one +** of the [virtual table configuration options]. The presence and meaning +** of parameters after C depend on which [virtual table configuration option] +** is used. */ int sqlite3_vtab_config(sqlite3*, int op, ...); /* ** CAPI3REF: Virtual Table Configuration Options +** KEYWORDS: {virtual table configuration options} +** KEYWORDS: {virtual table configuration option} ** ** These macros define the various options to the ** [sqlite3_vtab_config()] interface that [virtual table] implementations From 39ef8b31fb042db26736ca4704486d8da02909f0 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 21 Jan 2020 13:40:35 +0000 Subject: [PATCH 25/30] Fix a problem in the userauth extension causing it to occasionally set "PRAGMA count_changes" (and some others) to true. FossilOrigin-Name: 3a62f64222ebd176c06e89b9fe5275b7b1f09df0afbae1c5c148a4e527e9d80b --- ext/userauth/userauth.c | 2 +- manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/userauth/userauth.c b/ext/userauth/userauth.c index a8ed01ae45..fa708516ee 100644 --- a/ext/userauth/userauth.c +++ b/ext/userauth/userauth.c @@ -40,7 +40,7 @@ static sqlite3_stmt *sqlite3UserAuthPrepare( char *zSql; int rc; va_list ap; - int savedFlags = db->flags; + u64 savedFlags = db->flags; va_start(ap, zFormat); zSql = sqlite3_vmprintf(zFormat, ap); diff --git a/manifest b/manifest index f8c3401293..1d746b3a01 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sseries.c\sand\sspellfix.c\sextensions\sto\suse\sSQLITE_VTAB_INNOCUOUS\ncorrectly.\s\sFix\sthe\sdocumentation\son\ssqlite3_vtab_config()\sto\stake\sinto\naccount\sSQLITE_VTAB_INNOCUOUS\sand\sSQLITE_VTAB_DIRECTONLY. -D 2020-01-21T12:29:02.631 +C Fix\sa\sproblem\sin\sthe\suserauth\sextension\scausing\sit\sto\soccasionally\sset\s"PRAGMA\scount_changes"\s(and\ssome\sothers)\sto\strue. +D 2020-01-21T13:40:35.685 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -449,7 +449,7 @@ F ext/session/sqlite3session.h a2db5b72b938d12c727b4b4ec632254ca493670a9c0de597a F ext/session/test_session.c 98797aba475a799376c9a42214f2d1debf2d0c3cb657d9c8bbf4f70bf3fb4aec F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04 -F ext/userauth/userauth.c f81aa5a3ecacf406f170c62a144405858f6f6de51dbdc0920134e629edbe2648 +F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60 @@ -1857,7 +1857,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 cffcf12f03906debeac6a974534b4439a4952cc72767e3bcb8e6d91da944d69f -R 001bb5c955de0c6c88c2ac069af9f4e6 -U drh -Z 64b8ca1480a3ca93149154c746b9a654 +P 9265cb7f026c0e959bd034d4cd94fe597744e0dd455d0a20736ee5f5bee880c8 +R 811bb3e4f1e06ed20aee305d7e233a8e +U dan +Z 7bdcf7d21db717d0bf8ab96901d5da0c diff --git a/manifest.uuid b/manifest.uuid index 1bb3b98380..9fd3ee9c72 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9265cb7f026c0e959bd034d4cd94fe597744e0dd455d0a20736ee5f5bee880c8 \ No newline at end of file +3a62f64222ebd176c06e89b9fe5275b7b1f09df0afbae1c5c148a4e527e9d80b \ No newline at end of file From 70a32703ac0ded74e7b8dae009510409c6c115ea Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 21 Jan 2020 14:42:48 +0000 Subject: [PATCH 26/30] Fix an assert() that could fail in SQLITE_MUTATION_TEST builds following an error in a query that uses CTEs. FossilOrigin-Name: c7e29458a73bbe73a1429477d0c01d5a7b870ab75d3cb08a703be21714e439b7 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/select.c | 2 +- test/with1.test | 7 +++++++ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 1d746b3a01..a2109cc082 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\sin\sthe\suserauth\sextension\scausing\sit\sto\soccasionally\sset\s"PRAGMA\scount_changes"\s(and\ssome\sothers)\sto\strue. -D 2020-01-21T13:40:35.685 +C Fix\san\sassert()\sthat\scould\sfail\sin\sSQLITE_MUTATION_TEST\sbuilds\sfollowing\san\serror\sin\sa\squery\sthat\suses\sCTEs. +D 2020-01-21T14:42:48.803 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -531,7 +531,7 @@ F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c f0781c9e180028b279bc4ff079ad54f4727223d470c8d2343643fcaf79b67740 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 -F src/select.c 1b787876c0f3052ccd27490a350ab181281e9833f455ee273bee0a0c8a94765d +F src/select.c 5924f8df8f07fa045e90e41022fb18539a2dd6a9198d11889e9905103652c656 F src/shell.c.in c2e20c43a44fb5588a6c27ce60589538fbf4794fd7686f5b2598eca22eaae1fa F src/sqlite.h.in 75d0304247a2154122d6d06f12219c1e29291d72304f0eeef4c1ec6b1409b443 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1737,7 +1737,7 @@ F test/windowB.test 7a983ea1cc1cf72be7f378e4b32f6cb2d73014c5cd8b25aaee825164cd42 F test/windowerr.tcl f5acd6fbc210d7b5546c0e879d157888455cd4a17a1d3f28f07c1c8a387019e0 F test/windowerr.test a8b752402109c15aa1c5efe1b93ccb0ce1ef84fa964ae1cd6684dd0b3cc1819b F test/windowfault.test 8e3b69abe0eea9595ba3940afd9c63644e11966ed8815734b67f1479a8e9891a -F test/with1.test 386d1c1763a9d369fd08ea03145869b6313ba263e1a102df5a275007000d1b47 +F test/with1.test 584580a5ae79868a91873863f8cb2d00040006dc1e4c332ef1d8642f2815dc6e F test/with2.test e0030e2f0267a910d6c0e4f46f2dfe941c1cc0d4f659ba69b3597728e7e8f1ab F test/with3.test 13b3336739da648a9e4dfa11bb04e73a920c97620041007c5f75d5d14084c346 F test/with4.test 257be66c0c67fee1defbbac0f685c3465e2cad037f21ce65f23f86084f198205 @@ -1857,7 +1857,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 9265cb7f026c0e959bd034d4cd94fe597744e0dd455d0a20736ee5f5bee880c8 -R 811bb3e4f1e06ed20aee305d7e233a8e +P 3a62f64222ebd176c06e89b9fe5275b7b1f09df0afbae1c5c148a4e527e9d80b +R fc7d96a2946474e179d498e2cb12c819 U dan -Z 7bdcf7d21db717d0bf8ab96901d5da0c +Z 774f7b55b9de89c79414a8c248167cc4 diff --git a/manifest.uuid b/manifest.uuid index 9fd3ee9c72..8e49bf8fb5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3a62f64222ebd176c06e89b9fe5275b7b1f09df0afbae1c5c148a4e527e9d80b \ No newline at end of file +c7e29458a73bbe73a1429477d0c01d5a7b870ab75d3cb08a703be21714e439b7 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 971f7375a3..b9e5b0b434 100644 --- a/src/select.c +++ b/src/select.c @@ -4839,7 +4839,7 @@ static void selectPopWith(Walker *pWalker, Select *p){ if( OK_IF_ALWAYS_TRUE(pParse->pWith) && p->pPrior==0 ){ With *pWith = findRightmost(p)->pWith; if( pWith!=0 ){ - assert( pParse->pWith==pWith ); + assert( pParse->pWith==pWith || pParse->nErr ); pParse->pWith = pWith->pOuter; } } diff --git a/test/with1.test b/test/with1.test index f798dd2111..66e456345c 100644 --- a/test/with1.test +++ b/test/with1.test @@ -1164,4 +1164,11 @@ do_execsql_test 25.1 { SELECT (SELECT 1324 FROM cte1) FROM cte1; } {1324} +do_catchsql_test 26.0 { + WITH i(x) AS ( + VALUES(1) UNION ALL SELECT x+1 FRO, a.b,O. * ,I¬i O, a.b,O. * ORDER BY 1 + ) + SELECT x,O. * O FROM i ¬I,I? 10; +} {1 {near "O": syntax error}} + finish_test From 7d2a1be84b8e47c078a3b2e3804b9d6771ea4328 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 21 Jan 2020 15:01:14 +0000 Subject: [PATCH 27/30] Fix a case in fts3auto.test that fails for SQLITE_DISABLE_FTS4_DEFERRED builds. FossilOrigin-Name: d241055ead935f0e461a67f483788bcd59f7e8d65ade54b9c7c7c4fec9414102 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/fts3auto.test | 10 ++++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index a2109cc082..276abf0534 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sassert()\sthat\scould\sfail\sin\sSQLITE_MUTATION_TEST\sbuilds\sfollowing\san\serror\sin\sa\squery\sthat\suses\sCTEs. -D 2020-01-21T14:42:48.803 +C Fix\sa\scase\sin\sfts3auto.test\sthat\sfails\sfor\sSQLITE_DISABLE_FTS4_DEFERRED\sbuilds. +D 2020-01-21T15:01:14.246 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -933,7 +933,7 @@ F test/fts3am.test 218aa6ba0dfc50c7c16b2022aac5c6be593d08d8 F test/fts3an.test a49ccadc07a2f7d646ec1b81bc09da2d85a85b18 F test/fts3ao.test 266989148fec6d9f1bb6c5382f7aa3dcea0e9cd444576e28dd2b9287ac7dd220 F test/fts3atoken.test dc2078ce464914efe3a8dfc545dd034a0fc14f2ab425c240471d5a5f1c721400 -F test/fts3auto.test bfe0857bd0b69d68dd685a931b58486411a69f5794a7f6d6fe808bfa31a99614 +F test/fts3auto.test 649aa4c198d7acc5cd6355e19ee073d051c40d9e88a43fc3d88af46bdf3e99d5 F test/fts3aux1.test 7a170e172afdbceb67f5baa05941fd4fbf56af42f61daa3d140f4b4bf4cb68f6 F test/fts3aux2.test 2459e7fa3e22734aed237d1e2ae192f5541c4d8b218956ad2d90754977bf907f F test/fts3b.test c15c4a9d04e210d0be67e54ce6a87b927168fbf9c1e3faec8c1a732c366fd491 @@ -1857,7 +1857,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 3a62f64222ebd176c06e89b9fe5275b7b1f09df0afbae1c5c148a4e527e9d80b -R fc7d96a2946474e179d498e2cb12c819 +P c7e29458a73bbe73a1429477d0c01d5a7b870ab75d3cb08a703be21714e439b7 +R e1c2ef9a222166839d451e8e8b569689 U dan -Z 774f7b55b9de89c79414a8c248167cc4 +Z e0020253221c64d53f32a20e335969a5 diff --git a/manifest.uuid b/manifest.uuid index 8e49bf8fb5..fe5d67694e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c7e29458a73bbe73a1429477d0c01d5a7b870ab75d3cb08a703be21714e439b7 \ No newline at end of file +d241055ead935f0e461a67f483788bcd59f7e8d65ade54b9c7c7c4fec9414102 \ No newline at end of file diff --git a/test/fts3auto.test b/test/fts3auto.test index c2887cbf08..19193973d9 100644 --- a/test/fts3auto.test +++ b/test/fts3auto.test @@ -571,10 +571,12 @@ foreach {tn create} { do_fts3query_test 4.$tn.4.4 -deferred fi* t1 {on* NEAR/2 fi*} do_fts3query_test 4.$tn.4.5 -deferred fi* t1 {on* NEAR/3 fi*} - db eval {UPDATE t1_stat SET value=x'' WHERE id=0} - do_catchsql_test 4.$tn.4.6 { - SELECT docid FROM t1 WHERE t1 MATCH 'on* NEAR/3 fi*' - } {1 {database disk image is malformed}} + ifcapable fts4_deferred { + db eval {UPDATE t1_stat SET value=x'' WHERE id=0} + do_catchsql_test 4.$tn.4.6 { + SELECT docid FROM t1 WHERE t1 MATCH 'on* NEAR/3 fi*' + } {1 {database disk image is malformed}} + } } #-------------------------------------------------------------------------- From 8c812f98a31e90793afa2a7f706de3e186f9b600 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 21 Jan 2020 16:23:17 +0000 Subject: [PATCH 28/30] Fix a problem with using views in SQLITE_OMIT_VIRTUAL_TABLE builds. Also some test case fixes required for the same builds. FossilOrigin-Name: 934ee8bdb481a5cbd3d9c5f53028073129d3bca4fee14fe4a49bbf9c0c9d74f7 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/select.c | 4 +++- test/join.test | 2 ++ test/rowvaluevtab.test | 5 +++++ test/triggerG.test | 16 ++++++++++++++++ 6 files changed, 36 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 276abf0534..e4998aff52 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scase\sin\sfts3auto.test\sthat\sfails\sfor\sSQLITE_DISABLE_FTS4_DEFERRED\sbuilds. -D 2020-01-21T15:01:14.246 +C Fix\sa\sproblem\swith\susing\sviews\sin\sSQLITE_OMIT_VIRTUAL_TABLE\sbuilds.\sAlso\ssome\stest\scase\sfixes\srequired\sfor\sthe\ssame\sbuilds. +D 2020-01-21T16:23:17.784 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -531,7 +531,7 @@ F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c f0781c9e180028b279bc4ff079ad54f4727223d470c8d2343643fcaf79b67740 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 -F src/select.c 5924f8df8f07fa045e90e41022fb18539a2dd6a9198d11889e9905103652c656 +F src/select.c 3f7aecf64b08b018b89e4fe16ea621cc9a0e3f3801e9e5638cfe1a6035fa1581 F src/shell.c.in c2e20c43a44fb5588a6c27ce60589538fbf4794fd7686f5b2598eca22eaae1fa F src/sqlite.h.in 75d0304247a2154122d6d06f12219c1e29291d72304f0eeef4c1ec6b1409b443 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1088,7 +1088,7 @@ F test/ioerr4.test f130fe9e71008577b342b8874d52984bd04ede2c F test/ioerr5.test 2edfa4fb0f896f733071303b42224df8bedd9da4 F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b F test/istrue.test 75327829744e65cc8700e69340b8e6c192e10e39dfae7ccb0e970d3c4f49090a -F test/join.test 0e8d3f4092897c717abcaf64e2e7b298e1cb143e2436010c57cfed5596bf6d30 +F test/join.test bca044589e94bb466e4c1e91fb6fecdc3f3326ca6b3f590f555f1958156eb321 F test/join2.test 659bc6193f5c3fe20fa444dd2c91713db8c33e376b098b860644e175e87b8dbc F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916 @@ -1278,7 +1278,7 @@ F test/rowvalue7.test c1cbdbf407029db01f87764097c6ac02a1c5a37efd2776eff32a9cdfdf F test/rowvalue8.test 5900eddad9e2c3c2e26f1a95f74aafc1232ee5e0 F test/rowvalue9.test d8dd2c6ecac432dadaa79e41dc2434f007be1b6b F test/rowvaluefault.test 7cd9ccc6c2fbdd881672984087aad0491bb75504 -F test/rowvaluevtab.test d166df5b666662de1ebf40d6f3849f8a76b34e17183a6cc7f81b420c462ce447 +F test/rowvaluevtab.test cd9747bb3f308086944c07968f547ad6b05022e698d80b9ffbdfe09ce0b8da6f F test/rtree.test 0c8d9dd458d6824e59683c19ab2ffa9ef946f798 F test/run-wordcount.sh 891e89c4c2d16e629cd45951d4ed899ad12afc09 F test/savepoint.test 1f8a6b1aea9a0d05837adc463d4bf47bd9d0f1c842f1c2a9caccd639baf34bf9 @@ -1593,7 +1593,7 @@ F test/triggerC.test 29f5a28d0fe39e6e2c01f6e1f53f08c0955170ae10a63ad023e33cb0a16 F test/triggerD.test 8e7f3921a92a5797d472732108109e44575fa650 F test/triggerE.test ede2e4bce4ba802337bd69d39447fa04a938e06d84a8bfc53c76850fc36ed86d F test/triggerF.test 5d76f0a8c428ff87a4d5ed52da06f6096a2c787a1e21b846111dfac4123de3ad -F test/triggerG.test d5caeef6144ede2426dd13211fd72248241ff2ebc68e12a4c0bf30f5faa21499 +F test/triggerG.test 2b816093c91ba73c733cfa8aedcc210ad819d72a98b1da30768a3c56505233e9 F test/trustschema1.test 4e970aef0bfe0cee139703cc7209d0e0f07725d999b180ba50770f49edef1494 F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1 F test/tt3_index.c 39eec10a35f57672225be4d182862152896dee4a @@ -1857,7 +1857,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 c7e29458a73bbe73a1429477d0c01d5a7b870ab75d3cb08a703be21714e439b7 -R e1c2ef9a222166839d451e8e8b569689 +P d241055ead935f0e461a67f483788bcd59f7e8d65ade54b9c7c7c4fec9414102 +R f76ed78deea8ecda656692c47e3b99f8 U dan -Z e0020253221c64d53f32a20e335969a5 +Z f02cf9c138fa976fbef3a11edcb33089 diff --git a/manifest.uuid b/manifest.uuid index fe5d67694e..6cae8ce5f9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d241055ead935f0e461a67f483788bcd59f7e8d65ade54b9c7c7c4fec9414102 \ No newline at end of file +934ee8bdb481a5cbd3d9c5f53028073129d3bca4fee14fe4a49bbf9c0c9d74f7 \ No newline at end of file diff --git a/src/select.c b/src/select.c index b9e5b0b434..595b6eb6b2 100644 --- a/src/select.c +++ b/src/select.c @@ -4970,7 +4970,7 @@ static int selectExpander(Walker *pWalker, Select *p){ if( !IsVirtual(pTab) && cannotBeFunction(pParse, pFrom) ){ return WRC_Abort; } -#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_VIRTUALTABLE) +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) if( IsVirtual(pTab) || pTab->pSelect ){ i16 nCol; u8 eCodeOrig = pWalker->eCode; @@ -4980,6 +4980,7 @@ static int selectExpander(Walker *pWalker, Select *p){ sqlite3ErrorMsg(pParse, "access to view \"%s\" prohibited", pTab->zName); } +#ifndef SQLITE_OMIT_VIRTUALTABLE if( IsVirtual(pTab) && pFrom->fg.fromDDL && ALWAYS(pTab->pVTable!=0) @@ -4988,6 +4989,7 @@ static int selectExpander(Walker *pWalker, Select *p){ sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"", pTab->zName); } +#endif pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0); nCol = pTab->nCol; pTab->nCol = -1; diff --git a/test/join.test b/test/join.test index 391e0681ce..75f311b86b 100644 --- a/test/join.test +++ b/test/join.test @@ -991,6 +991,7 @@ do_execsql_test join-22.10 { # 2019-12-22 ticket 7929c1efb2d67e98 # reset_db +ifcapable vtab { do_execsql_test join-23.10 { CREATE TABLE t0(c0); INSERT INTO t0(c0) VALUES(123); @@ -1000,6 +1001,7 @@ do_execsql_test join-23.10 { ON vt0.name LIKE 'c0' WHERE v0.c0 == 0; } {123 0 c0} +} #------------------------------------------------------------------------- reset_db diff --git a/test/rowvaluevtab.test b/test/rowvaluevtab.test index aa834657b8..d3e0ac7b8a 100644 --- a/test/rowvaluevtab.test +++ b/test/rowvaluevtab.test @@ -15,6 +15,11 @@ set testdir [file dirname $argv0] source $testdir/tester.tcl set ::testprefix rowvaluevtab +ifcapable !vtab { + finish_test + return +} + register_echo_module db do_execsql_test 1.0 { diff --git a/test/triggerG.test b/test/triggerG.test index f5965e1707..8cf20b5ec9 100644 --- a/test/triggerG.test +++ b/test/triggerG.test @@ -75,4 +75,20 @@ do_catchsql_test 310 { INSERT INTO t4 VALUES(1); } {1 {hex literal too big: 0x2147483648e0e0099}} +#------------------------------------------------------------------------- +# +do_execsql_test 400 { + CREATE VIEW v0(a) AS SELECT 1234; + CREATE TRIGGER t0001 INSTEAD OF DELETE ON v0 BEGIN + SELECT old.a; + END; +} +do_execsql_test 405 { + SELECT a FROM v0; +} {1234} +do_execsql_test 410 { + DELETE FROM v0; +} + + finish_test From d0add948ea5ee4796bcb65e2cfeee6e62eff9c28 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 21 Jan 2020 16:31:26 +0000 Subject: [PATCH 29/30] Update test file exclusive.test so that it works with the "journaltest" permutation. FossilOrigin-Name: 4daf94d83319231e42243625c804d5db2d14f10fa5ea1a1f358c3603c47b955b --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/exclusive.test | 36 +++++++++++++++++++++--------------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/manifest b/manifest index e4998aff52..3b447564e8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\swith\susing\sviews\sin\sSQLITE_OMIT_VIRTUAL_TABLE\sbuilds.\sAlso\ssome\stest\scase\sfixes\srequired\sfor\sthe\ssame\sbuilds. -D 2020-01-21T16:23:17.784 +C Update\stest\sfile\sexclusive.test\sso\sthat\sit\sworks\swith\sthe\s"journaltest"\spermutation. +D 2020-01-21T16:31:26.158 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -854,7 +854,7 @@ F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020 F test/eqp.test 84879b63e3110552bf8ce648a3507dc3ceb72109ecec83c2aef0db37a27f6382 F test/errmsg.test eae9f091eb39ce7e20305de45d8e5d115b68fa856fba4ea6757b6ca3705ff7f9 F test/eval.test a64c9105d6ff163df7cf09d6ac29cdad5922078c -F test/exclusive.test d6ccc6acc5d660544f8e0cacaec2c620f8ebb42a764d783ab53430e26057a185 +F test/exclusive.test 7ff63be7503990921838d5c9f77f6e33e68e48ed1a9d48cd28745bf650bf0747 F test/exclusive2.test 984090e8e9d1b331d2e8111daf6e5d61dda0bef7 F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7 F test/exists.test 79a75323c78f02bbe9c251ea502a092f9ef63dac @@ -1857,7 +1857,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 d241055ead935f0e461a67f483788bcd59f7e8d65ade54b9c7c7c4fec9414102 -R f76ed78deea8ecda656692c47e3b99f8 +P 934ee8bdb481a5cbd3d9c5f53028073129d3bca4fee14fe4a49bbf9c0c9d74f7 +R 5a98666c879217368b8f21c26d062d92 U dan -Z f02cf9c138fa976fbef3a11edcb33089 +Z 3d15e2ce9b58e3608f870860fed31373 diff --git a/manifest.uuid b/manifest.uuid index 6cae8ce5f9..8837b7b461 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -934ee8bdb481a5cbd3d9c5f53028073129d3bca4fee14fe4a49bbf9c0c9d74f7 \ No newline at end of file +4daf94d83319231e42243625c804d5db2d14f10fa5ea1a1f358c3603c47b955b \ No newline at end of file diff --git a/test/exclusive.test b/test/exclusive.test index 5168fa7482..494ede7f76 100644 --- a/test/exclusive.test +++ b/test/exclusive.test @@ -512,21 +512,27 @@ do_execsql_test exclusive-6.5 { } {exclusive} # 2019-12-26 ticket fb3b3024ea238d5c -do_test exclusive-7.1 { - db close - forcedelete test.db test.db-journal test.db-wal - sqlite3 db test.db - # The following sequence of pragmas would trigger an assert() - # associated with Pager.changeCountDone inside of assert_pager_state(), - # prior to the fix. - db eval { - PRAGMA locking_mode = EXCLUSIVE; - PRAGMA journal_mode = WAL; - PRAGMA locking_mode = NORMAL; - PRAGMA user_version; - PRAGMA journal_mode = DELETE; - } -} {exclusive wal normal 0 delete} +if {[permutation]!="journaltest"} { + # The custom VFS used by the "journaltest" permutation cannot open the + # shared-memory file. So, while it is able to switch the db file to + # journal_mode=WAL when locking_mode=EXCLUSIVE, it can no longer access + # it once the locking_mode is changed back to NORMAL. + do_test exclusive-7.1 { + db close + forcedelete test.db test.db-journal test.db-wal + sqlite3 db test.db + # The following sequence of pragmas would trigger an assert() + # associated with Pager.changeCountDone inside of assert_pager_state(), + # prior to the fix. + db eval { + PRAGMA locking_mode = EXCLUSIVE; + PRAGMA journal_mode = WAL; + PRAGMA locking_mode = NORMAL; + PRAGMA user_version; + PRAGMA journal_mode = DELETE; + } + } {exclusive wal normal 0 delete} +} } ;# atomic_batch_write==0 From 1a3220ace68c3889c875120120497d4c7b78e714 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 22 Jan 2020 18:38:59 +0000 Subject: [PATCH 30/30] Version 3.31.0 FossilOrigin-Name: f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824 --- manifest | 13 ++++++++----- manifest.uuid | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/manifest b/manifest index 3b447564e8..2589a4d0ca 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\stest\sfile\sexclusive.test\sso\sthat\sit\sworks\swith\sthe\s"journaltest"\spermutation. -D 2020-01-21T16:31:26.158 +C Version\s3.31.0 +D 2020-01-22T18:38:59.573 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1857,7 +1857,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 934ee8bdb481a5cbd3d9c5f53028073129d3bca4fee14fe4a49bbf9c0c9d74f7 +P 4daf94d83319231e42243625c804d5db2d14f10fa5ea1a1f358c3603c47b955b R 5a98666c879217368b8f21c26d062d92 -U dan -Z 3d15e2ce9b58e3608f870860fed31373 +T +bgcolor * #d0c0ff +T +sym-release * +T +sym-version-3.31.0 * +U drh +Z 51c630793e0eec473e1274a795f77643 diff --git a/manifest.uuid b/manifest.uuid index 8837b7b461..f3f9cddef5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4daf94d83319231e42243625c804d5db2d14f10fa5ea1a1f358c3603c47b955b \ No newline at end of file +f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824 \ No newline at end of file