From 3e2d47d49fbf897f28971845671d3fd6aa3cc5b3 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Dec 2018 03:59:25 +0000 Subject: [PATCH 01/49] Invoking the sqlite3_trace() or sqlite3_trace_v2() interfaces cancels any sqlite3_profile() that is running. FossilOrigin-Name: ec63d3506bd429560077f82a4c5ed9d189780789fe1c134fff4f3b8733be1a3f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/main.c | 4 ---- src/sqlite.h.in | 6 +++--- 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index cdcaa64e13..720ed6ca6b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sthe\sunused\spColHash\sfield\sfrom\sthe\sTable\sobject. -D 2018-12-06T02:01:17.509 +C Invoking\sthe\ssqlite3_trace()\sor\ssqlite3_trace_v2()\sinterfaces\scancels\nany\ssqlite3_profile()\sthat\sis\srunning. +D 2018-12-06T03:59:25.918 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -471,7 +471,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c f12f27eb606d601825be9a229a7390a8d64d40226697883f96de8e088d620055 F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e F src/loadext.c 9050dd153b5583804184be9c9dee9ebb554178d6db1f8ac280899e8aad9060e6 -F src/main.c 5a94791735ddd51804b75b7ef4645c25cbe6fe1d0e8f25851b2ed1211ad3d076 +F src/main.c 156076e2fc4eea09523323bae1d5f177a95a777a3b22e49e173437556fe3571c F src/malloc.c 07295435093ce354c6d9063ac05a2eeae28bd251d2e63c48b3d67c12c76f7e18 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -509,7 +509,7 @@ F src/resolve.c 976e7879286a1eecdc71ceff64f6d1b3f58c8f8096537ba668b3dc0887f410c1 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 61e867a906f140b73baf4ce7a201ad6dcba30820969f5618ee40e9a0d32c6f5f F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883d -F src/sqlite.h.in cce9feede1c1c03923c091b4bbbd081dd77aaf92024cc2cdbf65f712c2f668c3 +F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 F src/sqliteInt.h 97adda953e7f118d47b8135f76f88c6420ff6707285782616f393a9ea255d577 @@ -1782,7 +1782,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 ea50815bf80ab0d36891518f209acbcd3d6d8d84529741bffd4e841874c78aff -R 95857723bf3583344511ca7005311df0 +P 3a2c047989facc3461c63a2f9eed412014c951035a80da47c52a70139fb552de +R e33573679d2b83476b49b39d100df865 U drh -Z 273a3b08446feca43c8c62181fb35feb +Z 9b63335dca170db3a75ac781c84ad8b2 diff --git a/manifest.uuid b/manifest.uuid index 5c54503b56..787485caf5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3a2c047989facc3461c63a2f9eed412014c951035a80da47c52a70139fb552de \ No newline at end of file +ec63d3506bd429560077f82a4c5ed9d189780789fe1c134fff4f3b8733be1a3f \ No newline at end of file diff --git a/src/main.c b/src/main.c index 27a4206a4f..aa4546684c 100644 --- a/src/main.c +++ b/src/main.c @@ -1996,7 +1996,6 @@ void *sqlite3_trace(sqlite3 *db, void(*xTrace)(void*,const char*), void *pArg){ sqlite3_mutex_enter(db->mutex); pOld = db->pTraceArg; db->mTrace = xTrace ? SQLITE_TRACE_LEGACY : 0; - if( db->xProfile ) db->mTrace |= SQLITE_TRACE_XPROFILE; db->xTrace = (int(*)(u32,void*,void*,void*))xTrace; db->pTraceArg = pArg; sqlite3_mutex_leave(db->mutex); @@ -2021,9 +2020,6 @@ int sqlite3_trace_v2( if( mTrace==0 ) xTrace = 0; if( xTrace==0 ) mTrace = 0; db->mTrace = mTrace; -#ifndef SQLITE_OMIT_DEPRECATED - if( db->xProfile ) db->mTrace |= SQLITE_TRACE_XPROFILE; -#endif db->xTrace = xTrace; db->pTraceArg = pArg; sqlite3_mutex_leave(db->mutex); diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 85ef3635a4..4f33bb9ca9 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -2991,9 +2991,9 @@ int sqlite3_set_authorizer( ** time is in units of nanoseconds, however the current implementation ** is only capable of millisecond resolution so the six least significant ** digits in the time are meaningless. Future versions of SQLite -** might provide greater resolution on the profiler callback. The -** sqlite3_profile() function is considered experimental and is -** subject to change in future versions of SQLite. +** might provide greater resolution on the profiler callback. Invoking +** either [sqlite3_trace()] or [sqlite3_trace_v2()] will cancel the +** profile callback. */ SQLITE_DEPRECATED void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*); From ec8fc62c42902496b3955c7447f865a6142edfeb Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Dec 2018 16:11:14 +0000 Subject: [PATCH 02/49] Issue a warning whenever a double-quoted string literal is used. FossilOrigin-Name: ac9ad5043026b30394812457e1535df2759aea0d4510029561e92e386672796f --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/resolve.c | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 720ed6ca6b..462c918e79 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Invoking\sthe\ssqlite3_trace()\sor\ssqlite3_trace_v2()\sinterfaces\scancels\nany\ssqlite3_profile()\sthat\sis\srunning. -D 2018-12-06T03:59:25.918 +C Issue\sa\swarning\swhenever\sa\sdouble-quoted\sstring\sliteral\sis\sused. +D 2018-12-06T16:11:14.066 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -505,7 +505,7 @@ F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 F src/prepare.c 66b5f9791a3ef57131cbba58c33104ebea814a70a5cfcafabf5aed5a3e3858fe F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c 976e7879286a1eecdc71ceff64f6d1b3f58c8f8096537ba668b3dc0887f410c1 +F src/resolve.c e0408228bad5d13937a626521cba42c6f768643a6353712218d7e01fb201b202 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 61e867a906f140b73baf4ce7a201ad6dcba30820969f5618ee40e9a0d32c6f5f F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883d @@ -1782,7 +1782,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 3a2c047989facc3461c63a2f9eed412014c951035a80da47c52a70139fb552de -R e33573679d2b83476b49b39d100df865 +P ec63d3506bd429560077f82a4c5ed9d189780789fe1c134fff4f3b8733be1a3f +R 3200e72b511607c15352eb3a60112ed6 U drh -Z 9b63335dca170db3a75ac781c84ad8b2 +Z 06f8f012c6fe6f33f55c7a711e9e6cc5 diff --git a/manifest.uuid b/manifest.uuid index 787485caf5..2cc1a0e981 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ec63d3506bd429560077f82a4c5ed9d189780789fe1c134fff4f3b8733be1a3f \ No newline at end of file +ac9ad5043026b30394812457e1535df2759aea0d4510029561e92e386672796f \ No newline at end of file diff --git a/src/resolve.c b/src/resolve.c index effbe646fe..39c2039f59 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -474,6 +474,22 @@ static int lookupName( if( cnt==0 && zTab==0 ){ assert( pExpr->op==TK_ID ); if( ExprHasProperty(pExpr,EP_DblQuoted) ){ + /* If a double-quoted identifier does not match any known column name, + ** then treat it as a string. + ** + ** This hack was added in the early days of SQLite in a misguided attempt + ** to be compatible with MySQL 3.x, which used double-quotes for strings. + ** I now sorely regret putting in this hack. The effect of this hack is + ** that misspelled identifier names are silently converted into strings + ** rather than causing an error, to the frustration of countless + ** programmers. To all those frustrated programmers, my apologies. + ** + ** Someday, I hope to get rid of this hack. Unfortunately there is + ** a huge amount of legacy SQL that uses it. So for now, we just + ** issue a warning. + */ + sqlite3_log(SQLITE_WARNING, + "double-quoted string literal: \"%w\"", zCol); pExpr->op = TK_STRING; pExpr->y.pTab = 0; return WRC_Prune; From 70d5dfba687ac41bf79d30198f7dd3d58cb6645e Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Dec 2018 16:50:55 +0000 Subject: [PATCH 03/49] When saving off the value of sqlite3.flags, take care to preserve all 64 bits. FossilOrigin-Name: 9c6dbcfab5952cf4e54de30cf9cee48f988b91a35dc3f04d64d6d994dd84a076 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/main.c | 2 +- src/select.c | 2 +- src/vacuum.c | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 462c918e79..46d74a407e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Issue\sa\swarning\swhenever\sa\sdouble-quoted\sstring\sliteral\sis\sused. -D 2018-12-06T16:11:14.066 +C When\ssaving\soff\sthe\svalue\sof\ssqlite3.flags,\stake\scare\sto\spreserve\sall\s64\nbits. +D 2018-12-06T16:50:55.170 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -471,7 +471,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c f12f27eb606d601825be9a229a7390a8d64d40226697883f96de8e088d620055 F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e F src/loadext.c 9050dd153b5583804184be9c9dee9ebb554178d6db1f8ac280899e8aad9060e6 -F src/main.c 156076e2fc4eea09523323bae1d5f177a95a777a3b22e49e173437556fe3571c +F src/main.c cd8fefa30afc0b480b2881c216465f6ba5ea185b1ef4acb9f3593c12dc3b05a8 F src/malloc.c 07295435093ce354c6d9063ac05a2eeae28bd251d2e63c48b3d67c12c76f7e18 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -507,7 +507,7 @@ F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c e0408228bad5d13937a626521cba42c6f768643a6353712218d7e01fb201b202 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 -F src/select.c 61e867a906f140b73baf4ce7a201ad6dcba30820969f5618ee40e9a0d32c6f5f +F src/select.c 44e04ad75cbbe2d2f6a30c5f586f344bbc94b80e456623b8602750202e484717 F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883d F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -577,7 +577,7 @@ F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 -F src/vacuum.c 836cadc922de866c849e23a75f93d344cdc143d388339305d09a3fed27e8798d +F src/vacuum.c 675a4bdae41b115062327544e3c55c2dc302677be2231b004d28a33dd418684d F src/vdbe.c 005e691ea4c7d51e6c1a69d9389aeb34700884c85f51681817ddea3fdc2fc39b F src/vdbe.h 5081dcc497777efe5e9ebe7330d283a044a005e4bdda2e2e984f03bf89a0d907 F src/vdbeInt.h 437e6c6af679fdf157867eb83a8adc6cf5145d6774453c2214cfd0bd01d92980 @@ -1782,7 +1782,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 ec63d3506bd429560077f82a4c5ed9d189780789fe1c134fff4f3b8733be1a3f -R 3200e72b511607c15352eb3a60112ed6 +P ac9ad5043026b30394812457e1535df2759aea0d4510029561e92e386672796f +R c007d58f48241c5155abb3e9bb7962bc U drh -Z 06f8f012c6fe6f33f55c7a711e9e6cc5 +Z cdbf42bed7dc66ac0253bfff8bfb898d diff --git a/manifest.uuid b/manifest.uuid index 2cc1a0e981..4ec17b4483 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ac9ad5043026b30394812457e1535df2759aea0d4510029561e92e386672796f \ No newline at end of file +9c6dbcfab5952cf4e54de30cf9cee48f988b91a35dc3f04d64d6d994dd84a076 \ No newline at end of file diff --git a/src/main.c b/src/main.c index aa4546684c..a4049f23f5 100644 --- a/src/main.c +++ b/src/main.c @@ -843,7 +843,7 @@ int sqlite3_db_config(sqlite3 *db, int op, ...){ if( aFlagOp[i].op==op ){ int onoff = va_arg(ap, int); int *pRes = va_arg(ap, int*); - u32 oldFlags = db->flags; + u64 oldFlags = db->flags; if( onoff>0 ){ db->flags |= aFlagOp[i].mask; }else if( onoff==0 ){ diff --git a/src/select.c b/src/select.c index c60ff27001..68f2c9f627 100644 --- a/src/select.c +++ b/src/select.c @@ -2077,7 +2077,7 @@ void sqlite3SelectAddColumnTypeAndCollation( Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){ Table *pTab; sqlite3 *db = pParse->db; - int savedFlags; + u64 savedFlags; savedFlags = db->flags; db->flags &= ~SQLITE_FullColNames; diff --git a/src/vacuum.c b/src/vacuum.c index 5fb048916b..5017dbffde 100644 --- a/src/vacuum.c +++ b/src/vacuum.c @@ -136,8 +136,8 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ int rc = SQLITE_OK; /* Return code from service routines */ Btree *pMain; /* The database being vacuumed */ Btree *pTemp; /* The temporary database we vacuum into */ - u16 saved_mDbFlags; /* Saved value of db->mDbFlags */ - u32 saved_flags; /* Saved value of db->flags */ + u32 saved_mDbFlags; /* Saved value of db->mDbFlags */ + u64 saved_flags; /* Saved value of db->flags */ int saved_nChange; /* Saved value of db->nChange */ int saved_nTotalChange; /* Saved value of db->nTotalChange */ u8 saved_mTrace; /* Saved trace settings */ From d5b44d60c7c79ff828e790a6fe31c80cdf10e47c Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Dec 2018 17:06:02 +0000 Subject: [PATCH 04/49] When masking bits off of sqlite3.flags, make sure the mask is 64 bits in size so as not to accidentally mask of high-order bits. FossilOrigin-Name: 53d3b169d8e1892163526caff2c843302c92e280fdeff6831e23a9bb15b82be3 --- manifest | 28 ++++++++++++++-------------- manifest.uuid | 2 +- src/btree.c | 2 +- src/loadext.c | 2 +- src/main.c | 4 ++-- src/pragma.c | 2 +- src/prepare.c | 2 +- src/select.c | 2 +- src/vacuum.c | 2 +- src/vdbe.c | 2 +- src/vdbeaux.c | 2 +- 11 files changed, 25 insertions(+), 25 deletions(-) diff --git a/manifest b/manifest index 46d74a407e..035bff0044 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\ssaving\soff\sthe\svalue\sof\ssqlite3.flags,\stake\scare\sto\spreserve\sall\s64\nbits. -D 2018-12-06T16:50:55.170 +C When\smasking\sbits\soff\sof\ssqlite3.flags,\smake\ssure\sthe\smask\sis\s64\sbits\nin\ssize\sso\sas\snot\sto\saccidentally\smask\sof\shigh-order\sbits. +D 2018-12-06T17:06:02.839 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c ba7c7eef4461790f37c309936bfc5d0d6ba9b194b02d3c8ff1fd53b420ea6d3b +F src/btree.c 4377d0d9a0b969c30b2bc343a12140a53ba6ab0dbf34c1686f232e67d87a557b F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -470,8 +470,8 @@ F src/hwtime.h 747c1bbe9df21a92e9c50f3bbec1de841dc5e5da F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c f12f27eb606d601825be9a229a7390a8d64d40226697883f96de8e088d620055 F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e -F src/loadext.c 9050dd153b5583804184be9c9dee9ebb554178d6db1f8ac280899e8aad9060e6 -F src/main.c cd8fefa30afc0b480b2881c216465f6ba5ea185b1ef4acb9f3593c12dc3b05a8 +F src/loadext.c e6f10875d52aca3b7e57ce1ec174aeafc9b6c00b43000cd30d791f9cb490b7a6 +F src/main.c 473d149b51d4f5376e3308e11d5bc07f7570cf596eacecd148c6f7ae63a649ce F src/malloc.c 07295435093ce354c6d9063ac05a2eeae28bd251d2e63c48b3d67c12c76f7e18 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -500,14 +500,14 @@ F src/parse.y 5cf85c2b9dfac38ac4e2bf2776484705186ce2eda8631e65cc0b04bf566c1173 F src/pcache.c 696a01f1a6370c1b50a09c15972bc3bee3333f8fcd1f2da8e9a76b1b062c59ee F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c ad0ffc5b35b0280d045ac569d34d4b842e3e6a4a118f6396b320987a0957afcc -F src/pragma.c 4e056f042683b99c4ea0db395f68d051b1a95833ab40951c40d3ef7e1fee1354 +F src/pragma.c 96ce7dce4dc9cb2b7aa0e1b2ce7536870bdc00b10becc278245e775489447ea0 F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 -F src/prepare.c 66b5f9791a3ef57131cbba58c33104ebea814a70a5cfcafabf5aed5a3e3858fe +F src/prepare.c 5fe8eb586d0e9d4009609490866525f242a3d0df01e39d967bf2611dc8081088 F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c e0408228bad5d13937a626521cba42c6f768643a6353712218d7e01fb201b202 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 -F src/select.c 44e04ad75cbbe2d2f6a30c5f586f344bbc94b80e456623b8602750202e484717 +F src/select.c 06a122decd9268c747e9110448b0c84249a4623ca9d78a73618ce648f7af8869 F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883d F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -577,12 +577,12 @@ F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 -F src/vacuum.c 675a4bdae41b115062327544e3c55c2dc302677be2231b004d28a33dd418684d -F src/vdbe.c 005e691ea4c7d51e6c1a69d9389aeb34700884c85f51681817ddea3fdc2fc39b +F src/vacuum.c c67085526fb51e141a85be3f7c9b91a2d38705bbb0ef911d8dec1e2d36cbdce1 +F src/vdbe.c c7312c909df5032b4ed27996c2ed8f5bf948f6a982458f85398520aaba0ccf81 F src/vdbe.h 5081dcc497777efe5e9ebe7330d283a044a005e4bdda2e2e984f03bf89a0d907 F src/vdbeInt.h 437e6c6af679fdf157867eb83a8adc6cf5145d6774453c2214cfd0bd01d92980 F src/vdbeapi.c 9709452bee82963e1f7f1f5d0c71db823d553f8dbb2c47a911c4983d537a1947 -F src/vdbeaux.c 8e2fe020824b743090025ff6f9ffeec3ca4624523ddb2d1af1b1f61abaab3db4 +F src/vdbeaux.c d71429f70e95e21aaf15ee287a78beefcda4bdc7d1b6d3c704dfeba820a792e0 F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191 F src/vdbemem.c 7b3305bc4a5139f4536ac9b5f61da0f915e49d2e3fdfa87dfdfa9d7aba8bc1e9 F src/vdbesort.c 90aad5a92608f2dd771c96749beabdb562c9d881131a860a7a5bccf66dc3be7f @@ -1782,7 +1782,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 ac9ad5043026b30394812457e1535df2759aea0d4510029561e92e386672796f -R c007d58f48241c5155abb3e9bb7962bc +P 9c6dbcfab5952cf4e54de30cf9cee48f988b91a35dc3f04d64d6d994dd84a076 +R b1b5c125b5cc5dd847ef51923c461312 U drh -Z cdbf42bed7dc66ac0253bfff8bfb898d +Z 9423d60b113ec33e61947be8b42c640e diff --git a/manifest.uuid b/manifest.uuid index 4ec17b4483..8f6dcb9997 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9c6dbcfab5952cf4e54de30cf9cee48f988b91a35dc3f04d64d6d994dd84a076 \ No newline at end of file +53d3b169d8e1892163526caff2c843302c92e280fdeff6831e23a9bb15b82be3 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 137500eedc..9046a72d32 100644 --- a/src/btree.c +++ b/src/btree.c @@ -9856,7 +9856,7 @@ char *sqlite3BtreeIntegrityCheck( } #endif testcase( pBt->db->flags & SQLITE_CellSizeCk ); - pBt->db->flags &= ~SQLITE_CellSizeCk; + pBt->db->flags &= ~(u64)SQLITE_CellSizeCk; for(i=0; (int)iflags |= SQLITE_LoadExtension|SQLITE_LoadExtFunc; }else{ - db->flags &= ~(SQLITE_LoadExtension|SQLITE_LoadExtFunc); + db->flags &= ~(u64)(SQLITE_LoadExtension|SQLITE_LoadExtFunc); } sqlite3_mutex_leave(db->mutex); return SQLITE_OK; diff --git a/src/main.c b/src/main.c index a4049f23f5..627d24e0b1 100644 --- a/src/main.c +++ b/src/main.c @@ -847,7 +847,7 @@ int sqlite3_db_config(sqlite3 *db, int op, ...){ if( onoff>0 ){ db->flags |= aFlagOp[i].mask; }else if( onoff==0 ){ - db->flags &= ~aFlagOp[i].mask; + db->flags &= ~(u64)aFlagOp[i].mask; } if( oldFlags!=db->flags ){ sqlite3ExpirePreparedStatements(db, 0); @@ -1310,7 +1310,7 @@ void sqlite3RollbackAll(sqlite3 *db, int tripCode){ /* Any deferred constraint violations have now been resolved. */ db->nDeferredCons = 0; db->nDeferredImmCons = 0; - db->flags &= ~SQLITE_DeferFKs; + db->flags &= ~(u64)SQLITE_DeferFKs; /* If one has been configured, invoke the rollback-hook callback */ if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){ diff --git a/src/pragma.c b/src/pragma.c index ada652cf14..2f27d11005 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -816,7 +816,7 @@ void sqlite3Pragma( if( sqlite3GetBoolean(zRight, size!=0) ){ db->flags |= SQLITE_CacheSpill; }else{ - db->flags &= ~SQLITE_CacheSpill; + db->flags &= ~(u64)SQLITE_CacheSpill; } setAllPagerFlags(db); } diff --git a/src/prepare.c b/src/prepare.c index c470a54bda..ad07eca45a 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -293,7 +293,7 @@ int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg, u32 mFlags){ ** indices that the user might have created. */ if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){ - db->flags &= ~SQLITE_LegacyFileFmt; + db->flags &= ~(u64)SQLITE_LegacyFileFmt; } /* Read the schema information out of the schema tables diff --git a/src/select.c b/src/select.c index 68f2c9f627..a275cb4b4d 100644 --- a/src/select.c +++ b/src/select.c @@ -2080,7 +2080,7 @@ Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){ u64 savedFlags; savedFlags = db->flags; - db->flags &= ~SQLITE_FullColNames; + db->flags &= ~(u64)SQLITE_FullColNames; db->flags |= SQLITE_ShortColNames; sqlite3SelectPrep(pParse, pSelect, 0); if( pParse->nErr ) return 0; diff --git a/src/vacuum.c b/src/vacuum.c index 5017dbffde..8416b16729 100644 --- a/src/vacuum.c +++ b/src/vacuum.c @@ -166,7 +166,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ saved_mTrace = db->mTrace; db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks; db->mDbFlags |= DBFLAG_PreferBuiltin | DBFLAG_Vacuum; - db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder + db->flags &= ~(u64)(SQLITE_ForeignKeys | SQLITE_ReverseOrder | SQLITE_Defensive | SQLITE_CountRows); db->mTrace = 0; diff --git a/src/vdbe.c b/src/vdbe.c index 14f3e1bd3c..2803330b34 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -7086,7 +7086,7 @@ case OP_VRename: { rc = sqlite3VdbeChangeEncoding(pName, SQLITE_UTF8); if( rc ) goto abort_due_to_error; rc = pVtab->pModule->xRename(pVtab, pName->z); - if( isLegacy==0 ) db->flags &= ~SQLITE_LegacyAlter; + if( isLegacy==0 ) db->flags &= ~(u64)SQLITE_LegacyAlter; sqlite3VtabImportErrmsg(p, pVtab); p->expired = 0; if( rc ) goto abort_due_to_error; diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 0ed9e81d90..40a63319db 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -2855,7 +2855,7 @@ int sqlite3VdbeHalt(Vdbe *p){ }else{ db->nDeferredCons = 0; db->nDeferredImmCons = 0; - db->flags &= ~SQLITE_DeferFKs; + db->flags &= ~(u64)SQLITE_DeferFKs; sqlite3CommitInternalChanges(db); } }else{ From 11df7d2839a44e4814ebb110718e658c5ad9014a Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Dec 2018 19:15:36 +0000 Subject: [PATCH 05/49] Simplify the query flattener so that it does not duplicate the WHERE clause of subquery that is being incorporated into the outer query - copies it directly. This is more efficient. And it also fixes the specific test case show for ticket [f09fcd17810f65f71789525] but it does not resolve the more general problem that sqlite3ExprDup() does not correctly duplicate expressions that contain subqueries with window functions. FossilOrigin-Name: f1b18d44ff855573542c1947a42d4025dff54cacc13dac14d044521762ea9736 --- manifest | 17 ++++++++++------- manifest.uuid | 2 +- src/select.c | 4 +++- test/window1.test | 13 +++++++++++++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 035bff0044..8674aa7a68 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\smasking\sbits\soff\sof\ssqlite3.flags,\smake\ssure\sthe\smask\sis\s64\sbits\nin\ssize\sso\sas\snot\sto\saccidentally\smask\sof\shigh-order\sbits. -D 2018-12-06T17:06:02.839 +C Simplify\sthe\squery\sflattener\sso\sthat\sit\sdoes\snot\sduplicate\sthe\sWHERE\sclause\nof\ssubquery\sthat\sis\sbeing\sincorporated\sinto\sthe\souter\squery\s-\scopies\sit\ndirectly.\s\sThis\sis\smore\sefficient.\s\sAnd\sit\salso\sfixes\sthe\sspecific\stest\scase\nshow\sfor\sticket\s[f09fcd17810f65f71789525]\sbut\sit\sdoes\snot\sresolve\sthe\smore\ngeneral\sproblem\sthat\ssqlite3ExprDup()\sdoes\snot\scorrectly\sduplicate\sexpressions\nthat\scontain\ssubqueries\swith\swindow\sfunctions. +D 2018-12-06T19:15:36.453 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -507,7 +507,7 @@ F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c e0408228bad5d13937a626521cba42c6f768643a6353712218d7e01fb201b202 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 -F src/select.c 06a122decd9268c747e9110448b0c84249a4623ca9d78a73618ce648f7af8869 +F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883d F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1655,7 +1655,7 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972 F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc -F test/window1.test 02e481ac48c445b43bab7b3cf1e4115165b5127a1aa29e14f5372922c836f1a4 +F test/window1.test d55c41a0b7a3246ed3882e87c540ac2e4bf7a8f7774e0c2e81690b4f4bedc088 F test/window2.tcl 9bfa842d8a62b0d36dc8c1b5972206393c43847433c6d75940b87fec93ce3143 F test/window2.test 8e6d2a1b9f54dfebee1cde961c8590cd87b4db45c50f44947a211e1b63c2a05e F test/window3.tcl 577a3b1ff913208e5248c04dab9df17fd760ce159a752789e26d0cb4a5f91823 @@ -1782,7 +1782,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 9c6dbcfab5952cf4e54de30cf9cee48f988b91a35dc3f04d64d6d994dd84a076 -R b1b5c125b5cc5dd847ef51923c461312 +P 53d3b169d8e1892163526caff2c843302c92e280fdeff6831e23a9bb15b82be3 +R a2d2ec8d34c71e6abf08e50ec579efcc +T *branch * ticket-f09fcd17810f +T *sym-ticket-f09fcd17810f * +T -sym-trunk * U drh -Z 9423d60b113ec33e61947be8b42c640e +Z 5018814e4a4daf9bdeea4c03d1c78115 diff --git a/manifest.uuid b/manifest.uuid index 8f6dcb9997..9922fca4fa 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -53d3b169d8e1892163526caff2c843302c92e280fdeff6831e23a9bb15b82be3 \ No newline at end of file +f1b18d44ff855573542c1947a42d4025dff54cacc13dac14d044521762ea9736 \ No newline at end of file diff --git a/src/select.c b/src/select.c index a275cb4b4d..5e30504d4c 100644 --- a/src/select.c +++ b/src/select.c @@ -3461,6 +3461,7 @@ static Expr *substExpr( ifNullRow.iTable = pSubst->iNewTable; pCopy = &ifNullRow; } + testcase( ExprHasProperty(pCopy, EP_Subquery) ); pNew = sqlite3ExprDup(db, pCopy, 0); if( pNew && pSubst->isLeftJoin ){ ExprSetProperty(pNew, EP_CanBeNull); @@ -4025,7 +4026,8 @@ static int flattenSubquery( pParent->pOrderBy = pOrderBy; pSub->pOrderBy = 0; } - pWhere = sqlite3ExprDup(db, pSub->pWhere, 0); + pWhere = pSub->pWhere; + pSub->pWhere = 0; if( isLeftJoin>0 ){ setJoinExpr(pWhere, iNewParent); } diff --git a/test/window1.test b/test/window1.test index a8399a8606..c24bbaa20f 100644 --- a/test/window1.test +++ b/test/window1.test @@ -594,4 +594,17 @@ do_execsql_test 13.5 { } { } +# 2018-12-06 +# https://www.sqlite.org/src/info/f09fcd17810f65f7 +# Assertion fault when window functions are used +# +sqlite3 db :memory: +do_execsql_test 14.0 { + SELECT * FROM( + SELECT * FROM (SELECT 1 AS c) WHERE c IN ( + SELECT (row_number() OVER()) FROM (VALUES (0)) + ) + ); +} {1} + finish_test From bb383df7c625daa4c7a0db4c7eed2296dc171bde Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Dec 2018 19:56:20 +0000 Subject: [PATCH 06/49] New test case that still hits an assertion fault, just to prove that the previous checkin merely made the problem more obscure and did not completely fix it. FossilOrigin-Name: a9a3b532643b5f106509bb29c3e6bc9d41ec5b2da5a0cd4067898f376eb626a2 --- manifest | 15 ++++++--------- manifest.uuid | 2 +- test/window1.test | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 8674aa7a68..066d87f7c1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Simplify\sthe\squery\sflattener\sso\sthat\sit\sdoes\snot\sduplicate\sthe\sWHERE\sclause\nof\ssubquery\sthat\sis\sbeing\sincorporated\sinto\sthe\souter\squery\s-\scopies\sit\ndirectly.\s\sThis\sis\smore\sefficient.\s\sAnd\sit\salso\sfixes\sthe\sspecific\stest\scase\nshow\sfor\sticket\s[f09fcd17810f65f71789525]\sbut\sit\sdoes\snot\sresolve\sthe\smore\ngeneral\sproblem\sthat\ssqlite3ExprDup()\sdoes\snot\scorrectly\sduplicate\sexpressions\nthat\scontain\ssubqueries\swith\swindow\sfunctions. -D 2018-12-06T19:15:36.453 +C New\stest\scase\sthat\sstill\shits\san\sassertion\sfault,\sjust\sto\sprove\sthat\sthe\nprevious\scheckin\smerely\smade\sthe\sproblem\smore\sobscure\sand\sdid\snot\scompletely\nfix\sit. +D 2018-12-06T19:56:20.155 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -1655,7 +1655,7 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972 F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc -F test/window1.test d55c41a0b7a3246ed3882e87c540ac2e4bf7a8f7774e0c2e81690b4f4bedc088 +F test/window1.test 1003e19bebe06be286a38139ea5fc010b30c055cc1527824b09d609f89bbd93b F test/window2.tcl 9bfa842d8a62b0d36dc8c1b5972206393c43847433c6d75940b87fec93ce3143 F test/window2.test 8e6d2a1b9f54dfebee1cde961c8590cd87b4db45c50f44947a211e1b63c2a05e F test/window3.tcl 577a3b1ff913208e5248c04dab9df17fd760ce159a752789e26d0cb4a5f91823 @@ -1782,10 +1782,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 53d3b169d8e1892163526caff2c843302c92e280fdeff6831e23a9bb15b82be3 -R a2d2ec8d34c71e6abf08e50ec579efcc -T *branch * ticket-f09fcd17810f -T *sym-ticket-f09fcd17810f * -T -sym-trunk * +P f1b18d44ff855573542c1947a42d4025dff54cacc13dac14d044521762ea9736 +R 999c00703256c76e5513029bb0036a91 U drh -Z 5018814e4a4daf9bdeea4c03d1c78115 +Z 08d2025b0cdb73a3ed0863948c64547c diff --git a/manifest.uuid b/manifest.uuid index 9922fca4fa..3ba1ff645b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f1b18d44ff855573542c1947a42d4025dff54cacc13dac14d044521762ea9736 \ No newline at end of file +a9a3b532643b5f106509bb29c3e6bc9d41ec5b2da5a0cd4067898f376eb626a2 \ No newline at end of file diff --git a/test/window1.test b/test/window1.test index c24bbaa20f..5f9b5dbb75 100644 --- a/test/window1.test +++ b/test/window1.test @@ -596,7 +596,12 @@ do_execsql_test 13.5 { # 2018-12-06 # https://www.sqlite.org/src/info/f09fcd17810f65f7 -# Assertion fault when window functions are used +# Assertion fault when window functions are used. +# +# Root cause is the query flattener invoking sqlite3ExprDup() on +# expressions that contain subqueries with window functions. The +# sqlite3ExprDup() routine is not making correctly initializing +# Select.pWin field of the subqueries. # sqlite3 db :memory: do_execsql_test 14.0 { @@ -606,5 +611,14 @@ do_execsql_test 14.0 { ) ); } {1} +do_execsql_test 14.1 { + CREATE TABLE t1(x); INSERT INTO t1(x) VALUES(12345); + CREATE TABLE t2(c); INSERT INTO t2(c) VALUES(1); + SELECT y, y+1, y+2 FROM ( + SELECT c IN ( + SELECT (row_number() OVER()) FROM t1 + ) AS y FROM t2 + ); +} {1 2 3} finish_test From a83899754423bea16d4efeb4f39482b57d79c083 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Dec 2018 22:04:19 +0000 Subject: [PATCH 07/49] Fix the sqlite3ExprDup() routine so that it makes complete duplications of subqueries containing window functions. FossilOrigin-Name: 940174543e87184a0278fcd02e8a096a11510174d9c1d65d21878819790ddaff --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 27 +++++++++++++++++++++++++++ src/window.c | 1 + 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 066d87f7c1..73d0947676 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C New\stest\scase\sthat\sstill\shits\san\sassertion\sfault,\sjust\sto\sprove\sthat\sthe\nprevious\scheckin\smerely\smade\sthe\sproblem\smore\sobscure\sand\sdid\snot\scompletely\nfix\sit. -D 2018-12-06T19:56:20.155 +C Fix\sthe\ssqlite3ExprDup()\sroutine\sso\sthat\sit\smakes\scomplete\sduplications\sof\nsubqueries\scontaining\swindow\sfunctions. +D 2018-12-06T22:04:19.327 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -459,7 +459,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c 3c8bd4e77f0244fd2bd7cc90acf116ad2f8e82d70e536637f35ac2bc99b726f9 F src/delete.c f7938125847e8ef485448db5fbad29acb2991381a02887dd854c1617315ab9fb -F src/expr.c a3e90131d7f92b77a6a6ae2e71f0d2882237041ed11dbe3c914e5e278ddc2d24 +F src/expr.c 348e3877784d3e3a8b053a6b2e32d00b986fc4420ab484a41bf38e6d31e3b84b F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f @@ -596,7 +596,7 @@ F src/where.c 3818e8a736a05d2cb194e64399af707e367fbcc5c251d785804d02eaf121288e F src/whereInt.h f125f29fca80890768e0b2caa14f95db74b2dacd3a122a168f97aa7b64d6968f F src/wherecode.c c45f03aefc2266b990df0fc4d7acc4e27f56f881f4fc0fc355b7cbc4d7189da5 F src/whereexpr.c 491f0894ad9903750cdecb7894437a0cabdffdd88f574d2b1c9ac85d14fe4b9c -F src/window.c 6550e2850ebced51100ef83d49b00a1cf03f81a482dafedafb0320df647ed8fc +F src/window.c ea81ecd031ed2cbc14b7db6fd7f4bee2471b894feae5fea0547b15b1e2dd8fb2 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d @@ -1782,7 +1782,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 f1b18d44ff855573542c1947a42d4025dff54cacc13dac14d044521762ea9736 -R 999c00703256c76e5513029bb0036a91 +P a9a3b532643b5f106509bb29c3e6bc9d41ec5b2da5a0cd4067898f376eb626a2 +R 24973ceb08f0bf40a95db4b2c4fd154c U drh -Z 08d2025b0cdb73a3ed0863948c64547c +Z f52863a824efeb9518162f1a9aff57dd diff --git a/manifest.uuid b/manifest.uuid index 3ba1ff645b..282cc9c5e5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a9a3b532643b5f106509bb29c3e6bc9d41ec5b2da5a0cd4067898f376eb626a2 \ No newline at end of file +940174543e87184a0278fcd02e8a096a11510174d9c1d65d21878819790ddaff \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index fb44a7ef75..a6bb441d56 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1330,6 +1330,32 @@ static With *withDup(sqlite3 *db, With *p){ # define withDup(x,y) 0 #endif +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** The gatherSelectWindows() procedure and its helper routine +** gatherSelectWindowsCallback() are used to scan all the expressions +** an a newly duplicated SELECT statement and gather all of the Window +** objects found there, assembling them onto the linked list at Select->pWin. +*/ +static int gatherSelectWindowsCallback(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_FUNCTION && pExpr->y.pWin!=0 ){ + assert( ExprHasProperty(pExpr, EP_WinFunc) ); + pExpr->y.pWin->pNextWin = pWalker->u.pSelect->pWin; + pWalker->u.pSelect->pWin = pExpr->y.pWin; + } + return WRC_Continue; +} +static void gatherSelectWindows(Select *p){ + Walker w; + w.xExprCallback = gatherSelectWindowsCallback; + w.xSelectCallback = 0; + w.u.pSelect = p; + sqlite3WalkSelectExpr(&w, p); + sqlite3WalkSelectFrom(&w, p); +} +#endif + + /* ** The following group of routines make deep copies of expressions, ** expression lists, ID lists, and select statements. The copies can @@ -1497,6 +1523,7 @@ Select *sqlite3SelectDup(sqlite3 *db, Select *pDup, int flags){ #ifndef SQLITE_OMIT_WINDOWFUNC pNew->pWin = 0; pNew->pWinDefn = sqlite3WindowListDup(db, p->pWinDefn); + if( p->pWin ) gatherSelectWindows(pNew); #endif pNew->selId = p->selId; *pp = pNew; diff --git a/src/window.c b/src/window.c index f5deae9a6e..f3e274d6e3 100644 --- a/src/window.c +++ b/src/window.c @@ -2133,6 +2133,7 @@ Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p){ if( pNew ){ pNew->zName = sqlite3DbStrDup(db, p->zName); pNew->pFilter = sqlite3ExprDup(db, p->pFilter, 0); + pNew->pFunc = p->pFunc; pNew->pPartition = sqlite3ExprListDup(db, p->pPartition, 0); pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, 0); pNew->eType = p->eType; From a37b6a5e31f341412dc0c454569fea5cd0f88cef Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Dec 2018 22:12:18 +0000 Subject: [PATCH 08/49] Performance improvement: Avoid using sqlite3WalkerSelectExpr() and sqlite3WalkerSelectFrom() twice, so that the compiler will in-line their implementation. FossilOrigin-Name: 2b9258b8b0342330ebe8c22b59ec276fd042a05547d15b24fdf29e16280868de --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 9 ++++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 73d0947676..4b2190f9c8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\ssqlite3ExprDup()\sroutine\sso\sthat\sit\smakes\scomplete\sduplications\sof\nsubqueries\scontaining\swindow\sfunctions. -D 2018-12-06T22:04:19.327 +C Performance\simprovement:\s\sAvoid\susing\ssqlite3WalkerSelectExpr()\nand\ssqlite3WalkerSelectFrom()\stwice,\sso\sthat\sthe\scompiler\swill\sin-line\stheir\nimplementation. +D 2018-12-06T22:12:18.890 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -459,7 +459,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c 3c8bd4e77f0244fd2bd7cc90acf116ad2f8e82d70e536637f35ac2bc99b726f9 F src/delete.c f7938125847e8ef485448db5fbad29acb2991381a02887dd854c1617315ab9fb -F src/expr.c 348e3877784d3e3a8b053a6b2e32d00b986fc4420ab484a41bf38e6d31e3b84b +F src/expr.c b83e2056086e364293ce741509d885d1646a32d62727fe3169b23231c7e4f62f F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f @@ -1782,7 +1782,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 a9a3b532643b5f106509bb29c3e6bc9d41ec5b2da5a0cd4067898f376eb626a2 -R 24973ceb08f0bf40a95db4b2c4fd154c +P 940174543e87184a0278fcd02e8a096a11510174d9c1d65d21878819790ddaff +R 49ae07edd1762ce880f34b83601e0b9e U drh -Z f52863a824efeb9518162f1a9aff57dd +Z bcb12cb10c9264efa5baeffb2512d3d5 diff --git a/manifest.uuid b/manifest.uuid index 282cc9c5e5..40b4d9a6d6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -940174543e87184a0278fcd02e8a096a11510174d9c1d65d21878819790ddaff \ No newline at end of file +2b9258b8b0342330ebe8c22b59ec276fd042a05547d15b24fdf29e16280868de \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index a6bb441d56..6886d30b2d 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1345,13 +1345,16 @@ static int gatherSelectWindowsCallback(Walker *pWalker, Expr *pExpr){ } return WRC_Continue; } +static int gatherSelectWindowsSelectCallback(Walker *pWalker, Select *p){ + return p==pWalker->u.pSelect ? WRC_Continue : WRC_Prune; +} static void gatherSelectWindows(Select *p){ Walker w; w.xExprCallback = gatherSelectWindowsCallback; - w.xSelectCallback = 0; + w.xSelectCallback = gatherSelectWindowsSelectCallback; + w.xSelectCallback2 = 0; w.u.pSelect = p; - sqlite3WalkSelectExpr(&w, p); - sqlite3WalkSelectFrom(&w, p); + sqlite3WalkSelect(&w, p); } #endif From 62a88294e8fb48d3ed8e0fdbbc346004ed09b168 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 7 Dec 2018 03:01:07 +0000 Subject: [PATCH 09/49] Fix dbfuzz2.c so that it works with -DSQLITE_OMIT_INIT FossilOrigin-Name: 9ad796a8822f1b7e1e99b73c2cc5be59dbfd85e9c27f3e795c29a2c002c611d1 --- manifest | 13 ++++++------- manifest.uuid | 2 +- test/dbfuzz2.c | 1 + 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index fae9ecaa07..4087d03b83 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\ssqlite3ExprDup()\sfunction\sso\sthat\sit\scorrectly\sduplicates\sthe\nWindow\sobject\slist\son\sa\sSelect\sthat\scontains\swindow\sfunctions.\s\sFix\nfor\sticket\s[f09fcd17810f65f717]. -D 2018-12-07T01:56:26.338 +C Fix\sdbfuzz2.c\sso\sthat\sit\sworks\swith\s-DSQLITE_OMIT_INIT +D 2018-12-07T03:01:07.990 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -774,7 +774,7 @@ F test/date.test 9b73bbeb1b82d9c1f44dec5cf563bf7da58d2373 F test/date2.test 74c234bece1b016e94dd4ef9c8cc7a199a8806c0e2291cab7ba64bace6350b10 F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee -F test/dbfuzz2.c 652f85bac1770e927da139db513234a3eba308f72ac2f8b32f0093d7d19def70 +F test/dbfuzz2.c b8ed9b32a1f287505e55970e55203bedcb9170f137ecefa2254033c9faccdfba F test/dbpage.test 650234ba683b9d82b899c6c51439819787e7609f17a0cc40e0080a7b6443bc38 F test/dbstatus.test cd83aa623b8aab477269bc94cf8aa90c1e195a144561dd04a1620770aaa8524e F test/dbstatus2.test f5fe0afed3fa45e57cfa70d1147606c20d2ba23feac78e9a172f2fe8ab5b78ef @@ -1782,8 +1782,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 53d3b169d8e1892163526caff2c843302c92e280fdeff6831e23a9bb15b82be3 2b9258b8b0342330ebe8c22b59ec276fd042a05547d15b24fdf29e16280868de -R 49ae07edd1762ce880f34b83601e0b9e -T +closed 2b9258b8b0342330ebe8c22b59ec276fd042a05547d15b24fdf29e16280868de +P db5ed2268eda2e6c1df15cd8df4176463d89103b8fda33ba9a0604f0d92bd4da +R 2969a28b361c45f45888cf9a9ac52a9e U drh -Z 8b11b2c511f2560f5e30a67bc4544388 +Z 1170e81cf6857f6b3144fe1a49be0ee2 diff --git a/manifest.uuid b/manifest.uuid index bf0d95f7f0..55f1f4ff1e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -db5ed2268eda2e6c1df15cd8df4176463d89103b8fda33ba9a0604f0d92bd4da \ No newline at end of file +9ad796a8822f1b7e1e99b73c2cc5be59dbfd85e9c27f3e795c29a2c002c611d1 \ No newline at end of file diff --git a/test/dbfuzz2.c b/test/dbfuzz2.c index 0833f03868..9e3aca2527 100644 --- a/test/dbfuzz2.c +++ b/test/dbfuzz2.c @@ -78,6 +78,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *aData, size_t nByte){ printf("************** nByte=%d ***************\n", (int)nByte); fflush(stdout); } + if( sqlite3_initialize() ) return 0; rc = sqlite3_open(0, &db); if( rc ) return 1; a = sqlite3_malloc64(nByte+1); From 893bd3751b30460c9556b3c9ae51c4ac4f26b6af Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 7 Dec 2018 16:32:11 +0000 Subject: [PATCH 10/49] Fix the sqlite3_normalized_sql() interface so that it renders double-quoted string literals as "?". FossilOrigin-Name: 0d8e150434bbd179696f1ffe71d1e06cb3d43e6468496c7e481fca8486387bad --- manifest | 22 +++++++++--------- manifest.uuid | 2 +- src/prepare.c | 8 +++++-- src/resolve.c | 3 +++ src/vdbe.h | 4 ++++ src/vdbeInt.h | 19 ++++++++++++++- src/vdbeaux.c | 56 ++++++++++++++++++++++++++++++++++++++++++++- test/normalize.test | 2 +- 8 files changed, 99 insertions(+), 17 deletions(-) diff --git a/manifest b/manifest index 4087d03b83..f4fb1dff1b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sdbfuzz2.c\sso\sthat\sit\sworks\swith\s-DSQLITE_OMIT_INIT -D 2018-12-07T03:01:07.990 +C Fix\sthe\ssqlite3_normalized_sql()\sinterface\sso\sthat\sit\srenders\ndouble-quoted\sstring\sliterals\sas\s"?". +D 2018-12-07T16:32:11.362 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -502,10 +502,10 @@ F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c ad0ffc5b35b0280d045ac569d34d4b842e3e6a4a118f6396b320987a0957afcc F src/pragma.c 96ce7dce4dc9cb2b7aa0e1b2ce7536870bdc00b10becc278245e775489447ea0 F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 -F src/prepare.c 5fe8eb586d0e9d4009609490866525f242a3d0df01e39d967bf2611dc8081088 +F src/prepare.c be449edb106a16f1ad95f9b798bdc2337f8c3f83b96c284f417c0a26d43f0c1b F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c e0408228bad5d13937a626521cba42c6f768643a6353712218d7e01fb201b202 +F src/resolve.c 095d1d41d7a981ee9db8bfeae25ed0d6a8a5e5e3d66b0f4efd71877ed7b56132 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883d @@ -579,10 +579,10 @@ F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 F src/vacuum.c c67085526fb51e141a85be3f7c9b91a2d38705bbb0ef911d8dec1e2d36cbdce1 F src/vdbe.c c7312c909df5032b4ed27996c2ed8f5bf948f6a982458f85398520aaba0ccf81 -F src/vdbe.h 5081dcc497777efe5e9ebe7330d283a044a005e4bdda2e2e984f03bf89a0d907 -F src/vdbeInt.h 437e6c6af679fdf157867eb83a8adc6cf5145d6774453c2214cfd0bd01d92980 +F src/vdbe.h d82f323d581b36b8e147d650257ef34e0e93790039b6cbda45c321c275f7595e +F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd F src/vdbeapi.c 9709452bee82963e1f7f1f5d0c71db823d553f8dbb2c47a911c4983d537a1947 -F src/vdbeaux.c d71429f70e95e21aaf15ee287a78beefcda4bdc7d1b6d3c704dfeba820a792e0 +F src/vdbeaux.c 9a9617666124e18cbd6e936740f7469dcf0d82867b1abf9ed828694500930b64 F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191 F src/vdbemem.c 7b3305bc4a5139f4536ac9b5f61da0f915e49d2e3fdfa87dfdfa9d7aba8bc1e9 F src/vdbesort.c 90aad5a92608f2dd771c96749beabdb562c9d881131a860a7a5bccf66dc3be7f @@ -1142,7 +1142,7 @@ F test/mutex2.test bfeaeac2e73095b2ac32285d2756e3a65e681660 F test/nan.test 437d40e6d0778b050d7750726c0cbd2c9936b81962926e8f8c48ca698f00f4d1 F test/nockpt.test 8c43b25af63b0bd620cf1b003529e37b6f1dc53bd22690e96a1bd73f78dde53a F test/nolock.test f196cf8b8fbea4e2ca345140a2b3f3b0da45c76e -F test/normalize.test 7fe7674d83e37c635ea2e88a27b54a0fe1afddb192d636d5672b1639859800f1 +F test/normalize.test 17ff5c732bc16b100f4e479da3a59735ed24f4ed574fccf8e46279fad182f81e F test/notify1.test 669b2b743618efdc18ca4b02f45423d5d2304abf F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934 @@ -1782,7 +1782,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 db5ed2268eda2e6c1df15cd8df4176463d89103b8fda33ba9a0604f0d92bd4da -R 2969a28b361c45f45888cf9a9ac52a9e +P 9ad796a8822f1b7e1e99b73c2cc5be59dbfd85e9c27f3e795c29a2c002c611d1 +R 75d9d47dfde008764fbf9239d7b4fada U drh -Z 1170e81cf6857f6b3144fe1a49be0ee2 +Z 20abf3696cef97c5bdf0b2ae41ceaaa6 diff --git a/manifest.uuid b/manifest.uuid index 55f1f4ff1e..30608cbb37 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9ad796a8822f1b7e1e99b73c2cc5be59dbfd85e9c27f3e795c29a2c002c611d1 \ No newline at end of file +0d8e150434bbd179696f1ffe71d1e06cb3d43e6468496c7e481fca8486387bad \ No newline at end of file diff --git a/src/prepare.c b/src/prepare.c index ad07eca45a..811ef95aea 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -882,9 +882,13 @@ char *sqlite3Normalize( z[j++] = ' '; } if( tokenType==TK_ID ){ - int i2 = i, n2 = n; + if( zSql[i]=='"' + && sqlite3VdbeUsesDoubleQuotedString(db,pVdbe,zSql+i,n) + ){ + z[j++] = '?'; + break; + } if( nParen==nParenAtIN ) iStartIN = 0; - if( flags&SQLITE_TOKEN_QUOTED ){ i2++; n2-=2; } } copyNormalizedToken(zSql, i, n, flags, z, &j); break; diff --git a/src/resolve.c b/src/resolve.c index 39c2039f59..a9262a45ad 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -490,6 +490,9 @@ static int lookupName( */ sqlite3_log(SQLITE_WARNING, "double-quoted string literal: \"%w\"", zCol); +#ifdef SQLITE_ENABLE_NORMALIZE + sqlite3VdbeAddDblquoteStr(db,pParse->pVdbe, zCol); +#endif pExpr->op = TK_STRING; pExpr->y.pTab = 0; return WRC_Prune; diff --git a/src/vdbe.h b/src/vdbe.h index d42acc0cca..1712b8b224 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -251,6 +251,10 @@ void sqlite3VdbeCountChanges(Vdbe*); sqlite3 *sqlite3VdbeDb(Vdbe*); u8 sqlite3VdbePrepareFlags(Vdbe*); void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, u8); +#ifdef SQLITE_ENABLE_NORMALIZE +void sqlite3VdbeAddDblquoteStr(sqlite3*,Vdbe*,const char*); +int sqlite3VdbeUsesDoubleQuotedString(sqlite3*,Vdbe*,const char*,int); +#endif void sqlite3VdbeSwap(Vdbe*,Vdbe*); VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*); sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe*, int, u8); diff --git a/src/vdbeInt.h b/src/vdbeInt.h index 5c719923d7..70543526c1 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -335,6 +335,9 @@ struct sqlite3_context { */ typedef unsigned bft; /* Bit Field Type */ +/* The ScanStatus object holds a single value for the +** sqlite3_stmt_scanstatus() interface. +*/ typedef struct ScanStatus ScanStatus; struct ScanStatus { int addrExplain; /* OP_Explain for loop */ @@ -345,6 +348,19 @@ struct ScanStatus { char *zName; /* Name of table or index */ }; +/* The DblquoteStr object holds the text of a double-quoted +** string for a prepared statement. A linked list of these objects +** is constructed during statement parsing and is held on Vdbe.pDblStr. +** When computing a normalized SQL statement for an SQL statement, that +** list is consulted for each double-quoted identifier to see if the +** identifier should really be a string literal. +*/ +typedef struct DblquoteStr DblquoteStr; +struct DblquoteStr { + DblquoteStr *pNextStr; /* Next string literal in the list */ + char z[8]; /* Dequoted value for the string */ +}; + /* ** An instance of the virtual machine. This structure contains the complete ** state of the virtual machine. @@ -364,7 +380,7 @@ struct Vdbe { int pc; /* The program counter */ int rc; /* Value to return */ int nChange; /* Number of db changes made since last reset */ - int iStatement; /* Statement number (or 0 if has not opened stmt) */ + int iStatement; /* Statement number (or 0 if has no opened stmt) */ i64 iCurrentTime; /* Value of julianday('now') for this statement */ i64 nFkConstraint; /* Number of imm. FK constraints this VM */ i64 nStmtDefCons; /* Number of def. constraints when stmt started */ @@ -408,6 +424,7 @@ struct Vdbe { char *zSql; /* Text of the SQL statement that generated this */ #ifdef SQLITE_ENABLE_NORMALIZE char *zNormSql; /* Normalization of the associated SQL statement */ + DblquoteStr *pDblStr; /* List of double-quoted string literals */ #endif void *pFree; /* Free this when deleting the vdbe */ VdbeFrame *pFrame; /* Parent frame */ diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 40a63319db..2f45c217f1 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -73,6 +73,53 @@ void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, u8 prepFlags){ #endif } +#ifdef SQLITE_ENABLE_NORMALIZE +/* +** Add a new element to the Vdbe->pDblStr list. +*/ +void sqlite3VdbeAddDblquoteStr(sqlite3 *db, Vdbe *p, const char *z){ + if( p ){ + int n = sqlite3Strlen30(z); + DblquoteStr *pStr = sqlite3DbMallocRawNN(db, + sizeof(*pStr)+n+1-sizeof(pStr->z)); + if( pStr ){ + pStr->pNextStr = p->pDblStr; + p->pDblStr = pStr; + memcpy(pStr->z, z, n+1); + } + } +} +#endif + +#ifdef SQLITE_ENABLE_NORMALIZE +/* +** zId of length nId is a double-quoted identifier. Check to see if +** that identifier is really used as a string literal. +*/ +int sqlite3VdbeUsesDoubleQuotedString( + sqlite3 *db, /* Used for transient malloc */ + Vdbe *pVdbe, /* The prepared statement */ + const char *zId, /* The double-quoted identifier */ + int nId /* Bytes in zId, which is not zero-terminated */ +){ + char *z; + DblquoteStr *pStr; + assert( zId!=0 ); + assert( zId[0]=='"' ); + assert( nId>=2 ); + assert( zId[nId-1]=='"' ); + if( pVdbe->pDblStr==0 ) return 0; + z = sqlite3DbStrNDup(db, zId, nId); + if( z==0 ) return 0; + sqlite3Dequote(z); + for(pStr=pVdbe->pDblStr; pStr; pStr=pStr->pNextStr){ + if( strcmp(z, pStr->z)==0 ) break; + } + sqlite3DbFree(db, z); + return pStr!=0; +} +#endif + /* ** Swap all content between two VDBE structures. */ @@ -92,7 +139,7 @@ void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ zTmp = pA->zSql; pA->zSql = pB->zSql; pB->zSql = zTmp; -#ifdef SQLITE_ENABLE_NORMALIZE +#if 0 zTmp = pA->zNormSql; pA->zNormSql = pB->zNormSql; pB->zNormSql = zTmp; @@ -3170,6 +3217,13 @@ void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ sqlite3DbFree(db, p->zSql); #ifdef SQLITE_ENABLE_NORMALIZE sqlite3DbFree(db, p->zNormSql); + { + DblquoteStr *pThis, *pNext; + for(pThis=p->pDblStr; pThis; pThis=pNext){ + pNext = pThis->pNextStr; + sqlite3DbFree(db, pThis); + } + } #endif #ifdef SQLITE_ENABLE_STMT_SCANSTATUS { diff --git a/test/normalize.test b/test/normalize.test index c5b69336e9..35c995fe75 100644 --- a/test/normalize.test +++ b/test/normalize.test @@ -207,7 +207,7 @@ foreach {tnum sql flags norm} { 430 {SELECT "a" FROM t1 WHERE "x" IN ("1","2",'3');} 0x2 - {0 {SELECT"a"FROM t1 WHERE"x"IN("1","2",?);}} + {0 {SELECT"a"FROM t1 WHERE"x"IN(?,?,?);}} 440 {SELECT 'a' FROM t1 WHERE 'x';} From b0b7db91b8cc880ae7d5f3c334607fda17364d62 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 7 Dec 2018 17:28:28 +0000 Subject: [PATCH 11/49] Prototype implementation for the VACUUM INTO command. FossilOrigin-Name: 036e3320a4af36c1311b25b2e504b0079c8b33df8ad7b7e5fddad07150e6f87d --- manifest | 21 ++++++++++++--------- manifest.uuid | 2 +- src/parse.y | 7 +++++-- src/sqliteInt.h | 4 ++-- src/vacuum.c | 37 ++++++++++++++++++++++++++----------- src/vdbe.c | 8 ++++++-- 6 files changed, 52 insertions(+), 27 deletions(-) diff --git a/manifest b/manifest index f4fb1dff1b..f3b956e8c9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\ssqlite3_normalized_sql()\sinterface\sso\sthat\sit\srenders\ndouble-quoted\sstring\sliterals\sas\s"?". -D 2018-12-07T16:32:11.362 +C Prototype\simplementation\sfor\sthe\sVACUUM\sINTO\scommand. +D 2018-12-07T17:28:28.770 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -496,7 +496,7 @@ F src/os_win.c 85d9e532d0444ab6c16d7431490c2e279e282aa0917b0e988996b1ae0de5c5a0 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 75e0f3cfa3962c714f519f8a3d1e67ecca1c91de0e010a036b988e40ce9e4c73 F src/pager.h 217921e81eb5fe455caa5cda96061959706bcdd29ddb57166198645ef7822ac3 -F src/parse.y 5cf85c2b9dfac38ac4e2bf2776484705186ce2eda8631e65cc0b04bf566c1173 +F src/parse.y 3bf1b720e70a3cfb08f491913f61b181d71576879146d68ee845f6d77c6bdc70 F src/pcache.c 696a01f1a6370c1b50a09c15972bc3bee3333f8fcd1f2da8e9a76b1b062c59ee F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c ad0ffc5b35b0280d045ac569d34d4b842e3e6a4a118f6396b320987a0957afcc @@ -512,7 +512,7 @@ F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883 F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 -F src/sqliteInt.h 97adda953e7f118d47b8135f76f88c6420ff6707285782616f393a9ea255d577 +F src/sqliteInt.h fa86b5689fae6d3b446fcae0430e4d1f3757bf5e72d0ca2e34d1287a2c3643f2 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@ -577,8 +577,8 @@ F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 -F src/vacuum.c c67085526fb51e141a85be3f7c9b91a2d38705bbb0ef911d8dec1e2d36cbdce1 -F src/vdbe.c c7312c909df5032b4ed27996c2ed8f5bf948f6a982458f85398520aaba0ccf81 +F src/vacuum.c 76b92b5d6afc83a8f396b59bcc042955bf563f07b6aa60eea3d57f7be5336180 +F src/vdbe.c 872bdd34338548242b36df18c49c90b34689e41c0b4e5c197e83bb82a38ce8dd F src/vdbe.h d82f323d581b36b8e147d650257ef34e0e93790039b6cbda45c321c275f7595e F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd F src/vdbeapi.c 9709452bee82963e1f7f1f5d0c71db823d553f8dbb2c47a911c4983d537a1947 @@ -1782,7 +1782,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 9ad796a8822f1b7e1e99b73c2cc5be59dbfd85e9c27f3e795c29a2c002c611d1 -R 75d9d47dfde008764fbf9239d7b4fada +P 0d8e150434bbd179696f1ffe71d1e06cb3d43e6468496c7e481fca8486387bad +R 319ff574feecdbd7034aa017b5a3dd35 +T *branch * vacuum-into +T *sym-vacuum-into * +T -sym-trunk * U drh -Z 20abf3696cef97c5bdf0b2ae41ceaaa6 +Z 59d199189f2c579663aad138ddb0acd8 diff --git a/manifest.uuid b/manifest.uuid index 30608cbb37..3de4b7164f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0d8e150434bbd179696f1ffe71d1e06cb3d43e6468496c7e481fca8486387bad \ No newline at end of file +036e3320a4af36c1311b25b2e504b0079c8b33df8ad7b7e5fddad07150e6f87d \ No newline at end of file diff --git a/src/parse.y b/src/parse.y index 3bb28ab5f5..dbbd40775e 100644 --- a/src/parse.y +++ b/src/parse.y @@ -1367,8 +1367,11 @@ cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);} // %ifndef SQLITE_OMIT_VACUUM %ifndef SQLITE_OMIT_ATTACH -cmd ::= VACUUM. {sqlite3Vacuum(pParse,0);} -cmd ::= VACUUM nm(X). {sqlite3Vacuum(pParse,&X);} +%type vinto {Token} +cmd ::= VACUUM vinto(Y). {sqlite3Vacuum(pParse,0,&Y);} +cmd ::= VACUUM nm(X) vinto(Y). {sqlite3Vacuum(pParse,&X,&Y);} +vinto(A) ::= INTO nm(X). {A = X;} +vinto(A) ::= . {A.z = 0;} %endif SQLITE_OMIT_ATTACH %endif SQLITE_OMIT_VACUUM diff --git a/src/sqliteInt.h b/src/sqliteInt.h index bdf0d7fcbb..e175de9518 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3985,8 +3985,8 @@ Table *sqlite3LocateTableItem(Parse*,u32 flags,struct SrcList_item *); Index *sqlite3FindIndex(sqlite3*,const char*, const char*); void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*); void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*); -void sqlite3Vacuum(Parse*,Token*); -int sqlite3RunVacuum(char**, sqlite3*, int); +void sqlite3Vacuum(Parse*,Token*,Token*); +int sqlite3RunVacuum(char**, sqlite3*, int, const char*); char *sqlite3NameFromToken(sqlite3*, Token*); int sqlite3ExprCompare(Parse*,Expr*, Expr*, int); int sqlite3ExprCompareSkip(Expr*, Expr*, int); diff --git a/src/vacuum.c b/src/vacuum.c index 8416b16729..04958ab53f 100644 --- a/src/vacuum.c +++ b/src/vacuum.c @@ -102,9 +102,10 @@ static int execSqlF(sqlite3 *db, char **pzErrMsg, const char *zSql, ...){ ** transient would cause the database file to appear to be deleted ** following reboot. */ -void sqlite3Vacuum(Parse *pParse, Token *pNm){ +void sqlite3Vacuum(Parse *pParse, Token *pNm, Token *pInto){ Vdbe *v = sqlite3GetVdbe(pParse); int iDb = 0; + assert( pInto!=0 ); if( v==0 ) return; if( pNm ){ #ifndef SQLITE_BUG_COMPATIBLE_20160819 @@ -125,6 +126,10 @@ void sqlite3Vacuum(Parse *pParse, Token *pNm){ if( iDb!=1 ){ sqlite3VdbeAddOp1(v, OP_Vacuum, iDb); sqlite3VdbeUsesBtree(v, iDb); + if( pInto->z ){ + char *zName = sqlite3NameFromToken(pParse->db, pInto); + sqlite3VdbeChangeP4(v, -1, zName, P4_DYNAMIC); + } } return; } @@ -132,7 +137,7 @@ void sqlite3Vacuum(Parse *pParse, Token *pNm){ /* ** This routine implements the OP_Vacuum opcode of the VDBE. */ -int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ +int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb, const char *zOut){ int rc = SQLITE_OK; /* Return code from service routines */ Btree *pMain; /* The database being vacuumed */ Btree *pTemp; /* The temporary database we vacuum into */ @@ -189,7 +194,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ ** to write the journal header file. */ nDb = db->nDb; - rc = execSql(db, pzErrMsg, "ATTACH''AS vacuum_db"); + rc = execSqlF(db, pzErrMsg, "ATTACH %Q AS vacuum_db", zOut ? zOut : ""); if( rc!=SQLITE_OK ) goto end_of_vacuum; assert( (db->nDb-1)==nDb ); pDb = &db->aDb[nDb]; @@ -225,7 +230,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ */ rc = execSql(db, pzErrMsg, "BEGIN"); if( rc!=SQLITE_OK ) goto end_of_vacuum; - rc = sqlite3BtreeBeginTrans(pMain, 2, 0); + rc = sqlite3BtreeBeginTrans(pMain, zOut==0 ? 2 : 0, 0); if( rc!=SQLITE_OK ) goto end_of_vacuum; /* Do not attempt to change the page size for a WAL database */ @@ -320,7 +325,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ }; assert( 1==sqlite3BtreeIsInTrans(pTemp) ); - assert( 1==sqlite3BtreeIsInTrans(pMain) ); + assert( zOut!=0 || 1==sqlite3BtreeIsInTrans(pMain) ); /* Copy Btree meta values */ for(i=0; iflags */ @@ -368,9 +381,11 @@ end_of_vacuum: pDb->pSchema = 0; } - /* This both clears the schemas and reduces the size of the db->aDb[] - ** array. */ - sqlite3ResetAllSchemasOfConnection(db); + if( zOut==0 ){ + /* This both clears the schemas and reduces the size of the db->aDb[] + ** array. */ + sqlite3ResetAllSchemasOfConnection(db); + } return rc; } diff --git a/src/vdbe.c b/src/vdbe.c index 2803330b34..179189eea7 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -6684,14 +6684,18 @@ case OP_JournalMode: { /* out2 */ #endif /* SQLITE_OMIT_PRAGMA */ #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH) -/* Opcode: Vacuum P1 * * * * +/* Opcode: Vacuum P1 * * P4 * ** ** Vacuum the entire database P1. P1 is 0 for "main", and 2 or more ** for an attached database. The "temp" database may not be vacuumed. +** +** If P4 is not a NULL pointer, then it is a UTF8 string which is the +** name of a file into which to write the result of the vacuum. When +** P4 is NULL, the result of vacuum overwrites the original database. */ case OP_Vacuum: { assert( p->readOnly==0 ); - rc = sqlite3RunVacuum(&p->zErrMsg, db, pOp->p1); + rc = sqlite3RunVacuum(&p->zErrMsg, db, pOp->p1, pOp->p4.z); if( rc ) goto abort_due_to_error; break; } From 83da91b7bd6a6253080fa3b821e4adc9002a3541 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 7 Dec 2018 20:26:29 +0000 Subject: [PATCH 12/49] Remove a line of code from VACUUM that is no longer needed, due to the change that allows ATTACH to run within a transaction. FossilOrigin-Name: a92c398fc5df142ff1459c1be4a6832f2219bc7fabe5789535be3bbd41a4269b --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/vacuum.c | 7 ------- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index f4fb1dff1b..46031d6ed1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\ssqlite3_normalized_sql()\sinterface\sso\sthat\sit\srenders\ndouble-quoted\sstring\sliterals\sas\s"?". -D 2018-12-07T16:32:11.362 +C Remove\sa\sline\sof\scode\sfrom\sVACUUM\sthat\sis\sno\slonger\sneeded,\sdue\sto\sthe\nchange\sthat\sallows\sATTACH\sto\srun\swithin\sa\stransaction. +D 2018-12-07T20:26:29.949 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -577,7 +577,7 @@ F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 -F src/vacuum.c c67085526fb51e141a85be3f7c9b91a2d38705bbb0ef911d8dec1e2d36cbdce1 +F src/vacuum.c b25dbace5b6727cd906441e87857b828eb2377f7b1b2ba3eec36155ce727730c F src/vdbe.c c7312c909df5032b4ed27996c2ed8f5bf948f6a982458f85398520aaba0ccf81 F src/vdbe.h d82f323d581b36b8e147d650257ef34e0e93790039b6cbda45c321c275f7595e F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd @@ -1782,7 +1782,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 9ad796a8822f1b7e1e99b73c2cc5be59dbfd85e9c27f3e795c29a2c002c611d1 -R 75d9d47dfde008764fbf9239d7b4fada +P 0d8e150434bbd179696f1ffe71d1e06cb3d43e6468496c7e481fca8486387bad +R 4426cbb4a0e989d65734a42a486b3458 U drh -Z 20abf3696cef97c5bdf0b2ae41ceaaa6 +Z 888d594bf1edeab12c4e75c4f15da299 diff --git a/manifest.uuid b/manifest.uuid index 30608cbb37..5c7c601c94 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0d8e150434bbd179696f1ffe71d1e06cb3d43e6468496c7e481fca8486387bad \ No newline at end of file +a92c398fc5df142ff1459c1be4a6832f2219bc7fabe5789535be3bbd41a4269b \ No newline at end of file diff --git a/src/vacuum.c b/src/vacuum.c index 8416b16729..4570371fb0 100644 --- a/src/vacuum.c +++ b/src/vacuum.c @@ -195,13 +195,6 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ pDb = &db->aDb[nDb]; assert( strcmp(pDb->zDbSName,"vacuum_db")==0 ); pTemp = pDb->pBt; - - /* The call to execSql() to attach the temp database has left the file - ** locked (as there was more than one active statement when the transaction - ** to read the schema was concluded. Unlock it here so that this doesn't - ** cause problems for the call to BtreeSetPageSize() below. */ - sqlite3BtreeCommit(pTemp); - nRes = sqlite3BtreeGetOptimalReserve(pMain); /* A VACUUM cannot change the pagesize of an encrypted database. */ From 7464f578eda14dbf56d4e37d72aae2af03a5930c Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 7 Dec 2018 23:48:41 +0000 Subject: [PATCH 13/49] Do not allow VACUUM INTO into a file that already exists. FossilOrigin-Name: 92f70e0fa3c9de7fde046f11cc0a7c2800511bb5ace8e68c845133931607616e --- manifest | 13 +++++----- manifest.uuid | 2 +- src/vacuum.c | 17 +++++++++---- test/vacuum-into.test | 58 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 test/vacuum-into.test diff --git a/manifest b/manifest index c59fcc0427..635f30acfa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sthe\sVACUUM\ssimplification\sfrom\strunk. -D 2018-12-07T20:40:12.098 +C Do\snot\sallow\sVACUUM\sINTO\sinto\sa\sfile\sthat\salready\sexists. +D 2018-12-07T23:48:41.554 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -577,7 +577,7 @@ F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 -F src/vacuum.c 7b74a106ecac182900124e7708b3657377a5b2b18812efc31f100caca1c0eae3 +F src/vacuum.c 5d49497308883e608bb420c112e87c10417b576af2a6d1dd0dba62d4a494ffd7 F src/vdbe.c 872bdd34338548242b36df18c49c90b34689e41c0b4e5c197e83bb82a38ce8dd F src/vdbe.h d82f323d581b36b8e147d650257ef34e0e93790039b6cbda45c321c275f7595e F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd @@ -1562,6 +1562,7 @@ F test/uri.test 3481026f00ade6dfe8adb7acb6e1e47b04369568 F test/uri2.test 9d3ba7a53ee167572d53a298ee4a5d38ec4a8fb7 F test/userauth01.test e740a2697a7b40d7c5003a7d7edaee16acd349a9 F test/utf16align.test 54cd35a27c005a9b6e7815d887718780b6a462ae +F test/vacuum-into.test dab9e498ea303f27370e71eb7e9a3369eb71ae90f4ea1afa741a1347ece39f5d F test/vacuum.test ce91c39f7f91a4273bf620efad21086b5aa6ef1d F test/vacuum2.test aa048abee196c16c9ba308465494009057b79f9b F test/vacuum3.test 77ecdd54592b45a0bcb133339f99f1ae0ae94d0d @@ -1782,7 +1783,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 036e3320a4af36c1311b25b2e504b0079c8b33df8ad7b7e5fddad07150e6f87d a92c398fc5df142ff1459c1be4a6832f2219bc7fabe5789535be3bbd41a4269b -R 5e2deff1e10a62e804983a88b3d403b2 +P 93d92a0a5d21a1856316c0205ecaa253691b6e5349b552d43027005676d14820 +R 4b91cbcd00a28fb8ade4cd8b52c5b6e4 U drh -Z a260dfd202744b5f58f4cbc1728d27d6 +Z b3677de0205f375bf2be187f033f6ce8 diff --git a/manifest.uuid b/manifest.uuid index 94144aeb81..4f71499d96 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -93d92a0a5d21a1856316c0205ecaa253691b6e5349b552d43027005676d14820 \ No newline at end of file +92f70e0fa3c9de7fde046f11cc0a7c2800511bb5ace8e68c845133931607616e \ No newline at end of file diff --git a/src/vacuum.c b/src/vacuum.c index 4f4fcf410c..a28541cc58 100644 --- a/src/vacuum.c +++ b/src/vacuum.c @@ -200,6 +200,15 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb, const char *zOut){ pDb = &db->aDb[nDb]; assert( strcmp(pDb->zDbSName,"vacuum_db")==0 ); pTemp = pDb->pBt; + if( zOut!=0 ){ + sqlite3_file *id = sqlite3PagerFile(sqlite3BtreePager(pTemp)); + i64 sz = 0; + if( id->pMethods!=0 && (sqlite3OsFileSize(id, &sz)!=SQLITE_OK || sz>0) ){ + rc = SQLITE_ERROR; + sqlite3SetString(pzErrMsg, db, "output file already exists"); + goto end_of_vacuum; + } + } nRes = sqlite3BtreeGetOptimalReserve(pMain); /* A VACUUM cannot change the pagesize of an encrypted database. */ @@ -374,11 +383,9 @@ end_of_vacuum: pDb->pSchema = 0; } - if( zOut==0 ){ - /* This both clears the schemas and reduces the size of the db->aDb[] - ** array. */ - sqlite3ResetAllSchemasOfConnection(db); - } + /* This both clears the schemas and reduces the size of the db->aDb[] + ** array. */ + sqlite3ResetAllSchemasOfConnection(db); return rc; } diff --git a/test/vacuum-into.test b/test/vacuum-into.test new file mode 100644 index 0000000000..f04c0becac --- /dev/null +++ b/test/vacuum-into.test @@ -0,0 +1,58 @@ +# 2018-12-07 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. The +# focus of this file is testing the VACUUM INTO statement. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +# If the VACUUM statement is disabled in the current build, skip all +# the tests in this file. +# +ifcapable {!vacuum} { + omit_test vacuum.test {Compiled with SQLITE_OMIT_VACUUM} + finish_test + return +} + +forcedelete out.db +do_execsql_test vacuum-into-100 { + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100) + INSERT INTO t1(a,b) SELECT x, randomblob(600) FROM c; + CREATE INDEX t1b ON t1(b); + DELETE FROM t1 WHERE a%2; + SELECT count(*), sum(a), sum(length(b)) FROM t1; +} {50 2550 30000} +do_execsql_test vacuum-into-110 { + VACUUM main INTO 'out.db'; +} {} +sqlite3 db2 out.db +do_test vacuum-into-120 { + db2 eval {SELECT count(*), sum(a), sum(length(b)) FROM t1} +} {50 2550 30000} +do_catchsql_test vacuum-into-130 { + VACUUM INTO 'out.db'; +} {1 {output file already exists}} +forcedelete out2.db +do_catchsql_test vacuum-into-140 { + VACUUM INTO 'out2.db'; +} {0 {}} +do_catchsql_test vacuum-into-150 { + VACUUM INTO 'out2.db'; +} {1 {output file already exists}} + +do_catchsql_test vacuum-into-200 { + VACUUM main INTO ':memory:'; +} {0 {}} + +finish_test From 2f6239ed4e7d8e152de77d00aae4678d62d7e4f3 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 8 Dec 2018 00:43:08 +0000 Subject: [PATCH 14/49] Allow the INTO clause of VACUUM to be a text-valued expression. FossilOrigin-Name: af172b53b46759f491f522356e14c5e2374d3f25ec70fbc1e100cadded8f9b22 --- manifest | 20 ++++++++-------- manifest.uuid | 2 +- src/parse.y | 11 +++++---- src/sqliteInt.h | 4 ++-- src/vacuum.c | 53 +++++++++++++++++++++++++++---------------- src/vdbe.c | 11 +++++---- test/vacuum-into.test | 11 +++++++++ 7 files changed, 70 insertions(+), 42 deletions(-) diff --git a/manifest b/manifest index 635f30acfa..52fef86043 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sallow\sVACUUM\sINTO\sinto\sa\sfile\sthat\salready\sexists. -D 2018-12-07T23:48:41.554 +C Allow\sthe\sINTO\sclause\sof\sVACUUM\sto\sbe\sa\stext-valued\sexpression. +D 2018-12-08T00:43:08.028 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -496,7 +496,7 @@ F src/os_win.c 85d9e532d0444ab6c16d7431490c2e279e282aa0917b0e988996b1ae0de5c5a0 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 75e0f3cfa3962c714f519f8a3d1e67ecca1c91de0e010a036b988e40ce9e4c73 F src/pager.h 217921e81eb5fe455caa5cda96061959706bcdd29ddb57166198645ef7822ac3 -F src/parse.y 3bf1b720e70a3cfb08f491913f61b181d71576879146d68ee845f6d77c6bdc70 +F src/parse.y a3c0db595bc642c6ee1d72869842f7f5b0b6ebeb91c21d0a7cba631d27e7afbd F src/pcache.c 696a01f1a6370c1b50a09c15972bc3bee3333f8fcd1f2da8e9a76b1b062c59ee F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c ad0ffc5b35b0280d045ac569d34d4b842e3e6a4a118f6396b320987a0957afcc @@ -512,7 +512,7 @@ F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883 F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 -F src/sqliteInt.h fa86b5689fae6d3b446fcae0430e4d1f3757bf5e72d0ca2e34d1287a2c3643f2 +F src/sqliteInt.h 70ce5e14c887554d3c51f2045f5a95b6e83de745d7f6448e79e49fdd8dfc2d5c F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@ -577,8 +577,8 @@ F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 -F src/vacuum.c 5d49497308883e608bb420c112e87c10417b576af2a6d1dd0dba62d4a494ffd7 -F src/vdbe.c 872bdd34338548242b36df18c49c90b34689e41c0b4e5c197e83bb82a38ce8dd +F src/vacuum.c 3ffe64ecfc94b7528c5d7bdb1c3a19d72fec63f2aa846e3b90f8de5dbbddf5aa +F src/vdbe.c 55bafc424748d9ed505ab2680736e51d1bb05c01e9885cbb3b287b51dc8b47ec F src/vdbe.h d82f323d581b36b8e147d650257ef34e0e93790039b6cbda45c321c275f7595e F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd F src/vdbeapi.c 9709452bee82963e1f7f1f5d0c71db823d553f8dbb2c47a911c4983d537a1947 @@ -1562,7 +1562,7 @@ F test/uri.test 3481026f00ade6dfe8adb7acb6e1e47b04369568 F test/uri2.test 9d3ba7a53ee167572d53a298ee4a5d38ec4a8fb7 F test/userauth01.test e740a2697a7b40d7c5003a7d7edaee16acd349a9 F test/utf16align.test 54cd35a27c005a9b6e7815d887718780b6a462ae -F test/vacuum-into.test dab9e498ea303f27370e71eb7e9a3369eb71ae90f4ea1afa741a1347ece39f5d +F test/vacuum-into.test 181a8ae8c2479d88ebc118076e8cfbc062ad8f8a51b56a139bd12870a8a84c34 F test/vacuum.test ce91c39f7f91a4273bf620efad21086b5aa6ef1d F test/vacuum2.test aa048abee196c16c9ba308465494009057b79f9b F test/vacuum3.test 77ecdd54592b45a0bcb133339f99f1ae0ae94d0d @@ -1783,7 +1783,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 93d92a0a5d21a1856316c0205ecaa253691b6e5349b552d43027005676d14820 -R 4b91cbcd00a28fb8ade4cd8b52c5b6e4 +P 92f70e0fa3c9de7fde046f11cc0a7c2800511bb5ace8e68c845133931607616e +R f797d08299c49f27762cbb498a2316b3 U drh -Z b3677de0205f375bf2be187f033f6ce8 +Z 0107ff29eb1054c07981156ef518bc62 diff --git a/manifest.uuid b/manifest.uuid index 4f71499d96..d2641d7679 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -92f70e0fa3c9de7fde046f11cc0a7c2800511bb5ace8e68c845133931607616e \ No newline at end of file +af172b53b46759f491f522356e14c5e2374d3f25ec70fbc1e100cadded8f9b22 \ No newline at end of file diff --git a/src/parse.y b/src/parse.y index dbbd40775e..3f9384c86c 100644 --- a/src/parse.y +++ b/src/parse.y @@ -1367,11 +1367,12 @@ cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);} // %ifndef SQLITE_OMIT_VACUUM %ifndef SQLITE_OMIT_ATTACH -%type vinto {Token} -cmd ::= VACUUM vinto(Y). {sqlite3Vacuum(pParse,0,&Y);} -cmd ::= VACUUM nm(X) vinto(Y). {sqlite3Vacuum(pParse,&X,&Y);} -vinto(A) ::= INTO nm(X). {A = X;} -vinto(A) ::= . {A.z = 0;} +%type vinto {Expr*} +%destructor vinto {sqlite3ExprDelete(pParse->db, $$);} +cmd ::= VACUUM vinto(Y). {sqlite3Vacuum(pParse,0,Y);} +cmd ::= VACUUM nm(X) vinto(Y). {sqlite3Vacuum(pParse,&X,Y);} +vinto(A) ::= INTO expr(X). {A = X;} +vinto(A) ::= . {A = 0;} %endif SQLITE_OMIT_ATTACH %endif SQLITE_OMIT_VACUUM diff --git a/src/sqliteInt.h b/src/sqliteInt.h index e175de9518..0412a33523 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3985,8 +3985,8 @@ Table *sqlite3LocateTableItem(Parse*,u32 flags,struct SrcList_item *); Index *sqlite3FindIndex(sqlite3*,const char*, const char*); void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*); void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*); -void sqlite3Vacuum(Parse*,Token*,Token*); -int sqlite3RunVacuum(char**, sqlite3*, int, const char*); +void sqlite3Vacuum(Parse*,Token*,Expr*); +int sqlite3RunVacuum(char**, sqlite3*, int, sqlite3_value*); char *sqlite3NameFromToken(sqlite3*, Token*); int sqlite3ExprCompare(Parse*,Expr*, Expr*, int); int sqlite3ExprCompareSkip(Expr*, Expr*, int); diff --git a/src/vacuum.c b/src/vacuum.c index a28541cc58..b4041b6d97 100644 --- a/src/vacuum.c +++ b/src/vacuum.c @@ -102,17 +102,16 @@ static int execSqlF(sqlite3 *db, char **pzErrMsg, const char *zSql, ...){ ** transient would cause the database file to appear to be deleted ** following reboot. */ -void sqlite3Vacuum(Parse *pParse, Token *pNm, Token *pInto){ +void sqlite3Vacuum(Parse *pParse, Token *pNm, Expr *pInto){ Vdbe *v = sqlite3GetVdbe(pParse); int iDb = 0; - assert( pInto!=0 ); - if( v==0 ) return; + if( v==0 ) goto build_vacuum_end; if( pNm ){ #ifndef SQLITE_BUG_COMPATIBLE_20160819 /* Default behavior: Report an error if the argument to VACUUM is ** not recognized */ iDb = sqlite3TwoPartName(pParse, pNm, pNm, &pNm); - if( iDb<0 ) return; + if( iDb<0 ) goto build_vacuum_end; #else /* When SQLITE_BUG_COMPATIBLE_20160819 is defined, unrecognized arguments ** to VACUUM are silently ignored. This is a back-out of a bug fix that @@ -124,20 +123,28 @@ void sqlite3Vacuum(Parse *pParse, Token *pNm, Token *pInto){ #endif } if( iDb!=1 ){ - sqlite3VdbeAddOp1(v, OP_Vacuum, iDb); - sqlite3VdbeUsesBtree(v, iDb); - if( pInto->z ){ - char *zName = sqlite3NameFromToken(pParse->db, pInto); - sqlite3VdbeChangeP4(v, -1, zName, P4_DYNAMIC); + int iIntoReg = 0; + if( pInto ){ + iIntoReg = ++pParse->nMem; + sqlite3ExprCode(pParse, pInto, iIntoReg); } + sqlite3VdbeAddOp2(v, OP_Vacuum, iDb, iIntoReg); + sqlite3VdbeUsesBtree(v, iDb); } +build_vacuum_end: + sqlite3ExprDelete(pParse->db, pInto); return; } /* ** This routine implements the OP_Vacuum opcode of the VDBE. */ -int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb, const char *zOut){ +int sqlite3RunVacuum( + char **pzErrMsg, /* Write error message here */ + sqlite3 *db, /* Database connection */ + int iDb, /* Which attached DB to vacuum */ + sqlite3_value *pOut /* Write results here, if not NULL */ +){ int rc = SQLITE_OK; /* Return code from service routines */ Btree *pMain; /* The database being vacuumed */ Btree *pTemp; /* The temporary database we vacuum into */ @@ -151,6 +158,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb, const char *zOut){ int nRes; /* Bytes of reserved space at the end of each page */ int nDb; /* Number of attached databases */ const char *zDbMain; /* Schema name of database to vacuum */ + const char *zOut; /* Name of output file */ if( !db->autoCommit ){ sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction"); @@ -160,6 +168,15 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb, const char *zOut){ sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress"); return SQLITE_ERROR; } + if( pOut ){ + if( sqlite3_value_type(pOut)!=SQLITE_TEXT ){ + sqlite3SetString(pzErrMsg, db, "non-text filename"); + return SQLITE_ERROR; + } + zOut = (const char*)sqlite3_value_text(pOut); + }else{ + zOut = ""; + } /* Save the current value of the database flags so that it can be ** restored before returning. Then set the writable-schema flag, and @@ -194,13 +211,13 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb, const char *zOut){ ** to write the journal header file. */ nDb = db->nDb; - rc = execSqlF(db, pzErrMsg, "ATTACH %Q AS vacuum_db", zOut ? zOut : ""); + rc = execSqlF(db, pzErrMsg, "ATTACH %Q AS vacuum_db", zOut); if( rc!=SQLITE_OK ) goto end_of_vacuum; assert( (db->nDb-1)==nDb ); pDb = &db->aDb[nDb]; assert( strcmp(pDb->zDbSName,"vacuum_db")==0 ); pTemp = pDb->pBt; - if( zOut!=0 ){ + if( pOut ){ sqlite3_file *id = sqlite3PagerFile(sqlite3BtreePager(pTemp)); i64 sz = 0; if( id->pMethods!=0 && (sqlite3OsFileSize(id, &sz)!=SQLITE_OK || sz>0) ){ @@ -232,7 +249,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb, const char *zOut){ */ rc = execSql(db, pzErrMsg, "BEGIN"); if( rc!=SQLITE_OK ) goto end_of_vacuum; - rc = sqlite3BtreeBeginTrans(pMain, zOut==0 ? 2 : 0, 0); + rc = sqlite3BtreeBeginTrans(pMain, pOut==0 ? 2 : 0, 0); if( rc!=SQLITE_OK ) goto end_of_vacuum; /* Do not attempt to change the page size for a WAL database */ @@ -327,7 +344,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb, const char *zOut){ }; assert( 1==sqlite3BtreeIsInTrans(pTemp) ); - assert( zOut!=0 || 1==sqlite3BtreeIsInTrans(pMain) ); + assert( pOut!=0 || 1==sqlite3BtreeIsInTrans(pMain) ); /* Copy Btree meta values */ for(i=0; ireadOnly==0 ); - rc = sqlite3RunVacuum(&p->zErrMsg, db, pOp->p1, pOp->p4.z); + rc = sqlite3RunVacuum(&p->zErrMsg, db, pOp->p1, + pOp->p2 ? &aMem[pOp->p2] : 0); if( rc ) goto abort_due_to_error; break; } diff --git a/test/vacuum-into.test b/test/vacuum-into.test index f04c0becac..cb91abc5d9 100644 --- a/test/vacuum-into.test +++ b/test/vacuum-into.test @@ -55,4 +55,15 @@ do_catchsql_test vacuum-into-200 { VACUUM main INTO ':memory:'; } {0 {}} +# The INTO argument can be an arbitrary expression. +# +do_execsql_test vacuum-into-300 { + CREATE TABLE t2(name TEXT); + INSERT INTO t2 VALUES(':memory:'); + VACUUM main INTO (SELECT name FROM t2); +} {} +do_catchsql_test vacuum-into-310 { + VACUUM INTO null; +} {1 {non-text filename}} + finish_test From a50bffb85ec1246b95468341ccac3748577d9b31 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 8 Dec 2018 01:09:14 +0000 Subject: [PATCH 15/49] Add the --async option to the ".backup" command in the CLI. FossilOrigin-Name: 7b6a605b1883dfcbe237b0a58f6f0c233a109e88b521c3b3d97198526c8a0317 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 11 ++++++++++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 52fef86043..c01c4e39ca 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Allow\sthe\sINTO\sclause\sof\sVACUUM\sto\sbe\sa\stext-valued\sexpression. -D 2018-12-08T00:43:08.028 +C Add\sthe\s--async\soption\sto\sthe\s".backup"\scommand\sin\sthe\sCLI. +D 2018-12-08T01:09:14.691 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -508,7 +508,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 095d1d41d7a981ee9db8bfeae25ed0d6a8a5e5e3d66b0f4efd71877ed7b56132 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 -F src/shell.c.in 1f0819e69fb1ebd2eb44695530dc43936608bf9b752981a0ffd4e2e4a9e3883d +F src/shell.c.in 5f38bd0e127c2cc4e506b5c3565c10879ddfae6c2d867bb5972563e40717c19c F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 @@ -1783,7 +1783,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 92f70e0fa3c9de7fde046f11cc0a7c2800511bb5ace8e68c845133931607616e -R f797d08299c49f27762cbb498a2316b3 +P af172b53b46759f491f522356e14c5e2374d3f25ec70fbc1e100cadded8f9b22 +R df568823aa698ca1a561c86a7815b31b U drh -Z 0107ff29eb1054c07981156ef518bc62 +Z 361de2f1352642d2a8077d8c1209b182 diff --git a/manifest.uuid b/manifest.uuid index d2641d7679..d46907ba61 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -af172b53b46759f491f522356e14c5e2374d3f25ec70fbc1e100cadded8f9b22 \ No newline at end of file +7b6a605b1883dfcbe237b0a58f6f0c233a109e88b521c3b3d97198526c8a0317 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 887c2fcf59..fd9cefa7a8 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -3377,6 +3377,7 @@ static const char *(azHelp[]) = { #endif ".backup ?DB? FILE Backup DB (default \"main\") to FILE", " --append Use the appendvfs", + " --async Write to FILE without a journal and without fsync()", ".bail on|off Stop after hitting an error. Default OFF", ".binary on|off Turn binary output on or off. Default OFF", ".cd DIRECTORY Change the working directory to DIRECTORY", @@ -5840,6 +5841,7 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3 *pDest; sqlite3_backup *pBackup; int j; + int bAsync = 0; const char *zVfs = 0; for(j=1; jdb, zDb); if( pBackup==0 ){ From d4a4a36171fdc93a9fc117af2f957c86624b50da Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 8 Dec 2018 20:30:31 +0000 Subject: [PATCH 16/49] Do not use a partial index as a table scan in an IN operator. Fix for ticket [1d958d90596593a77420e59]. FossilOrigin-Name: 15bc915dd7ae25bfdfbe357c3792db3639799e4d121c6b5b24297af2d6d7129e --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 1 + test/index6.test | 19 ++++++++++++++++++- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 46031d6ed1..600419b00c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sa\sline\sof\scode\sfrom\sVACUUM\sthat\sis\sno\slonger\sneeded,\sdue\sto\sthe\nchange\sthat\sallows\sATTACH\sto\srun\swithin\sa\stransaction. -D 2018-12-07T20:26:29.949 +C Do\snot\suse\sa\spartial\sindex\sas\sa\stable\sscan\sin\san\sIN\soperator.\nFix\sfor\sticket\s[1d958d90596593a77420e59]. +D 2018-12-08T20:30:31.225 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -459,7 +459,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c 3c8bd4e77f0244fd2bd7cc90acf116ad2f8e82d70e536637f35ac2bc99b726f9 F src/delete.c f7938125847e8ef485448db5fbad29acb2991381a02887dd854c1617315ab9fb -F src/expr.c b83e2056086e364293ce741509d885d1646a32d62727fe3169b23231c7e4f62f +F src/expr.c 494a778ee193d99127c72adefcec3e8e133f482acf5f1c267652a8f51029e9ae F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f @@ -1015,7 +1015,7 @@ F test/index2.test f835d5e13ca163bd78c4459ca15fd2e4ed487407 F test/index3.test 51685f39345462b84fcf77eb8537af847fdf438cc96b05c45d6aaca4e473ade0 F test/index4.test ab92e736d5946840236cd61ac3191f91a7856bf6 F test/index5.test 8621491915800ec274609e42e02a97d67e9b13e7 -F test/index6.test d07ea75b8c21f125c6f325522e8df8c05c91e9251ec923a31d0582b2ba4a617d +F test/index6.test 7cb66c4e54da73f51e874dcf4a761411c0f8f3f5a4fdf7022d8a505b0194296b F test/index7.test 72b59b8ddc5c13f4962886b4011eb9975014317d17ef36c6297921362fb7dd98 F test/index8.test bc2e3db70e8e62459aaa1bd7e4a9b39664f8f9d7 F test/index9.test 0aa3e509dddf81f93380396e40e9bb386904c1054924ba8fa9bcdfe85a8e7721 @@ -1782,7 +1782,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 0d8e150434bbd179696f1ffe71d1e06cb3d43e6468496c7e481fca8486387bad -R 4426cbb4a0e989d65734a42a486b3458 +P a92c398fc5df142ff1459c1be4a6832f2219bc7fabe5789535be3bbd41a4269b +R b6f349da580def7412aedbdbd15fbe9b U drh -Z 888d594bf1edeab12c4e75c4f15da299 +Z 66d01b11a28cdf2981ee67c4d1459164 diff --git a/manifest.uuid b/manifest.uuid index 5c7c601c94..e603f26372 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a92c398fc5df142ff1459c1be4a6832f2219bc7fabe5789535be3bbd41a4269b \ No newline at end of file +15bc915dd7ae25bfdfbe357c3792db3639799e4d121c6b5b24297af2d6d7129e \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 6886d30b2d..0b2e797752 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2443,6 +2443,7 @@ int sqlite3FindInIndex( Bitmask colUsed; /* Columns of the index used */ Bitmask mCol; /* Mask for the current column */ if( pIdx->nColumnpPartIdxWhere!=0 ) continue; /* Maximum nColumn is BMS-2, not BMS-1, so that we can compute ** BITMASK(nExpr) without overflowing */ testcase( pIdx->nColumn==BMS-2 ); diff --git a/test/index6.test b/test/index6.test index 4ddce453fd..33c2ed3382 100644 --- a/test/index6.test +++ b/test/index6.test @@ -389,6 +389,23 @@ do_execsql_test index6-11.1 { do_execsql_test index6-11.2 { EXPLAIN QUERY PLAN SELECT a FROM t11 WHERE b<>99 AND c<>98; } {/USING INDEX t11x/} - + +# 2018-12-08 +# Ticket https://www.sqlite.org/src/info/1d958d90596593a7 +# NOT IN operator fails when using a partial index. +# +do_execsql_test index6-12.1 { + DROP TABLE IF EXISTS t1; + DROP TABLE IF EXISTS t2; + CREATE TABLE t1(a,b); + INSERT INTO t1 VALUES(1,1); + INSERT INTO t1 VALUES(2,2); + CREATE TABLE t2(x); + INSERT INTO t2 VALUES(1); + INSERT INTO t2 VALUES(2); + SELECT 'one', * FROM t2 WHERE x NOT IN (SELECT a FROM t1); + CREATE INDEX t1a ON t1(a) WHERE b=1; + SELECT 'two', * FROM t2 WHERE x NOT IN (SELECT a FROM t1); +} {} finish_test From ce706c2cf340f91bdeaa42dda03db1a2eafe8d6f Mon Sep 17 00:00:00 2001 From: drh Date: Sun, 9 Dec 2018 18:55:05 +0000 Subject: [PATCH 17/49] New test case for ticket [1d958d90596593a77420e59]. FossilOrigin-Name: b7bf3c9832bde26b359f4d58ebcf7788c500586d311387d022192ed65a126252 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/index6.test | 4 +++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 600419b00c..c70fc83c3c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\suse\sa\spartial\sindex\sas\sa\stable\sscan\sin\san\sIN\soperator.\nFix\sfor\sticket\s[1d958d90596593a77420e59]. -D 2018-12-08T20:30:31.225 +C New\stest\scase\sfor\sticket\s[1d958d90596593a77420e59]. +D 2018-12-09T18:55:05.721 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -1015,7 +1015,7 @@ F test/index2.test f835d5e13ca163bd78c4459ca15fd2e4ed487407 F test/index3.test 51685f39345462b84fcf77eb8537af847fdf438cc96b05c45d6aaca4e473ade0 F test/index4.test ab92e736d5946840236cd61ac3191f91a7856bf6 F test/index5.test 8621491915800ec274609e42e02a97d67e9b13e7 -F test/index6.test 7cb66c4e54da73f51e874dcf4a761411c0f8f3f5a4fdf7022d8a505b0194296b +F test/index6.test 6b3e6cd4bef343ed4541e74c55936ed112962a6552c085242612b598e12910a4 F test/index7.test 72b59b8ddc5c13f4962886b4011eb9975014317d17ef36c6297921362fb7dd98 F test/index8.test bc2e3db70e8e62459aaa1bd7e4a9b39664f8f9d7 F test/index9.test 0aa3e509dddf81f93380396e40e9bb386904c1054924ba8fa9bcdfe85a8e7721 @@ -1782,7 +1782,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 a92c398fc5df142ff1459c1be4a6832f2219bc7fabe5789535be3bbd41a4269b -R b6f349da580def7412aedbdbd15fbe9b +P 15bc915dd7ae25bfdfbe357c3792db3639799e4d121c6b5b24297af2d6d7129e +R c0db1af5f2bfbd2fba4377002cf1535d U drh -Z 66d01b11a28cdf2981ee67c4d1459164 +Z e19bb708feb379cc8644d3f55b45ddb6 diff --git a/manifest.uuid b/manifest.uuid index e603f26372..1e7c3a3d08 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -15bc915dd7ae25bfdfbe357c3792db3639799e4d121c6b5b24297af2d6d7129e \ No newline at end of file +b7bf3c9832bde26b359f4d58ebcf7788c500586d311387d022192ed65a126252 \ No newline at end of file diff --git a/test/index6.test b/test/index6.test index 33c2ed3382..29b73f72d4 100644 --- a/test/index6.test +++ b/test/index6.test @@ -407,5 +407,7 @@ do_execsql_test index6-12.1 { CREATE INDEX t1a ON t1(a) WHERE b=1; SELECT 'two', * FROM t2 WHERE x NOT IN (SELECT a FROM t1); } {} - +do_execsql_test index6-12.2 { + SELECT x FROM t2 WHERE x IN (SELECT a FROM t1) ORDER BY +x; +} {1 2} finish_test From 4d342827d60d9bb7a63771395c5f36ac53f7f9f8 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 10 Dec 2018 00:41:28 +0000 Subject: [PATCH 18/49] Fix the shell1.test test for the new format of the .backup command. FossilOrigin-Name: 9748d7995bc1dd632d66d2d326048d50e29c6f5e6993d5a6294d14421d2cb72f --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/shell1.test | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 033a02476a..5e8b9f496f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sfixes\sfrom\strunk. -D 2018-12-10T00:40:43.719 +C Fix\sthe\sshell1.test\stest\sfor\sthe\snew\sformat\sof\sthe\s.backup\scommand. +D 2018-12-10T00:41:28.076 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -1277,7 +1277,7 @@ F test/sharedA.test 49d87ec54ab640fbbc3786ee3c01de94aaa482a3a9f834ad3fe92770eb69 F test/sharedB.test 16cc7178e20965d75278f410943109b77b2e645e F test/shared_err.test 32634e404a3317eeb94abc7a099c556a346fdb8fb3858dbe222a4cbb8926a939 F test/sharedlock.test 5ede3c37439067c43b0198f580fd374ebf15d304 -F test/shell1.test d2bf5daeb6f449f0169c9ef3094db17a16a02199c5dcf1a635a3e79b07eb0edd +F test/shell1.test 0378c4e9e800da6fbb3c86c0c8f2cf5efc9e4155b4b6447d27dc71de648fc0a1 F test/shell2.test e242a9912f44f4c23c3d1d802a83e934e84c853b F test/shell3.test ac8c2b744014c3e9a0e26bfd829ab65f00923dc1a91ffd044863e9423cc91494 F test/shell4.test a6881d0ae226ded0df8ebdfa574c5aa6dc28d6884ccba1089dc56ed08b9e5ef4 @@ -1783,7 +1783,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 7b6a605b1883dfcbe237b0a58f6f0c233a109e88b521c3b3d97198526c8a0317 b7bf3c9832bde26b359f4d58ebcf7788c500586d311387d022192ed65a126252 -R 9c5048fab1535ae69a9ca5a527426080 +P ab1e58fac9e3f9d7d90cefb39f8f145d211d38ec0cb393208c4531cc646056c1 +R f78f1915a996819be59599569cf251be U drh -Z 4be57a3eceec619de5e7431288dd440b +Z 8250db6890dbee78d842dff888889f8d diff --git a/manifest.uuid b/manifest.uuid index 9ce083fd00..d3b869dc52 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ab1e58fac9e3f9d7d90cefb39f8f145d211d38ec0cb393208c4531cc646056c1 \ No newline at end of file +9748d7995bc1dd632d66d2d326048d50e29c6f5e6993d5a6294d14421d2cb72f \ No newline at end of file diff --git a/test/shell1.test b/test/shell1.test index aaf7addf5c..f105bac5b7 100644 --- a/test/shell1.test +++ b/test/shell1.test @@ -256,7 +256,7 @@ do_test shell1-3.1.3 { do_test shell1-3.1.4 { # too many arguments catchcmd "test.db" ".backup FOO BAR BAD" -} {1 {Usage: .backup ?DB? ?--append? FILENAME}} +} {1 {Usage: .backup ?DB? ?OPTIONS? FILENAME}} # .bail ON|OFF Stop after hitting an error. Default OFF do_test shell1-3.2.1 { From dc6214ee3910093d930962ba026e1f8329b6ef98 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 10 Dec 2018 08:41:32 +0000 Subject: [PATCH 19/49] Fix a problem with using "-vacuum" (the default) as the state database when resuming an RBU vacuum. FossilOrigin-Name: c878d741733a897d47a1a0b57b454bc9095ce302b48cc01089336d5d20e2a24c --- ext/rbu/rbu_common.tcl | 13 +++++++------ ext/rbu/rbuvacuum2.test | 27 ++++++++++++++++++--------- ext/rbu/sqlite3rbu.c | 8 +++++++- ext/rbu/sqlite3rbu.h | 6 +++++- ext/rbu/test_rbu.c | 1 + manifest | 23 +++++++++++------------ manifest.uuid | 2 +- 7 files changed, 50 insertions(+), 30 deletions(-) diff --git a/ext/rbu/rbu_common.tcl b/ext/rbu/rbu_common.tcl index 2b263b7660..b5e63aafe5 100644 --- a/ext/rbu/rbu_common.tcl +++ b/ext/rbu/rbu_common.tcl @@ -86,12 +86,13 @@ proc step_rbu_legacy {target rbu} { set rc } -proc do_rbu_vacuum_test {tn step} { - forcedelete state.db - uplevel [list do_test $tn.1 { - if {$step==0} { sqlite3rbu_vacuum rbu test.db state.db } +proc do_rbu_vacuum_test {tn step {statedb state.db}} { + forcedelete $statedb + if {$statedb=="" && $step==1} breakpoint + uplevel [list do_test $tn.1 [string map [list %state% $statedb] { + if {$step==0} { sqlite3rbu_vacuum rbu test.db {%state%}} while 1 { - if {$step==1} { sqlite3rbu_vacuum rbu test.db state.db } + if {$step==1} { sqlite3rbu_vacuum rbu test.db {%state%}} set state [rbu state] check_prestep_state test.db $state set rc [rbu step] @@ -100,7 +101,7 @@ proc do_rbu_vacuum_test {tn step} { if {$step==1} { rbu close } } rbu close - } {SQLITE_DONE}] + }] {SQLITE_DONE}] uplevel [list do_execsql_test $tn.2 { PRAGMA integrity_check diff --git a/ext/rbu/rbuvacuum2.test b/ext/rbu/rbuvacuum2.test index 4713580c70..6d6dfde9b9 100644 --- a/ext/rbu/rbuvacuum2.test +++ b/ext/rbu/rbuvacuum2.test @@ -16,8 +16,11 @@ source [file join [file dirname [info script]] rbu_common.tcl] -foreach step {0 1} { - set ::testprefix rbuvacuum2-$step +foreach {step} {0 1} { +foreach {ttt state} { + s state.db t test.db-vacuum n {} +} { + set ::testprefix rbuvacuum2-$step$ttt #------------------------------------------------------------------------- # Test that a database that contains fts3 tables can be vacuumed. @@ -29,7 +32,7 @@ foreach step {0 1} { INSERT INTO t1 VALUES('fix this issue', 'at some point'); } - do_rbu_vacuum_test 1.2 $step + do_rbu_vacuum_test 1.2 $step $state do_execsql_test 1.3 { SELECT * FROM t1; @@ -46,7 +49,7 @@ foreach step {0 1} { INSERT INTO t1 VALUES('a b c', 'x y z'); } - do_rbu_vacuum_test 1.6 $step + do_rbu_vacuum_test 1.6 $step $state do_execsql_test 1.7 { INSERT INTO t1(t1) VALUES('integrity-check'); SELECT * FROM t1; @@ -67,7 +70,7 @@ foreach step {0 1} { INSERT INTO t1 VALUES('fix this issue', 'at some point'); } - do_rbu_vacuum_test 2.2 $step + do_rbu_vacuum_test 2.2 $step $state do_execsql_test 2.3 { SELECT * FROM t1; @@ -84,7 +87,7 @@ foreach step {0 1} { INSERT INTO t1 VALUES('a b c', 'x y z'); } - do_rbu_vacuum_test 2.6 $step + do_rbu_vacuum_test 2.6 $step $state do_execsql_test 2.7 { INSERT INTO t1(t1) VALUES('integrity-check'); SELECT * FROM t1; @@ -107,7 +110,7 @@ foreach step {0 1} { INSERT INTO rt VALUES(3, 55, 65); } - do_rbu_vacuum_test 3.2 $step + do_rbu_vacuum_test 3.2 $step $state do_execsql_test 3.3 { SELECT * FROM rt; @@ -120,7 +123,7 @@ foreach step {0 1} { SELECT rowid FROM rt WHERE x2>59 AND x1 < 59 } {2 3} - do_rbu_vacuum_test 3.5 $step + do_rbu_vacuum_test 3.5 $step $state do_execsql_test 3.6.1 { SELECT rowid FROM rt WHERE x2>51 AND x1 < 51 @@ -147,7 +150,7 @@ foreach step {0 1} { trigger tr1 t1 0 {CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN SELECT 1; END} } - do_rbu_vacuum_test 4.3 $step + do_rbu_vacuum_test 4.3 $step $state do_execsql_test 4.4 { SELECT * FROM sqlite_master; } { @@ -157,6 +160,7 @@ foreach step {0 1} { } } } +} #------------------------------------------------------------------------- # Test that passing a NULL value as the second argument to @@ -231,4 +235,9 @@ do_test 6.3 { execsql { PRAGMA integrity_check } } {ok} +do_test 6.4 { + sqlite3rbu_vacuum rbu test.db test.db-vactmp + list [catch { rbu close } msg] $msg +} {1 SQLITE_MISUSE} + finish_test diff --git a/ext/rbu/sqlite3rbu.c b/ext/rbu/sqlite3rbu.c index cd2f96c51b..7683c3464b 100644 --- a/ext/rbu/sqlite3rbu.c +++ b/ext/rbu/sqlite3rbu.c @@ -2477,7 +2477,7 @@ static void rbuOpenDatabase(sqlite3rbu *p, int *pbRetry){ if( *zExtra=='\0' ) zExtra = 0; } - zTarget = sqlite3_mprintf("file:%s-vacuum?rbu_memory=1%s%s", + zTarget = sqlite3_mprintf("file:%s-vactmp?rbu_memory=1%s%s", sqlite3_db_filename(p->dbRbu, "main"), (zExtra==0 ? "" : "&"), (zExtra==0 ? "" : zExtra) ); @@ -3743,6 +3743,12 @@ sqlite3rbu *sqlite3rbu_vacuum( const char *zState ){ if( zTarget==0 ){ return rbuMisuseError(); } + if( zState ){ + int n = strlen(zState); + if( n>=7 && 0==memcmp("-vactmp", &zState[n-7], 7) ){ + return rbuMisuseError(); + } + } /* TODO: Check that both arguments are non-NULL */ return openRbuHandle(0, zTarget, zState); } diff --git a/ext/rbu/sqlite3rbu.h b/ext/rbu/sqlite3rbu.h index 1acbcca469..69d89500a0 100644 --- a/ext/rbu/sqlite3rbu.h +++ b/ext/rbu/sqlite3rbu.h @@ -333,7 +333,11 @@ SQLITE_API sqlite3rbu *sqlite3rbu_open( ** name of the state database is "-vacuum", where ** is the name of the target database file. In this case, on UNIX, if the ** state database is not already present in the file-system, it is created -** with the same permissions as the target db is made. +** with the same permissions as the target db is made. +** +** With an RBU vacuum, it is an SQLITE_MISUSE error if the name of the +** state database ends with "-vactmp". This name is reserved for internal +** use. ** ** This function does not delete the state database after an RBU vacuum ** is completed, even if it created it. However, if the call to diff --git a/ext/rbu/test_rbu.c b/ext/rbu/test_rbu.c index e0b4d77af0..6d04bfe8cc 100644 --- a/ext/rbu/test_rbu.c +++ b/ext/rbu/test_rbu.c @@ -273,6 +273,7 @@ static int SQLITE_TCLAPI test_sqlite3rbu_vacuum( zCmd = Tcl_GetString(objv[1]); zTarget = Tcl_GetString(objv[2]); if( objc==4 ) zStateDb = Tcl_GetString(objv[3]); + if( zStateDb && zStateDb[0]=='\0' ) zStateDb = 0; pRbu = sqlite3rbu_vacuum(zTarget, zStateDb); Tcl_CreateObjCommand(interp, zCmd, test_sqlite3rbu_cmd, (ClientData)pRbu, 0); diff --git a/manifest b/manifest index 544f8a6898..a24f9cc5e0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\ssupport\sfor\sthe\sVACUUM\sINTO\scommand. -D 2018-12-10T01:48:29.276 +C Fix\sa\sproblem\swith\susing\s"-vacuum"\s(the\sdefault)\sas\sthe\sstate\sdatabase\nwhen\sresuming\san\sRBU\svacuum. +D 2018-12-10T08:41:32.074 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -330,7 +330,7 @@ F ext/rbu/rbu9.test 0e4d985e25620d61920597e8ea69c871c9e8c1f5a0be2ae9fa70bb641d74 F ext/rbu/rbuA.test b34a90cb495682c25b5fc03a9d5e7a4fc99541c29256f25e2e2a4f6542b4f5b3 F ext/rbu/rbuB.test 52b07158824c6927b7e25554ace92a695cdebfc296ae3d308ac386984aded9bc F ext/rbu/rbuC.test 80f1cc2fb74f44b1128fd0ed8eedab3a76fefeb72a947860e2869ef76fc8dc6b -F ext/rbu/rbu_common.tcl acfb7fbbaf8d46a9f6f6a5ec795616c84d705e1565d918afe43f0ff53ea0efa5 +F ext/rbu/rbu_common.tcl 4b3d033b3e3844292ae3a1aefc0e524e64b0db5a0e4310657919e4504ac3073f F ext/rbu/rbucollate.test cac528a9a46318cba42e61258bb42660bbbf4fdb9a8c863de5a54ad0c658d197 F ext/rbu/rbucrash.test 000981a1fe8a6e4d9a684232f6a129e66a3ef595f5ed74655e2f9c68ffa613b4 F ext/rbu/rbucrash2.test efa143cc94228eb0266d3f1abfbee60a5838a84cef7cc3fcb8c145b74d96fd41 @@ -348,10 +348,10 @@ F ext/rbu/rbusave.test f4190a1a86fccf84f723af5c93813365ae33feda35845ba107b59683d F ext/rbu/rbusplit.test b37e7b40b38760881dc9c854bd40b4744c6b6cd74990754eca3bda0f407051e8 F ext/rbu/rbutemplimit.test 7f408f49b90fa0a720d7599f3aec74a3c85e6cd78e56fdf726ce00af9147a341 F ext/rbu/rbuvacuum.test 55e101e90168c2b31df6c9638fe73dc7f7cc666b6142266d1563697d79f73534 -F ext/rbu/rbuvacuum2.test 0a7669bbabdaeed915f02f59f33fe20e13d4932ba2086fe00a82064d9424c80b -F ext/rbu/sqlite3rbu.c 71f8c09948d09ec9c5a8dbe7127e8ef61ef0853e698b2650be2485ac7b9c75c8 -F ext/rbu/sqlite3rbu.h b42bcd4d8357268c6c39ab2a60b29c091e89328fa8cc49c8fac5ab8d007e79b2 -F ext/rbu/test_rbu.c baa23eb28457580673d2175e5f0c29ced0cd320ee819b13ad362398c53b96e90 +F ext/rbu/rbuvacuum2.test b8e5b51dc8b2c0153373d024c0936be3f66f9234acbd6d0baab0869d56b14e6b +F ext/rbu/sqlite3rbu.c f722ed4177c9fb73f2f6f116240687ac7603735fa95ea63bff71827929d4c192 +F ext/rbu/sqlite3rbu.h 1dc88ab7bd32d0f15890ea08d23476c4198d3da3056985403991f8c9cd389812 +F ext/rbu/test_rbu.c 03f6f177096a5f822d68d8e4069ad8907fe572c62ff2d19b141f59742821828a F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15 F ext/repair/checkfreelist.c 0dbae18c1b552f58d64f8969e4fb1e7f11930c60a8c2a9a8d50b7f15bdfd54bd F ext/repair/checkindex.c 7d28c01a2e012ac64257d230fc452b2cafb78311a91a343633d01d95220f66f3 @@ -1783,8 +1783,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 b7bf3c9832bde26b359f4d58ebcf7788c500586d311387d022192ed65a126252 9748d7995bc1dd632d66d2d326048d50e29c6f5e6993d5a6294d14421d2cb72f -R f78f1915a996819be59599569cf251be -T +closed 9748d7995bc1dd632d66d2d326048d50e29c6f5e6993d5a6294d14421d2cb72f -U drh -Z ee3d9a1eeb178b5acf328ec54a590f24 +P 77f150b8b46761f4f62f9d8926c10a95a70589a4525393fc16b321bd98c083a7 +R 958323adeafdf09cbb584115dfab1b22 +U dan +Z 3e8a12745bc34fa21f3c5c886b9f537f diff --git a/manifest.uuid b/manifest.uuid index fb0635c7f2..afb7891c77 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -77f150b8b46761f4f62f9d8926c10a95a70589a4525393fc16b321bd98c083a7 \ No newline at end of file +c878d741733a897d47a1a0b57b454bc9095ce302b48cc01089336d5d20e2a24c \ No newline at end of file From 643d855da9625dd18f784674792dadd9697bb3ad Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 10 Dec 2018 16:00:57 +0000 Subject: [PATCH 20/49] Refactor the sqlite3_normalized_sql() implementation. This is a work-in-progress. There are still issues. FossilOrigin-Name: a4c890b0af9786295e6df05022009d8946550adb873535c610be805c2b7a4083 --- manifest | 24 +++--- manifest.uuid | 2 +- src/prepare.c | 198 ------------------------------------------------ src/sqliteInt.h | 3 - src/tokenize.c | 197 +++++++++++++++++++++++++++++++---------------- src/vdbe.h | 2 +- src/vdbeaux.c | 16 +--- 7 files changed, 148 insertions(+), 294 deletions(-) diff --git a/manifest b/manifest index 544f8a6898..c0a5842691 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\ssupport\sfor\sthe\sVACUUM\sINTO\scommand. -D 2018-12-10T01:48:29.276 +C Refactor\sthe\ssqlite3_normalized_sql()\simplementation.\sThis\sis\sa\nwork-in-progress.\sThere\sare\sstill\sissues. +D 2018-12-10T16:00:57.538 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -502,7 +502,7 @@ F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c ad0ffc5b35b0280d045ac569d34d4b842e3e6a4a118f6396b320987a0957afcc F src/pragma.c 96ce7dce4dc9cb2b7aa0e1b2ce7536870bdc00b10becc278245e775489447ea0 F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 -F src/prepare.c be449edb106a16f1ad95f9b798bdc2337f8c3f83b96c284f417c0a26d43f0c1b +F src/prepare.c 0e8fc0deaf36da104e08d07ce7d97bc09ab57d078b399381532fec3fa1d3f2bb F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 095d1d41d7a981ee9db8bfeae25ed0d6a8a5e5e3d66b0f4efd71877ed7b56132 @@ -512,7 +512,7 @@ F src/shell.c.in 5f38bd0e127c2cc4e506b5c3565c10879ddfae6c2d867bb5972563e40717c19 F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 -F src/sqliteInt.h 70ce5e14c887554d3c51f2045f5a95b6e83de745d7f6448e79e49fdd8dfc2d5c +F src/sqliteInt.h 369d4774d97643e26085e0ea4cdee6afeadaa27670193b9eebaea8c95687fad0 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@ -570,7 +570,7 @@ F src/test_windirent.h 90dfbe95442c9762357fe128dc7ae3dc199d006de93eb33ba3972e0a9 F src/test_window.c cdae419fdcea5bad6dcd9368c685abdad6deb59e9fc8b84b153de513d394ba3f F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c -F src/tokenize.c 9e781e1ca80eefe7b5d6a9e2cd5c678c847da55fd6f093781fad7950934d4c83 +F src/tokenize.c a43ecbafefceb475522f17d6f92d64193a755fe3f35615dfca13340c81ca3872 F src/treeview.c 7b12ac059de54c939b6eb0dbffc9410c29c80d2470cee5cbe07d5ff9ea2d9253 F src/trigger.c d3d78568f37fb2e6cdcc2d1e7b60156f15b0b600adec55b83c5d42f6cad250bd F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 @@ -579,10 +579,10 @@ F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 F src/vacuum.c 3ffe64ecfc94b7528c5d7bdb1c3a19d72fec63f2aa846e3b90f8de5dbbddf5aa F src/vdbe.c 55bafc424748d9ed505ab2680736e51d1bb05c01e9885cbb3b287b51dc8b47ec -F src/vdbe.h d82f323d581b36b8e147d650257ef34e0e93790039b6cbda45c321c275f7595e +F src/vdbe.h 8990d668a89890a33326b0a29b992c4014b72f3b6cdcd9ee0e190593c247f9b0 F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd F src/vdbeapi.c 9709452bee82963e1f7f1f5d0c71db823d553f8dbb2c47a911c4983d537a1947 -F src/vdbeaux.c 9a9617666124e18cbd6e936740f7469dcf0d82867b1abf9ed828694500930b64 +F src/vdbeaux.c c72fc6015e52c212d6c6db7cee04bfbfbd681106f551c9296812a73082fb09d6 F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191 F src/vdbemem.c 7b3305bc4a5139f4536ac9b5f61da0f915e49d2e3fdfa87dfdfa9d7aba8bc1e9 F src/vdbesort.c 90aad5a92608f2dd771c96749beabdb562c9d881131a860a7a5bccf66dc3be7f @@ -1783,8 +1783,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 b7bf3c9832bde26b359f4d58ebcf7788c500586d311387d022192ed65a126252 9748d7995bc1dd632d66d2d326048d50e29c6f5e6993d5a6294d14421d2cb72f -R f78f1915a996819be59599569cf251be -T +closed 9748d7995bc1dd632d66d2d326048d50e29c6f5e6993d5a6294d14421d2cb72f +P 77f150b8b46761f4f62f9d8926c10a95a70589a4525393fc16b321bd98c083a7 +R d755f31eec9cdb1a3415665c2aacb5ab +T *branch * normalize-refactor +T *sym-normalize-refactor * +T -sym-trunk * U drh -Z ee3d9a1eeb178b5acf328ec54a590f24 +Z f90c6b85a4f2311f0e8b3d6a605ae025 diff --git a/manifest.uuid b/manifest.uuid index fb0635c7f2..5d73daf1c8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -77f150b8b46761f4f62f9d8926c10a95a70589a4525393fc16b321bd98c083a7 \ No newline at end of file +a4c890b0af9786295e6df05022009d8946550adb873535c610be805c2b7a4083 \ No newline at end of file diff --git a/src/prepare.c b/src/prepare.c index 811ef95aea..e06b7cb6ad 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -709,204 +709,6 @@ static int sqlite3LockAndPrepare( return rc; } -#ifdef SQLITE_ENABLE_NORMALIZE - -/* -** Attempt to estimate the final output buffer size needed for the fully -** normalized version of the specified SQL string. This should take into -** account any potential expansion that could occur (e.g. via IN clauses -** being expanded, etc). This size returned is the total number of bytes -** including the NUL terminator. -*/ -static int estimateNormalizedSize( - const char *zSql, /* The original SQL string */ - int nSql /* Length of original SQL string */ -){ - int nOut = nSql + 4; - const char *z = zSql; - while( nOut0 ){ - zOut[j++] = '"'; - continue; - }else if( k==nToken-1 ){ - zOut[j++] = '"'; - continue; - } - } - if( bKeyword ){ - zOut[j++] = sqlite3Toupper(zSql[iIn+k]); - }else{ - zOut[j++] = sqlite3Tolower(zSql[iIn+k]); - } - } - *piOut = j; -} - -/* -** Compute a normalization of the SQL given by zSql[0..nSql-1]. Return -** the normalization in space obtained from sqlite3DbMalloc(). Or return -** NULL if anything goes wrong or if zSql is NULL. -*/ -char *sqlite3Normalize( - Vdbe *pVdbe, /* VM being reprepared */ - const char *zSql, /* The original SQL string */ - int nSql /* Size of the input string in bytes */ -){ - sqlite3 *db; /* Database handle. */ - char *z; /* The output string */ - int nZ; /* Size of the output string in bytes */ - int i; /* Next character to read from zSql[] */ - int j; /* Next character to fill in on z[] */ - int tokenType = 0; /* Type of the next token */ - int prevTokenType = 0; /* Type of the previous token, except spaces */ - int n; /* Size of the next token */ - int nParen = 0; /* Nesting level of parenthesis */ - int iStartIN = 0; /* Start of RHS of IN operator in z[] */ - int nParenAtIN = 0; /* Value of nParent at start of RHS of IN operator */ - - db = sqlite3VdbeDb(pVdbe); - assert( db!=0 ); - if( zSql==0 ) return 0; - nZ = estimateNormalizedSize(zSql, nSql); - z = sqlite3DbMallocRawNN(db, nZ); - if( z==0 ) goto normalizeError; - for(i=j=0; i0 && nParen==nParenAtIN ){ - assert( iStartIN+6=0 ); - assert( nZ-1-j=0 ); - /* Fall through */ - } - case TK_MINUS: - case TK_SEMI: - case TK_PLUS: - case TK_STAR: - case TK_SLASH: - case TK_REM: - case TK_EQ: - case TK_LE: - case TK_NE: - case TK_LSHIFT: - case TK_LT: - case TK_RSHIFT: - case TK_GT: - case TK_GE: - case TK_BITOR: - case TK_CONCAT: - case TK_COMMA: - case TK_BITAND: - case TK_BITNOT: - case TK_DOT: - case TK_IN: - case TK_IS: - case TK_NOT: - case TK_NULL: - case TK_ID: { - if( tokenType==TK_NULL ){ - if( prevTokenType==TK_IS || prevTokenType==TK_NOT ){ - /* NULL is a keyword in this case, not a literal value */ - }else{ - /* Here the NULL is a literal value */ - z[j++] = '?'; - break; - } - } - if( j>0 && sqlite3IsIdChar(z[j-1]) && sqlite3IsIdChar(zSql[i]) ){ - z[j++] = ' '; - } - if( tokenType==TK_ID ){ - if( zSql[i]=='"' - && sqlite3VdbeUsesDoubleQuotedString(db,pVdbe,zSql+i,n) - ){ - z[j++] = '?'; - break; - } - if( nParen==nParenAtIN ) iStartIN = 0; - } - copyNormalizedToken(zSql, i, n, flags, z, &j); - break; - } - } - } - assert( j0 && z[j-1]==' ' ){ j--; } - if( j>0 && z[j-1]!=';' ){ z[j++] = ';'; } - z[j] = 0; - assert( jrc!=SQLITE_OK ); return nErr; } + + +#ifdef SQLITE_ENABLE_NORMALIZE +/* +** Insert a single space character into pStr if the current string +** ends with an identifier +*/ +static void addSpaceSeparator(sqlite3_str *pStr){ + if( pStr->nChar && sqlite3IsIdChar(pStr->zText[pStr->nChar-1]) ){ + sqlite3_str_append(pStr, " ", 1); + } +} + +/* +** Compute a normalization of the SQL given by zSql[0..nSql-1]. Return +** the normalization in space obtained from sqlite3DbMalloc(). Or return +** NULL if anything goes wrong or if zSql is NULL. +*/ +char *sqlite3Normalize( + Vdbe *pVdbe, /* VM being reprepared */ + const char *zSql, /* The original SQL string */ + int nSql /* Size of the input string in bytes */ +){ + sqlite3 *db; /* The database connection */ + int i; /* Next unread byte of zSql[] */ + int n; /* length of current token */ + int tokenType; /* type of current token */ + int prevType; /* Previous non-whitespace token */ + int nParen; /* Number of nested levels of parentheses */ + int iStartIN; /* Start of RHS of IN operator in z[] */ + int nParenAtIN; /* Value of nParent at start of RHS of IN operator */ + int j; /* Bytes of normalized SQL generated so far */ + sqlite3_str *pStr; /* The normalized SQL string under construction */ + + if( zSql==0 || nSql==0 ) return 0; + db = sqlite3VdbeDb(pVdbe); + tokenType = -1; + nParen = iStartIN = nParenAtIN = 0; + pStr = sqlite3_str_new(db); + for(i=0; iaccError==0; i+=n){ + if( tokenType!=TK_SPACE ){ + prevType = tokenType; + } + n = sqlite3GetToken((unsigned char*)zSql+i, &tokenType); + if( NEVER(n<=0) ) break; + switch( tokenType ){ + case TK_SPACE: { + break; + } + case TK_NULL: { + if( prevType==TK_IS || prevType==TK_NOT ){ + sqlite3_str_append(pStr, " NULL", 5); + break; + } + /* Fall through */ + } + case TK_STRING: + case TK_INTEGER: + case TK_FLOAT: + case TK_VARIABLE: + case TK_BLOB: { + sqlite3_str_append(pStr, "?", 1); + break; + } + case TK_LP: { + nParen++; + if( prevType==TK_IN ){ + iStartIN = pStr->nChar; + nParenAtIN = nParen; + } + sqlite3_str_append(pStr, "(", 1); + break; + } + case TK_RP: { + if( iStartIN>0 && nParen==nParenAtIN ){ + assert( pStr->nChar>=iStartIN ); + pStr->nChar = iStartIN+1; + sqlite3_str_append(pStr, "?,?,?", 5); + iStartIN = 0; + } + nParen--; + sqlite3_str_append(pStr, ")", 1); + break; + } + case TK_ID: { + j = pStr->nChar; + if( sqlite3Isquote(zSql[i]) ){ + char *zId = sqlite3DbStrNDup(db, zSql+i, n); + int nId; + int eType = 0; + if( zId==0 ) break; + sqlite3Dequote(zId); + if( zSql[i]=='"' && sqlite3VdbeUsesDoubleQuotedString(pVdbe, zId) ){ + sqlite3_str_append(pStr, "?", 1); + sqlite3DbFree(db, zId); + break; + } + nId = sqlite3Strlen30(zId); + if( sqlite3GetToken((u8*)zId, &eType)==nId && eType==TK_ID ){ + addSpaceSeparator(pStr); + sqlite3_str_append(pStr, zId, nId); + }else{ + sqlite3_str_appendf(pStr, "\"%w\"", zId); + } + sqlite3DbFree(db, zId); + }else{ + addSpaceSeparator(pStr); + sqlite3_str_append(pStr, zSql+i, n); + } + while( jnChar ){ + pStr->zText[j] = sqlite3Tolower(pStr->zText[j]); + j++; + } + break; + } + default: { + if( sqlite3IsIdChar(zSql[i]) ) addSpaceSeparator(pStr); + j = pStr->nChar; + sqlite3_str_append(pStr, zSql+i, n); + while( jnChar ){ + pStr->zText[j] = sqlite3Toupper(pStr->zText[j]); + j++; + } + break; + } + } + } + return sqlite3_str_finish(pStr); +} +#endif /* SQLITE_ENABLE_NORMALIZE */ diff --git a/src/vdbe.h b/src/vdbe.h index 1712b8b224..f4d360e49e 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -253,7 +253,7 @@ u8 sqlite3VdbePrepareFlags(Vdbe*); void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, u8); #ifdef SQLITE_ENABLE_NORMALIZE void sqlite3VdbeAddDblquoteStr(sqlite3*,Vdbe*,const char*); -int sqlite3VdbeUsesDoubleQuotedString(sqlite3*,Vdbe*,const char*,int); +int sqlite3VdbeUsesDoubleQuotedString(Vdbe*,const char*); #endif void sqlite3VdbeSwap(Vdbe*,Vdbe*); VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*); diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 2f45c217f1..ac7bf6a65b 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -97,26 +97,16 @@ void sqlite3VdbeAddDblquoteStr(sqlite3 *db, Vdbe *p, const char *z){ ** that identifier is really used as a string literal. */ int sqlite3VdbeUsesDoubleQuotedString( - sqlite3 *db, /* Used for transient malloc */ Vdbe *pVdbe, /* The prepared statement */ - const char *zId, /* The double-quoted identifier */ - int nId /* Bytes in zId, which is not zero-terminated */ + const char *zId /* The double-quoted identifier, already dequoted */ ){ - char *z; DblquoteStr *pStr; assert( zId!=0 ); - assert( zId[0]=='"' ); - assert( nId>=2 ); - assert( zId[nId-1]=='"' ); if( pVdbe->pDblStr==0 ) return 0; - z = sqlite3DbStrNDup(db, zId, nId); - if( z==0 ) return 0; - sqlite3Dequote(z); for(pStr=pVdbe->pDblStr; pStr; pStr=pStr->pNextStr){ - if( strcmp(z, pStr->z)==0 ) break; + if( strcmp(zId, pStr->z)==0 ) return 1; } - sqlite3DbFree(db, z); - return pStr!=0; + return 0; } #endif From 9042ff214b1b7f42d77cff6d8c1d1c22aa0b5428 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 10 Dec 2018 16:49:33 +0000 Subject: [PATCH 21/49] Fix issues with the new normalizer. FossilOrigin-Name: 057d7d40c56b7416a59a79cb627b2b3e5837eca2d6dbcb50127baaadf1941f51 --- manifest | 17 +++++++---------- manifest.uuid | 2 +- src/tokenize.c | 6 ++++++ test/normalize.test | 16 ++++++++-------- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/manifest b/manifest index c0a5842691..56e2ba7b0a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactor\sthe\ssqlite3_normalized_sql()\simplementation.\sThis\sis\sa\nwork-in-progress.\sThere\sare\sstill\sissues. -D 2018-12-10T16:00:57.538 +C Fix\sissues\swith\sthe\snew\snormalizer. +D 2018-12-10T16:49:33.233 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -570,7 +570,7 @@ F src/test_windirent.h 90dfbe95442c9762357fe128dc7ae3dc199d006de93eb33ba3972e0a9 F src/test_window.c cdae419fdcea5bad6dcd9368c685abdad6deb59e9fc8b84b153de513d394ba3f F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c -F src/tokenize.c a43ecbafefceb475522f17d6f92d64193a755fe3f35615dfca13340c81ca3872 +F src/tokenize.c 8ae201c2e6955325e3d16e7bba4a74fb857d09c1e89274857e7d4b1cdb1f9af4 F src/treeview.c 7b12ac059de54c939b6eb0dbffc9410c29c80d2470cee5cbe07d5ff9ea2d9253 F src/trigger.c d3d78568f37fb2e6cdcc2d1e7b60156f15b0b600adec55b83c5d42f6cad250bd F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 @@ -1142,7 +1142,7 @@ F test/mutex2.test bfeaeac2e73095b2ac32285d2756e3a65e681660 F test/nan.test 437d40e6d0778b050d7750726c0cbd2c9936b81962926e8f8c48ca698f00f4d1 F test/nockpt.test 8c43b25af63b0bd620cf1b003529e37b6f1dc53bd22690e96a1bd73f78dde53a F test/nolock.test f196cf8b8fbea4e2ca345140a2b3f3b0da45c76e -F test/normalize.test 17ff5c732bc16b100f4e479da3a59735ed24f4ed574fccf8e46279fad182f81e +F test/normalize.test 422027884ffb67ebba32bb78487c67cf67643496d19c077b07044bdba071a3f6 F test/notify1.test 669b2b743618efdc18ca4b02f45423d5d2304abf F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934 @@ -1783,10 +1783,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 77f150b8b46761f4f62f9d8926c10a95a70589a4525393fc16b321bd98c083a7 -R d755f31eec9cdb1a3415665c2aacb5ab -T *branch * normalize-refactor -T *sym-normalize-refactor * -T -sym-trunk * +P a4c890b0af9786295e6df05022009d8946550adb873535c610be805c2b7a4083 +R c326114a802cb731930ed1e3cc6ed39d U drh -Z f90c6b85a4f2311f0e8b3d6a605ae025 +Z 6f97af92ba72d549a5865cb69df69952 diff --git a/manifest.uuid b/manifest.uuid index 5d73daf1c8..56b266680d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a4c890b0af9786295e6df05022009d8946550adb873535c610be805c2b7a4083 \ No newline at end of file +057d7d40c56b7416a59a79cb627b2b3e5837eca2d6dbcb50127baaadf1941f51 \ No newline at end of file diff --git a/src/tokenize.c b/src/tokenize.c index 61a24caf29..499fae6f19 100644 --- a/src/tokenize.c +++ b/src/tokenize.c @@ -799,6 +799,7 @@ char *sqlite3Normalize( break; } case TK_ID: { + iStartIN = 0; j = pStr->nChar; if( sqlite3Isquote(zSql[i]) ){ char *zId = sqlite3DbStrNDup(db, zSql+i, n); @@ -829,6 +830,10 @@ char *sqlite3Normalize( } break; } + case TK_SELECT: { + iStartIN = 0; + /* fall through */ + } default: { if( sqlite3IsIdChar(zSql[i]) ) addSpaceSeparator(pStr); j = pStr->nChar; @@ -841,6 +846,7 @@ char *sqlite3Normalize( } } } + if( tokenType!=TK_SEMI ) sqlite3_str_append(pStr, ";", 1); return sqlite3_str_finish(pStr); } #endif /* SQLITE_ENABLE_NORMALIZE */ diff --git a/test/normalize.test b/test/normalize.test index 35c995fe75..8b0c7ed8db 100644 --- a/test/normalize.test +++ b/test/normalize.test @@ -207,7 +207,7 @@ foreach {tnum sql flags norm} { 430 {SELECT "a" FROM t1 WHERE "x" IN ("1","2",'3');} 0x2 - {0 {SELECT"a"FROM t1 WHERE"x"IN(?,?,?);}} + {0 {SELECT a FROM t1 WHERE x IN(?,?,?);}} 440 {SELECT 'a' FROM t1 WHERE 'x';} @@ -217,7 +217,7 @@ foreach {tnum sql flags norm} { 450 {SELECT [a] FROM t1 WHERE [x];} 0x2 - {0 {SELECT"a"FROM t1 WHERE"x";}} + {0 {SELECT a FROM t1 WHERE x;}} 460 {SELECT * FROM t1 WHERE x IN (x);} @@ -232,12 +232,12 @@ foreach {tnum sql flags norm} { 480 {SELECT * FROM t1 WHERE x IN ([x],"a");} 0x2 - {0 {SELECT*FROM t1 WHERE x IN("x","a");}} + {0 {SELECT*FROM t1 WHERE x IN(x,a);}} 500 {SELECT * FROM t1 WHERE x IN ([x],"a",'b',sqlite_version());} 0x2 - {0 {SELECT*FROM t1 WHERE x IN("x","a",?,sqlite_version());}} + {0 {SELECT*FROM t1 WHERE x IN(x,a,?,sqlite_version());}} 520 {SELECT * FROM t1 WHERE x IN (SELECT x FROM t1);} @@ -247,12 +247,12 @@ foreach {tnum sql flags norm} { 540 {SELECT * FROM t1 WHERE x IN ((SELECT x FROM t1));} 0x2 - {0 {SELECT*FROM t1 WHERE x IN(?,?,?);}} + {0 {SELECT*FROM t1 WHERE x IN((SELECT x FROM t1));}} 550 {SELECT a, a+1, a||'b', a+"b" FROM t1;} 0x2 - {0 {SELECT a,a+?,a||?,a+"b"FROM t1;}} + {0 {SELECT a,a+?,a||?,a+b FROM t1;}} 570 {SELECT * FROM t1 WHERE x IN (1);} @@ -316,7 +316,7 @@ foreach {tnum sql flags norm} { 680 {SELECT a, "col f" FROM t1 LEFT OUTER JOIN t2 ON [t1].[col f] == [t2].[col y];} 0x2 - {0 {SELECT a,"col f"FROM t1 LEFT OUTER JOIN t2 ON"t1"."col f"=="t2"."col y";}} + {0 {SELECT a,"col f"FROM t1 LEFT OUTER JOIN t2 ON t1."col f"==t2."col y";}} 690 {SELECT * FROM ( WITH x AS ( SELECT * FROM t1 WHERE x IN ( 1)) SELECT 10);} @@ -346,7 +346,7 @@ foreach {tnum sql flags norm} { 760 {SELECT x FROM t1 WHERE x IN ([x] IS NOT NULL, NULL, 1, 'a', "b", x'00');} 0x2 - {0 {SELECT x FROM t1 WHERE x IN("x"IS NOT NULL,?,?,?,"b",?);}} + {0 {SELECT x FROM t1 WHERE x IN(x IS NOT NULL,?,?,?,b,?);}} } { do_test $tnum { set code [catch { From 1a6c2b1d383009aeb306f53f1915a443ab79de0f Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 10 Dec 2018 20:01:40 +0000 Subject: [PATCH 22/49] Further refinements to the sqlite3_normalized_sql() interface. TH3 now gives 100% MC/DC on that interface. FossilOrigin-Name: c96bf6cca220e363b099455ce35195ce7e89d374a52dc787f56e7b11e587bced --- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/resolve.c | 2 +- src/sqlite.h.in | 15 +++++++-------- src/sqliteInt.h | 2 +- src/tokenize.c | 7 +++---- src/vdbeapi.c | 4 ++-- src/vdbeaux.c | 7 ------- 8 files changed, 26 insertions(+), 35 deletions(-) diff --git a/manifest b/manifest index 52a10db3c6..79aa8f42ae 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactor\sthe\ssqlite3_normalized_sql()\simplementation. -D 2018-12-10T18:15:44.685 +C Further\srefinements\sto\sthe\ssqlite3_normalized_sql()\sinterface.\s\sTH3\snow\ngives\s100%\sMC/DC\son\sthat\sinterface. +D 2018-12-10T20:01:40.741 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -505,14 +505,14 @@ F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 F src/prepare.c 0e8fc0deaf36da104e08d07ce7d97bc09ab57d078b399381532fec3fa1d3f2bb F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c 095d1d41d7a981ee9db8bfeae25ed0d6a8a5e5e3d66b0f4efd71877ed7b56132 +F src/resolve.c abd65c518c198400193c6319a70c0d722fa30a35be89dc898917ff6489edf017 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 F src/shell.c.in 5f38bd0e127c2cc4e506b5c3565c10879ddfae6c2d867bb5972563e40717c19c -F src/sqlite.h.in 908ec406feefc4c7e1486a2e3dc30a8bfb51c5a345a8e8130ac201962db171c4 +F src/sqlite.h.in 92fd656c26cc76de9fa8c5bf1a473066e3b5c6da345a447679f0f44de1aa4edd F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 -F src/sqliteInt.h 369d4774d97643e26085e0ea4cdee6afeadaa27670193b9eebaea8c95687fad0 +F src/sqliteInt.h 3dda7ba0ea00f591c18405e5061d10041e0fcd5934e2542f29f8c8cffd73c242 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@ -570,7 +570,7 @@ F src/test_windirent.h 90dfbe95442c9762357fe128dc7ae3dc199d006de93eb33ba3972e0a9 F src/test_window.c cdae419fdcea5bad6dcd9368c685abdad6deb59e9fc8b84b153de513d394ba3f F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c -F src/tokenize.c 8ae201c2e6955325e3d16e7bba4a74fb857d09c1e89274857e7d4b1cdb1f9af4 +F src/tokenize.c c8af4feebd8bf5a4d60a14018d91f61013f658ec864dfce7661bae73d86b3191 F src/treeview.c 7b12ac059de54c939b6eb0dbffc9410c29c80d2470cee5cbe07d5ff9ea2d9253 F src/trigger.c d3d78568f37fb2e6cdcc2d1e7b60156f15b0b600adec55b83c5d42f6cad250bd F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274 @@ -581,8 +581,8 @@ F src/vacuum.c 3ffe64ecfc94b7528c5d7bdb1c3a19d72fec63f2aa846e3b90f8de5dbbddf5aa F src/vdbe.c 55bafc424748d9ed505ab2680736e51d1bb05c01e9885cbb3b287b51dc8b47ec F src/vdbe.h 8990d668a89890a33326b0a29b992c4014b72f3b6cdcd9ee0e190593c247f9b0 F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd -F src/vdbeapi.c 9709452bee82963e1f7f1f5d0c71db823d553f8dbb2c47a911c4983d537a1947 -F src/vdbeaux.c c72fc6015e52c212d6c6db7cee04bfbfbd681106f551c9296812a73082fb09d6 +F src/vdbeapi.c 43ccaa96e28ebe56a46616c300218e5073911eff618e9d0ab7526983cda939b1 +F src/vdbeaux.c f00d9b32a250b829a3c00140255a1c37a6463d726bb87ed6bbb80a1ce76a56bd F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191 F src/vdbemem.c 7b3305bc4a5139f4536ac9b5f61da0f915e49d2e3fdfa87dfdfa9d7aba8bc1e9 F src/vdbesort.c 90aad5a92608f2dd771c96749beabdb562c9d881131a860a7a5bccf66dc3be7f @@ -1783,7 +1783,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 c878d741733a897d47a1a0b57b454bc9095ce302b48cc01089336d5d20e2a24c 057d7d40c56b7416a59a79cb627b2b3e5837eca2d6dbcb50127baaadf1941f51 -R ac6b36f113296d9388b94571dafb8554 +P 06e955e5d2b857b9ce94a73fb174b620c101bdb160842f9a0e958bdb48e8c987 +R 692e5dc4224a0726be01a748426768ab U drh -Z db9c09c70c1ad5ac23765ae8ea064291 +Z 6406ae7cdd7eefde2a741c866c8156da diff --git a/manifest.uuid b/manifest.uuid index c11c3dbd1c..963e5257c1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -06e955e5d2b857b9ce94a73fb174b620c101bdb160842f9a0e958bdb48e8c987 \ No newline at end of file +c96bf6cca220e363b099455ce35195ce7e89d374a52dc787f56e7b11e587bced \ No newline at end of file diff --git a/src/resolve.c b/src/resolve.c index a9262a45ad..6dc42aef7a 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -491,7 +491,7 @@ static int lookupName( sqlite3_log(SQLITE_WARNING, "double-quoted string literal: \"%w\"", zCol); #ifdef SQLITE_ENABLE_NORMALIZE - sqlite3VdbeAddDblquoteStr(db,pParse->pVdbe, zCol); + sqlite3VdbeAddDblquoteStr(db, pParse->pVdbe, zCol); #endif pExpr->op = TK_STRING; pExpr->y.pTab = 0; diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 4f33bb9ca9..08d499037a 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -3629,14 +3629,13 @@ int sqlite3_limit(sqlite3*, int id, int newVal); ** deplete the limited store of lookaside memory. Future versions of ** SQLite may act on this hint differently. ** -** [[SQLITE_PREPARE_NORMALIZE]] ^(
SQLITE_PREPARE_NORMALIZE
-**
The SQLITE_PREPARE_NORMALIZE flag indicates that a normalized -** representation of the SQL statement should be calculated and then -** associated with the prepared statement, which can be obtained via -** the [sqlite3_normalized_sql()] interface.)^ The semantics used to -** normalize a SQL statement are unspecified and subject to change. -** At a minimum, literal values will be replaced with suitable -** placeholders. +** [[SQLITE_PREPARE_NORMALIZE]]
SQLITE_PREPARE_NORMALIZE
+**
The SQLITE_PREPARE_NORMALIZE flag is a no-op. This flag used +** to be required for any prepared statement that wanted to use the +** [sqlite3_normalized_sql()] interface. However, the +** [sqlite3_normalized_sql()] interface is now available to all +** prepared statements, regardless of whether or not they use this +** flag. ** */ #define SQLITE_PREPARE_PERSISTENT 0x01 diff --git a/src/sqliteInt.h b/src/sqliteInt.h index b8f771488d..7dd2584828 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -4413,7 +4413,7 @@ int sqlite3VdbeParameterIndex(Vdbe*, const char*, int); int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *); void sqlite3ParserReset(Parse*); #ifdef SQLITE_ENABLE_NORMALIZE -char *sqlite3Normalize(Vdbe*, const char*, int); +char *sqlite3Normalize(Vdbe*, const char*); #endif int sqlite3Reprepare(Vdbe*); void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*); diff --git a/src/tokenize.c b/src/tokenize.c index 499fae6f19..297f9ab002 100644 --- a/src/tokenize.c +++ b/src/tokenize.c @@ -734,8 +734,7 @@ static void addSpaceSeparator(sqlite3_str *pStr){ */ char *sqlite3Normalize( Vdbe *pVdbe, /* VM being reprepared */ - const char *zSql, /* The original SQL string */ - int nSql /* Size of the input string in bytes */ + const char *zSql /* The original SQL string */ ){ sqlite3 *db; /* The database connection */ int i; /* Next unread byte of zSql[] */ @@ -748,12 +747,12 @@ char *sqlite3Normalize( int j; /* Bytes of normalized SQL generated so far */ sqlite3_str *pStr; /* The normalized SQL string under construction */ - if( zSql==0 || nSql==0 ) return 0; db = sqlite3VdbeDb(pVdbe); tokenType = -1; nParen = iStartIN = nParenAtIN = 0; pStr = sqlite3_str_new(db); - for(i=0; iaccError==0; i+=n){ + assert( pStr!=0 ); /* sqlite3_str_new() never returns NULL */ + for(i=0; zSql[i] && pStr->accError==0; i+=n){ if( tokenType!=TK_SPACE ){ prevType = tokenType; } diff --git a/src/vdbeapi.c b/src/vdbeapi.c index d8a463ae3b..91379a1469 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -1713,9 +1713,9 @@ char *sqlite3_expanded_sql(sqlite3_stmt *pStmt){ const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt){ Vdbe *p = (Vdbe *)pStmt; if( p==0 ) return 0; - if( p->zNormSql==0 && p->zSql!=0 ){ + if( p->zNormSql==0 && ALWAYS(p->zSql!=0) ){ sqlite3_mutex_enter(p->db->mutex); - p->zNormSql = sqlite3Normalize(p, p->zSql, sqlite3Strlen30(p->zSql)); + p->zNormSql = sqlite3Normalize(p, p->zSql); sqlite3_mutex_leave(p->db->mutex); } return p->zNormSql; diff --git a/src/vdbeaux.c b/src/vdbeaux.c index ac7bf6a65b..5225cbc73f 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -64,13 +64,6 @@ void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, u8 prepFlags){ } assert( p->zSql==0 ); p->zSql = sqlite3DbStrNDup(p->db, z, n); -#ifdef SQLITE_ENABLE_NORMALIZE - assert( p->zNormSql==0 ); - if( p->zSql && (prepFlags & SQLITE_PREPARE_NORMALIZE)!=0 ){ - p->zNormSql = sqlite3Normalize(p, p->zSql, n); - assert( p->zNormSql!=0 || p->db->mallocFailed ); - } -#endif } #ifdef SQLITE_ENABLE_NORMALIZE From 368bfe8b008d1c4de12059c13750954db1b21dc9 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 11 Dec 2018 12:20:41 +0000 Subject: [PATCH 23/49] Small performance improvement in the sqlite3_bind() family of interfaces. FossilOrigin-Name: 1dc0c3df32572f09265fc73eeaa0748159e0e9523b9b2d6768b834a29c909968 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/main.c | 2 +- src/vdbeapi.c | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 79aa8f42ae..825488a2d0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Further\srefinements\sto\sthe\ssqlite3_normalized_sql()\sinterface.\s\sTH3\snow\ngives\s100%\sMC/DC\son\sthat\sinterface. -D 2018-12-10T20:01:40.741 +C Small\sperformance\simprovement\sin\sthe\ssqlite3_bind()\sfamily\sof\sinterfaces. +D 2018-12-11T12:20:41.473 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -471,7 +471,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c f12f27eb606d601825be9a229a7390a8d64d40226697883f96de8e088d620055 F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e F src/loadext.c e6f10875d52aca3b7e57ce1ec174aeafc9b6c00b43000cd30d791f9cb490b7a6 -F src/main.c 473d149b51d4f5376e3308e11d5bc07f7570cf596eacecd148c6f7ae63a649ce +F src/main.c 008f45dd39cdc7fb9e7e1f61d75a5c97397f8e07427a8879be23e27747d5f948 F src/malloc.c 07295435093ce354c6d9063ac05a2eeae28bd251d2e63c48b3d67c12c76f7e18 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -581,7 +581,7 @@ F src/vacuum.c 3ffe64ecfc94b7528c5d7bdb1c3a19d72fec63f2aa846e3b90f8de5dbbddf5aa F src/vdbe.c 55bafc424748d9ed505ab2680736e51d1bb05c01e9885cbb3b287b51dc8b47ec F src/vdbe.h 8990d668a89890a33326b0a29b992c4014b72f3b6cdcd9ee0e190593c247f9b0 F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd -F src/vdbeapi.c 43ccaa96e28ebe56a46616c300218e5073911eff618e9d0ab7526983cda939b1 +F src/vdbeapi.c d006df501bc7f39204a4a500dba54fcf5a3925fabe25f9a8853c79adb2897a6b F src/vdbeaux.c f00d9b32a250b829a3c00140255a1c37a6463d726bb87ed6bbb80a1ce76a56bd F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191 F src/vdbemem.c 7b3305bc4a5139f4536ac9b5f61da0f915e49d2e3fdfa87dfdfa9d7aba8bc1e9 @@ -1783,7 +1783,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 06e955e5d2b857b9ce94a73fb174b620c101bdb160842f9a0e958bdb48e8c987 -R 692e5dc4224a0726be01a748426768ab +P c96bf6cca220e363b099455ce35195ce7e89d374a52dc787f56e7b11e587bced +R 86dccf908eed64e76085197f6613cec4 U drh -Z 6406ae7cdd7eefde2a741c866c8156da +Z df1a85b6e63863e8c0c59775b55fa8b0 diff --git a/manifest.uuid b/manifest.uuid index 963e5257c1..707eb7f983 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c96bf6cca220e363b099455ce35195ce7e89d374a52dc787f56e7b11e587bced \ No newline at end of file +1dc0c3df32572f09265fc73eeaa0748159e0e9523b9b2d6768b834a29c909968 \ No newline at end of file diff --git a/src/main.c b/src/main.c index 627d24e0b1..efffc2b633 100644 --- a/src/main.c +++ b/src/main.c @@ -2405,7 +2405,7 @@ const char *sqlite3_errmsg(sqlite3 *db){ z = sqlite3ErrStr(SQLITE_NOMEM_BKPT); }else{ testcase( db->pErr==0 ); - z = (char*)sqlite3_value_text(db->pErr); + z = db->errCode ? (char*)sqlite3_value_text(db->pErr) : 0; assert( !db->mallocFailed ); if( z==0 ){ z = sqlite3ErrStr(db->errCode); diff --git a/src/vdbeapi.c b/src/vdbeapi.c index 91379a1469..c43646a89e 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -1286,7 +1286,7 @@ static int vdbeUnbind(Vdbe *p, int i){ pVar = &p->aVar[i]; sqlite3VdbeMemRelease(pVar); pVar->flags = MEM_Null; - sqlite3Error(p->db, SQLITE_OK); + p->db->errCode = SQLITE_OK; /* If the bit corresponding to this variable in Vdbe.expmask is set, then ** binding a new value to this variable invalidates the current query plan. From cfc078318cc39ab2f98369a1be8fdc221ea63851 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 11 Dec 2018 12:51:46 +0000 Subject: [PATCH 24/49] Small performance improvement in sqlite3_step(). FossilOrigin-Name: d1db8d5894450b24bb0335983503d9bbf6cc48a0ae4b83291283fb2d32b6b25b --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/vdbeapi.c | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 825488a2d0..c56ba9e8ee 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Small\sperformance\simprovement\sin\sthe\ssqlite3_bind()\sfamily\sof\sinterfaces. -D 2018-12-11T12:20:41.473 +C Small\sperformance\simprovement\sin\ssqlite3_step(). +D 2018-12-11T12:51:46.910 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -581,7 +581,7 @@ F src/vacuum.c 3ffe64ecfc94b7528c5d7bdb1c3a19d72fec63f2aa846e3b90f8de5dbbddf5aa F src/vdbe.c 55bafc424748d9ed505ab2680736e51d1bb05c01e9885cbb3b287b51dc8b47ec F src/vdbe.h 8990d668a89890a33326b0a29b992c4014b72f3b6cdcd9ee0e190593c247f9b0 F src/vdbeInt.h 73f5051923f3f29779bfc374c0c68e23b8e5e3792def2e33e51b427edb890abd -F src/vdbeapi.c d006df501bc7f39204a4a500dba54fcf5a3925fabe25f9a8853c79adb2897a6b +F src/vdbeapi.c 57a2d794a8833f269b878dbc24e955369bdb379af6c4e93ebc5ce1a20fa3daf4 F src/vdbeaux.c f00d9b32a250b829a3c00140255a1c37a6463d726bb87ed6bbb80a1ce76a56bd F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191 F src/vdbemem.c 7b3305bc4a5139f4536ac9b5f61da0f915e49d2e3fdfa87dfdfa9d7aba8bc1e9 @@ -1783,7 +1783,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 c96bf6cca220e363b099455ce35195ce7e89d374a52dc787f56e7b11e587bced -R 86dccf908eed64e76085197f6613cec4 +P 1dc0c3df32572f09265fc73eeaa0748159e0e9523b9b2d6768b834a29c909968 +R 3a0f12a0379dcf87f0d4dac5a67e82c1 U drh -Z df1a85b6e63863e8c0c59775b55fa8b0 +Z a9bab00c03f66c3893504302653c1fce diff --git a/manifest.uuid b/manifest.uuid index 707eb7f983..e4dca32cf8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1dc0c3df32572f09265fc73eeaa0748159e0e9523b9b2d6768b834a29c909968 \ No newline at end of file +d1db8d5894450b24bb0335983503d9bbf6cc48a0ae4b83291283fb2d32b6b25b \ No newline at end of file diff --git a/src/vdbeapi.c b/src/vdbeapi.c index c43646a89e..23b19273b6 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -585,7 +585,7 @@ static int sqlite3Step(Vdbe *p){ return SQLITE_NOMEM_BKPT; } - if( p->pc<=0 && p->expired ){ + if( p->pc<0 && p->expired ){ p->rc = SQLITE_SCHEMA; rc = SQLITE_ERROR; goto end_of_step; @@ -662,9 +662,9 @@ end_of_step: || (rc&0xff)==SQLITE_BUSY || rc==SQLITE_MISUSE ); assert( (p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE) || p->rc==p->rcApp ); - if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 - && rc!=SQLITE_ROW - && rc!=SQLITE_DONE + if( rc!=SQLITE_ROW + && rc!=SQLITE_DONE + && (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 ){ /* If this statement was prepared using saved SQL and an ** error has occurred, then return the error code in p->rc to the From 03c5c213289baed1f809d3e58dee1e2abfb72f2b Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 12 Dec 2018 11:23:40 +0000 Subject: [PATCH 25/49] OSSFuzz found a case where an assert() inside sqlite3ExprCompare() can be true. Test case added to TH3. FossilOrigin-Name: 23b62fb160d86dc9d9073bcc714601f5b7695f96abd893eafecf4b2e565b87f2 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index c56ba9e8ee..3c9777d505 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Small\sperformance\simprovement\sin\ssqlite3_step(). -D 2018-12-11T12:51:46.910 +C OSSFuzz\sfound\sa\scase\swhere\san\sassert()\sinside\ssqlite3ExprCompare()\scan\sbe\ntrue.\s\sTest\scase\sadded\sto\sTH3. +D 2018-12-12T11:23:40.421 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -459,7 +459,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c 3c8bd4e77f0244fd2bd7cc90acf116ad2f8e82d70e536637f35ac2bc99b726f9 F src/delete.c f7938125847e8ef485448db5fbad29acb2991381a02887dd854c1617315ab9fb -F src/expr.c 494a778ee193d99127c72adefcec3e8e133f482acf5f1c267652a8f51029e9ae +F src/expr.c d18469f0b1caf8f6835c29397c0e1723d1693d8665f462121834b39f3eb02ff6 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f @@ -1783,7 +1783,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 1dc0c3df32572f09265fc73eeaa0748159e0e9523b9b2d6768b834a29c909968 -R 3a0f12a0379dcf87f0d4dac5a67e82c1 +P d1db8d5894450b24bb0335983503d9bbf6cc48a0ae4b83291283fb2d32b6b25b +R 472ee8babd9d2c33001af468ad5dd860 U drh -Z a9bab00c03f66c3893504302653c1fce +Z 65f270511367c67928ff0b19217a0fac diff --git a/manifest.uuid b/manifest.uuid index e4dca32cf8..07dafcd5e0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d1db8d5894450b24bb0335983503d9bbf6cc48a0ae4b83291283fb2d32b6b25b \ No newline at end of file +23b62fb160d86dc9d9073bcc714601f5b7695f96abd893eafecf4b2e565b87f2 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 0b2e797752..dc6f0332cd 100644 --- a/src/expr.c +++ b/src/expr.c @@ -4784,8 +4784,10 @@ int sqlite3ExprCompare(Parse *pParse, Expr *pA, Expr *pB, int iTab){ && sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2; if( sqlite3ExprCompare(pParse, pA->pRight, pB->pRight, iTab) ) return 2; if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList, iTab) ) return 2; - assert( (combinedFlags & EP_Reduced)==0 ); - if( pA->op!=TK_STRING && pA->op!=TK_TRUEFALSE ){ + if( pA->op!=TK_STRING + && pA->op!=TK_TRUEFALSE + && (combinedFlags & EP_Reduced)==0 + ){ if( pA->iColumn!=pB->iColumn ) return 2; if( pA->iTable!=pB->iTable && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2; From 89b6de0357a499209c13cf66a3cc406f26f67e6f Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 12 Dec 2018 20:11:23 +0000 Subject: [PATCH 26/49] Remove an ALWAYS() from a branch that is not always taken. The test case found by OSSFuzz has been added to TH3. FossilOrigin-Name: 5c7dab85535ac42c021977dbd4a39cef5a72e3d9dccff1c5ca5570a1780516cd --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 3c9777d505..e59fbf2d09 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C OSSFuzz\sfound\sa\scase\swhere\san\sassert()\sinside\ssqlite3ExprCompare()\scan\sbe\ntrue.\s\sTest\scase\sadded\sto\sTH3. -D 2018-12-12T11:23:40.421 +C Remove\san\sALWAYS()\sfrom\sa\sbranch\sthat\sis\snot\salways\staken.\s\sThe\stest\scase\nfound\sby\sOSSFuzz\shas\sbeen\sadded\sto\sTH3. +D 2018-12-12T20:11:23.249 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -459,7 +459,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c 3c8bd4e77f0244fd2bd7cc90acf116ad2f8e82d70e536637f35ac2bc99b726f9 F src/delete.c f7938125847e8ef485448db5fbad29acb2991381a02887dd854c1617315ab9fb -F src/expr.c d18469f0b1caf8f6835c29397c0e1723d1693d8665f462121834b39f3eb02ff6 +F src/expr.c 4c6769333c59f3df4d070b30976a27456787c660a71fa82a48acc9763df18000 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f @@ -1783,7 +1783,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 d1db8d5894450b24bb0335983503d9bbf6cc48a0ae4b83291283fb2d32b6b25b -R 472ee8babd9d2c33001af468ad5dd860 +P 23b62fb160d86dc9d9073bcc714601f5b7695f96abd893eafecf4b2e565b87f2 +R a39727945ca7912bc94ab91e69c8cc57 U drh -Z 65f270511367c67928ff0b19217a0fac +Z 482c7d62a8f6c65ee861ef4194edc7e1 diff --git a/manifest.uuid b/manifest.uuid index 07dafcd5e0..ce48281f2d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -23b62fb160d86dc9d9073bcc714601f5b7695f96abd893eafecf4b2e565b87f2 \ No newline at end of file +5c7dab85535ac42c021977dbd4a39cef5a72e3d9dccff1c5ca5570a1780516cd \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index dc6f0332cd..b4d1014517 100644 --- a/src/expr.c +++ b/src/expr.c @@ -4778,7 +4778,7 @@ int sqlite3ExprCompare(Parse *pParse, Expr *pA, Expr *pB, int iTab){ } } if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2; - if( ALWAYS((combinedFlags & EP_TokenOnly)==0) ){ + if( (combinedFlags & EP_TokenOnly)==0 ){ if( combinedFlags & EP_xIsSelect ) return 2; if( (combinedFlags & EP_FixedCol)==0 && sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2; From cb0e04f9295fa954559b5893484b0e23c48d63a6 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 12 Dec 2018 21:34:17 +0000 Subject: [PATCH 27/49] Fix another problem found by Matthew Denton's new fuzzer. FossilOrigin-Name: 2b690dbdffe144bd69ca0aa291c230faf3d9d73f7a2985d50f016fe54003f9a9 --- manifest | 13 ++++---- manifest.uuid | 2 +- src/expr.c | 6 ++-- test/fuzz4.test | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 test/fuzz4.test diff --git a/manifest b/manifest index e59fbf2d09..11beb1ceb2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\san\sALWAYS()\sfrom\sa\sbranch\sthat\sis\snot\salways\staken.\s\sThe\stest\scase\nfound\sby\sOSSFuzz\shas\sbeen\sadded\sto\sTH3. -D 2018-12-12T20:11:23.249 +C Fix\sanother\sproblem\sfound\sby\sMatthew\sDenton's\snew\sfuzzer. +D 2018-12-12T21:34:17.884 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -459,7 +459,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c 3c8bd4e77f0244fd2bd7cc90acf116ad2f8e82d70e536637f35ac2bc99b726f9 F src/delete.c f7938125847e8ef485448db5fbad29acb2991381a02887dd854c1617315ab9fb -F src/expr.c 4c6769333c59f3df4d070b30976a27456787c660a71fa82a48acc9763df18000 +F src/expr.c b84c41530d97e28d5c43149d23d4492e26cd4e1e93abba1302d361e71a04b614 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f @@ -970,6 +970,7 @@ F test/fuzz-oss1.test e58330d01cbbd8215ee636b17a03fe220b37dbfa 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_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 F test/fuzzcheck.c fda41c0e4e667fae96b002410bb19cece7a33314264ed6bbc6d012909ee9fd58 @@ -1783,7 +1784,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 23b62fb160d86dc9d9073bcc714601f5b7695f96abd893eafecf4b2e565b87f2 -R a39727945ca7912bc94ab91e69c8cc57 +P 5c7dab85535ac42c021977dbd4a39cef5a72e3d9dccff1c5ca5570a1780516cd +R 0ae00823933e8977db9828c75b6fa876 U drh -Z 482c7d62a8f6c65ee861ef4194edc7e1 +Z 040e7dcdd570ef4d870244a63c0ef36b diff --git a/manifest.uuid b/manifest.uuid index ce48281f2d..ab4b18d6fb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5c7dab85535ac42c021977dbd4a39cef5a72e3d9dccff1c5ca5570a1780516cd \ No newline at end of file +2b690dbdffe144bd69ca0aa291c230faf3d9d73f7a2985d50f016fe54003f9a9 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index b4d1014517..5d36502011 100644 --- a/src/expr.c +++ b/src/expr.c @@ -141,8 +141,8 @@ CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){ while( p ){ int op = p->op; if( p->flags & EP_Generic ) break; - if( (op==TK_AGG_COLUMN || op==TK_COLUMN - || op==TK_REGISTER || op==TK_TRIGGER) + if( op==TK_REGISTER ) op = p->op2; + if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_TRIGGER) && p->y.pTab!=0 ){ /* op==TK_REGISTER && p->y.pTab!=0 happens when pExpr was originally @@ -158,7 +158,7 @@ CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){ p = p->pLeft; continue; } - if( op==TK_COLLATE || (op==TK_REGISTER && p->op2==TK_COLLATE) ){ + if( op==TK_COLLATE ){ pColl = sqlite3GetCollSeq(pParse, ENC(db), 0, p->u.zToken); break; } diff --git a/test/fuzz4.test b/test/fuzz4.test new file mode 100644 index 0000000000..821cd16555 --- /dev/null +++ b/test/fuzz4.test @@ -0,0 +1,82 @@ +# 2018-12-12 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# Test cases found by Matthew Denton's fuzzer at Chrome. +# + + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +do_execsql_test fuzz4-100 { + CREATE TABLE Table0 (Col0 NOT NULL DEFAULT (CURRENT_TIME IS 1 > 1)); + INSERT OR REPLACE INTO Table0 DEFAULT VALUES ; + SELECT * FROM Table0; +} {0} + +do_execsql_test fuzz4-110 { + CREATE TABLE Table1( + Col0 TEXT DEFAULT (CASE WHEN 1 IS 3530822107858468864 + THEN 1 ELSE quote(1) IS 3530822107858468864 END) + ); + INSERT INTO Table1 DEFAULT VALUES; + SELECT * FROM Table1; +} {0} + +do_execsql_test fuzz4-200 { + CREATE TABLE Table2a( + Col0 NOT NULL DEFAULT (CURRENT_TIME IS 1 IS NOT 1 > 1) + ); + INSERT OR REPLACE INTO Table2a DEFAULT VALUES; + SELECT * FROM Table2a; +} {0} + +do_execsql_test fuzz4-210 { + CREATE TABLE Table2b (Col0 NOT NULL DEFAULT (CURRENT_TIME IS NOT FALSE)) ; + INSERT OR REPLACE INTO Table2b DEFAULT VALUES ; + SELECT * FROM Table2b; +} {1} + +do_execsql_test fuzz4-300 { + CREATE TABLE Table3 (Col0 DEFAULT (CURRENT_TIMESTAMP BETWEEN 1 AND 1)); + INSERT INTO Table3 DEFAULT VALUES; + SELECT * FROM Table3; +} {0} + +do_execsql_test fuzz4-400 { + CREATE TABLE Table4 (Col0 DEFAULT (1 BETWEEN CURRENT_TIMESTAMP AND 1)); + INSERT INTO Table4 DEFAULT VALUES; + SELECT * FROM Table4; +} {0} + +do_execsql_test fuzz4-500 { + CREATE TABLE Table5 (Col0 DEFAULT (1 BETWEEN 1 AND CURRENT_TIMESTAMP)); + INSERT INTO Table5 DEFAULT VALUES; + SELECT * FROM Table5; +} {1} + +do_execsql_test fuzz4-600 { + CREATE TEMPORARY TABLE Table6( + Col0 DEFAULT (CASE x'5d' WHEN 1 THEN + CASE CURRENT_TIMESTAMP WHEN 1 THEN 1 ELSE 1 END + ELSE CASE WHEN 1 THEN FALSE END END ) + ); + INSERT INTO temp.Table6 DEFAULT VALUES ; + SELECT * FROM Table6; +} {0} +do_execsql_test fuzz4-610 { + WITH TableX AS (SELECT DISTINCT * ORDER BY 1 , 1 COLLATE RTRIM) + DELETE FROM Table6 WHERE Col0 || +8388608 ; + SELECT * FROM Table6; +} {} + + +finish_test From 5881dfea2c1598e46a95780a58638c9476055058 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 03:36:13 +0000 Subject: [PATCH 28/49] New database corruption test cases discovered by dbfuzz2. The new cases have been added to test/fuzzdata7.db, but have not yet all been fixed, so tests will not currently pass. FossilOrigin-Name: b4210d320c6426d2838d4cc08709fdfd015c1c95fcad9a5f9e8fd390c23b9fad --- manifest | 17 ++++++++++------- manifest.uuid | 2 +- src/btree.c | 21 ++++++++------------- test/fuzzdata7.db | Bin 16369664 -> 16412672 bytes 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/manifest b/manifest index 11beb1ceb2..a8e4afd737 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sanother\sproblem\sfound\sby\sMatthew\sDenton's\snew\sfuzzer. -D 2018-12-12T21:34:17.884 +C New\sdatabase\scorruption\stest\scases\sdiscovered\sby\sdbfuzz2.\s\sThe\snew\scases\nhave\sbeen\sadded\sto\stest/fuzzdata7.db,\sbut\shave\snot\syet\sall\sbeen\sfixed,\nso\stests\swill\snot\scurrently\spass. +D 2018-12-13T03:36:13.086 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c 4377d0d9a0b969c30b2bc343a12140a53ba6ab0dbf34c1686f232e67d87a557b +F src/btree.c 3d898feaeff97c934cb6ae557265e43ba1f473de6a9e64e947a364bdb6c4f563 F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -980,7 +980,7 @@ F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e42ed2 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 -F test/fuzzdata7.db a1bf54eb455e9772942abae1b2d1cf1e3d3659f0e5dd14f00792fd01411ae8ef +F test/fuzzdata7.db c8c5ef745ce43eb24d6903bff63ddc336464b6b4f9dfae817e7ec2ea0e541dbd F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1784,7 +1784,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 5c7dab85535ac42c021977dbd4a39cef5a72e3d9dccff1c5ca5570a1780516cd -R 0ae00823933e8977db9828c75b6fa876 +P 2b690dbdffe144bd69ca0aa291c230faf3d9d73f7a2985d50f016fe54003f9a9 +R 44eae090dbc00ffed1ffd6b71877bb22 +T *branch * dbfuzz2-cases +T *sym-dbfuzz2-cases * +T -sym-trunk * U drh -Z 040e7dcdd570ef4d870244a63c0ef36b +Z 83e3bf755a107d9d471054676d38303f diff --git a/manifest.uuid b/manifest.uuid index ab4b18d6fb..9b01d1fff7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2b690dbdffe144bd69ca0aa291c230faf3d9d73f7a2985d50f016fe54003f9a9 \ No newline at end of file +b4210d320c6426d2838d4cc08709fdfd015c1c95fcad9a5f9e8fd390c23b9fad \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 9046a72d32..a166d0c867 100644 --- a/src/btree.c +++ b/src/btree.c @@ -1412,19 +1412,14 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){ ** reconstruct the entire page. */ if( (int)data[hdr+7]<=nMaxFrag ){ int iFree = get2byte(&data[hdr+1]); + + /* If the initial freeblock offset were out of bounds, that would + ** have been detected by btreeInitPage() when it was computing the + ** number of free bytes on the page. */ + assert( iFree<=usableSize-4 ); if( iFree ){ int iFree2 = get2byte(&data[iFree]); - - /* pageFindSlot() has already verified that free blocks are sorted - ** in order of offset within the page, and that no block extends - ** past the end of the page. Provided the two free slots do not - ** overlap, this guarantees that the memmove() calls below will not - ** overwrite the usableSize byte buffer, even if the database page - ** is corrupt. */ - assert( iFree2==0 || iFree2>iFree ); - assert( iFree+get2byte(&data[iFree+2]) <= usableSize ); - assert( iFree2==0 || iFree2+get2byte(&data[iFree2+2]) <= usableSize ); - + if( iFree2>usableSize-4 ) return SQLITE_CORRUPT_PAGE(pPage); if( 0==iFree2 || (data[iFree2]==0 && data[iFree2+1]==0) ){ u8 *pEnd = &data[cellOffset + nCell*2]; u8 *pAddr; @@ -1435,9 +1430,9 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){ return SQLITE_CORRUPT_PAGE(pPage); } if( iFree2 ){ - assert( iFree+sz<=iFree2 ); /* Verified by pageFindSlot() */ + if( iFree+sz>iFree2 ) return SQLITE_CORRUPT_PAGE(pPage); sz2 = get2byte(&data[iFree2+2]); - assert( iFree+sz+sz2+iFree2-(iFree+sz) <= usableSize ); + if( iFree2+sz2 > usableSize ) return SQLITE_CORRUPT_PAGE(pPage); memmove(&data[iFree+sz+sz2], &data[iFree+sz], iFree2-(iFree+sz)); sz += sz2; } diff --git a/test/fuzzdata7.db b/test/fuzzdata7.db index 69469f9fcd82b97ffa85c1573763db763fb623ff..01c825ce4f32b89bcac2e1788086a88785b01550 100644 GIT binary patch delta 442016 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 TaLe=G2(4jt`HeS1%<+E!%o4}{ delta 439590 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 QFeZ=s9l?TF>+ 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

o>fSQF}{O)&KY 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 ZJr7qr?pbIDS-fbDXFbT`n{zzO_J2#pW#Rw; From bc1be957c11718c28a107e5c9c6df2d72d55b57c Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 12:28:01 +0000 Subject: [PATCH 29/49] Fix the Makefile so that it honors CFLAGS when building sessionfuzz. FossilOrigin-Name: 54231ac4ca506e6c34c31bc02bb8d3db22f14e1b01679bc70529b165d7dabb83 --- Makefile.in | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Makefile.in b/Makefile.in index 028f615cd7..8491dde315 100644 --- a/Makefile.in +++ b/Makefile.in @@ -669,7 +669,7 @@ ossshell$(TEXE): $(TOP)/test/ossfuzz.c $(TOP)/test/ossshell.c sqlite3.c sqlite3. $(TOP)/test/ossfuzz.c sqlite3.c $(TLIBS) sessionfuzz$(TEXE): $(TOP)/test/sessionfuzz.c sqlite3.c sqlite3.h - $(CC) $(CFLAGS) -I. -o $@ $(TOP)/test/sessionfuzz.c $(TLIBS) + $(LTLINK) -o $@ $(TOP)/test/sessionfuzz.c $(TLIBS) dbfuzz$(TEXE): $(TOP)/test/dbfuzz.c sqlite3.c sqlite3.h $(LTLINK) -o $@ $(DBFUZZ_OPT) $(TOP)/test/dbfuzz.c sqlite3.c $(TLIBS) diff --git a/manifest b/manifest index 11beb1ceb2..1f0b7732a6 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -C Fix\sanother\sproblem\sfound\sby\sMatthew\sDenton's\snew\sfuzzer. -D 2018-12-12T21:34:17.884 +C Fix\sthe\sMakefile\sso\sthat\sit\shonors\sCFLAGS\swhen\sbuilding\ssessionfuzz. +D 2018-12-13T12:28:01.144 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea -F Makefile.in 68d0ba0f0b533d5bc84c78c13a6ce84ee81183a67014caa47a969e67f028fa1c +F Makefile.in 557b9d415b2483d77686a0cb5bbafff7f221eece30c40980fa6d592358cd602b F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc b7d4a710fa3f0b8cfc532ff195b85dc1ba2a8ad34343cb3d67639f28f0a24306 F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee @@ -1784,7 +1784,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 5c7dab85535ac42c021977dbd4a39cef5a72e3d9dccff1c5ca5570a1780516cd -R 0ae00823933e8977db9828c75b6fa876 +P 2b690dbdffe144bd69ca0aa291c230faf3d9d73f7a2985d50f016fe54003f9a9 +R 4eda9e5901582241b2593433b44e7b16 U drh -Z 040e7dcdd570ef4d870244a63c0ef36b +Z f92ead738805283eb0f1e386e20d941b diff --git a/manifest.uuid b/manifest.uuid index ab4b18d6fb..32abcea3db 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2b690dbdffe144bd69ca0aa291c230faf3d9d73f7a2985d50f016fe54003f9a9 \ No newline at end of file +54231ac4ca506e6c34c31bc02bb8d3db22f14e1b01679bc70529b165d7dabb83 \ No newline at end of file From 69a66a7be12600547ab1a91c83995fa6bd6375fd Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 12:37:13 +0000 Subject: [PATCH 30/49] Include OPTS in the build of dbfuzz2. FossilOrigin-Name: eac9c0c49650b008951318a2225b932709a0a8dffbb01ed57684c40357b2e25c --- Makefile.in | 3 ++- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Makefile.in b/Makefile.in index 8491dde315..b200ed6628 100644 --- a/Makefile.in +++ b/Makefile.in @@ -685,7 +685,8 @@ DBFUZZ2_OPTS = \ -DSQLITE_EANBLE_FTS5 dbfuzz2: $(TOP)/test/dbfuzz2.c sqlite3.c sqlite3.h - clang-6.0 -I. -g -O0 -fsanitize=fuzzer,undefined,address -o dbfuzz2 \ + clang-6.0 $(OPT_FEATURE_FLAGS) $(OPTS) -I. -g -O0 \ + -fsanitize=fuzzer,undefined,address -o dbfuzz2 \ $(DBFUZZ2_OPTS) $(TOP)/test/dbfuzz2.c sqlite3.c mkdir -p dbfuzz2-dir cp $(TOP)/test/dbfuzz2-seed* dbfuzz2-dir diff --git a/manifest b/manifest index 1f0b7732a6..3cda5a3847 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -C Fix\sthe\sMakefile\sso\sthat\sit\shonors\sCFLAGS\swhen\sbuilding\ssessionfuzz. -D 2018-12-13T12:28:01.144 +C Include\sOPTS\sin\sthe\sbuild\sof\sdbfuzz2. +D 2018-12-13T12:37:13.440 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea -F Makefile.in 557b9d415b2483d77686a0cb5bbafff7f221eece30c40980fa6d592358cd602b +F Makefile.in 6fbf65894d820ac4a5b624552febce4283cd6d9db052a85310868be78ceddddb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc b7d4a710fa3f0b8cfc532ff195b85dc1ba2a8ad34343cb3d67639f28f0a24306 F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee @@ -1784,7 +1784,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 2b690dbdffe144bd69ca0aa291c230faf3d9d73f7a2985d50f016fe54003f9a9 -R 4eda9e5901582241b2593433b44e7b16 +P 54231ac4ca506e6c34c31bc02bb8d3db22f14e1b01679bc70529b165d7dabb83 +R 3965f390ed5089653fa0ae080a56637b U drh -Z f92ead738805283eb0f1e386e20d941b +Z 3b3f257dcedf459d870badc7f1cd6ad5 diff --git a/manifest.uuid b/manifest.uuid index 32abcea3db..13bd2abd32 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -54231ac4ca506e6c34c31bc02bb8d3db22f14e1b01679bc70529b165d7dabb83 \ No newline at end of file +eac9c0c49650b008951318a2225b932709a0a8dffbb01ed57684c40357b2e25c \ No newline at end of file From 3374648545262810849a3b17fdb4435bbb255a07 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 15:06:26 +0000 Subject: [PATCH 31/49] Add the "dbtotxt" utility program and the ability to read "dbtotxt" output as a deserialized input database in the CLI, using the --hexdb option to the ".open" command. FossilOrigin-Name: e3bf1d3ea5f748c5142c2403813fdace5aedc1fc68f0dcd5eae40a2fe763fedb --- Makefile.in | 3 ++ Makefile.msc | 3 ++ main.mk | 3 ++ manifest | 20 +++---- manifest.uuid | 2 +- src/shell.c.in | 104 +++++++++++++++++++++++++++++++++-- tool/dbtotxt.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++ tool/dbtotxt.md | 56 +++++++++++++++++++ 8 files changed, 317 insertions(+), 14 deletions(-) create mode 100644 tool/dbtotxt.c create mode 100644 tool/dbtotxt.md diff --git a/Makefile.in b/Makefile.in index b200ed6628..69371076fe 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1292,6 +1292,9 @@ dbdump$(TEXE): $(TOP)/ext/misc/dbdump.c sqlite3.lo $(LTLINK) -DDBDUMP_STANDALONE -o $@ \ $(TOP)/ext/misc/dbdump.c sqlite3.lo $(TLIBS) +dbtotxt$(TEXE): $(TOP)/tool/dbtotxt.c + $(LTLINK)-o $@ $(TOP)/tool/dbtotxt.c + showdb$(TEXE): $(TOP)/tool/showdb.c sqlite3.lo $(LTLINK) -o $@ $(TOP)/tool/showdb.c sqlite3.lo $(TLIBS) diff --git a/Makefile.msc b/Makefile.msc index 3b95d088d2..f5d47240f5 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -2425,6 +2425,9 @@ testloadext.lo: $(TOP)\src\test_loadext.c $(SQLITE3H) testloadext.dll: testloadext.lo $(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ testloadext.lo +dbtotxt.exe: $(TOP)\tool\dbtotxt.c + $(LTLINK) $(NO_WARN) $(TOP)\tool\dbtotxt.c /link $(LDFLAGS) $(LTLINKOPTS) + showdb.exe: $(TOP)\tool\showdb.c $(SQLITE3C) $(SQLITE3H) $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \ $(TOP)\tool\showdb.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) diff --git a/main.mk b/main.mk index 7a85619732..65c2c9dc23 100644 --- a/main.mk +++ b/main.mk @@ -976,6 +976,9 @@ $(TEST_EXTENSION): $(TOP)/src/test_loadext.c extensiontest: testfixture$(EXE) $(TEST_EXTENSION) ./testfixture$(EXE) $(TOP)/test/loadext.test +dbtotxt$(EXE): $(TOP)/tool/dbtotxt.c + $(TCC) -o dbtotxt$(EXE) $(TOP)/tool/dbtotxt.c + showdb$(EXE): $(TOP)/tool/showdb.c sqlite3.o $(TCC) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -o showdb$(EXE) \ $(TOP)/tool/showdb.c sqlite3.o $(THREADLIB) diff --git a/manifest b/manifest index 3cda5a3847..127fdbd6ec 100644 --- a/manifest +++ b/manifest @@ -1,10 +1,10 @@ -C Include\sOPTS\sin\sthe\sbuild\sof\sdbfuzz2. -D 2018-12-13T12:37:13.440 +C Add\sthe\s"dbtotxt"\sutility\sprogram\sand\sthe\sability\sto\sread\s"dbtotxt"\soutput\nas\sa\sdeserialized\sinput\sdatabase\sin\sthe\sCLI,\susing\sthe\s--hexdb\soption\sto\nthe\s".open"\scommand. +D 2018-12-13T15:06:26.121 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea -F Makefile.in 6fbf65894d820ac4a5b624552febce4283cd6d9db052a85310868be78ceddddb +F Makefile.in 2f1b61ac62689ca4e9cbff9fdb359578ea37ddd9252355ec0b7b9700ad56fe90 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 -F Makefile.msc b7d4a710fa3f0b8cfc532ff195b85dc1ba2a8ad34343cb3d67639f28f0a24306 +F Makefile.msc 2ef13d6845b899eaaa6122c69b74175656a97e26666567af795f4cfe41b7a673 F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee F VERSION 453e2f4529ca208196d5567db28d549d7151f79efd33f6e6cfe6e613e583a0be F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@ -429,7 +429,7 @@ F ext/userauth/userauth.c f81aa5a3ecacf406f170c62a144405858f6f6de51dbdc0920134e6 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60 -F main.mk 55f94164ecc194b067d9c55e106f37fd3c9b39f9668e8b568c98f008b6f9ec90 +F main.mk cca1ecdd5dfe4579ded84e5abdd38e1866bbb8b8cf58d1a24496e9b1b65580d7 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 @@ -508,7 +508,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c abd65c518c198400193c6319a70c0d722fa30a35be89dc898917ff6489edf017 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 -F src/shell.c.in 5f38bd0e127c2cc4e506b5c3565c10879ddfae6c2d867bb5972563e40717c19c +F src/shell.c.in 6c06ff4077ab38b30a307c058ecc650e958bfdb6da1c255ebbd8779447e0cae9 F src/sqlite.h.in 92fd656c26cc76de9fa8c5bf1a473066e3b5c6da345a447679f0f44de1aa4edd F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 @@ -1694,6 +1694,8 @@ F tool/build-shell.sh 950f47c6174f1eea171319438b93ba67ff5bf367 F tool/cg_anno.tcl f95b0006c52cf7f0496b506343415b6ee3cdcdd3 x F tool/checkSpacing.c 810e51703529a204fc4e1eb060e9ab663e3c06d2 F tool/dbhash.c a06228aa21ebc4e6ea8daa486601d938499238a5 +F tool/dbtotxt.c 1655f60fd7b24a3e7a25d01cdb3a6a4785f30112213b08ff83a27ae7ef2dd13e +F tool/dbtotxt.md c9a57af8739957ef36d2cfad5c4b1443ff3688ed33e4901ee200c8b651f43f3c F tool/extract.c 054069d81b095fbdc189a6f5d4466e40380505e2 F tool/fast_vacuum.c 5ba0d6f5963a0a63bdc42840f678bad75b2ebce1 F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439 @@ -1784,7 +1786,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 54231ac4ca506e6c34c31bc02bb8d3db22f14e1b01679bc70529b165d7dabb83 -R 3965f390ed5089653fa0ae080a56637b +P eac9c0c49650b008951318a2225b932709a0a8dffbb01ed57684c40357b2e25c +R 4375ea249bc2f1867ed511e156cfaedb U drh -Z 3b3f257dcedf459d870badc7f1cd6ad5 +Z 5d7eea8bc66404385fe54bd1e1b7369f diff --git a/manifest.uuid b/manifest.uuid index 13bd2abd32..4226c78984 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -eac9c0c49650b008951318a2225b932709a0a8dffbb01ed57684c40357b2e25c \ No newline at end of file +e3bf1d3ea5f748c5142c2403813fdace5aedc1fc68f0dcd5eae40a2fe763fedb \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index fd9cefa7a8..70cbfe9eb9 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -1066,6 +1066,7 @@ struct ShellState { #define SHELL_OPEN_ZIPFILE 3 /* Use the zipfile virtual table */ #define SHELL_OPEN_READONLY 4 /* Open a normal database read-only */ #define SHELL_OPEN_DESERIALIZE 5 /* Open using sqlite3_deserialize() */ +#define SHELL_OPEN_HEXDB 6 /* Use "dbtotxt" output as data source */ /* Allowed values for ShellState.eTraceType */ @@ -3444,6 +3445,7 @@ static const char *(azHelp[]) = { " --append Use appendvfs to append database to the end of FILE", #ifdef SQLITE_ENABLE_DESERIALIZE " --deserialize Load into memory useing sqlite3_deserialize()", + " --hexdb Load the output of \"dbtotxt\" as an in-memory database", #endif " --new Initialize FILE to an empty database", " --readonly Open FILE readonly", @@ -3723,6 +3725,87 @@ int deduceDatabaseType(const char *zName, int dfltZip){ return rc; } +#ifdef SQLITE_ENABLE_DESERIALIZE +/* +** Reconstruct an in-memory database using the output from the "dbtotxt" +** program. Read content from the file in p->zDbFilename. If p->zDbFilename +** is 0, then read from standard input. +*/ +static unsigned char *readHexDb(ShellState *p, int *pnData){ + unsigned char *a = 0; + int nLine = 1; + int n = 0; + int pgsz = 0; + int iOffset = 0; + int j, k; + int rc; + FILE *in; + unsigned char x[16]; + char zLine[100]; + if( p->zDbFilename ){ + in = fopen(p->zDbFilename, "r"); + if( in==0 ){ + utf8_printf(stderr, "cannot open \"%s\" for reading\n", p->zDbFilename); + return 0; + } + }else{ + in = stdin; + } + *pnData = 0; + if( fgets(zLine, sizeof(zLine), in)==0 ) goto readHexDb_error; + rc = sscanf(zLine, "| size %d pagesize %d", &n, &pgsz); + if( rc!=2 ) goto readHexDb_error; + if( n<=0 ) goto readHexDb_error; + a = sqlite3_malloc( n ); + if( a==0 ){ + utf8_printf(stderr, "Out of memory!\n"); + goto readHexDb_error; + } + memset(a, 0, n); + if( pgsz<512 || pgsz>65536 || (pgsz & (pgsz-1))!=0 ){ + utf8_printf(stderr, "invalid pagesize\n"); + goto readHexDb_error; + } + for(nLine=2; fgets(zLine, sizeof(zLine), in)!=0; nLine++){ + rc = sscanf(zLine, "| page %d offset %d", &j, &k); + if( rc==2 ){ + iOffset = k; + continue; + } + if( strncmp(zLine, "| end ", 6)==0 ){ + break; + } + rc = sscanf(zLine,"| %d: %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx" + " %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx", + &j, &x[0], &x[1], &x[2], &x[3], &x[4], &x[5], &x[6], &x[7], + &x[8], &x[9], &x[10], &x[11], &x[12], &x[13], &x[14], &x[15]); + if( rc==17 ){ + k = iOffset+j; + if( k+16>n ){ + utf8_printf(stderr, "continue exceeds file size\n"); + goto readHexDb_error; + } + memcpy(a+k, x, 16); + } + } + *pnData = n; + if( in!=stdin ) fclose(in); + return a; + +readHexDb_error: + if( in!=stdin ){ + fclose(in); + }else{ + while( fgets(zLine, sizeof(zLine), in)!=0 ){ + if(strncmp(zLine, "| end ", 6)==0 ) break; + } + } + sqlite3_free(a); + utf8_printf(stderr,"Error on line %d of --hexdb input\n", nLine); + return 0; +} +#endif /* SQLITE_ENABLE_DESERIALIZE */ + /* Flags for open_db(). ** ** The default behavior of open_db() is to exit(1) if the database fails to @@ -3756,6 +3839,7 @@ static void open_db(ShellState *p, int openFlags){ SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, "apndvfs"); break; } + case SHELL_OPEN_HEXDB: case SHELL_OPEN_DESERIALIZE: { sqlite3_open(0, &p->db); break; @@ -3810,9 +3894,19 @@ static void open_db(ShellState *p, int openFlags){ sqlite3_free(zSql); } #ifdef SQLITE_ENABLE_DESERIALIZE - else if( p->openMode==SHELL_OPEN_DESERIALIZE ){ + else + if( p->openMode==SHELL_OPEN_DESERIALIZE || p->openMode==SHELL_OPEN_HEXDB ){ int nData = 0; - unsigned char *aData = (unsigned char*)readFile(p->zDbFilename, &nData); + unsigned char *aData; + if( p->openMode==SHELL_OPEN_DESERIALIZE ){ + aData = (unsigned char*)readFile(p->zDbFilename, &nData); + }else{ + aData = readHexDb(p, &nData); + if( aData==0 ){ + utf8_printf(stderr, "Error in hexdb input\n"); + return; + } + } int rc = sqlite3_deserialize(p->db, "main", aData, nData, nData, SQLITE_DESERIALIZE_RESIZEABLE | SQLITE_DESERIALIZE_FREEONCLOSE); @@ -6749,7 +6843,9 @@ static int do_meta_command(char *zLine, ShellState *p){ #ifdef SQLITE_ENABLE_DESERIALIZE }else if( optionMatch(z, "deserialize") ){ p->openMode = SHELL_OPEN_DESERIALIZE; -#endif + }else if( optionMatch(z, "hexdb") ){ + p->openMode = SHELL_OPEN_HEXDB; +#endif /* SQLITE_ENABLE_DESERIALIZE */ }else if( z[0]=='-' ){ utf8_printf(stderr, "unknown option: %s\n", z); rc = 1; @@ -6758,7 +6854,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } /* If a filename is specified, try to open it first */ zNewFilename = nArg>iName ? sqlite3_mprintf("%s", azArg[iName]) : 0; - if( zNewFilename ){ + if( zNewFilename || p->openMode==SHELL_OPEN_HEXDB ){ if( newFlag ) shellDeleteFile(zNewFilename); p->zDbFilename = zNewFilename; open_db(p, OPEN_DB_KEEPALIVE); diff --git a/tool/dbtotxt.c b/tool/dbtotxt.c new file mode 100644 index 0000000000..f28e209ce2 --- /dev/null +++ b/tool/dbtotxt.c @@ -0,0 +1,140 @@ +/* +** Copyright 2008 D. Richard Hipp and Hipp, Wyrick & Company, Inc. +** All Rights Reserved +** +****************************************************************************** +** +** This file implements a stand-alone utility program that converts +** a binary file (usually an SQLite database) into a text format that +** is compact and friendly to human-readers. +** +** Usage: +** +** dbtotxt [--pagesize N] FILENAME +** +** The translation of the database appears on standard output. If the +** --pagesize command-line option is omitted, then the page size is taken +** from the database header. +** +** Compactness is achieved by suppressing lines of all zero bytes. This +** works well at compressing test databases that are mostly empty. But +** the output will probably be lengthy for a real database containing lots +** of real content. For maximum compactness, it is suggested that test +** databases be constructed with "zeroblob()" rather than "randomblob()" +** used for filler content and with "PRAGMA secure_delete=ON" selected to +** zero-out deleted content. +*/ +#include +#include +#include + +/* Return true if the line is all zeros */ +static int allZero(unsigned char *aLine){ + int i; + for(i=0; i<16 && aLine[i]==0; i++){} + return i==16; +} + +int main(int argc, char **argv){ + int pgsz = 0; /* page size */ + long szFile; /* Size of the input file in bytes */ + FILE *in; /* Input file */ + int i, j; /* Loop counters */ + int nErr = 0; /* Number of errors */ + const char *zInputFile = 0; /* Name of the input file */ + const char *zBaseName = 0; /* Base name of the file */ + int lastPage = 0; /* Last page number shown */ + int iPage; /* Current page number */ + unsigned char aLine[16]; /* A single line of the file */ + unsigned char aHdr[100]; /* File header */ + for(i=1; i65536 || (pgsz&(pgsz-1))!=0 ){ + fprintf(stderr, "Page size must be a power of two between" + " 512 and 65536.\n"); + nErr++; + } + continue; + } + fprintf(stderr, "Unknown option: %s\n", argv[i]); + nErr++; + }else if( zInputFile ){ + fprintf(stderr, "Already using a different input file: [%s]\n", argv[i]); + nErr++; + }else{ + zInputFile = argv[i]; + } + } + if( zInputFile==0 ){ + fprintf(stderr, "No input file specified.\n"); + nErr++; + } + if( nErr ){ + fprintf(stderr, "Usage: %s [--pagesize N] FILENAME\n", argv[0]); + exit(1); + } + in = fopen(zInputFile, "rb"); + if( in==0 ){ + fprintf(stderr, "Cannot open input file [%s]\n", zInputFile); + exit(1); + } + fseek(in, 0, SEEK_END); + szFile = ftell(in); + rewind(in); + if( szFile<512 ){ + fprintf(stderr, "File too short. Minimum size is 512 bytes.\n"); + exit(1); + } + if( fread(aHdr, 100, 1, in)!=1 ){ + fprintf(stderr, "Cannot read file header\n"); + exit(1); + } + rewind(in); + if( pgsz==0 ){ + pgsz = (aHdr[16]<<8) | aHdr[17]; + if( pgsz==1 ) pgsz = 65536; + if( pgsz<512 || (pgsz&(pgsz-1))!=0 ){ + fprintf(stderr, "Invalid page size in header: %d\n", pgsz); + exit(1); + } + } + zBaseName = zInputFile; + for(i=0; zInputFile[i]; i++){ + if( zInputFile[i]=='/' && zInputFile[i+1]!=0 ) zBaseName = zInputFile+1; + } + printf("| size %d pagesize %d filename %s\n",(int)szFile,pgsz,zBaseName); + for(i=0; i=0x20 && c<=0x7e ? c : '.', stdout); + } + fputc('\n', stdout); + } + fclose(in); + printf("| end %s\n", zBaseName); + return 0; +} diff --git a/tool/dbtotxt.md b/tool/dbtotxt.md new file mode 100644 index 0000000000..f2bd7c9c25 --- /dev/null +++ b/tool/dbtotxt.md @@ -0,0 +1,56 @@ +

The dbtotxt Tool

+ +The dbtotxt utility program reads an SQLite database file and writes its +raw binary content to screen as a hex dump for testing and debugging +purposes. + +The hex-dump output is formatted in such a way as to be easily readable +both by humans and by software. The dbtotxt utility has long been a part +of the TH3 test suite. The output of dbtotxt can be embedded in TH3 test +scripts and used to generate very specific database files, perhaps with +deliberately introduced corruption. The cov1/corrupt*.test modules in +TH3 make extensive use of dbtotxt. + +More recently (2018-12-13) the dbtotxt utility has been added to the SQLite +core and the command-line shell (CLI) has been augmented to be able to read +dbtotxt output. The CLI dot-command is: + +> .open --hexdb ?OPTIONAL-FILENAME? + +If the OPTIONAL-FILENAME is included, then content is read from that file. +If OPTIONAL-FILENAME is omitted, then the text is taken from the input stream, +terminated by the "| end" line of the dbtotxt text. This allows small test +databases to be embedded directly in scripts. Consider this example: + +> + .open --hexdb + | size 8192 pagesize 4096 filename x9.db + | page 1 offset 0 + | 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. + | 16: 10 00 01 01 00 40 20 20 00 00 00 04 00 00 00 02 .....@ ........ + | 32: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 04 ................ + | 48: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ................ + | 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 ................ + | 96: 00 2e 30 38 0d 00 00 00 01 0f c0 00 0f c0 00 00 ..08............ + | 4032: 3e 01 06 17 11 11 01 69 74 61 62 6c 65 74 31 74 >......itablet1t + | 4048: 31 02 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 1.CREATE TABLE t + | 4064: 31 28 78 2c 79 20 44 45 46 41 55 4c 54 20 78 27 1(x,y DEFAULT x' + | 4080: 66 66 27 2c 7a 20 44 45 46 41 55 4c 54 20 30 29 ff',z DEFAULT 0) + | page 2 offset 4096 + | 0: 0d 08 14 00 04 00 10 00 0e 05 0a 0f 04 15 00 10 ................ + | 16: 88 02 03 05 90 04 0e 08 00 00 00 00 00 00 00 00 ................ + | 1040: 00 00 00 00 ff 87 7c 02 05 8f 78 0e 08 00 00 00 ......|...x..... + | 2064: 00 00 00 ff 0c 0a 01 fb 00 00 00 00 00 00 00 00 ................ + | 2560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 83 ................ + | 2576: 78 01 05 87 70 0e 08 00 00 00 00 00 00 00 00 00 x...p........... + | 3072: 00 00 00 00 00 00 00 00 00 ff 00 00 01 fb 00 00 ................ + | 3584: 00 00 00 00 00 83 78 00 05 87 70 0e 08 00 00 00 ......x...p..... + | 4080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ................ + | end x9.db + SELECT rowid FROM t1; + PRAGMA integrity_check; + +You can run this script to see that the database file is correctly decoded +and loaded. Furthermore, you can make subtle corruptions to the input +database simply by editing the hexadecimal description, then rerun the +script to verify that SQLite correctly handles the corruption. From 60379d424341391776e3270f989f0a489db0539c Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 18:30:01 +0000 Subject: [PATCH 32/49] Fix the CLI so that the ".open --hexdb" command works even if it is contained in a subscript that is read using ".read". FossilOrigin-Name: 67a87399b8ad8f1ce3052ee3159906f5c6df3d7b5691b3acac856bd2f1c82088 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 51 +++++++++++++++++++++++++++----------------------- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/manifest b/manifest index 127fdbd6ec..a0f3a016d0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\s"dbtotxt"\sutility\sprogram\sand\sthe\sability\sto\sread\s"dbtotxt"\soutput\nas\sa\sdeserialized\sinput\sdatabase\sin\sthe\sCLI,\susing\sthe\s--hexdb\soption\sto\nthe\s".open"\scommand. -D 2018-12-13T15:06:26.121 +C Fix\sthe\sCLI\sso\sthat\sthe\s".open\s--hexdb"\scommand\sworks\seven\sif\sit\sis\scontained\nin\sa\ssubscript\sthat\sis\sread\susing\s".read". +D 2018-12-13T18:30:01.890 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 2f1b61ac62689ca4e9cbff9fdb359578ea37ddd9252355ec0b7b9700ad56fe90 @@ -508,7 +508,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c abd65c518c198400193c6319a70c0d722fa30a35be89dc898917ff6489edf017 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 -F src/shell.c.in 6c06ff4077ab38b30a307c058ecc650e958bfdb6da1c255ebbd8779447e0cae9 +F src/shell.c.in b998c6d78bc886e900780abf8ef89fc33c0884058ee6583ff466e52a273872e6 F src/sqlite.h.in 92fd656c26cc76de9fa8c5bf1a473066e3b5c6da345a447679f0f44de1aa4edd F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 @@ -1786,7 +1786,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 eac9c0c49650b008951318a2225b932709a0a8dffbb01ed57684c40357b2e25c -R 4375ea249bc2f1867ed511e156cfaedb +P e3bf1d3ea5f748c5142c2403813fdace5aedc1fc68f0dcd5eae40a2fe763fedb +R a7af747c108542ed7a9f41235cf0fca7 U drh -Z 5d7eea8bc66404385fe54bd1e1b7369f +Z c11351b3fcf7b9c9d8ba68269cb05836 diff --git a/manifest.uuid b/manifest.uuid index 4226c78984..66a335cd85 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e3bf1d3ea5f748c5142c2403813fdace5aedc1fc68f0dcd5eae40a2fe763fedb \ No newline at end of file +67a87399b8ad8f1ce3052ee3159906f5c6df3d7b5691b3acac856bd2f1c82088 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 70cbfe9eb9..b1988e5a29 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -1011,6 +1011,7 @@ struct ShellState { unsigned mEqpLines; /* Mask of veritical lines in the EQP output graph */ int outCount; /* Revert to stdout when reaching zero */ int cnt; /* Number of records displayed so far */ + FILE *in; /* Read commands from this stream */ FILE *out; /* Write results here */ FILE *traceOut; /* Output for sqlite3_trace() */ int nErr; /* Number of errors seen */ @@ -3595,7 +3596,7 @@ static int showHelp(FILE *out, const char *zPattern){ } /* Forward reference */ -static int process_input(ShellState *p, FILE *in); +static int process_input(ShellState *p); /* ** Read the content of file zName into memory obtained from sqlite3_malloc64() @@ -3749,7 +3750,7 @@ static unsigned char *readHexDb(ShellState *p, int *pnData){ return 0; } }else{ - in = stdin; + in = p->in; } *pnData = 0; if( fgets(zLine, sizeof(zLine), in)==0 ) goto readHexDb_error; @@ -3789,14 +3790,14 @@ static unsigned char *readHexDb(ShellState *p, int *pnData){ } } *pnData = n; - if( in!=stdin ) fclose(in); + if( in!=p->in ) fclose(in); return a; readHexDb_error: if( in!=stdin ){ fclose(in); }else{ - while( fgets(zLine, sizeof(zLine), in)!=0 ){ + while( fgets(zLine, sizeof(zLine), p->in)!=0 ){ if(strncmp(zLine, "| end ", 6)==0 ) break; } } @@ -6970,20 +6971,21 @@ static int do_meta_command(char *zLine, ShellState *p){ }else if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){ - FILE *alt; + FILE *inSaved = p->in; if( nArg!=2 ){ raw_printf(stderr, "Usage: .read FILE\n"); rc = 1; goto meta_command_exit; } - alt = fopen(azArg[1], "rb"); - if( alt==0 ){ + p->in = fopen(azArg[1], "rb"); + if( p->in==0 ){ utf8_printf(stderr,"Error: cannot open \"%s\"\n", azArg[1]); rc = 1; }else{ - rc = process_input(p, alt); - fclose(alt); + rc = process_input(p); + fclose(p->in); } + p->in = inSaved; }else if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){ @@ -8324,7 +8326,7 @@ static int runOneSqlLine(ShellState *p, char *zSql, FILE *in, int startline){ ** ** Return the number of errors. */ -static int process_input(ShellState *p, FILE *in){ +static int process_input(ShellState *p){ char *zLine = 0; /* A single input line */ char *zSql = 0; /* Accumulated SQL text */ int nLine; /* Length of current line */ @@ -8336,16 +8338,16 @@ static int process_input(ShellState *p, FILE *in){ int lineno = 0; /* Current line number */ int startline = 0; /* Line number for start of current input */ - while( errCnt==0 || !bail_on_error || (in==0 && stdin_is_interactive) ){ + while( errCnt==0 || !bail_on_error || (p->in==0 && stdin_is_interactive) ){ fflush(p->out); - zLine = one_input_line(in, zLine, nSql>0); + zLine = one_input_line(p->in, zLine, nSql>0); if( zLine==0 ){ /* End of input */ - if( in==0 && stdin_is_interactive ) printf("\n"); + if( p->in==0 && stdin_is_interactive ) printf("\n"); break; } if( seenInterrupt ){ - if( in!=0 ) break; + if( p->in!=0 ) break; seenInterrupt = 0; } lineno++; @@ -8389,7 +8391,7 @@ static int process_input(ShellState *p, FILE *in){ } if( nSql && line_contains_semicolon(&zSql[nSqlPrior], nSql-nSqlPrior) && sqlite3_complete(zSql) ){ - errCnt += runOneSqlLine(p, zSql, in, startline); + errCnt += runOneSqlLine(p, zSql, p->in, startline); nSql = 0; if( p->outCount ){ output_reset(p); @@ -8403,7 +8405,7 @@ static int process_input(ShellState *p, FILE *in){ } } if( nSql && !_all_whitespace(zSql) ){ - errCnt += runOneSqlLine(p, zSql, in, startline); + errCnt += runOneSqlLine(p, zSql, p->in, startline); } free(zSql); free(zLine); @@ -8492,7 +8494,7 @@ static void process_sqliterc( char *home_dir = NULL; const char *sqliterc = sqliterc_override; char *zBuf = 0; - FILE *in = NULL; + FILE *inSaved = p->in; if (sqliterc == NULL) { home_dir = find_home_dir(0); @@ -8504,14 +8506,15 @@ static void process_sqliterc( zBuf = sqlite3_mprintf("%s/.sqliterc",home_dir); sqliterc = zBuf; } - in = fopen(sqliterc,"rb"); - if( in ){ + p->in = fopen(sqliterc,"rb"); + if( p->in ){ if( stdin_is_interactive ){ utf8_printf(stderr,"-- Loading resources from %s\n",sqliterc); } - process_input(p,in); - fclose(in); + process_input(p); + fclose(p->in); } + p->in = inSaved; sqlite3_free(zBuf); } @@ -9123,14 +9126,16 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #elif HAVE_LINENOISE linenoiseSetCompletionCallback(linenoise_completion); #endif - rc = process_input(&data, 0); + data.in = 0; + rc = process_input(&data); if( zHistory ){ shell_stifle_history(2000); shell_write_history(zHistory); free(zHistory); } }else{ - rc = process_input(&data, stdin); + data.in = stdin; + rc = process_input(&data); } } set_table_name(&data, 0); From 2c8ee026ba71b1770a89117df4fb5fb915ad5059 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 18:59:30 +0000 Subject: [PATCH 33/49] Fix the CLI to keep proper track of input line numbers for use in error messages, even after processing in-line hex database inputs using ".open --hexdb". FossilOrigin-Name: 7ffa9858162774cba03a565a7b65135d9e8bfea726af1a29de6898f66c4b1261 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 28 +++++++++++++++++++++------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index a0f3a016d0..d9cea9816a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sCLI\sso\sthat\sthe\s".open\s--hexdb"\scommand\sworks\seven\sif\sit\sis\scontained\nin\sa\ssubscript\sthat\sis\sread\susing\s".read". -D 2018-12-13T18:30:01.890 +C Fix\sthe\sCLI\sto\skeep\sproper\strack\sof\sinput\sline\snumbers\sfor\suse\sin\serror\nmessages,\seven\safter\sprocessing\sin-line\shex\sdatabase\sinputs\susing\n".open\s--hexdb". +D 2018-12-13T18:59:30.657 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 2f1b61ac62689ca4e9cbff9fdb359578ea37ddd9252355ec0b7b9700ad56fe90 @@ -508,7 +508,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c abd65c518c198400193c6319a70c0d722fa30a35be89dc898917ff6489edf017 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 -F src/shell.c.in b998c6d78bc886e900780abf8ef89fc33c0884058ee6583ff466e52a273872e6 +F src/shell.c.in a9b26ab3925e179f4f1a3a910ffe634195bc6becab8aa3e02bbb0dc652d30543 F src/sqlite.h.in 92fd656c26cc76de9fa8c5bf1a473066e3b5c6da345a447679f0f44de1aa4edd F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 @@ -1786,7 +1786,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 e3bf1d3ea5f748c5142c2403813fdace5aedc1fc68f0dcd5eae40a2fe763fedb -R a7af747c108542ed7a9f41235cf0fca7 +P 67a87399b8ad8f1ce3052ee3159906f5c6df3d7b5691b3acac856bd2f1c82088 +R f859719ab1a18f7f99e4d481a8b5bfc0 U drh -Z c11351b3fcf7b9c9d8ba68269cb05836 +Z 99cc51545a333a02cea3f7ae2232a64b diff --git a/manifest.uuid b/manifest.uuid index 66a335cd85..9c3b0338d5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -67a87399b8ad8f1ce3052ee3159906f5c6df3d7b5691b3acac856bd2f1c82088 \ No newline at end of file +7ffa9858162774cba03a565a7b65135d9e8bfea726af1a29de6898f66c4b1261 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index b1988e5a29..1c06c67566 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -1011,6 +1011,7 @@ struct ShellState { unsigned mEqpLines; /* Mask of veritical lines in the EQP output graph */ int outCount; /* Revert to stdout when reaching zero */ int cnt; /* Number of records displayed so far */ + int lineno; /* Line number of last line read from in */ FILE *in; /* Read commands from this stream */ FILE *out; /* Write results here */ FILE *traceOut; /* Output for sqlite3_trace() */ @@ -3734,7 +3735,7 @@ int deduceDatabaseType(const char *zName, int dfltZip){ */ static unsigned char *readHexDb(ShellState *p, int *pnData){ unsigned char *a = 0; - int nLine = 1; + int nLine; int n = 0; int pgsz = 0; int iOffset = 0; @@ -3742,17 +3743,20 @@ static unsigned char *readHexDb(ShellState *p, int *pnData){ int rc; FILE *in; unsigned char x[16]; - char zLine[100]; + char zLine[1000]; if( p->zDbFilename ){ in = fopen(p->zDbFilename, "r"); if( in==0 ){ utf8_printf(stderr, "cannot open \"%s\" for reading\n", p->zDbFilename); return 0; } + nLine = 0; }else{ in = p->in; + nLine = p->lineno; } *pnData = 0; + nLine++; if( fgets(zLine, sizeof(zLine), in)==0 ) goto readHexDb_error; rc = sscanf(zLine, "| size %d pagesize %d", &n, &pgsz); if( rc!=2 ) goto readHexDb_error; @@ -3767,7 +3771,7 @@ static unsigned char *readHexDb(ShellState *p, int *pnData){ utf8_printf(stderr, "invalid pagesize\n"); goto readHexDb_error; } - for(nLine=2; fgets(zLine, sizeof(zLine), in)!=0; nLine++){ + for(nLine++; fgets(zLine, sizeof(zLine), in)!=0; nLine++){ rc = sscanf(zLine, "| page %d offset %d", &j, &k); if( rc==2 ){ iOffset = k; @@ -3790,7 +3794,11 @@ static unsigned char *readHexDb(ShellState *p, int *pnData){ } } *pnData = n; - if( in!=p->in ) fclose(in); + if( in!=p->in ){ + fclose(in); + }else{ + p->lineno = nLine; + } return a; readHexDb_error: @@ -3798,8 +3806,10 @@ readHexDb_error: fclose(in); }else{ while( fgets(zLine, sizeof(zLine), p->in)!=0 ){ + nLine++; if(strncmp(zLine, "| end ", 6)==0 ) break; } + p->lineno = nLine; } sqlite3_free(a); utf8_printf(stderr,"Error on line %d of --hexdb input\n", nLine); @@ -6972,6 +6982,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){ FILE *inSaved = p->in; + int savedLineno = p->lineno; if( nArg!=2 ){ raw_printf(stderr, "Usage: .read FILE\n"); rc = 1; @@ -6986,6 +6997,7 @@ static int do_meta_command(char *zLine, ShellState *p){ fclose(p->in); } p->in = inSaved; + p->lineno = savedLineno; }else if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){ @@ -8335,9 +8347,9 @@ static int process_input(ShellState *p){ int nSqlPrior = 0; /* Bytes of zSql[] used by prior line */ int rc; /* Error code */ int errCnt = 0; /* Number of errors seen */ - int lineno = 0; /* Current line number */ int startline = 0; /* Line number for start of current input */ + p->lineno = 0; while( errCnt==0 || !bail_on_error || (p->in==0 && stdin_is_interactive) ){ fflush(p->out); zLine = one_input_line(p->in, zLine, nSql>0); @@ -8350,7 +8362,7 @@ static int process_input(ShellState *p){ if( p->in!=0 ) break; seenInterrupt = 0; } - lineno++; + p->lineno++; if( nSql==0 && _all_whitespace(zLine) ){ if( ShellHasFlag(p, SHFLG_Echo) ) printf("%s\n", zLine); continue; @@ -8382,7 +8394,7 @@ static int process_input(ShellState *p){ for(i=0; zLine[i] && IsSpace(zLine[i]); i++){} assert( nAlloc>0 && zSql!=0 ); memcpy(zSql, zLine+i, nLine+1-i); - startline = lineno; + startline = p->lineno; nSql = nLine-i; }else{ zSql[nSql++] = '\n'; @@ -8495,6 +8507,7 @@ static void process_sqliterc( const char *sqliterc = sqliterc_override; char *zBuf = 0; FILE *inSaved = p->in; + int savedLineno = p->lineno; if (sqliterc == NULL) { home_dir = find_home_dir(0); @@ -8515,6 +8528,7 @@ static void process_sqliterc( fclose(p->in); } p->in = inSaved; + p->lineno = savedLineno; sqlite3_free(zBuf); } From f7e74904ccd2ed0f6c359ec44709446025b2b110 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 20:49:43 +0000 Subject: [PATCH 34/49] Add the "decode_hexdb" TCL command to testfixture. Add the dbfuzz001.test module to demonstration how to use decode_hexdb to deserialize a dbtotxt database description for use in a corruption test. FossilOrigin-Name: 1f583c53f3b7318c69f6e235934d97ef9493278feeab0837217076d7d071c35b --- manifest | 13 ++-- manifest.uuid | 2 +- src/test1.c | 74 +++++++++++++++++++ test/dbfuzz001.test | 170 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 252 insertions(+), 7 deletions(-) create mode 100644 test/dbfuzz001.test diff --git a/manifest b/manifest index d9cea9816a..f2901a3880 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sCLI\sto\skeep\sproper\strack\sof\sinput\sline\snumbers\sfor\suse\sin\serror\nmessages,\seven\safter\sprocessing\sin-line\shex\sdatabase\sinputs\susing\n".open\s--hexdb". -D 2018-12-13T18:59:30.657 +C Add\sthe\s"decode_hexdb"\sTCL\scommand\sto\stestfixture.\s\sAdd\sthe\sdbfuzz001.test\nmodule\sto\sdemonstration\show\sto\suse\sdecode_hexdb\sto\sdeserialize\sa\sdbtotxt\ndatabase\sdescription\sfor\suse\sin\sa\scorruption\stest. +D 2018-12-13T20:49:43.663 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 2f1b61ac62689ca4e9cbff9fdb359578ea37ddd9252355ec0b7b9700ad56fe90 @@ -517,7 +517,7 @@ F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6 F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 F src/tclsqlite.c e72862a271348d779672b45a730c33fd0c535e630ff927e8ce4a0c908d1d28c6 -F src/test1.c 5390e5afb31fed61f72d0be0cb1b322d198a6e03fc13ff245ae76d17b4dcf2e9 +F src/test1.c f78dcd39d5cad63d33306bb963354f976007968bc95c45bc9fdfaeb2e1ec0eae F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5 F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644 F src/test4.c 18ec393bb4d0ad1de729f0b94da7267270f3d8e6 @@ -773,6 +773,7 @@ F test/dataversion1.test 6e5e86ac681f0782e766ebcb56c019ae001522d114e0e111e5ebf68 F test/date.test 9b73bbeb1b82d9c1f44dec5cf563bf7da58d2373 F test/date2.test 74c234bece1b016e94dd4ef9c8cc7a199a8806c0e2291cab7ba64bace6350b10 F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e +F test/dbfuzz001.test 4c3952c8ecef5fa9e099f0fa461cea6b810e75da7647a41a5ad12cd5ac68accf F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee F test/dbfuzz2.c b8ed9b32a1f287505e55970e55203bedcb9170f137ecefa2254033c9faccdfba F test/dbpage.test 650234ba683b9d82b899c6c51439819787e7609f17a0cc40e0080a7b6443bc38 @@ -1786,7 +1787,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 67a87399b8ad8f1ce3052ee3159906f5c6df3d7b5691b3acac856bd2f1c82088 -R f859719ab1a18f7f99e4d481a8b5bfc0 +P 7ffa9858162774cba03a565a7b65135d9e8bfea726af1a29de6898f66c4b1261 +R 4be37804fa8bc77480b40b0d2da6c083 U drh -Z 99cc51545a333a02cea3f7ae2232a64b +Z a0d1cca2acec8898665f02aaf70dc018 diff --git a/manifest.uuid b/manifest.uuid index 9c3b0338d5..fe345672e7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7ffa9858162774cba03a565a7b65135d9e8bfea726af1a29de6898f66c4b1261 \ No newline at end of file +1f583c53f3b7318c69f6e235934d97ef9493278feeab0837217076d7d071c35b \ No newline at end of file diff --git a/src/test1.c b/src/test1.c index e2048cb38e..def9c7e2fd 100644 --- a/src/test1.c +++ b/src/test1.c @@ -7641,6 +7641,79 @@ static int SQLITE_TCLAPI test_mmap_warm( } } +/* +** Usage: decode_hexdb TEXT +** +** Example: db deserialize [decode_hexdb $output_of_dbtotxt] +** +** This routine returns a byte-array for an SQLite database file that +** is constructed from a text input which is the output of the "dbtotxt" +** utility. +*/ +static int SQLITE_TCLAPI test_decode_hexdb( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + const char *zIn = 0; + unsigned char *a = 0; + int n = 0; + int lineno = 0; + int i, iNext; + int iOffset = 0; + int j, k; + int rc; + unsigned char x[16]; + if( objc!=2 ){ + Tcl_WrongNumArgs(interp, 1, objv, "HEXDB"); + return TCL_ERROR; + } + zIn = Tcl_GetString(objv[1]); + for(i=0; zIn[i]; i=iNext){ + lineno++; + for(iNext=i; zIn[iNext] && zIn[iNext]!='\n'; iNext++){} + if( zIn[iNext]=='\n' ) iNext++; + while( zIn[i]==' ' || zIn[i]=='\t' ){ i++; } + if( a==0 ){ + int pgsz; + rc = sscanf(zIn+i, "| size %d pagesize %d", &n, &pgsz); + if( rc!=2 ) continue; + if( n<512 ){ + Tcl_AppendResult(interp, "bad 'size' field", (void*)0); + return TCL_ERROR; + } + a = malloc( n ); + if( a==0 ){ + Tcl_AppendResult(interp, "out of memory", (void*)0); + return TCL_ERROR; + } + memset(a, 0, n); + continue; + } + rc = sscanf(zIn+i, "| page %d offset %d", &j, &k); + if( rc==2 ){ + iOffset = k; + continue; + } + rc = sscanf(zIn+i,"| %d: %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx" + " %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx", + &j, &x[0], &x[1], &x[2], &x[3], &x[4], &x[5], &x[6], &x[7], + &x[8], &x[9], &x[10], &x[11], &x[12], &x[13], &x[14], &x[15]); + if( rc==17 ){ + k = iOffset+j; + if( k+16<=n ){ + memcpy(a+k, x, 16); + } + continue; + } + } + Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(a, n)); + free(a); + return TCL_OK; +} + + /* ** Register commands with the TCL interpreter. */ @@ -7920,6 +7993,7 @@ int Sqlitetest1_Init(Tcl_Interp *interp){ { "atomic_batch_write", test_atomic_batch_write, 0 }, { "sqlite3_mmap_warm", test_mmap_warm, 0 }, { "sqlite3_config_sorterref", test_config_sorterref, 0 }, + { "decode_hexdb", test_decode_hexdb, 0 }, }; static int bitmask_size = sizeof(Bitmask)*8; static int longdouble_size = sizeof(LONGDOUBLE_TYPE); diff --git a/test/dbfuzz001.test b/test/dbfuzz001.test new file mode 100644 index 0000000000..0a4894ffbc --- /dev/null +++ b/test/dbfuzz001.test @@ -0,0 +1,170 @@ +# 2012-12-13 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# Test cases for corrupt database files. + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +ifcapable !deserialize { + finish_test + return +} + +do_test dbfuzz001-100 { + sqlite3 db {} + db deserialize [decode_hexdb { + | size 5632 pagesize 512 filename c4.db + | page 1 offset 0 + | 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. + | 16: 02 00 01 01 00 40 20 20 00 00 00 02 00 00 00 0b .....@ ........ + | 32: 00 00 00 06 00 00 00 01 00 00 00 28 00 00 00 04 ...........(.... + | 48: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ................ + | 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 ................ + | 96: 00 2e 30 38 0d 00 00 00 06 01 06 00 01 da 01 b0 ..08............ + | 112: 01 56 01 86 01 2a 01 06 00 00 00 00 00 00 00 00 .V...*.......... + | 256: 00 00 00 00 00 00 22 07 06 17 11 11 01 31 74 61 ......"......1ta + | 272: 62 6c 65 74 34 74 34 07 43 52 45 41 54 45 20 54 blet4t4.CREATE T + | 288: 41 42 4c 45 20 74 34 28 78 29 2a 06 06 17 13 11 ABLE t4(x)*..... + | 304: 01 3f 69 6e 64 65 78 00 00 00 00 00 00 00 00 00 .?index......... + | 336: 20 74 33 28 78 29 2e 04 06 17 15 11 01 45 69 6e t3(x).......Ein + | 352: 64 65 78 74 32 63 64 74 32 05 43 52 45 41 54 45 dext2cdt2.CREATE + | 368: 20 49 4e 44 45 58 20 74 32 63 64 20 4f 4e 20 74 INDEX t2cd ON t + | 384: 32 28 63 2c 64 29 28 05 06 17 11 11 01 3d 74 61 2(c,d)(......=ta + | 400: 62 6c 65 74 33 74 33 04 43 52 45 41 54 45 20 54 blet3t3.CREATE T + | 416: 41 42 4c 45 20 74 33 28 63 2c 78 2c 65 2c 66 29 ABLE t3(c,x,e,f) + | 432: 28 02 06 17 11 11 01 3d 74 61 62 6c 65 74 32 74 (......=tablet2t + | 448: 32 03 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 2.CREATE TABLE t + | 464: 32 28 63 2c 64 2c 65 2c 66 29 24 01 06 17 11 11 2(c,d,e,f)$..... + | 480: 01 35 74 61 62 6c 65 74 31 74 31 02 43 52 45 41 .5tablet1t1.CREA + | 496: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 TE TABLE t1(a,b) + | page 2 offset 512 + | 0: 0d 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 ................ + | page 3 offset 1024 + | 0: 0d 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 ................ + | page 4 offset 1536 + | 0: 05 00 00 00 03 01 f1 00 00 00 00 0b 01 fb 01 f6 ................ + | 16: 01 f1 00 16 00 00 09 06 05 01 01 01 01 04 04 03 ................ + | 32: 03 07 05 05 01 01 09 09 02 02 19 04 05 17 17 17 ................ + | 48: 17 73 65 76 65 6e 65 69 67 68 74 65 69 67 68 74 .seveneighteight + | 64: 73 65 76 65 6e 25 03 05 07 07 07 07 40 14 00 00 seven%......@... + | 80: 00 00 00 00 40 18 00 00 00 00 00 00 40 18 00 00 ....@.......@... + | 96: 00 00 00 00 40 14 00 00 00 00 00 00 09 02 05 01 ....@........... + | 112: 01 01 01 03 04 04 03 07 01 05 09 01 01 09 02 02 ................ + | 352: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1a ................ + | 496: 00 00 00 00 0a 3e 00 00 00 09 21 00 00 00 08 06 .....>....!..... + | page 5 offset 2048 + | 0: 0a 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 ................ + | page 7 offset 3072 + | 0: 0d 00 00 00 08 01 c2 00 01 fb 01 f6 01 f1 01 ec ................ + | 16: 01 e0 01 d4 01 cb 01 c2 00 00 00 00 00 00 00 00 ................ + | 96: 00 00 00 00 13 00 00 00 00 00 00 00 00 00 00 00 ................ + | 224: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 ................ + | 288: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 ................ + | 448: 00 00 07 08 02 17 65 69 67 68 74 07 07 02 17 65 ......eight....e + | 464: 69 67 68 74 0a 06 02 07 40 18 00 00 00 00 00 00 ight....@....... + | 480: 0a 05 02 07 40 18 00 00 00 00 00 00 03 04 02 01 ....@........... + | 496: 04 03 03 02 01 04 03 02 02 01 02 03 01 02 01 02 ................ + | page 8 offset 3584 + | 0: 0d 00 21 00 01 00 16 00 00 16 00 16 00 16 00 16 ..!............. + | 16: 00 16 00 16 00 00 09 06 05 01 01 01 01 04 04 03 ................ + | 32: 03 00 00 00 5f 01 09 09 02 02 00 00 00 56 17 17 ...._........V.. + | 48: 17 73 65 76 65 6e 65 69 67 68 74 65 69 67 68 74 .seveneighteight + | 64: 73 65 76 65 6e 00 00 00 3b 07 07 07 40 14 00 00 seven...;...@... + | 80: 00 00 00 00 40 18 00 00 00 00 00 00 40 18 00 00 ....@.......@... + | 96: 00 00 00 00 40 14 00 00 00 00 00 00 00 00 00 14 ....@........... + | 112: 01 01 01 03 04 04 03 00 00 00 09 01 01 09 02 02 ................ + | 352: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1a ................ + | page 9 offset 4096 + | 0: 0d 00 00 00 1b 00 47 00 01 d9 01 be 01 af 01 a0 ......G......... + | 16: 01 91 01 82 01 73 01 64 01 55 01 46 01 37 01 28 .....s.d.U.F.7.( + | 32: 01 19 01 0a 00 fb 00 ec 00 dd 00 ce 00 bf 00 b0 ................ + | 48: 00 a1 00 92 00 83 00 74 00 65 00 56 00 47 00 00 .......t.e.V.G.. + | 64: 00 00 00 00 00 00 00 0d 21 00 00 48 01 54 00 01 ........!..H.T.. + | 80: f7 01 ec 01 c5 01 0d 20 00 00 48 01 54 00 01 f7 ....... ..H.T... + | 96: 01 ec 01 c5 01 0d 1f 00 00 48 01 54 00 01 f7 01 .........H.T.... + | 112: ec 01 c5 01 0d 1e 00 00 48 01 54 00 01 f7 01 ec ........H.T..... + | 128: 01 c5 01 0d 1d 00 00 48 01 54 00 01 f7 01 ec 01 .......H.T...... + | 144: c5 01 0d 1c 00 00 48 01 54 00 01 f7 01 ec 01 c5 ......H.T....... + | 160: 01 0d 1b 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 .....H.T........ + | 176: 0d 1a 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d ....H.T......... + | 192: 19 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d 18 ...H.T.......... + | 208: 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d 17 00 ..H.T........... + | 224: 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d 16 00 00 .H.T............ + | 240: 48 01 54 00 01 f7 01 ec 01 c5 01 0d 15 00 00 48 H.T............H + | 256: 01 54 00 01 f7 01 ec 01 c5 01 0d 14 00 00 48 01 .T............H. + | 272: 54 00 01 f7 01 ec 01 c5 01 0d 13 00 00 48 01 54 T............H.T + | 288: 00 01 f7 01 ec 01 c5 01 0d 12 00 00 48 01 54 00 ............H.T. + | 304: 01 f7 01 ec 01 c5 01 0d 11 00 00 48 01 54 00 01 ...........H.T.. + | 320: f7 01 ec 01 c5 01 0d 10 00 00 48 01 54 00 01 f7 ..........H.T... + | 336: 01 ec 01 c5 01 0d 0f 00 00 48 01 54 00 01 f7 01 .........H.T.... + | 352: ec 01 c5 01 0d 0e 00 00 48 01 54 00 01 f7 01 ec ........H.T..... + | 368: 01 c5 01 0d 0d 00 00 48 01 54 00 01 f7 01 ec 01 .......H.T...... + | 384: c5 01 0d 0c 00 00 48 01 54 00 01 f7 01 ec 01 c5 ......H.T....... + | 400: 01 0d 0b 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 .....H.T........ + | 416: 0d 0a 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d ....H.T......... + | 432: 09 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 19 08 ...H.T.......... + | 448: 05 17 17 17 17 65 69 67 68 74 65 69 67 68 74 73 .....eighteights + | 464: 65 76 65 6e 73 65 76 65 6e 25 07 05 07 07 07 07 evenseven%...... + | 480: 40 18 00 00 00 00 00 00 40 18 00 00 00 00 00 00 @.......@....... + | 496: 40 14 00 00 00 00 00 00 40 14 00 00 00 00 00 00 @.......@....... + | page 10 offset 4608 + | 0: 0d 00 00 00 1d 00 4d 00 01 f1 01 e2 01 d3 01 c4 ......M......... + | 16: 01 b5 01 a6 01 97 01 88 01 79 01 6a 01 5b 01 4c .........y.j.[.L + | 32: 01 3d 01 2e 01 1f 01 10 01 01 00 f2 00 e3 00 d4 .=.............. + | 48: 00 c5 00 b6 00 a7 00 98 00 89 00 7a 00 6b 00 5c ...........z.k.\ + | 64: 00 4d 00 00 00 00 00 00 00 00 00 00 00 0d 3e 00 .M............>. + | 80: 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d 3d 00 00 .H.T.........=.. + | 96: 48 01 54 00 01 f7 01 ec 01 c5 01 0d 3c 00 00 48 H.T.........<..H + | 112: 01 54 00 01 f7 01 ec 01 c5 01 0d 3b 00 00 48 01 .T.........;..H. + | 128: 54 00 01 f7 01 ec 01 c5 01 0d 3a 00 00 48 01 54 T.........:..H.T + | 144: 00 01 f7 01 ec 01 c5 01 0d 39 00 00 48 01 54 00 .........9..H.T. + | 160: 01 f7 01 ec 01 c5 01 0d 38 00 00 48 01 54 00 01 ........8..H.T.. + | 176: f7 01 ec 01 c5 01 0d 37 00 00 48 01 54 00 01 f7 .......7..H.T... + | 192: 01 ec 01 c5 01 0d 36 00 00 48 01 54 00 01 f7 01 ......6..H.T.... + | 208: ec 01 c5 01 0d 35 00 00 48 01 54 00 01 f7 01 ec .....5..H.T..... + | 224: 01 c5 01 0d 34 00 00 48 01 54 00 01 f7 01 ec 01 ....4..H.T...... + | 240: c5 01 0d 33 00 00 48 01 54 00 01 f7 01 ec 01 c5 ...3..H.T....... + | 256: 01 0d 32 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 ..2..H.T........ + | 272: 0d 31 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d .1..H.T......... + | 288: 30 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d 2f 0..H.T........./ + | 304: 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d 2e 00 ..H.T........... + | 320: 00 48 01 54 00 01 f7 01 ec 01 c5 01 0d 2d 00 00 .H.T.........-.. + | 336: 48 01 54 00 01 f7 01 ec 01 c5 01 0d 2c 00 00 48 H.T.........,..H + | 352: 01 54 00 01 f7 01 ec 01 c5 01 0d 2b 00 00 48 01 .T.........+..H. + | 368: 54 00 01 f7 01 ec 01 c5 01 0d 2a 00 00 48 01 54 T.........*..H.T + | 384: 00 01 f7 01 ec 01 c5 01 0d 29 00 00 48 01 54 00 .........)..H.T. + | 400: 01 f7 01 ec 01 c5 01 0d 28 00 00 48 01 54 00 01 ........(..H.T.. + | 416: f7 01 ec 01 c5 01 0d 27 00 00 48 01 54 00 01 f7 .......'..H.T... + | 432: 01 ec 01 c5 01 0d 26 00 00 48 01 54 00 01 f7 01 ......&..H.T.... + | 448: ec 01 c5 01 0d 25 00 00 48 01 54 00 01 f7 01 ec .....%..H.T..... + | 464: 01 c5 01 0d 24 00 00 48 01 54 00 01 f7 01 ec 01 ....$..H.T...... + | 480: c5 01 0d 23 00 00 48 01 54 00 01 f7 01 ec 01 c5 ...#..H.T....... + | 496: 01 0d 22 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 .."..H.T........ + | page 11 offset 5120 + | 0: 0d 00 00 00 0a 01 6a 00 01 f1 01 e2 01 d3 01 c4 ......j......... + | 16: 01 b5 01 a6 01 97 01 88 01 79 01 6a 00 00 00 00 .........y.j.... + | 352: 00 00 00 00 00 00 00 00 00 00 0d 48 00 00 48 01 ...........H..H. + | 368: 54 00 01 f7 01 ec 01 c5 01 0d 47 00 00 48 01 54 T.........G..H.T + | 384: 00 01 f7 01 ec 01 c5 01 0d 46 00 00 48 01 54 00 .........F..H.T. + | 400: 01 f7 01 ec 01 c5 01 0d 45 00 00 48 01 54 00 01 ........E..H.T.. + | 416: f7 01 ec 01 c5 01 0d 44 00 00 48 01 54 00 01 f7 .......D..H.T... + | 432: 01 ec 01 c5 01 0d 43 00 00 48 01 54 00 01 f7 01 ......C..H.T.... + | 448: ec 01 c5 01 0d 42 00 00 48 01 54 00 01 f7 01 ec .....B..H.T..... + | 464: 01 c5 01 0d 41 00 00 48 01 54 00 01 f7 01 ec 01 ....A..H.T...... + | 480: c5 01 0d 40 00 00 48 01 54 00 01 f7 01 ec 01 c5 ...@..H.T....... + | 496: 01 0d 3f 00 00 48 01 54 00 01 f7 01 ec 01 c5 01 ..?..H.T........ + | end c4.db + }] + db eval {PRAGMA integrity_check} +} {/Fragmentation of 384 bytes reported as 0 on page 8/} + +finish_test From 1641f11f4c365aa17e2415d1f8018e3b66df0628 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 21:05:45 +0000 Subject: [PATCH 35/49] Fix a problem in sqlite3BtreeDelete() in which deleting an entry from a corrupt database can leave a btree page with zero cells. FossilOrigin-Name: 682053d1e603c21b8085c39db618a39b23ec8d2c4d822fd19634db0e03038ea2 --- Makefile.in | 1 + Makefile.msc | 1 + manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/btree.c | 1 + test/dbfuzz001.test | 13 +++++++++++++ 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Makefile.in b/Makefile.in index 69371076fe..3d9a566505 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1190,6 +1190,7 @@ TESTFIXTURE_FLAGS += -DSQLITE_SERIES_CONSTRAINT_VERIFY=1 TESTFIXTURE_FLAGS += -DSQLITE_DEFAULT_PAGE_SIZE=1024 TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_STMTVTAB TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_DBPAGE_VTAB +TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_DESERIALIZE TESTFIXTURE_SRC0 = $(TESTSRC2) libsqlite3.la TESTFIXTURE_SRC1 = sqlite3.c diff --git a/Makefile.msc b/Makefile.msc index f5d47240f5..179215ecf4 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -2298,6 +2298,7 @@ TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_DEFAULT_PAGE_SIZE=1024 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB=1 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_JSON1=1 +TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_DESERIALIZE=1 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) $(TEST_CCONV_OPTS) TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2) diff --git a/manifest b/manifest index f2901a3880..d90f60545b 100644 --- a/manifest +++ b/manifest @@ -1,10 +1,10 @@ -C Add\sthe\s"decode_hexdb"\sTCL\scommand\sto\stestfixture.\s\sAdd\sthe\sdbfuzz001.test\nmodule\sto\sdemonstration\show\sto\suse\sdecode_hexdb\sto\sdeserialize\sa\sdbtotxt\ndatabase\sdescription\sfor\suse\sin\sa\scorruption\stest. -D 2018-12-13T20:49:43.663 +C Fix\sa\sproblem\sin\ssqlite3BtreeDelete()\sin\swhich\sdeleting\san\sentry\sfrom\sa\ncorrupt\sdatabase\scan\sleave\sa\sbtree\spage\swith\szero\scells. +D 2018-12-13T21:05:45.342 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea -F Makefile.in 2f1b61ac62689ca4e9cbff9fdb359578ea37ddd9252355ec0b7b9700ad56fe90 +F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 -F Makefile.msc 2ef13d6845b899eaaa6122c69b74175656a97e26666567af795f4cfe41b7a673 +F Makefile.msc 3c4c7e94419ff28cb68850188c9d153b343aed4c5ebed5965426232ed67ff9d9 F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee F VERSION 453e2f4529ca208196d5567db28d549d7151f79efd33f6e6cfe6e613e583a0be F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c 4377d0d9a0b969c30b2bc343a12140a53ba6ab0dbf34c1686f232e67d87a557b +F src/btree.c d4bf14ab64339017db65a17c70a3b3d5edf39e5ec5373921133407a56c3e50e5 F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -773,7 +773,7 @@ F test/dataversion1.test 6e5e86ac681f0782e766ebcb56c019ae001522d114e0e111e5ebf68 F test/date.test 9b73bbeb1b82d9c1f44dec5cf563bf7da58d2373 F test/date2.test 74c234bece1b016e94dd4ef9c8cc7a199a8806c0e2291cab7ba64bace6350b10 F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e -F test/dbfuzz001.test 4c3952c8ecef5fa9e099f0fa461cea6b810e75da7647a41a5ad12cd5ac68accf +F test/dbfuzz001.test 24d24dbdbf3deb8a61921ecb36ecebb51248047195e209a2909613114c950c84 F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee F test/dbfuzz2.c b8ed9b32a1f287505e55970e55203bedcb9170f137ecefa2254033c9faccdfba F test/dbpage.test 650234ba683b9d82b899c6c51439819787e7609f17a0cc40e0080a7b6443bc38 @@ -1787,7 +1787,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 7ffa9858162774cba03a565a7b65135d9e8bfea726af1a29de6898f66c4b1261 -R 4be37804fa8bc77480b40b0d2da6c083 +P 1f583c53f3b7318c69f6e235934d97ef9493278feeab0837217076d7d071c35b +R bdea9a4eb87ba8aa256dc24af3d20da1 U drh -Z a0d1cca2acec8898665f02aaf70dc018 +Z 2389e6a9c76519655c1cfe39d2b8ef15 diff --git a/manifest.uuid b/manifest.uuid index fe345672e7..d63fa51aed 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1f583c53f3b7318c69f6e235934d97ef9493278feeab0837217076d7d071c35b \ No newline at end of file +682053d1e603c21b8085c39db618a39b23ec8d2c4d822fd19634db0e03038ea2 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 9046a72d32..d8b03a0ec6 100644 --- a/src/btree.c +++ b/src/btree.c @@ -8623,6 +8623,7 @@ int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ if( bPreserve ){ if( !pPage->leaf || (pPage->nFree+cellSizePtr(pPage,pCell)+2)>(int)(pBt->usableSize*2/3) + || pPage->nCell==1 /* See dbfuzz001.test for a test case */ ){ /* A b-tree rebalance will be required after deleting this entry. ** Save the cursor key. */ diff --git a/test/dbfuzz001.test b/test/dbfuzz001.test index 0a4894ffbc..bb9ab7e73c 100644 --- a/test/dbfuzz001.test +++ b/test/dbfuzz001.test @@ -19,6 +19,9 @@ ifcapable !deserialize { return } +# In the following database file, there is 384 bytes of free space +# on page 8 that does not appear on the freeblock list. +# do_test dbfuzz001-100 { sqlite3 db {} db deserialize [decode_hexdb { @@ -167,4 +170,14 @@ do_test dbfuzz001-100 { db eval {PRAGMA integrity_check} } {/Fragmentation of 384 bytes reported as 0 on page 8/} +# The DELETE query below deletes the very last cell from page 8. +# Prior to a certain fix to sqlite3BtreeDelete() and because of the +# corruption to the freeblock list on page 8, this would fail to +# cause a rebalance operation, which would leave the btree in a weird +# state that would lead to segfaults and or assertion faults. +# +do_execsql_test dbfuzz001-110 { + DELETE FROM t3 WHERE x IS NOT NULL AND +rowid=6; +} {} + finish_test From 6301c43f236543ecb174e2639a0201bb29580fbe Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 21:52:18 +0000 Subject: [PATCH 36/49] dbfuzz2 found a NEVER() that is sometimes true. FossilOrigin-Name: 1201615cbbd3070158ea5fab3d2c8c95f41b25d6da096a44cb9257a7b7405efc --- manifest | 15 ++++---- manifest.uuid | 2 +- src/btree.c | 3 +- test/dbfuzz001.test | 89 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 34ddbff50b..fde77760b4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sextra\stests\sfor\sdatabase\scorruption\sinside\sthe\sdefragmentPage()\sroutine,\nas\sdbfuzz2\shas\sfound\sways\sfor\scorruption\sto\sleak\sinto\sthat\spoint.\s\sAdd\stest\ncases\sin\sfuzzdata7.db. -D 2018-12-13T21:11:22.437 +C dbfuzz2\sfound\sa\sNEVER()\sthat\sis\ssometimes\strue. +D 2018-12-13T21:52:18.133 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c e3e08171f90c6843d2a26d582d946a754093435acd48155b8cd339b06cc8cc1b +F src/btree.c 20fdad94111d772de675c6ab426ef45f6a54f2489032c54d9ff536be7434f16d F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -773,7 +773,7 @@ F test/dataversion1.test 6e5e86ac681f0782e766ebcb56c019ae001522d114e0e111e5ebf68 F test/date.test 9b73bbeb1b82d9c1f44dec5cf563bf7da58d2373 F test/date2.test 74c234bece1b016e94dd4ef9c8cc7a199a8806c0e2291cab7ba64bace6350b10 F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e -F test/dbfuzz001.test 24d24dbdbf3deb8a61921ecb36ecebb51248047195e209a2909613114c950c84 +F test/dbfuzz001.test 28f24ed01e9322f4c7aeba4c228f57e9e8ab6a96b474465e872425205a31b1b2 F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee F test/dbfuzz2.c b8ed9b32a1f287505e55970e55203bedcb9170f137ecefa2254033c9faccdfba F test/dbpage.test 650234ba683b9d82b899c6c51439819787e7609f17a0cc40e0080a7b6443bc38 @@ -1787,8 +1787,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 682053d1e603c21b8085c39db618a39b23ec8d2c4d822fd19634db0e03038ea2 b386fce9a23e628dce7362dcca2904b8d0af6da58a6fe6eb7f12f058a8363e49 -R a1122995324223304196c0f63a35c59e -T +closed b386fce9a23e628dce7362dcca2904b8d0af6da58a6fe6eb7f12f058a8363e49 +P 997b65117f8c12dba5fb85434fde9765cdb0d2a49cc3e31979abba3e21350086 +R af29ae4514bf6c6037181584412356da U drh -Z b4a67e64bc03ae62ccd56c8eb96ba51d +Z 9494dddc6a7ba7c94e12f1de4eb883b6 diff --git a/manifest.uuid b/manifest.uuid index f411d662da..230bcc072d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -997b65117f8c12dba5fb85434fde9765cdb0d2a49cc3e31979abba3e21350086 \ No newline at end of file +1201615cbbd3070158ea5fab3d2c8c95f41b25d6da096a44cb9257a7b7405efc \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 3409f413b0..67a64a91f1 100644 --- a/src/btree.c +++ b/src/btree.c @@ -7039,8 +7039,7 @@ static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){ assert( sqlite3PagerIswriteable(pParent->pDbPage) ); assert( pPage->nOverflow==1 ); - /* This error condition is now caught prior to reaching this function */ - if( NEVER(pPage->nCell==0) ) return SQLITE_CORRUPT_BKPT; + if( pPage->nCell==0 ) return SQLITE_CORRUPT_BKPT; /* dbfuzz001.test */ /* Allocate a new page. This page will become the right-sibling of ** pPage. Make the parent page writable, so that the new divider cell diff --git a/test/dbfuzz001.test b/test/dbfuzz001.test index bb9ab7e73c..75117f7291 100644 --- a/test/dbfuzz001.test +++ b/test/dbfuzz001.test @@ -18,6 +18,7 @@ ifcapable !deserialize { finish_test return } +database_may_be_corrupt # In the following database file, there is 384 bytes of free space # on page 8 that does not appear on the freeblock list. @@ -180,4 +181,92 @@ do_execsql_test dbfuzz001-110 { DELETE FROM t3 WHERE x IS NOT NULL AND +rowid=6; } {} +# This is a dbfuzz2-generate test case that can cause a page with +# pPage->nCell==0 to enter the balancer. +# +do_test dbfuzz001-200 { + db deserialize [decode_hexdb { + | size 3076 pagesize 512 filename c03.db + | page 1 offset 0 + | 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. + | 16: 02 00 01 01 00 40 20 20 00 00 00 0c 00 00 00 07 .....@ ........ + | 32: 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 04 ................ + | 48: 00 00 00 00 00 00 00 03 e8 00 00 01 00 00 00 00 ................ + | 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0c ................ + | 96: 00 2e 2c 50 0d 00 00 00 06 01 06 00 01 da 01 b0 ..,P............ + | 112: 01 56 01 86 01 2a 01 06 00 00 00 00 00 00 00 00 .V...*.......... + | 128: 00 00 00 00 00 00 00 00 ef 00 00 00 00 00 00 00 ................ + | 192: 00 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + | 224: 00 00 00 00 00 00 00 00 00 00 00 00 00 ff e9 00 ................ + | 256: 00 00 00 00 00 00 22 07 06 17 11 11 01 31 74 61 ......"......1ta + | 272: 62 6c 65 74 34 74 34 07 43 52 45 41 54 45 20 54 blet4t4.CREATE T + | 288: 41 42 4c 45 20 74 34 28 78 29 2a 06 06 17 13 11 ABLE t4(x)*..... + | 304: 01 3f 69 6e 64 65 78 74 33 78 74 33 06 43 52 45 .?indext3xt3.CRE + | 320: 41 54 45 20 49 4e 44 45 58 20 74 33 64 20 4f 4e ATE INDEX t3d ON + | 336: 20 74 33 28 78 29 2e 04 06 17 15 11 01 45 69 6e t3(x).......Ein + | 352: 64 65 78 74 32 63 64 74 32 05 43 52 45 41 54 45 dext2cdt2.CREATE + | 368: 20 49 4e 44 45 58 20 74 32 63 64 20 4f 4e 20 74 INDEX t2cd ON t + | 384: 32 28 63 2c 64 29 28 05 06 17 11 11 01 3d 74 61 2(c,d)(......=ta + | 400: 62 6c 65 74 33 74 33 04 43 52 45 41 54 45 20 54 blet3t3.CREATE T + | 416: 41 42 4c 45 20 74 33 28 63 2c 78 2c 65 2c 66 29 ABLE t3(c,x,e,f) + | 432: 28 02 06 17 11 11 01 3d 74 61 62 6c 65 74 32 74 (......=tablet2t + | 448: 32 03 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 2.CREATE TABLE t + | 464: 32 28 63 2c 64 2c 65 2c 66 29 24 01 06 17 11 11 2(c,d,e,f)$..... + | 480: 01 35 74 61 62 6c 65 74 31 74 31 02 43 52 45 41 .5tablet1t1.CREA + | 496: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 TE TABLE t1(a,b) + | page 2 offset 512 + | 0: 0d 00 00 00 04 01 cf 00 01 fa 01 f3 01 de 01 cf ................ + | 176: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + | 256: 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + | 368: 00 00 00 00 00 00 00 00 00 00 00 00 1e 00 00 00 ................ + | 416: 00 00 00 1b 00 00 00 00 04 00 00 00 00 00 00 00 ................ + | 448: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0d ................ + | 464: 04 03 17 17 73 65 76 65 6e 65 69 67 68 74 13 03 ....seveneight.. + | 480: 03 07 07 40 14 00 00 00 00 00 00 40 18 00 00 00 ...@.......@.... + | 496: 00 00 00 05 02 03 01 01 03 04 04 01 03 09 01 02 ................ + | page 3 offset 1024 + | 0: 0d 00 00 00 08 01 54 00 01 f7 01 ec 01 c5 01 aa ......T......... + | 16: 01 a1 01 96 01 6f 01 54 00 00 00 00 00 00 00 00 .....o.T........ + | 32: 00 00 00 00 00 00 00 03 e8 00 00 00 00 00 00 00 ................ + | 336: 00 00 00 00 19 08 05 16 17 17 17 65 69 67 68 74 ...........eight + | 352: 65 69 67 68 74 73 65 76 65 6e 73 65 76 ff ff ff eightsevensev... + | 368: 0e 05 07 07 07 07 40 18 00 00 00 00 00 00 40 18 ......@.......@. + | 384: 00 00 00 00 00 00 40 14 00 00 00 00 00 00 40 14 ......@.......@. + | 400: 00 00 00 00 00 00 09 06 05 01 01 01 01 04 04 03 ................ + | 416: 03 07 05 05 01 01 09 09 02 02 19 04 05 17 17 17 ................ + | 432: 17 73 65 6f 65 6e 65 69 67 68 74 65 69 67 68 74 .seoeneighteight + | 448: 73 65 76 65 6e 25 03 05 07 07 07 07 40 14 00 00 seven%......@... + | 464: 00 00 00 00 40 18 00 00 00 00 00 00 40 18 00 00 ....@.......@... + | 480: 00 00 00 00 40 14 00 00 00 00 00 00 09 02 05 01 ....@........... + | 496: 01 01 01 03 04 04 03 07 01 05 09 01 01 09 02 02 ................ + | page 4 offset 1536 + | 0: 0d 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 ................ + | 160: 00 00 00 ea 00 00 00 00 00 00 00 00 00 00 00 00 ................ + | 336: 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 ............ ... + | page 5 offset 2048 + | 0: 0a 00 00 00 08 01 96 00 01 fa 01 c4 01 f2 01 bc ................ + | 16: 01 dc 01 a6 01 96 01 cc 00 00 00 00 00 00 00 00 ................ + | 48: 00 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 ................ + | 288: 00 00 00 00 00 00 00 00 00 64 00 00 00 2b 00 00 .........d...+.. + | 400: 00 00 00 00 00 00 0f 04 17 17 01 65 69 67 68 74 ...........eight + | 416: 65 69 6f 68 74 08 15 04 07 07 01 40 18 00 00 00 eioht......@.... + | 432: 00 00 00 40 18 00 00 00 00 00 00 07 07 04 01 01 ...@............ + | 448: 01 04 04 06 07 04 01 01 01 02 02 05 0f 04 17 17 ................ + | 464: 01 73 65 76 65 6e 65 69 67 68 74 04 15 04 07 07 .seveneight..... + | 480: 01 40 14 00 00 00 00 00 00 40 18 00 00 00 00 00 .@.......@...... + | 496: 00 03 07 04 01 01 01 03 04 02 05 04 09 01 09 02 ................ + | page 6 offset 2560 + | 0: 0a 00 00 00 00 02 00 00 00 00 00 00 00 0d 00 00 ................ + | 16: 00 08 01 c2 00 01 fb 01 f6 01 f1 01 ec 01 e0 01 ................ + | 32: d4 01 cb 01 c2 00 00 00 00 00 00 00 00 00 00 00 ................ + | 160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 ................ + | 448: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 ................ + | 464: 08 02 17 65 69 67 68 74 07 07 02 17 65 69 67 68 ...eight....eigh + | 480: 74 0a 06 02 07 40 18 00 00 00 00 00 00 0a 05 02 t....@.......... + | 496: 07 40 18 00 04 02 01 04 03 03 02 01 04 03 02 02 .@.............. + | end x/c03.db + }] + catchsql {INSERT INTO t3 SELECT * FROM t2;} +} {1 {database disk image is malformed}} + finish_test From f354e77f3d222abed1b90359e78de3d0822d4118 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Dec 2018 22:58:52 +0000 Subject: [PATCH 37/49] Fix the dbtotxt decoder in the CLI so that it ignores excess bytes. FossilOrigin-Name: 18740bd448887d618fafee0b5a7c004aa2f2632244f7d29e2428772baa36b828 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c.in | 6 ++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index fde77760b4..1e79d7e3d3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C dbfuzz2\sfound\sa\sNEVER()\sthat\sis\ssometimes\strue. -D 2018-12-13T21:52:18.133 +C Fix\sthe\sdbtotxt\sdecoder\sin\sthe\sCLI\sso\sthat\sit\signores\sexcess\sbytes. +D 2018-12-13T22:58:52.532 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -508,7 +508,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c abd65c518c198400193c6319a70c0d722fa30a35be89dc898917ff6489edf017 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 -F src/shell.c.in a9b26ab3925e179f4f1a3a910ffe634195bc6becab8aa3e02bbb0dc652d30543 +F src/shell.c.in e1790e0d3607fca70ce61e5a0c83885d82f33ebe362edfb1cb66342d12c182d0 F src/sqlite.h.in 92fd656c26cc76de9fa8c5bf1a473066e3b5c6da345a447679f0f44de1aa4edd F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 @@ -1787,7 +1787,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 997b65117f8c12dba5fb85434fde9765cdb0d2a49cc3e31979abba3e21350086 -R af29ae4514bf6c6037181584412356da +P 1201615cbbd3070158ea5fab3d2c8c95f41b25d6da096a44cb9257a7b7405efc +R d3f6d72bb77728c78f155f9adb19ef12 U drh -Z 9494dddc6a7ba7c94e12f1de4eb883b6 +Z 66d296af7cf5703e86d937cc4fe79584 diff --git a/manifest.uuid b/manifest.uuid index 230bcc072d..cd91c126d4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1201615cbbd3070158ea5fab3d2c8c95f41b25d6da096a44cb9257a7b7405efc \ No newline at end of file +18740bd448887d618fafee0b5a7c004aa2f2632244f7d29e2428772baa36b828 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 1c06c67566..6bb8ee7fdc 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -3786,11 +3786,9 @@ static unsigned char *readHexDb(ShellState *p, int *pnData){ &x[8], &x[9], &x[10], &x[11], &x[12], &x[13], &x[14], &x[15]); if( rc==17 ){ k = iOffset+j; - if( k+16>n ){ - utf8_printf(stderr, "continue exceeds file size\n"); - goto readHexDb_error; + if( k+16<=n ){ + memcpy(a+k, x, 16); } - memcpy(a+k, x, 16); } } *pnData = n; From e45985b5951c8afc544361157c819717641df7ee Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 14 Dec 2018 02:29:56 +0000 Subject: [PATCH 38/49] Fix a bug in the custom in-memory VFS used by fuzzcheck. This bug masks other bugs that should have caused some existing fuzzdata7.db entries to fail, and so this fix is initially on a branch until those other bugs can be repaired. FossilOrigin-Name: e0994e99955cf11f23dba029b5ed7f150f467887558848d5f03510e2fb5855f9 --- manifest | 15 +++++++++------ manifest.uuid | 2 +- test/fuzzcheck.c | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 1e79d7e3d3..7511c4d9cb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sdbtotxt\sdecoder\sin\sthe\sCLI\sso\sthat\sit\signores\sexcess\sbytes. -D 2018-12-13T22:58:52.532 +C Fix\sa\sbug\sin\sthe\scustom\sin-memory\sVFS\sused\sby\sfuzzcheck.\s\sThis\sbug\smasks\nother\sbugs\sthat\sshould\shave\scaused\ssome\sexisting\sfuzzdata7.db\sentries\sto\nfail,\sand\sso\sthis\sfix\sis\sinitially\son\sa\sbranch\suntil\sthose\sother\sbugs\scan\nbe\srepaired. +D 2018-12-14T02:29:56.907 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -974,7 +974,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 -F test/fuzzcheck.c fda41c0e4e667fae96b002410bb19cece7a33314264ed6bbc6d012909ee9fd58 +F test/fuzzcheck.c 6edb2a0b6c8113cdac10f8e35b891be1a1b08ebacb1c2e2f93876d4d056e8e15 F test/fuzzdata1.db 7ee3227bad0e7ccdeb08a9e6822916777073c664 F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -1787,7 +1787,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 1201615cbbd3070158ea5fab3d2c8c95f41b25d6da096a44cb9257a7b7405efc -R d3f6d72bb77728c78f155f9adb19ef12 +P 18740bd448887d618fafee0b5a7c004aa2f2632244f7d29e2428772baa36b828 +R 4187c96fc309b3296053defbfad74e53 +T *branch * fuzzcheck-fix +T *sym-fuzzcheck-fix * +T -sym-trunk * U drh -Z 66d296af7cf5703e86d937cc4fe79584 +Z f01ab5efca756d35503e75880f18321c diff --git a/manifest.uuid b/manifest.uuid index cd91c126d4..4c5ed9e53b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -18740bd448887d618fafee0b5a7c004aa2f2632244f7d29e2428772baa36b828 \ No newline at end of file +e0994e99955cf11f23dba029b5ed7f150f467887558848d5f03510e2fb5855f9 \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index 005f59b3d8..0db4167445 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -447,7 +447,7 @@ static int inmemRead( if( iOfst+iAmt>pVFile->sz ){ memset(pData, 0, iAmt); iAmt = (int)(pVFile->sz - iOfst); - memcpy(pData, pVFile->a, iAmt); + memcpy(pData, pVFile->a + iOfst, iAmt); return SQLITE_IOERR_SHORT_READ; } memcpy(pData, pVFile->a + iOfst, iAmt); From 203b1ea0f5d6bb7b8b1c68bcb7e4563a233df872 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 14 Dec 2018 03:14:18 +0000 Subject: [PATCH 39/49] Detect when an attempt is made to write to a pointer map page that is also being used as a btree page and report corruption. FossilOrigin-Name: 3036fd71ac7063359b04a0ed54a6c63a380eb7ff75cd29ed27486d4259066aee --- manifest | 15 ++++++--------- manifest.uuid | 2 +- src/btree.c | 7 +++++++ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 7511c4d9cb..197727a898 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sbug\sin\sthe\scustom\sin-memory\sVFS\sused\sby\sfuzzcheck.\s\sThis\sbug\smasks\nother\sbugs\sthat\sshould\shave\scaused\ssome\sexisting\sfuzzdata7.db\sentries\sto\nfail,\sand\sso\sthis\sfix\sis\sinitially\son\sa\sbranch\suntil\sthose\sother\sbugs\scan\nbe\srepaired. -D 2018-12-14T02:29:56.907 +C Detect\swhen\san\sattempt\sis\smade\sto\swrite\sto\sa\spointer\smap\spage\sthat\sis\salso\nbeing\sused\sas\sa\sbtree\spage\sand\sreport\scorruption. +D 2018-12-14T03:14:18.024 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c 20fdad94111d772de675c6ab426ef45f6a54f2489032c54d9ff536be7434f16d +F src/btree.c 14b4b17b75af36e0431df2676205296bc234a634cf18798ad81f768b455b9e93 F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -1787,10 +1787,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 18740bd448887d618fafee0b5a7c004aa2f2632244f7d29e2428772baa36b828 -R 4187c96fc309b3296053defbfad74e53 -T *branch * fuzzcheck-fix -T *sym-fuzzcheck-fix * -T -sym-trunk * +P e0994e99955cf11f23dba029b5ed7f150f467887558848d5f03510e2fb5855f9 +R 7367b1481f35f13ad669721d0de5a468 U drh -Z f01ab5efca756d35503e75880f18321c +Z 152c6d103923350304ee36a88dc9ee39 diff --git a/manifest.uuid b/manifest.uuid index 4c5ed9e53b..a1898b4d0e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e0994e99955cf11f23dba029b5ed7f150f467887558848d5f03510e2fb5855f9 \ No newline at end of file +3036fd71ac7063359b04a0ed54a6c63a380eb7ff75cd29ed27486d4259066aee \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 67a64a91f1..52b816fbe3 100644 --- a/src/btree.c +++ b/src/btree.c @@ -992,6 +992,13 @@ static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){ *pRC = rc; return; } + if( ((char*)sqlite3PagerGetExtra(pDbPage))[0]!=0 ){ + /* The first byte of the extra data is the MemPage.isInit byte. + ** If that byte is set, it means this page is also being used + ** as a btree page. */ + *pRC = SQLITE_CORRUPT_BKPT; + goto ptrmap_exit; + } offset = PTRMAP_PTROFFSET(iPtrmap, key); if( offset<0 ){ *pRC = SQLITE_CORRUPT_BKPT; From 7525b87b6c579dce72c34029863c9b4ede832a83 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 14 Dec 2018 08:40:11 +0000 Subject: [PATCH 40/49] Posible fix for [d96eba87]. FossilOrigin-Name: 89a25abfcd069aebdf817890e5c27f46de3000fb858ae01029e4528f9d677567 --- manifest | 20 +++++++++++--------- manifest.uuid | 2 +- src/whereexpr.c | 6 +++++- test/indexexpr2.test | 19 +++++++++++++++++++ 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index ccc99ce8fc..ee2b08e20f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sbug\sin\sfuzzcheck\sthat\scause\sit\sto\soverlook\sa\spointer-map\sbug\sthat\swas\ntrigger\sby\sthe\sfuzzcheck\stest\sdata,\sand\salso\sfix\sthe\spointer-map\sbug. -D 2018-12-14T03:16:17.943 +C Posible\sfix\sfor\s[d96eba87]. +D 2018-12-14T08:40:11.676 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -595,7 +595,7 @@ F src/walker.c fb94aadc9099ff9c6506d0a8b88d51266005bcaa265403f3d7caf732a562eb66 F src/where.c 3818e8a736a05d2cb194e64399af707e367fbcc5c251d785804d02eaf121288e F src/whereInt.h f125f29fca80890768e0b2caa14f95db74b2dacd3a122a168f97aa7b64d6968f F src/wherecode.c c45f03aefc2266b990df0fc4d7acc4e27f56f881f4fc0fc355b7cbc4d7189da5 -F src/whereexpr.c 491f0894ad9903750cdecb7894437a0cabdffdd88f574d2b1c9ac85d14fe4b9c +F src/whereexpr.c b87a823bfd3c6998ba8ae0797f3f0dc8d8feb779ed914d31b324a0181e13deb5 F src/window.c ea81ecd031ed2cbc14b7db6fd7f4bee2471b894feae5fea0547b15b1e2dd8fb2 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd @@ -1023,7 +1023,7 @@ F test/index8.test bc2e3db70e8e62459aaa1bd7e4a9b39664f8f9d7 F test/index9.test 0aa3e509dddf81f93380396e40e9bb386904c1054924ba8fa9bcdfe85a8e7721 F test/indexedby.test a52c8c6abfae4fbfb51d99440de4ca1840dbacc606b05e29328a2a8ba7cd914e F test/indexexpr1.test 635261197bcdc19b9b2c59bbfa7227d525c00e9587faddb2d293c44d287ce60e -F test/indexexpr2.test fc994dcd4b3da932d4add8e65ed7ca08166d541e00a46874cfacd98dfb93a31b +F test/indexexpr2.test 8dd1f8f936cc4d246af605366886bbd251848b411378eb60887361d5302d9f54 F test/indexfault.test 31d4ab9a7d2f6e9616933eb079722362a883eb1d F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7 F test/insert.test 5604b1ff5675cc84c34a5b315792b958f48c32edccc0dafcc81d3b776270b70a @@ -1787,8 +1787,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 18740bd448887d618fafee0b5a7c004aa2f2632244f7d29e2428772baa36b828 3036fd71ac7063359b04a0ed54a6c63a380eb7ff75cd29ed27486d4259066aee -R 7367b1481f35f13ad669721d0de5a468 -T +closed 3036fd71ac7063359b04a0ed54a6c63a380eb7ff75cd29ed27486d4259066aee -U drh -Z 3dec21dea4844642e6338ca29ec5fe6a +P cc42dd15100db28a9796254f69a4e367ea5eae29f546be055017cf3e12aa66ba +R 6e4a89239ac2714d2f3e8e3c0f340ed6 +T *branch * tkt-d96eba87 +T *sym-tkt-d96eba87 * +T -sym-trunk * +U dan +Z a14cc8d4d51fec90b6ae7d1a1ef2aa2b diff --git a/manifest.uuid b/manifest.uuid index 60b5dc7f91..029f87dcc5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cc42dd15100db28a9796254f69a4e367ea5eae29f546be055017cf3e12aa66ba \ No newline at end of file +89a25abfcd069aebdf817890e5c27f46de3000fb858ae01029e4528f9d677567 \ No newline at end of file diff --git a/src/whereexpr.c b/src/whereexpr.c index dbb7f0d08e..993c1e2862 100644 --- a/src/whereexpr.c +++ b/src/whereexpr.c @@ -778,6 +778,7 @@ static void exprAnalyzeOrTerm( */ for(j=0; j<2 && !okToChngToIN; j++){ pOrTerm = pOrWc->a; + Expr *pLeft = 0; for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){ assert( pOrTerm->eOperator & WO_EQ ); pOrTerm->wtFlags &= ~TERM_OR_OK; @@ -800,6 +801,7 @@ static void exprAnalyzeOrTerm( } iColumn = pOrTerm->u.leftColumn; iCursor = pOrTerm->leftCursor; + pLeft = pOrTerm->pExpr->pLeft; break; } if( i<0 ){ @@ -819,7 +821,9 @@ static void exprAnalyzeOrTerm( assert( pOrTerm->eOperator & WO_EQ ); if( pOrTerm->leftCursor!=iCursor ){ pOrTerm->wtFlags &= ~TERM_OR_OK; - }else if( pOrTerm->u.leftColumn!=iColumn ){ + }else if( pOrTerm->u.leftColumn!=iColumn || (iColumn==XN_EXPR + && sqlite3ExprCompare(pParse, pOrTerm->pExpr->pLeft, pLeft, -1) + )){ okToChngToIN = 0; }else{ int affLeft, affRight; diff --git a/test/indexexpr2.test b/test/indexexpr2.test index 79a6456e9a..368237f23e 100644 --- a/test/indexexpr2.test +++ b/test/indexexpr2.test @@ -231,5 +231,24 @@ ifcapable vtab { } {t2 t2abc t2cd t2def} } +#------------------------------------------------------------------------- +# Test that ticket [d96eba87] has been fixed. +# +do_execsql_test 5.0 { + CREATE TABLE t5(a INTEGER, b INTEGER); + INSERT INTO t5 VALUES(2, 4), (3, 9); +} +do_execsql_test 5.1 { + SELECT * FROM t5 WHERE abs(a)=2 or abs(b)=9; +} {2 4 3 9} +do_execsql_test 5.2 { + CREATE INDEX t5a ON t5( abs(a) ); + CREATE INDEX t5b ON t5( abs(b) ); +} +do_execsql_test 5.4 { + SELECT * FROM t5 WHERE abs(a)=2 or abs(b)=9; +} {2 4 3 9} + + finish_test From fffaf2301346190479d9febd4b563cf117bd47cb Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 14 Dec 2018 13:18:35 +0000 Subject: [PATCH 41/49] When saving the position of a cursor at the b-tree layer, allocate a few extra bytes at the end of the buffer used to save the key. Otherwise, if the key is corrupt, the code that restores the cursor position may overread the buffer by a little. FossilOrigin-Name: 160b1e31c0f27257c06c2987af9ec3a64abfacb2150325b72e8ccd3d217b5baa --- manifest | 17 +++++----- manifest.uuid | 2 +- src/btree.c | 9 +++-- test/dbfuzz001.test | 83 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index 3f879cecf6..3e1bf9a2fe 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\swith\sbytecode\sgeneration\swhen\sa\squery\sinvolves\stwo\sor\smore\nindexes\son\sexpressions\sconnected\sby\sOR.\nTicket\s[d96eba87698a428c1ddd0790ea04] -D 2018-12-14T11:16:52.652 +C When\ssaving\sthe\sposition\sof\sa\scursor\sat\sthe\sb-tree\slayer,\sallocate\sa\sfew\sextra\nbytes\sat\sthe\send\sof\sthe\sbuffer\sused\sto\ssave\sthe\skey.\sOtherwise,\sif\sthe\skey\sis\ncorrupt,\sthe\scode\sthat\srestores\sthe\scursor\sposition\smay\soverread\sthe\sbuffer\sby\sa\nlittle. +D 2018-12-14T13:18:35.216 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c 14b4b17b75af36e0431df2676205296bc234a634cf18798ad81f768b455b9e93 +F src/btree.c 89e9abe6a3f7461c8c5d44314b261e1dd29a31557d1dd91c72378bc0976fc1f6 F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -773,7 +773,7 @@ F test/dataversion1.test 6e5e86ac681f0782e766ebcb56c019ae001522d114e0e111e5ebf68 F test/date.test 9b73bbeb1b82d9c1f44dec5cf563bf7da58d2373 F test/date2.test 74c234bece1b016e94dd4ef9c8cc7a199a8806c0e2291cab7ba64bace6350b10 F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e -F test/dbfuzz001.test 28f24ed01e9322f4c7aeba4c228f57e9e8ab6a96b474465e872425205a31b1b2 +F test/dbfuzz001.test 96b52856ffce5442e404847de33487db5ce49aa27778497a42328d5acf6859d7 F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee F test/dbfuzz2.c b8ed9b32a1f287505e55970e55203bedcb9170f137ecefa2254033c9faccdfba F test/dbpage.test 650234ba683b9d82b899c6c51439819787e7609f17a0cc40e0080a7b6443bc38 @@ -1787,8 +1787,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 cc42dd15100db28a9796254f69a4e367ea5eae29f546be055017cf3e12aa66ba 89a25abfcd069aebdf817890e5c27f46de3000fb858ae01029e4528f9d677567 -R 6e4a89239ac2714d2f3e8e3c0f340ed6 -T +closed 89a25abfcd069aebdf817890e5c27f46de3000fb858ae01029e4528f9d677567 -U drh -Z 4c06ed13d4147ae87910536f3d08fc7f +P 7e4ed8b5c2047b69bbb037497111e56e465a4d9f8afca3b337f9ac744471dc4a +R ba1eb44fdcbd375391cb2e9633b3bcc5 +U dan +Z 7755266d0736215443f101017f7858b1 diff --git a/manifest.uuid b/manifest.uuid index b4892511f2..14967ae5e6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7e4ed8b5c2047b69bbb037497111e56e465a4d9f8afca3b337f9ac744471dc4a \ No newline at end of file +160b1e31c0f27257c06c2987af9ec3a64abfacb2150325b72e8ccd3d217b5baa \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 52b816fbe3..55518bd8a2 100644 --- a/src/btree.c +++ b/src/btree.c @@ -660,10 +660,15 @@ static int saveCursorKey(BtCursor *pCur){ /* Only the rowid is required for a table btree */ pCur->nKey = sqlite3BtreeIntegerKey(pCur); }else{ - /* For an index btree, save the complete key content */ + /* For an index btree, save the complete key content. It is possible + ** that the current key is corrupt. In that case, it is possible that + ** the sqlite3VdbeRecordUnpack() function may overread the buffer by + ** up to the size of 1 varint plus 1 8-byte value when the cursor + ** position is restored. Hence the 17 bytes of padding allocated + ** below. */ void *pKey; pCur->nKey = sqlite3BtreePayloadSize(pCur); - pKey = sqlite3Malloc( pCur->nKey ); + pKey = sqlite3Malloc( pCur->nKey + 9 + 8 ); if( pKey ){ rc = sqlite3BtreePayload(pCur, 0, (int)pCur->nKey, pKey); if( rc==SQLITE_OK ){ diff --git a/test/dbfuzz001.test b/test/dbfuzz001.test index 75117f7291..0c19b06180 100644 --- a/test/dbfuzz001.test +++ b/test/dbfuzz001.test @@ -269,4 +269,87 @@ do_test dbfuzz001-200 { catchsql {INSERT INTO t3 SELECT * FROM t2;} } {1 {database disk image is malformed}} + +do_test dbfuzz001-110 { + sqlite3 db {} + db deserialize [decode_hexdb { +| size 3584 pagesize 512 filename x/c02.db +| page 1 offset 0 +| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. +| 16: 02 00 01 01 00 40 20 20 00 00 00 0c 00 00 00 07 .....@ ........ +| 32: 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 04 ................ +| 48: 00 00 00 00 00 00 00 04 00 00 00 01 00 00 00 00 ................ +| 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0c ................ +| 96: 00 2e 2c 50 0d 00 00 00 06 01 06 00 01 da 01 b0 ..,P............ +| 112: 01 56 01 86 01 2a 01 06 00 00 00 00 00 00 00 00 .V...*.......... +| 256: 00 00 00 00 00 00 22 07 06 17 11 11 01 31 74 61 ......"......1ta +| 272: 62 6c 65 74 34 74 34 07 43 52 45 41 54 45 20 54 blet4t4.CREATE T +| 288: 41 42 4c 45 20 74 34 28 78 29 2a 06 06 17 13 11 ABLE t4(x)*..... +| 304: 01 3f 69 6e 64 65 78 74 33 78 74 33 05 43 52 45 .?indext3xt3.CRE +| 320: 41 54 45 20 49 4e 44 45 58 20 74 33 78 20 4f 4e ATE INDEX t3x ON +| 336: 20 74 33 28 78 29 2e 04 06 17 15 11 01 45 69 6e t3(x).......Ein +| 352: 64 65 78 74 32 63 64 74 32 05 43 52 45 41 54 45 dext2cdt2.CREATE +| 368: 20 49 4e 44 45 58 20 74 32 63 64 20 4f 4e 20 74 INDEX t2cd ON t +| 384: 32 28 63 2c 64 29 28 05 06 17 11 11 01 3d 74 61 2(c,d)(......=ta +| 400: 62 6c 65 74 33 74 33 07 43 52 45 41 54 45 20 54 blet3t3.CREATE T +| 416: 41 42 4c 45 20 74 33 28 63 2c 78 2c 65 2c 66 29 ABLE t3(c,x,e,f) +| 432: 28 02 06 17 11 11 01 3d 74 61 74 65 6c 03 62 74 (......=tatel.bt +| 448: 32 32 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 22CREATE TABLE t +| 464: 32 28 63 2c 64 2c 65 2c 66 29 24 01 06 17 11 11 2(c,d,e,f)$..... +| 480: 01 35 74 61 62 6c 65 74 31 74 31 02 43 52 45 41 .5tablet1t1.CREA +| 496: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 TE TABLE t1(a,b) +| page 2 offset 512 +| 0: 0d 00 00 00 04 01 cf 00 01 fa 01 f3 01 de 01 cf ................ +| 160: 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 .. ............. +| 448: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0d ................ +| 464: 04 03 17 17 73 65 76 65 6e 65 69 67 68 74 13 03 ....seveneight.. +| 480: 03 07 07 40 14 00 00 00 00 00 00 40 18 00 00 00 ...@.......@.... +| 496: 00 00 00 05 02 03 01 01 03 04 04 01 03 09 01 02 ................ +| page 3 offset 1024 +| 0: 0d 00 00 00 08 01 54 00 01 f7 01 ec 01 c5 01 aa ......T......... +| 16: 01 a1 01 96 01 6f 01 54 00 00 00 00 00 00 00 00 .....o.T........ +| 112: 00 00 dd 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +| 336: 00 00 00 00 19 08 05 17 17 17 17 65 69 67 68 74 ...........eight +| 352: 65 69 67 68 74 73 65 76 65 6e 73 65 76 65 6e 25 eightsevenseven% +| 368: 07 05 07 07 07 07 40 18 00 00 00 00 00 00 40 18 ......@.......@. +| 384: 00 00 00 00 00 00 40 14 00 00 00 00 00 00 40 14 ......@.......@. +| 400: 00 00 00 00 00 00 09 06 05 01 01 01 01 04 04 03 ................ +| 416: 03 07 05 05 01 01 09 09 02 02 19 04 05 17 17 17 ................ +| 432: 17 73 65 76 65 6e 65 69 67 68 74 65 69 67 68 74 .seveneighteight +| 448: 73 65 76 65 6e 25 03 05 07 07 07 07 40 14 00 00 seven%......@... +| 464: 00 00 00 00 40 18 00 00 00 00 00 00 40 18 00 00 ....@.......@... +| 480: 00 00 00 00 40 14 00 00 00 00 00 00 09 02 05 01 ....@........... +| 496: 01 01 01 03 04 04 03 07 01 05 09 01 01 09 02 02 ................ +| page 4 offset 1536 +| 0: 0d 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 ................ +| 192: 00 00 00 00 00 00 7f 00 00 00 00 00 00 00 00 00 ................ +| 208: 00 e5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +| page 5 offset 2048 +| 0: 0a 00 00 00 08 01 96 00 01 fa 01 c4 01 f2 01 bc ................ +| 16: 01 dc 01 a6 01 96 01 cc 00 00 00 00 00 00 00 00 ................ +| 240: 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 00 00 ................ +| 400: 00 00 00 00 00 00 0f 04 17 07 01 65 69 67 68 74 ...........eight +| 416: 65 69 67 68 74 08 15 04 07 07 01 40 18 00 00 00 eight......@.... +| 432: 00 00 00 40 18 00 00 00 00 00 00 07 07 04 01 01 ...@............ +| 448: 01 04 04 06 07 04 01 01 01 02 02 05 0f 04 17 17 ................ +| 464: 01 73 65 76 65 6e 65 69 67 68 74 04 15 04 07 07 .seveneight..... +| 480: 01 40 14 00 00 00 00 00 00 40 18 00 00 00 00 00 .@.......@...... +| 496: 00 03 07 04 01 01 01 03 04 02 05 04 09 01 09 02 ................ +| page 6 offset 2560 +| 0: 0a 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 ................ +| 464: 00 00 00 00 00 00 00 00 00 00 7f 00 00 00 00 00 ................ +| page 7 offset 3072 +| 0: 0d 00 00 00 08 01 c2 00 01 fb 01 f6 01 f1 01 ec ................ +| 16: 01 e0 01 d4 01 cb 01 c2 00 00 00 00 00 00 00 00 ................ +| 448: 00 00 07 08 02 17 65 69 67 68 74 07 07 02 17 65 ......eight....e +| 464: 69 67 68 74 0a 06 02 07 40 18 00 00 00 00 00 00 ight....@....... +| 480: 0a 05 02 07 40 18 00 00 00 00 00 00 03 04 02 01 ....@........... +| 496: 04 03 03 02 01 04 03 02 02 01 02 03 01 02 01 02 ................ +| end x/c02.db + }] + execsql { + DELETE FROM t3 WHERE x IN (SELECT x FROM t4); + } +} {} + finish_test From d6401e869baca759a169a58de148689785dc7907 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 14 Dec 2018 13:35:48 +0000 Subject: [PATCH 42/49] Expand the size of the temporary page used during btree rebalancing by a few bytes, to avoid problems with small buffer overreads that can occur on corrupted database files. FossilOrigin-Name: 32754ca6f86da8165e274f98f35fc3df3aebd273e9da08387e2d0c3c89abda0f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/pcache1.c | 5 ++++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 3e1bf9a2fe..50ac0e5764 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\ssaving\sthe\sposition\sof\sa\scursor\sat\sthe\sb-tree\slayer,\sallocate\sa\sfew\sextra\nbytes\sat\sthe\send\sof\sthe\sbuffer\sused\sto\ssave\sthe\skey.\sOtherwise,\sif\sthe\skey\sis\ncorrupt,\sthe\scode\sthat\srestores\sthe\scursor\sposition\smay\soverread\sthe\sbuffer\sby\sa\nlittle. -D 2018-12-14T13:18:35.216 +C Expand\sthe\ssize\sof\sthe\stemporary\spage\sused\sduring\sbtree\srebalancing\sby\sa\nfew\sbytes,\sto\savoid\sproblems\swith\ssmall\sbuffer\soverreads\sthat\scan\soccur\non\scorrupted\sdatabase\sfiles. +D 2018-12-14T13:35:48.724 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -499,7 +499,7 @@ F src/pager.h 217921e81eb5fe455caa5cda96061959706bcdd29ddb57166198645ef7822ac3 F src/parse.y a3c0db595bc642c6ee1d72869842f7f5b0b6ebeb91c21d0a7cba631d27e7afbd F src/pcache.c 696a01f1a6370c1b50a09c15972bc3bee3333f8fcd1f2da8e9a76b1b062c59ee F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 -F src/pcache1.c ad0ffc5b35b0280d045ac569d34d4b842e3e6a4a118f6396b320987a0957afcc +F src/pcache1.c 4ac06e82e81d03d7f67333b186b1832b4f0cd13178e1904294b49cc522d2dbb6 F src/pragma.c 96ce7dce4dc9cb2b7aa0e1b2ce7536870bdc00b10becc278245e775489447ea0 F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 F src/prepare.c 0e8fc0deaf36da104e08d07ce7d97bc09ab57d078b399381532fec3fa1d3f2bb @@ -1787,7 +1787,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 7e4ed8b5c2047b69bbb037497111e56e465a4d9f8afca3b337f9ac744471dc4a -R ba1eb44fdcbd375391cb2e9633b3bcc5 -U dan -Z 7755266d0736215443f101017f7858b1 +P 160b1e31c0f27257c06c2987af9ec3a64abfacb2150325b72e8ccd3d217b5baa +R 7ac48acc5951b8894655b5be32fde43b +U drh +Z 36b756266655a0b1051626d87510d333 diff --git a/manifest.uuid b/manifest.uuid index 14967ae5e6..f946d9747f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -160b1e31c0f27257c06c2987af9ec3a64abfacb2150325b72e8ccd3d217b5baa \ No newline at end of file +32754ca6f86da8165e274f98f35fc3df3aebd273e9da08387e2d0c3c89abda0f \ No newline at end of file diff --git a/src/pcache1.c b/src/pcache1.c index 6df0f15d13..9a2ea4ea56 100644 --- a/src/pcache1.c +++ b/src/pcache1.c @@ -477,7 +477,10 @@ static void pcache1FreePage(PgHdr1 *p){ ** exists, this function falls back to sqlite3Malloc(). */ void *sqlite3PageMalloc(int sz){ - return pcache1Alloc(sz); + /* During rebalance operations on a corrupt database file, it is sometimes + ** (rarely) possible to overread the temporary page buffer by a few bytes. + ** Enlarge the allocation slightly so that this does not cause problems. */ + return pcache1Alloc(sz + 32); } /* From fa94d492c8f2279df00cf4891f816f6c1e0c7c1a Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 14 Dec 2018 13:47:17 +0000 Subject: [PATCH 43/49] Fix a harmless compiler warning in Sessions. FossilOrigin-Name: fc9791ea987352e3e1322fbb7f833c23b402432af8249f9d397c6f7456788637 --- ext/session/sqlite3session.c | 2 +- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index df4323f3bd..18ae5e0cfd 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -1154,7 +1154,7 @@ static void sessionPreupdateOneChange( int iHash; int bNull = 0; int rc = SQLITE_OK; - SessionStat1Ctx stat1 = {0}; + SessionStat1Ctx stat1 = {{0,0,0,0,0},0}; if( pSession->rc ) return; diff --git a/manifest b/manifest index 50ac0e5764..130891347d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Expand\sthe\ssize\sof\sthe\stemporary\spage\sused\sduring\sbtree\srebalancing\sby\sa\nfew\sbytes,\sto\savoid\sproblems\swith\ssmall\sbuffer\soverreads\sthat\scan\soccur\non\scorrupted\sdatabase\sfiles. -D 2018-12-14T13:35:48.724 +C Fix\sa\sharmless\scompiler\swarning\sin\sSessions. +D 2018-12-14T13:47:17.713 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -420,7 +420,7 @@ F ext/session/sessioninvert.test ae1a003a9ab1f8d64227dbb5c3a4c97e65b561b01e7b295 F ext/session/sessionrebase.test ccfa716b23bd1d3b03217ee58cfd90c78d4b99f53e6a9a2f05e82363b9142810 F ext/session/sessionstat1.test 218d351cf9fcd6648f125a26b607b140310160184723c2666091b54450a68fb5 F ext/session/sessionwor.test 07f0b304dc4df5454906069140bf6ec67edcaa3c548f3683354003cf2c22b64a -F ext/session/sqlite3session.c dbd6f7a89c1236d8e7b58f4e217391670ce91b9e6f85c16ba02832674ef0cf3c +F ext/session/sqlite3session.c f88c4bd0404da56246b08f5d584462f8979ba6aedf8c30762b553f7ae91f51cf F ext/session/sqlite3session.h 05351d2f50a1203fdffbeb590fdbbc796c9a6bfcd0c9b26cf6db3854e3eb4294 F ext/session/test_session.c 98797aba475a799376c9a42214f2d1debf2d0c3cb657d9c8bbf4f70bf3fb4aec F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3 @@ -1787,7 +1787,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 160b1e31c0f27257c06c2987af9ec3a64abfacb2150325b72e8ccd3d217b5baa -R 7ac48acc5951b8894655b5be32fde43b +P 32754ca6f86da8165e274f98f35fc3df3aebd273e9da08387e2d0c3c89abda0f +R 3d9fe236acd328f6aafabdc7e0f6bbfc U drh -Z 36b756266655a0b1051626d87510d333 +Z ea9bbe01e8202c5233345adba0cefb74 diff --git a/manifest.uuid b/manifest.uuid index f946d9747f..0342a084c2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -32754ca6f86da8165e274f98f35fc3df3aebd273e9da08387e2d0c3c89abda0f \ No newline at end of file +fc9791ea987352e3e1322fbb7f833c23b402432af8249f9d397c6f7456788637 \ No newline at end of file From e7acce66b2f3bedc07e99ddf60bd3551e7bc6242 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 14 Dec 2018 16:00:38 +0000 Subject: [PATCH 44/49] Avoid a buffer overread in ptrmapPutOvflPtr() that can occurs in a corrupt database file that has large entries and uses autovacuum. FossilOrigin-Name: f8b781cf41800e9f61a1c5376404a97e76a2bbbcaa17396d42be62f731363947 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/btree.c | 7 ++++++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 130891347d..40efb1825c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sharmless\scompiler\swarning\sin\sSessions. -D 2018-12-14T13:47:17.713 +C Avoid\sa\sbuffer\soverread\sin\sptrmapPutOvflPtr()\sthat\scan\soccurs\sin\sa\ncorrupt\sdatabase\sfile\sthat\shas\slarge\sentries\sand\suses\sautovacuum. +D 2018-12-14T16:00:38.064 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c 89e9abe6a3f7461c8c5d44314b261e1dd29a31557d1dd91c72378bc0976fc1f6 +F src/btree.c af1055a0a69a4a299d0095a0e0b3386c942ddf9b158098c6d64fe1c93adbeb82 F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -1787,7 +1787,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 32754ca6f86da8165e274f98f35fc3df3aebd273e9da08387e2d0c3c89abda0f -R 3d9fe236acd328f6aafabdc7e0f6bbfc +P fc9791ea987352e3e1322fbb7f833c23b402432af8249f9d397c6f7456788637 +R f5743306f54d784293952b3602df596c U drh -Z ea9bbe01e8202c5233345adba0cefb74 +Z 6e0967960c2e7605bd0b191a56849a10 diff --git a/manifest.uuid b/manifest.uuid index 0342a084c2..0bc90c32e6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fc9791ea987352e3e1322fbb7f833c23b402432af8249f9d397c6f7456788637 \ No newline at end of file +f8b781cf41800e9f61a1c5376404a97e76a2bbbcaa17396d42be62f731363947 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 55518bd8a2..9156412922 100644 --- a/src/btree.c +++ b/src/btree.c @@ -1369,7 +1369,12 @@ static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){ assert( pCell!=0 ); pPage->xParseCell(pPage, pCell, &info); if( info.nLocalaDataEnd, pCell, pCell+info.nLocal) ){ + *pRC = SQLITE_CORRUPT_BKPT; + return; + } + ovfl = get4byte(&pCell[info.nSize-4]); ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC); } } From d7a5e498400ae8c533c53aa37a62194bd734b422 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 14 Dec 2018 16:20:54 +0000 Subject: [PATCH 45/49] Back out the expansion of the temporary buffer size from [32754ca6f86da816] and replace it with an explicit test for buffer overreads. FossilOrigin-Name: 8ba3d9f38090c4bbbcffba1930e5c26f69ff61f49b72a4a5a59253d37341380f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 1 + src/pcache1.c | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 40efb1825c..5254be2879 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\sa\sbuffer\soverread\sin\sptrmapPutOvflPtr()\sthat\scan\soccurs\sin\sa\ncorrupt\sdatabase\sfile\sthat\shas\slarge\sentries\sand\suses\sautovacuum. -D 2018-12-14T16:00:38.064 +C Back\sout\sthe\sexpansion\sof\sthe\stemporary\sbuffer\ssize\sfrom\n[32754ca6f86da816]\sand\sreplace\sit\swith\san\sexplicit\stest\sfor\sbuffer\noverreads. +D 2018-12-14T16:20:54.136 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c af1055a0a69a4a299d0095a0e0b3386c942ddf9b158098c6d64fe1c93adbeb82 +F src/btree.c 38e21cf0899e3c8591d8fdc7d5de5f1e9d0be03f9d91869d4eb469662eeba504 F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -499,7 +499,7 @@ F src/pager.h 217921e81eb5fe455caa5cda96061959706bcdd29ddb57166198645ef7822ac3 F src/parse.y a3c0db595bc642c6ee1d72869842f7f5b0b6ebeb91c21d0a7cba631d27e7afbd F src/pcache.c 696a01f1a6370c1b50a09c15972bc3bee3333f8fcd1f2da8e9a76b1b062c59ee F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 -F src/pcache1.c 4ac06e82e81d03d7f67333b186b1832b4f0cd13178e1904294b49cc522d2dbb6 +F src/pcache1.c ddc9fc7d9861cf3a1f30660264b76b1ae9e1dce5dbba085cf001d5cb6b41cf8c F src/pragma.c 96ce7dce4dc9cb2b7aa0e1b2ce7536870bdc00b10becc278245e775489447ea0 F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 F src/prepare.c 0e8fc0deaf36da104e08d07ce7d97bc09ab57d078b399381532fec3fa1d3f2bb @@ -1787,7 +1787,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 fc9791ea987352e3e1322fbb7f833c23b402432af8249f9d397c6f7456788637 -R f5743306f54d784293952b3602df596c +P f8b781cf41800e9f61a1c5376404a97e76a2bbbcaa17396d42be62f731363947 +R 3024a00493e9f082b2f41aac6f6fd5ec U drh -Z 6e0967960c2e7605bd0b191a56849a10 +Z 685b8a97ad7f27534ed13c09a239258a diff --git a/manifest.uuid b/manifest.uuid index 0bc90c32e6..6a1b87aced 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f8b781cf41800e9f61a1c5376404a97e76a2bbbcaa17396d42be62f731363947 \ No newline at end of file +8ba3d9f38090c4bbbcffba1930e5c26f69ff61f49b72a4a5a59253d37341380f \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 9156412922..8b3375e6f6 100644 --- a/src/btree.c +++ b/src/btree.c @@ -6762,6 +6762,7 @@ static int rebuildPage( for(i=0; i(uptr)pEnd ) return SQLITE_CORRUPT_BKPT; pCell = &pTmp[pCell - aData]; } pData -= szCell[i]; diff --git a/src/pcache1.c b/src/pcache1.c index 9a2ea4ea56..13903216f6 100644 --- a/src/pcache1.c +++ b/src/pcache1.c @@ -480,7 +480,7 @@ void *sqlite3PageMalloc(int sz){ /* During rebalance operations on a corrupt database file, it is sometimes ** (rarely) possible to overread the temporary page buffer by a few bytes. ** Enlarge the allocation slightly so that this does not cause problems. */ - return pcache1Alloc(sz + 32); + return pcache1Alloc(sz); } /* From ae104741257a7b32870bb9f1563bb5746db5ae3c Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 14 Dec 2018 17:57:01 +0000 Subject: [PATCH 46/49] Fix possible integer overflow while running PRAGMA integrity_check on a database file with a badly corrupted freelist. FossilOrigin-Name: 395599116d801324f0763e59bc5e2fc8622aa5b7572e0c1c9a982efbb3cc8280 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/btree.c | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 5254be2879..eba1815511 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Back\sout\sthe\sexpansion\sof\sthe\stemporary\sbuffer\ssize\sfrom\n[32754ca6f86da816]\sand\sreplace\sit\swith\san\sexplicit\stest\sfor\sbuffer\noverreads. -D 2018-12-14T16:20:54.136 +C Fix\spossible\sinteger\soverflow\swhile\srunning\sPRAGMA\sintegrity_check\son\sa\ndatabase\sfile\swith\sa\sbadly\scorrupted\sfreelist. +D 2018-12-14T17:57:01.278 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -448,7 +448,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c 38e21cf0899e3c8591d8fdc7d5de5f1e9d0be03f9d91869d4eb469662eeba504 +F src/btree.c 4429a1615440f0253d470b59f955fe84787fd6f709ae114c0a12d132ae725599 F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96 F src/build.c ef9d7dc73e40dd9d10c28848343e21e8bc1baaab92cfb75eda893fff4fbf6b55 @@ -1787,7 +1787,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 f8b781cf41800e9f61a1c5376404a97e76a2bbbcaa17396d42be62f731363947 -R 3024a00493e9f082b2f41aac6f6fd5ec +P 8ba3d9f38090c4bbbcffba1930e5c26f69ff61f49b72a4a5a59253d37341380f +R 9a4f6c6480011bd142e9912e8f1cca4c U drh -Z 685b8a97ad7f27534ed13c09a239258a +Z 3c28c0a7282a8455d6c7557d8580e4db diff --git a/manifest.uuid b/manifest.uuid index 6a1b87aced..06fa04da92 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8ba3d9f38090c4bbbcffba1930e5c26f69ff61f49b72a4a5a59253d37341380f \ No newline at end of file +395599116d801324f0763e59bc5e2fc8622aa5b7572e0c1c9a982efbb3cc8280 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 8b3375e6f6..24a274cd40 100644 --- a/src/btree.c +++ b/src/btree.c @@ -9414,18 +9414,18 @@ static void checkList( } pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage); if( isFreeList ){ - int n = get4byte(&pOvflData[4]); + u32 n = (u32)get4byte(&pOvflData[4]); #ifndef SQLITE_OMIT_AUTOVACUUM if( pCheck->pBt->autoVacuum ){ checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0); } #endif - if( n>(int)pCheck->pBt->usableSize/4-2 ){ + if( n>pCheck->pBt->usableSize/4-2 ){ checkAppendMsg(pCheck, "freelist leaf count too big on page %d", iPage); N--; }else{ - for(i=0; ipBt->autoVacuum ){ From 3c2db5def64f97e8b5e79578fd73ce4a0d277338 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 14 Dec 2018 18:11:02 +0000 Subject: [PATCH 47/49] Fix harmless compiler warnings. FossilOrigin-Name: 27221c69901d2b4546167639c4a3c8f54b2e18820f1346870fa26b7c919027db --- ext/fts3/fts3_unicode2.c | 43 ++++++++++++++++++++-------------------- ext/fts5/fts5_unicode2.c | 43 ++++++++++++++++++++-------------------- manifest | 18 ++++++++--------- manifest.uuid | 2 +- src/resolve.c | 1 - src/whereexpr.c | 2 +- 6 files changed, 55 insertions(+), 54 deletions(-) diff --git a/ext/fts3/fts3_unicode2.c b/ext/fts3/fts3_unicode2.c index 41027b2546..c0395d9cf6 100644 --- a/ext/fts3/fts3_unicode2.c +++ b/ext/fts3/fts3_unicode2.c @@ -178,28 +178,29 @@ static int remove_diacritic(int c, int bComplex){ 62830, 62890, 62924, 62974, 63032, 63050, 63082, 63118, 63182, 63242, 63274, 63310, 63368, 63390, }; +#define HIBIT ((char)0x80) char aChar[] = { - '\0', 'a'|0x00, 'c'|0x00, 'e'|0x00, 'i'|0x00, 'n'|0x00, - 'o'|0x00, 'u'|0x00, 'y'|0x00, 'y'|0x00, 'a'|0x00, 'c'|0x00, - 'd'|0x00, 'e'|0x00, 'e'|0x00, 'g'|0x00, 'h'|0x00, 'i'|0x00, - 'j'|0x00, 'k'|0x00, 'l'|0x00, 'n'|0x00, 'o'|0x00, 'r'|0x00, - 's'|0x00, 't'|0x00, 'u'|0x00, 'u'|0x00, 'w'|0x00, 'y'|0x00, - 'z'|0x00, 'o'|0x00, 'u'|0x00, 'a'|0x00, 'i'|0x00, 'o'|0x00, - 'u'|0x00, 'u'|0x80, 'a'|0x80, 'g'|0x00, 'k'|0x00, 'o'|0x00, - 'o'|0x80, 'j'|0x00, 'g'|0x00, 'n'|0x00, 'a'|0x80, 'a'|0x00, - 'e'|0x00, 'i'|0x00, 'o'|0x00, 'r'|0x00, 'u'|0x00, 's'|0x00, - 't'|0x00, 'h'|0x00, 'a'|0x00, 'e'|0x00, 'o'|0x80, 'o'|0x00, - 'o'|0x80, 'y'|0x00, '\0', '\0', '\0', '\0', - '\0', '\0', '\0', '\0', 'a'|0x00, 'b'|0x00, - 'c'|0x80, 'd'|0x00, 'd'|0x00, 'e'|0x80, 'e'|0x00, 'e'|0x80, - 'f'|0x00, 'g'|0x00, 'h'|0x00, 'h'|0x00, 'i'|0x00, 'i'|0x80, - 'k'|0x00, 'l'|0x00, 'l'|0x80, 'l'|0x00, 'm'|0x00, 'n'|0x00, - 'o'|0x80, 'p'|0x00, 'r'|0x00, 'r'|0x80, 'r'|0x00, 's'|0x00, - 's'|0x80, 't'|0x00, 'u'|0x00, 'u'|0x80, 'v'|0x00, 'w'|0x00, - 'w'|0x00, 'x'|0x00, 'y'|0x00, 'z'|0x00, 'h'|0x00, 't'|0x00, - 'w'|0x00, 'y'|0x00, 'a'|0x00, 'a'|0x80, 'a'|0x80, 'a'|0x80, - 'e'|0x00, 'e'|0x80, 'e'|0x80, 'i'|0x00, 'o'|0x00, 'o'|0x80, - 'o'|0x80, 'o'|0x80, 'u'|0x00, 'u'|0x80, 'u'|0x80, 'y'|0x00, + '\0', 'a', 'c', 'e', 'i', 'n', + 'o', 'u', 'y', 'y', 'a', 'c', + 'd', 'e', 'e', 'g', 'h', 'i', + 'j', 'k', 'l', 'n', 'o', 'r', + 's', 't', 'u', 'u', 'w', 'y', + 'z', 'o', 'u', 'a', 'i', 'o', + 'u', 'u'|HIBIT, 'a'|HIBIT, 'g', 'k', 'o', + 'o'|HIBIT, 'j', 'g', 'n', 'a'|HIBIT, 'a', + 'e', 'i', 'o', 'r', 'u', 's', + 't', 'h', 'a', 'e', 'o'|HIBIT, 'o', + 'o'|HIBIT, 'y', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', 'a', 'b', + 'c'|HIBIT, 'd', 'd', 'e'|HIBIT, 'e', 'e'|HIBIT, + 'f', 'g', 'h', 'h', 'i', 'i'|HIBIT, + 'k', 'l', 'l'|HIBIT, 'l', 'm', 'n', + 'o'|HIBIT, 'p', 'r', 'r'|HIBIT, 'r', 's', + 's'|HIBIT, 't', 'u', 'u'|HIBIT, 'v', 'w', + 'w', 'x', 'y', 'z', 'h', 't', + 'w', 'y', 'a', 'a'|HIBIT, 'a'|HIBIT, 'a'|HIBIT, + 'e', 'e'|HIBIT, 'e'|HIBIT, 'i', 'o', 'o'|HIBIT, + 'o'|HIBIT, 'o'|HIBIT, 'u', 'u'|HIBIT, 'u'|HIBIT, 'y', }; unsigned int key = (((unsigned int)c)<<3) | 0x00000007; diff --git a/ext/fts5/fts5_unicode2.c b/ext/fts5/fts5_unicode2.c index 9d3ffdc972..8bb1cd94fb 100644 --- a/ext/fts5/fts5_unicode2.c +++ b/ext/fts5/fts5_unicode2.c @@ -47,28 +47,29 @@ static int fts5_remove_diacritic(int c, int bComplex){ 62830, 62890, 62924, 62974, 63032, 63050, 63082, 63118, 63182, 63242, 63274, 63310, 63368, 63390, }; +#define HIBIT ((char)0x80) char aChar[] = { - '\0', 'a'|0x00, 'c'|0x00, 'e'|0x00, 'i'|0x00, 'n'|0x00, - 'o'|0x00, 'u'|0x00, 'y'|0x00, 'y'|0x00, 'a'|0x00, 'c'|0x00, - 'd'|0x00, 'e'|0x00, 'e'|0x00, 'g'|0x00, 'h'|0x00, 'i'|0x00, - 'j'|0x00, 'k'|0x00, 'l'|0x00, 'n'|0x00, 'o'|0x00, 'r'|0x00, - 's'|0x00, 't'|0x00, 'u'|0x00, 'u'|0x00, 'w'|0x00, 'y'|0x00, - 'z'|0x00, 'o'|0x00, 'u'|0x00, 'a'|0x00, 'i'|0x00, 'o'|0x00, - 'u'|0x00, 'u'|0x80, 'a'|0x80, 'g'|0x00, 'k'|0x00, 'o'|0x00, - 'o'|0x80, 'j'|0x00, 'g'|0x00, 'n'|0x00, 'a'|0x80, 'a'|0x00, - 'e'|0x00, 'i'|0x00, 'o'|0x00, 'r'|0x00, 'u'|0x00, 's'|0x00, - 't'|0x00, 'h'|0x00, 'a'|0x00, 'e'|0x00, 'o'|0x80, 'o'|0x00, - 'o'|0x80, 'y'|0x00, '\0', '\0', '\0', '\0', - '\0', '\0', '\0', '\0', 'a'|0x00, 'b'|0x00, - 'c'|0x80, 'd'|0x00, 'd'|0x00, 'e'|0x80, 'e'|0x00, 'e'|0x80, - 'f'|0x00, 'g'|0x00, 'h'|0x00, 'h'|0x00, 'i'|0x00, 'i'|0x80, - 'k'|0x00, 'l'|0x00, 'l'|0x80, 'l'|0x00, 'm'|0x00, 'n'|0x00, - 'o'|0x80, 'p'|0x00, 'r'|0x00, 'r'|0x80, 'r'|0x00, 's'|0x00, - 's'|0x80, 't'|0x00, 'u'|0x00, 'u'|0x80, 'v'|0x00, 'w'|0x00, - 'w'|0x00, 'x'|0x00, 'y'|0x00, 'z'|0x00, 'h'|0x00, 't'|0x00, - 'w'|0x00, 'y'|0x00, 'a'|0x00, 'a'|0x80, 'a'|0x80, 'a'|0x80, - 'e'|0x00, 'e'|0x80, 'e'|0x80, 'i'|0x00, 'o'|0x00, 'o'|0x80, - 'o'|0x80, 'o'|0x80, 'u'|0x00, 'u'|0x80, 'u'|0x80, 'y'|0x00, + '\0', 'a', 'c', 'e', 'i', 'n', + 'o', 'u', 'y', 'y', 'a', 'c', + 'd', 'e', 'e', 'g', 'h', 'i', + 'j', 'k', 'l', 'n', 'o', 'r', + 's', 't', 'u', 'u', 'w', 'y', + 'z', 'o', 'u', 'a', 'i', 'o', + 'u', 'u'|HIBIT, 'a'|HIBIT, 'g', 'k', 'o', + 'o'|HIBIT, 'j', 'g', 'n', 'a'|HIBIT, 'a', + 'e', 'i', 'o', 'r', 'u', 's', + 't', 'h', 'a', 'e', 'o'|HIBIT, 'o', + 'o'|HIBIT, 'y', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', 'a', 'b', + 'c'|HIBIT, 'd', 'd', 'e'|HIBIT, 'e', 'e'|HIBIT, + 'f', 'g', 'h', 'h', 'i', 'i'|HIBIT, + 'k', 'l', 'l'|HIBIT, 'l', 'm', 'n', + 'o'|HIBIT, 'p', 'r', 'r'|HIBIT, 'r', 's', + 's'|HIBIT, 't', 'u', 'u'|HIBIT, 'v', 'w', + 'w', 'x', 'y', 'z', 'h', 't', + 'w', 'y', 'a', 'a'|HIBIT, 'a'|HIBIT, 'a'|HIBIT, + 'e', 'e'|HIBIT, 'e'|HIBIT, 'i', 'o', 'o'|HIBIT, + 'o'|HIBIT, 'o'|HIBIT, 'u', 'u'|HIBIT, 'u'|HIBIT, 'y', }; unsigned int key = (((unsigned int)c)<<3) | 0x00000007; diff --git a/manifest b/manifest index eba1815511..176dca0a77 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\spossible\sinteger\soverflow\swhile\srunning\sPRAGMA\sintegrity_check\son\sa\ndatabase\sfile\swith\sa\sbadly\scorrupted\sfreelist. -D 2018-12-14T17:57:01.278 +C Fix\sharmless\scompiler\swarnings. +D 2018-12-14T18:11:02.867 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -97,7 +97,7 @@ F ext/fts3/fts3_tokenizer.c a22bf311a71f3efa9d7012d8cc48fc9b0f3dace7 F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3 F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004 F ext/fts3/fts3_unicode.c b1902e9ad47a6569fbb8ecb5ce52f20fe59b590d5c5e3bbdd56b10b03bdf632b -F ext/fts3/fts3_unicode2.c 90e65f4291c8ecceee284ecc8d5d48734e95ecd4b008e06f36f14e77f93d655f +F ext/fts3/fts3_unicode2.c e49f9e015f239bf5faf2f4fa483bbf1b08a9978f0ad1f31159d952f8b8a10d08 F ext/fts3/fts3_write.c a85bc4885fde7f1b44c9de013b62f7cd3332dc59e208053d878729b1d04745bc F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9 F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100 @@ -122,7 +122,7 @@ F ext/fts5/fts5_tcl.c 39bcbae507f594aad778172fa914cad0f585bf92fd3b078c686e249282 F ext/fts5/fts5_test_mi.c 65864ba1e5c34a61d409c4c587e0bbe0466eb4f8f478d85dc42a92caad1338e6 F ext/fts5/fts5_test_tok.c 80de1a4b1a3caa216c3be8862440f0117a8357dd9b7cfc5a2a2ce11fe6eb64ae F ext/fts5/fts5_tokenize.c ca2b6a033794945ac505241a86b0aa978709c23aa2e6121984d3e3ede96003c8 -F ext/fts5/fts5_unicode2.c 26519f47d567c5a9b08c376edd38f1b8a773b45ff29f1ffd81d9edfe20f96e18 +F ext/fts5/fts5_unicode2.c 03bc8ebf44d825d0b7ac519f7b16139cf8e879ae7a27e62fb6326f0d68e8bdd3 F ext/fts5/fts5_varint.c a5aceacda04dafcbae725413d7a16818ecd65738 F ext/fts5/fts5_vocab.c fbe38044889b2d2d99babeeef239c620fb0332bb928a84506ac748d81500b354 F ext/fts5/fts5parse.y eb526940f892ade5693f22ffd6c4f2702543a9059942772526eac1fde256bb05 @@ -505,7 +505,7 @@ F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13 F src/prepare.c 0e8fc0deaf36da104e08d07ce7d97bc09ab57d078b399381532fec3fa1d3f2bb F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c abd65c518c198400193c6319a70c0d722fa30a35be89dc898917ff6489edf017 +F src/resolve.c 72fe8cae7326b979e7258ab4c531956951e1a5f3fe8644c646abaec1b2eb6d95 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 F src/shell.c.in e1790e0d3607fca70ce61e5a0c83885d82f33ebe362edfb1cb66342d12c182d0 @@ -595,7 +595,7 @@ F src/walker.c fb94aadc9099ff9c6506d0a8b88d51266005bcaa265403f3d7caf732a562eb66 F src/where.c 3818e8a736a05d2cb194e64399af707e367fbcc5c251d785804d02eaf121288e F src/whereInt.h f125f29fca80890768e0b2caa14f95db74b2dacd3a122a168f97aa7b64d6968f F src/wherecode.c c45f03aefc2266b990df0fc4d7acc4e27f56f881f4fc0fc355b7cbc4d7189da5 -F src/whereexpr.c b87a823bfd3c6998ba8ae0797f3f0dc8d8feb779ed914d31b324a0181e13deb5 +F src/whereexpr.c 36b47f7261d6b6f1a72d774c113b74beddf6745aba1018e64b196e29db233442 F src/window.c ea81ecd031ed2cbc14b7db6fd7f4bee2471b894feae5fea0547b15b1e2dd8fb2 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd @@ -1787,7 +1787,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 8ba3d9f38090c4bbbcffba1930e5c26f69ff61f49b72a4a5a59253d37341380f -R 9a4f6c6480011bd142e9912e8f1cca4c +P 395599116d801324f0763e59bc5e2fc8622aa5b7572e0c1c9a982efbb3cc8280 +R df4c1da54dfb761eed985ced81211d04 U drh -Z 3c28c0a7282a8455d6c7557d8580e4db +Z 41e7a1dc9bc588455770787287d46c8d diff --git a/manifest.uuid b/manifest.uuid index 06fa04da92..3ffd7af8ce 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -395599116d801324f0763e59bc5e2fc8622aa5b7572e0c1c9a982efbb3cc8280 \ No newline at end of file +27221c69901d2b4546167639c4a3c8f54b2e18820f1346870fa26b7c919027db \ No newline at end of file diff --git a/src/resolve.c b/src/resolve.c index 6dc42aef7a..ffcf74bcdd 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -80,7 +80,6 @@ static void resolveAlias( if( pExpr->op==TK_COLLATE ){ pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken); } -// ExprSetProperty(pDup, EP_Alias); /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This ** prevents ExprDelete() from deleting the Expr structure itself, diff --git a/src/whereexpr.c b/src/whereexpr.c index 993c1e2862..db0a38d622 100644 --- a/src/whereexpr.c +++ b/src/whereexpr.c @@ -777,8 +777,8 @@ static void exprAnalyzeOrTerm( ** and column is found but leave okToChngToIN false if not found. */ for(j=0; j<2 && !okToChngToIN; j++){ - pOrTerm = pOrWc->a; Expr *pLeft = 0; + pOrTerm = pOrWc->a; for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){ assert( pOrTerm->eOperator & WO_EQ ); pOrTerm->wtFlags &= ~TERM_OR_OK; From bef06d2637b77a8b99c49a91656974049b86963a Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 15 Dec 2018 07:12:34 +0000 Subject: [PATCH 48/49] Fix errors in comments in fts5.h. FossilOrigin-Name: 4002790d9418289f3e090c694f651a89d8f523119c8ce2f396999b0387148241 --- ext/fts5/fts5.h | 12 ++++++------ manifest | 14 +++++++------- manifest.uuid | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ext/fts5/fts5.h b/ext/fts5/fts5.h index 037da64d42..8273785b15 100644 --- a/ext/fts5/fts5.h +++ b/ext/fts5/fts5.h @@ -414,11 +414,11 @@ struct Fts5ExtensionApi { ** the tokenizer substitutes "first" for "1st" and the query works ** as expected. ** -**
  • By adding multiple synonyms for a single term to the FTS index. -** In this case, when tokenizing query text, the tokenizer may -** provide multiple synonyms for a single term within the document. -** FTS5 then queries the index for each synonym individually. For -** example, faced with the query: +**
  • By querying the index for all synonyms of each query term +** separately. In this case, when tokenizing query text, the +** tokenizer may provide multiple synonyms for a single term +** within the document. FTS5 then queries the index for each +** synonym individually. For example, faced with the query: ** ** ** ... MATCH 'first place' @@ -442,7 +442,7 @@ struct Fts5ExtensionApi { ** "place". ** ** This way, even if the tokenizer does not provide synonyms -** when tokenizing query text (it should not - to do would be +** when tokenizing query text (it should not - to do so would be ** inefficient), it doesn't matter if the user queries for ** 'first + place' or '1st + place', as there are entries in the ** FTS index corresponding to both forms of the first token. diff --git a/manifest b/manifest index 176dca0a77..8be2a97978 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarnings. -D 2018-12-14T18:11:02.867 +C Fix\serrors\sin\scomments\sin\sfts5.h. +D 2018-12-15T07:12:34.293 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -108,7 +108,7 @@ F ext/fts3/unicode/UnicodeData.txt cd07314edb62d49fde34debdaf92fa2aa69011e7 F ext/fts3/unicode/mkunicode.tcl 2ea30d8122ccf1e33142c9cc8913d8cad9eb6668db359a228f10aeb37e2ab863 F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a03cf1e6f52a6959fc77eb F ext/fts5/extract_api_docs.tcl a36e54ec777172ddd3f9a88daf593b00848368e0 -F ext/fts5/fts5.h 5edc74ca603d71284d475886e6e91b5c5cf2e8e93e9ba3a36ba2f2440ee97948 +F ext/fts5/fts5.h 4f5d19b7973dae23de368728f06d3eb1fe9f5cca2990366b40e9379996f35e61 F ext/fts5/fts5Int.h 39f12034b598df4e0f59bbe6cf03af03a905a534b04f182d155641a04e1eb797 F ext/fts5/fts5_aux.c ca666a3bbe07c5a3bbe9fffaea19c935a1efaf337333e28bad7bdd1971ffd093 F ext/fts5/fts5_buffer.c 1dd1ec0446b3acfc2d7d407eb894762a461613e2695273f48e449bfd13e973ff @@ -1787,7 +1787,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 395599116d801324f0763e59bc5e2fc8622aa5b7572e0c1c9a982efbb3cc8280 -R df4c1da54dfb761eed985ced81211d04 -U drh -Z 41e7a1dc9bc588455770787287d46c8d +P 27221c69901d2b4546167639c4a3c8f54b2e18820f1346870fa26b7c919027db +R 9df18efb766b99d5781ecbcd31fe60d1 +U dan +Z ca390272dfac9ef22cff2bc723aefc3c diff --git a/manifest.uuid b/manifest.uuid index 3ffd7af8ce..2b06fe416d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -27221c69901d2b4546167639c4a3c8f54b2e18820f1346870fa26b7c919027db \ No newline at end of file +4002790d9418289f3e090c694f651a89d8f523119c8ce2f396999b0387148241 \ No newline at end of file From 99490934aeac3111eb3043865d986d90d560ac71 Mon Sep 17 00:00:00 2001 From: mistachkin Date: Mon, 17 Dec 2018 22:19:57 +0000 Subject: [PATCH 49/49] Move variable declaration to address compilation issue (C89). FossilOrigin-Name: d64f248da3ce7762fe2c17fbc83f7bea9ffca73723bb3ad0982a85320839da90 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 3 ++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 8be2a97978..802001e508 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\serrors\sin\scomments\sin\sfts5.h. -D 2018-12-15T07:12:34.293 +C Move\svariable\sdeclaration\sto\saddress\scompilation\sissue\s(C89). +D 2018-12-17T22:19:57.272 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6 @@ -508,7 +508,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 72fe8cae7326b979e7258ab4c531956951e1a5f3fe8644c646abaec1b2eb6d95 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 F src/select.c 8c7317d5ee920516a56b8b4ca79fbfca70a1f8b52d67e884c808ea3a016c04e3 -F src/shell.c.in e1790e0d3607fca70ce61e5a0c83885d82f33ebe362edfb1cb66342d12c182d0 +F src/shell.c.in 207da30342db0b6fac8b2487abd60b059a5ea80cc9494bd1db76a1dd4aae7cca F src/sqlite.h.in 92fd656c26cc76de9fa8c5bf1a473066e3b5c6da345a447679f0f44de1aa4edd F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683 @@ -1787,7 +1787,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 27221c69901d2b4546167639c4a3c8f54b2e18820f1346870fa26b7c919027db -R 9df18efb766b99d5781ecbcd31fe60d1 -U dan -Z ca390272dfac9ef22cff2bc723aefc3c +P 4002790d9418289f3e090c694f651a89d8f523119c8ce2f396999b0387148241 +R f6fe710e431b4ec745a10d3cc1fd8bbd +U mistachkin +Z 6a337bb039fd5a5fb74a7787d4378ec4 diff --git a/manifest.uuid b/manifest.uuid index 2b06fe416d..703a1535de 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4002790d9418289f3e090c694f651a89d8f523119c8ce2f396999b0387148241 \ No newline at end of file +d64f248da3ce7762fe2c17fbc83f7bea9ffca73723bb3ad0982a85320839da90 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 6bb8ee7fdc..7048732389 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -3905,6 +3905,7 @@ static void open_db(ShellState *p, int openFlags){ #ifdef SQLITE_ENABLE_DESERIALIZE else if( p->openMode==SHELL_OPEN_DESERIALIZE || p->openMode==SHELL_OPEN_HEXDB ){ + int rc; int nData = 0; unsigned char *aData; if( p->openMode==SHELL_OPEN_DESERIALIZE ){ @@ -3916,7 +3917,7 @@ static void open_db(ShellState *p, int openFlags){ return; } } - int rc = sqlite3_deserialize(p->db, "main", aData, nData, nData, + rc = sqlite3_deserialize(p->db, "main", aData, nData, nData, SQLITE_DESERIALIZE_RESIZEABLE | SQLITE_DESERIALIZE_FREEONCLOSE); if( rc ){