From a96a69b7dbbb9d933d27af8516cb7c5245956bb0 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 3 Apr 2020 16:11:32 +0000 Subject: [PATCH 01/11] Add a test case to fuzzdata8.db for the recent Henry Liu bugs. FossilOrigin-Name: 42b02454b146ca1b04c0a5321465326435fc5b995f5498d3b1cf69c558a20f95 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/fuzzdata8.db | Bin 1472512 -> 1474560 bytes 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 9f6f8df1e6..79ef6d3cef 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sthe\sevent\sof\sa\ssemantic\serror\sin\san\saggregate\squery,\searly-out\sthe\nresetAccumulator()\sfunction\sto\sprevent\sproblems\sdue\sto\sincomplete\sor\nincorrect\sinitialization\sof\sthe\sAggInfo\sobject.\nFix\sfor\sticket\s[af4556bb5c285c08]. -D 2020-04-03T13:19:03.054 +C Add\sa\stest\scase\sto\sfuzzdata8.db\sfor\sthe\srecent\sHenry\sLiu\sbugs. +D 2020-04-03T16:11:32.563 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1024,7 +1024,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2 -F test/fuzzdata8.db 00cd360c354083d69572e82e1da9f582a2ed60760baf9c04558ebadd885d390b +F test/fuzzdata8.db 1299a262ccd07fa6318e37ae54941eae794009c92384f68ee72a7675916a9f56 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1860,7 +1860,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 684293882c302600e112cf52553c19d84fdb31663d96e5dd7f8ac17dda00a026 -R dbb40938a904f2e39c11078dcedb87b0 +P 4a302b42c7bf5e11ddb5522ca999f74aba397d3a7eb91b1844bb02852f772441 +R 331f374d4a1fad71dab0165ef9442a28 U drh -Z 1c021fc7d9ac6b5d0e31d06cd9bb3304 +Z 539f8d9e86dbe33e71b5401cc47a6add diff --git a/manifest.uuid b/manifest.uuid index bd11b93e76..7f2cc5b53a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4a302b42c7bf5e11ddb5522ca999f74aba397d3a7eb91b1844bb02852f772441 \ No newline at end of file +42b02454b146ca1b04c0a5321465326435fc5b995f5498d3b1cf69c558a20f95 \ No newline at end of file diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index e9e11d21a22bd285a9ebbe3583bb9b4dc2ad18c5..202803061e7fc6143dd202c54c0cabcf1d520341 100644 GIT binary patch delta 23127 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 delta 21918 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 HLJa&be{GNx From c59b4acf5d188b8a18a83a576ad53b4212f4a62c Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 3 Apr 2020 19:37:14 +0000 Subject: [PATCH 02/11] Avoid factoring out constant expressions on the LHS of an IN(...) operator, as the IN(...) operation may affect the affinity of these values. FossilOrigin-Name: 98d56b4a34fddcbaecd953a045ae0270b4d78c1edf34cc73522fb4e12743af80 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/expr.c | 9 ++++++++- test/cse.test | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 79ef6d3cef..9b2980c15c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\stest\scase\sto\sfuzzdata8.db\sfor\sthe\srecent\sHenry\sLiu\sbugs. -D 2020-04-03T16:11:32.563 +C Avoid\sfactoring\sout\sconstant\sexpressions\son\sthe\sLHS\sof\san\sIN(...)\soperator,\sas\sthe\sIN(...)\soperation\smay\saffect\sthe\saffinity\sof\sthese\svalues. +D 2020-04-03T19:37:14.358 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -483,7 +483,7 @@ F src/date.c b29b349d277e3d579dcc295b24c0a2caed83fd8f090a9f7cbe6070c0fd662384 F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 793deaf88a0904f88285d93d6713c636d55ede0ffd9f08d10f4ea825531d367f F src/delete.c 11000121c4281c0bce4e41db29addfaea0038eaa127ece02557c9207bc3e541d -F src/expr.c 226293a02bd8376db5981a52a2163a5022c52d69878cb64a5821529743f51162 +F src/expr.c 74973866b0fe8cd0bcaee7cec14541cb1a505d6103fde4922d82c867767c0d64 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 4b575423b0a5d4898b1a7868ce985cf1a8ad91c741c9abbb108ff02536d20f41 F src/func.c f3dcdc0e95509864767c1f0991b19360f969e44177f4e058fd51da9a6154f47e @@ -794,7 +794,7 @@ F test/crash8.test 64366e459c28dd62edfb7ad87253a409c7533b92d16fcc479a6a8131bdcc3 F test/crashM.test d95f59046fa749b0d0822edf18a717788c8f318d F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2 F test/createtab.test 85cdfdae5c3de331cd888d6c66e1aba575b47c2e3c3cc4a1d6f54140699f5165 -F test/cse.test 277350a26264495e86b1785f34d2d0c8600e021c +F test/cse.test 00b3aea44b16828833c94fbe92475fd6977583fcb064ae0bc590986812b38d0c F test/csv01.test c9c3af0d58c34e9ac970c5875a77939edb958762c8aafb95409e19a3f088b6cd F test/ctime.test 78749e6c9a5f0010d67985be80788f841e3cd2da18114e2ed6010399a7d807f3 F test/cursorhint.test 7bc346788390475e77a345da2b92270d04d35856 @@ -1860,7 +1860,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 4a302b42c7bf5e11ddb5522ca999f74aba397d3a7eb91b1844bb02852f772441 -R 331f374d4a1fad71dab0165ef9442a28 -U drh -Z 539f8d9e86dbe33e71b5401cc47a6add +P 42b02454b146ca1b04c0a5321465326435fc5b995f5498d3b1cf69c558a20f95 +R 7526b019c921c26e2b222f7eff0de045 +U dan +Z 6eebcd629249d45bb8abb78c780a22dc diff --git a/manifest.uuid b/manifest.uuid index 7f2cc5b53a..d12842d6bb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -42b02454b146ca1b04c0a5321465326435fc5b995f5498d3b1cf69c558a20f95 \ No newline at end of file +98d56b4a34fddcbaecd953a045ae0270b4d78c1edf34cc73522fb4e12743af80 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index e588897370..bcabc38b6e 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3181,6 +3181,7 @@ static void sqlite3ExprCodeIN( int destNotNull; /* Jump here if a comparison is not true in step 6 */ int addrTop; /* Top of the step-6 loop */ int iTab = 0; /* Index to use */ + u8 okConstFactor = pParse->okConstFactor; assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); pLeft = pExpr->pLeft; @@ -3225,8 +3226,14 @@ static void sqlite3ExprCodeIN( ** so that the fields are in the same order as an existing index. The ** aiMap[] array contains a mapping from the original LHS field order to ** the field order that matches the RHS index. - */ + ** + ** Avoid factoring the LHS of the IN(...) expression out of the loop, + ** even if it is constant, as OP_Affinity may be used on the register + ** by code generated below. */ + assert( pParse->okConstFactor==okConstFactor ); + pParse->okConstFactor = 0; rLhsOrig = exprCodeVector(pParse, pLeft, &iDummy); + pParse->okConstFactor = okConstFactor; for(i=0; i Date: Sat, 4 Apr 2020 00:15:54 +0000 Subject: [PATCH 03/11] In the push-down optimization, do not substitute columns that have previously been identified as being constant by the propagate-constants optimization. Fix for ticket [51166be0159fd2ce] FossilOrigin-Name: 70c44811d12f540d4ec1c29dedbe999cf79b82e326a8712ae2fa0725d6bd8a65 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/select.c | 5 ++++- test/fuzzdata8.db | Bin 1474560 -> 1475584 bytes test/select4.test | 19 +++++++++++++++++++ 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 9b2980c15c..54d94e225e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\sfactoring\sout\sconstant\sexpressions\son\sthe\sLHS\sof\san\sIN(...)\soperator,\sas\sthe\sIN(...)\soperation\smay\saffect\sthe\saffinity\sof\sthese\svalues. -D 2020-04-03T19:37:14.358 +C In\sthe\spush-down\soptimization,\sdo\snot\ssubstitute\scolumns\sthat\shave\spreviously\nbeen\sidentified\sas\sbeing\sconstant\sby\sthe\spropagate-constants\soptimization.\nFix\sfor\sticket\s[51166be0159fd2ce] +D 2020-04-04T00:15:54.371 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -531,7 +531,7 @@ F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c 5c3b3b18e096353ee2794a8f8a6227c301a57ea771814c158546265d9ef2087e F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c fd38aa7f87ad0fc93577df6ef1d6cf2b9e5f6186b93c04271f5248c6c4be088c +F src/select.c 7aa91ab374d83a3b8ef02859fd61de57bc23aaeefa125b6e2d2c502662f2ea42 F src/shell.c.in 759bb4a283651955ff2ddb104541b1805b1fff915017083bdd39975cd4e223aa F src/sqlite.h.in cc7d0949ac32bb68ed97acdb3e7ae91cd413a24d32d6ff049ef8308d620a4367 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1024,7 +1024,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2 -F test/fuzzdata8.db 1299a262ccd07fa6318e37ae54941eae794009c92384f68ee72a7675916a9f56 +F test/fuzzdata8.db c165dcba8a97c9dfeb05a6da13579de4d7a7c307ceb6c84fb95d9b4b6ec5c9f9 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1304,7 +1304,7 @@ F test/securedel2.test 2d54c28e46eb1fd6902089958b20b1b056c6f1c5 F test/select1.test 009a6d8eacd9684d046302b8d13b50846a87e39d6f08e92178aa13e95ea29a2d F test/select2.test 352480e0e9c66eda9c3044e412abdf5be0215b56 F test/select3.test ddd1bc6d0c8dece136321c11bd26d0d8ad17f2b27c72935fdd6574d8cb99d1d4 -F test/select4.test 5389d9895968d1196c457d59b3ee6515d771d328 +F test/select4.test e8a2502e3623f3058871030599a48abb35789d2244d5b380ecf3696873fdd4a4 F test/select5.test df9ec0d218cedceb4fe7b63262025b547b50a55e59148c6f40b60ca25f1d4546 F test/select6.test 319d45e414cdd321bf17cfacedaf19e3935ad64dac357c53f1492338c6e9b801 F test/select7.test f659f231489349e8c5734e610803d7654207318f @@ -1860,7 +1860,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 42b02454b146ca1b04c0a5321465326435fc5b995f5498d3b1cf69c558a20f95 -R 7526b019c921c26e2b222f7eff0de045 -U dan -Z 6eebcd629249d45bb8abb78c780a22dc +P 98d56b4a34fddcbaecd953a045ae0270b4d78c1edf34cc73522fb4e12743af80 +R 409eb77bf9c2d267632bbd85b92cb09e +U drh +Z 5664bca40d462c783ef705fd18f0fbf7 diff --git a/manifest.uuid b/manifest.uuid index d12842d6bb..76b05e7f2a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -98d56b4a34fddcbaecd953a045ae0270b4d78c1edf34cc73522fb4e12743af80 \ No newline at end of file +70c44811d12f540d4ec1c29dedbe999cf79b82e326a8712ae2fa0725d6bd8a65 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 59ba706fcd..ce85c91d0b 100644 --- a/src/select.c +++ b/src/select.c @@ -3476,7 +3476,10 @@ static Expr *substExpr( ){ pExpr->iRightJoinTable = pSubst->iNewTable; } - if( pExpr->op==TK_COLUMN && pExpr->iTable==pSubst->iTable ){ + if( pExpr->op==TK_COLUMN + && pExpr->iTable==pSubst->iTable + && !ExprHasProperty(pExpr, EP_FixedCol) + ){ if( pExpr->iColumn<0 ){ pExpr->op = TK_NULL; }else{ diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 202803061e7fc6143dd202c54c0cabcf1d520341..377c6410395b9ad85c665faac902900415b0e8fc 100644 GIT binary patch delta 22191 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 IUx~K({DJqCEc0pr|9ilQC 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 Date: Sat, 4 Apr 2020 11:58:22 +0000 Subject: [PATCH 04/11] Remove a NEVER() that could be true in sqlite3MatchEName(). FossilOrigin-Name: 921448f0e24a3753374b32be9d7bf36a9ca5d8522eff9f0b51dc243f08652419 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/resolve.c | 2 +- test/fuzzdata8.db | Bin 1475584 -> 1476608 bytes 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 54d94e225e..3cb4e79c30 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sthe\spush-down\soptimization,\sdo\snot\ssubstitute\scolumns\sthat\shave\spreviously\nbeen\sidentified\sas\sbeing\sconstant\sby\sthe\spropagate-constants\soptimization.\nFix\sfor\sticket\s[51166be0159fd2ce] -D 2020-04-04T00:15:54.371 +C Remove\sa\sNEVER()\sthat\scould\sbe\strue\sin\ssqlite3MatchEName(). +D 2020-04-04T11:58:22.101 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -529,7 +529,7 @@ F src/pragma.h 9473160d220416456b40f27323bb4b316d4e4e08ffbf8bf88c5f7045d49c38e5 F src/prepare.c 8d4d6c8aa6afefc48027c54b41cdf134b4d6bc2fc4badbe483ad7fd9e1728a28 F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c 5c3b3b18e096353ee2794a8f8a6227c301a57ea771814c158546265d9ef2087e +F src/resolve.c bbaa078ea3546276fe34e78187dc67036de4c7d95deff2ce3784e79623a31aa5 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 7aa91ab374d83a3b8ef02859fd61de57bc23aaeefa125b6e2d2c502662f2ea42 F src/shell.c.in 759bb4a283651955ff2ddb104541b1805b1fff915017083bdd39975cd4e223aa @@ -1024,7 +1024,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2 -F test/fuzzdata8.db c165dcba8a97c9dfeb05a6da13579de4d7a7c307ceb6c84fb95d9b4b6ec5c9f9 +F test/fuzzdata8.db fb701c5653f0a75a58e2ee0f8baf5b207faa7702dda88c913ebbe2abb3b33de3 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1860,7 +1860,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 98d56b4a34fddcbaecd953a045ae0270b4d78c1edf34cc73522fb4e12743af80 -R 409eb77bf9c2d267632bbd85b92cb09e +P 70c44811d12f540d4ec1c29dedbe999cf79b82e326a8712ae2fa0725d6bd8a65 +R 1d8ea1f97a3e77c156396942d00ee749 U drh -Z 5664bca40d462c783ef705fd18f0fbf7 +Z c92edccf4ade9cfa7ee39186e5aeb2c2 diff --git a/manifest.uuid b/manifest.uuid index 76b05e7f2a..255c1a4047 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -70c44811d12f540d4ec1c29dedbe999cf79b82e326a8712ae2fa0725d6bd8a65 \ No newline at end of file +921448f0e24a3753374b32be9d7bf36a9ca5d8522eff9f0b51dc243f08652419 \ No newline at end of file diff --git a/src/resolve.c b/src/resolve.c index 90dde10552..2def65f991 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -140,7 +140,7 @@ int sqlite3MatchEName( ){ int n; const char *zSpan; - if( NEVER(pItem->eEName!=ENAME_TAB) ) return 0; + if( pItem->eEName!=ENAME_TAB ) return 0; zSpan = pItem->zEName; for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){} if( zDb && (sqlite3StrNICmp(zSpan, zDb, n)!=0 || zDb[n]!=0) ){ diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 377c6410395b9ad85c665faac902900415b0e8fc..944393dbf4e9d70b66bb453c1529bb916c37a68e 100644 GIT binary patch delta 28415 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 delta 27562 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 From 85f2c76cf9eeae30fb410c73c7427724dbb02182 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 6 Apr 2020 16:37:05 +0000 Subject: [PATCH 05/11] When running ALTER TABLE, avoid adding some internally generated tokens to the token map to improve performance on schemas with nested views. FossilOrigin-Name: 4cf8721f5ceb1fdaefdc355b3211f75c53c4cdf9d2582ca70fc96777a9b057c2 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 11 ++++++++--- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 3cb4e79c30..ffc40648fe 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sa\sNEVER()\sthat\scould\sbe\strue\sin\ssqlite3MatchEName(). -D 2020-04-04T11:58:22.101 +C When\srunning\sALTER\sTABLE,\savoid\sadding\ssome\sinternally\sgenerated\stokens\sto\sthe\stoken\smap\sto\simprove\sperformance\son\sschemas\swith\snested\sviews. +D 2020-04-06T16:37:05.016 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -483,7 +483,7 @@ F src/date.c b29b349d277e3d579dcc295b24c0a2caed83fd8f090a9f7cbe6070c0fd662384 F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 793deaf88a0904f88285d93d6713c636d55ede0ffd9f08d10f4ea825531d367f F src/delete.c 11000121c4281c0bce4e41db29addfaea0038eaa127ece02557c9207bc3e541d -F src/expr.c 74973866b0fe8cd0bcaee7cec14541cb1a505d6103fde4922d82c867767c0d64 +F src/expr.c 29b4aedca855c6ef86786db894c6961605a9a1e70af23617db2976aea6c2c122 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 4b575423b0a5d4898b1a7868ce985cf1a8ad91c741c9abbb108ff02536d20f41 F src/func.c f3dcdc0e95509864767c1f0991b19360f969e44177f4e058fd51da9a6154f47e @@ -1860,7 +1860,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 70c44811d12f540d4ec1c29dedbe999cf79b82e326a8712ae2fa0725d6bd8a65 -R 1d8ea1f97a3e77c156396942d00ee749 -U drh -Z c92edccf4ade9cfa7ee39186e5aeb2c2 +P 921448f0e24a3753374b32be9d7bf36a9ca5d8522eff9f0b51dc243f08652419 +R 315e582db187b4e17ad03b8b387a78b4 +U dan +Z 72d22b8c17363fe4c28ed6cd6151ab27 diff --git a/manifest.uuid b/manifest.uuid index 255c1a4047..01c1550354 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -921448f0e24a3753374b32be9d7bf36a9ca5d8522eff9f0b51dc243f08652419 \ No newline at end of file +4cf8721f5ceb1fdaefdc355b3211f75c53c4cdf9d2582ca70fc96777a9b057c2 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index bcabc38b6e..b9b3b9ee6f 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1794,9 +1794,14 @@ void sqlite3ExprListSetName( assert( pItem->zEName==0 ); assert( pItem->eEName==ENAME_NAME ); pItem->zEName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n); - if( dequote ) sqlite3Dequote(pItem->zEName); - if( IN_RENAME_OBJECT ){ - sqlite3RenameTokenMap(pParse, (void*)pItem->zEName, pName); + if( dequote ){ + /* If dequote==0, then pName->z does not point to part of a DDL + ** statement handled by the parser. And so no token need be added + ** to the token-map. */ + sqlite3Dequote(pItem->zEName); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)pItem->zEName, pName); + } } } } From d44390c8c54268e1651fafb9ee738574947aceba Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 6 Apr 2020 18:16:31 +0000 Subject: [PATCH 06/11] Performance improvement for column name lookup. FossilOrigin-Name: 1e4b6a93987cdfbf829e2ff35ef417c290625f2894ad11949e301af518f1fb44 --- manifest | 24 ++++++++++++------------ manifest.uuid | 2 +- src/alter.c | 1 + src/build.c | 2 ++ src/resolve.c | 7 +++++-- src/select.c | 1 + src/sqliteInt.h | 2 ++ src/util.c | 13 +++++++++++++ 8 files changed, 37 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index ffc40648fe..d18793bda0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\srunning\sALTER\sTABLE,\savoid\sadding\ssome\sinternally\sgenerated\stokens\sto\sthe\stoken\smap\sto\simprove\sperformance\son\sschemas\swith\snested\sviews. -D 2020-04-06T16:37:05.016 +C Performance\simprovement\sfor\scolumn\sname\slookup. +D 2020-04-06T18:16:31.753 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -465,7 +465,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c ac9d737cace62b5cd88bff5310e53e299bc0919f08b5934a2bd0f8e8e65d770e +F src/alter.c db353ed3123b05730c58744e52a71711779abd8d9081e31c981b69ec42a911cc F src/analyze.c 831bb090988477a00d3b4c000746e1b0454dcc93b10b793e6ebe1c47f25d193a F src/attach.c ff2daea0fe62080192e3f262670e4f61f5a86c1e7bea9cec34e960fe79852aa1 F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06 @@ -475,7 +475,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 79ce96ab39fd2fc21ff00d03913587d5a08280a9eb081a08d0ffa9fa26f4f6fb F src/btree.h 6111552f19ed7a40f029cf4b33badc6fef9880314fffd80a945f0b7f43ab7471 F src/btreeInt.h dee1a1d0c621524e006bb260bd6b66d5d1867da6fe38cba9ad7b6a9bb9c0c175 -F src/build.c 3d22f21c4701f62c1a191c6b6d17552fb1b593fe9a97c0613cca05ab104a9a51 +F src/build.c ec6c0bda1e43ef55e5f5121a77ba19fac51fc6585f95ce2da795bcedcf6e8f36 F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 6a77ec9e0eb87aea929e002c816298907e337094a7b556898ae2d1e6be209f90 @@ -529,14 +529,14 @@ F src/pragma.h 9473160d220416456b40f27323bb4b316d4e4e08ffbf8bf88c5f7045d49c38e5 F src/prepare.c 8d4d6c8aa6afefc48027c54b41cdf134b4d6bc2fc4badbe483ad7fd9e1728a28 F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c bbaa078ea3546276fe34e78187dc67036de4c7d95deff2ce3784e79623a31aa5 +F src/resolve.c 4071f2576808300198b539a8839281eb7150b0b8155c3eaa9165f0253bfff6dc F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 7aa91ab374d83a3b8ef02859fd61de57bc23aaeefa125b6e2d2c502662f2ea42 +F src/select.c ab4eb1aee1bd066feea5b6eff264220ae54459019654264e9f688368a7d0c0b5 F src/shell.c.in 759bb4a283651955ff2ddb104541b1805b1fff915017083bdd39975cd4e223aa F src/sqlite.h.in cc7d0949ac32bb68ed97acdb3e7ae91cd413a24d32d6ff049ef8308d620a4367 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 9c5269260409eb3275324ccace6a13a96f4ad330c708415f70ca6097901ff4ee -F src/sqliteInt.h b0165686885990e29622f56b2f95b93c12c6f84be4cf1ee60797d80a0dcd7f15 +F src/sqliteInt.h 0f3848c46310d197246003f052985b72d1cdbfc0b31e069db76cb5231062fa1d F src/sqliteLimit.h 95cb8479ca459496d9c1c6a9f76b38aee12203a56ce1092fe13e50ae2454c032 F src/status.c 9ff2210207c6c3b4d9631a8241a7d45ab1b26a0e9c84cb07a9b5ce2de9a3b278 F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@ -601,7 +601,7 @@ F src/trigger.c 4ada1037cc99777f647a882cdacbd1a4deb6567b69daf02946286401b88cdc04 F src/update.c 3eb778c42155d944377a4ee5e440b04520f07094804ed6ce63d2528f619614d9 F src/upsert.c 2920de71b20f04fe25eb00b655d086f0ba60ea133c59d7fa3325c49838818e78 F src/utf.c 95fb6e03a5ca679045c5adccd05380f0addccabef5911abddcb06af069500ab7 -F src/util.c a285c1e026907b69fa2592bd05047a565a1d8a1aef2b73c924b6a8ffe772871a +F src/util.c 3b6cedf7a0c69bd6e1acce832873952d416212d6293b18d03064e07d7a9b5118 F src/vacuum.c 813b510ba887fee6492bcb11f2bf77d7eb58b232b83649136372e0a2fc17f4b9 F src/vdbe.c 972999395eee88702091fb5d50cf4effd07889c371807d222a7f517388e6378e F src/vdbe.h 51282fbe819ee0e8eeeaab176240860d334c20a12b14f3b363e7f1a4e05d60b9 @@ -1860,7 +1860,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 921448f0e24a3753374b32be9d7bf36a9ca5d8522eff9f0b51dc243f08652419 -R 315e582db187b4e17ad03b8b387a78b4 -U dan -Z 72d22b8c17363fe4c28ed6cd6151ab27 +P 4cf8721f5ceb1fdaefdc355b3211f75c53c4cdf9d2582ca70fc96777a9b057c2 +R 21d736bf1132a719fd78a53a135a2ffc +U drh +Z 2d567e7c67065db6dbe909acd8dc5855 diff --git a/manifest.uuid b/manifest.uuid index 01c1550354..76c084d972 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4cf8721f5ceb1fdaefdc355b3211f75c53c4cdf9d2582ca70fc96777a9b057c2 \ No newline at end of file +1e4b6a93987cdfbf829e2ff35ef417c290625f2894ad11949e301af518f1fb44 \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index 7114757a27..b041291a25 100644 --- a/src/alter.c +++ b/src/alter.c @@ -469,6 +469,7 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ for(i=0; inCol; i++){ Column *pCol = &pNew->aCol[i]; pCol->zName = sqlite3DbStrDup(db, pCol->zName); + pCol->hName = sqlite3StrIHash(pCol->zName); pCol->zColl = 0; pCol->pDflt = 0; } diff --git a/src/build.c b/src/build.c index dcd035e99d..cf36766aef 100644 --- a/src/build.c +++ b/src/build.c @@ -590,6 +590,7 @@ void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){ assert( pTable!=0 ); if( (pCol = pTable->aCol)!=0 ){ for(i=0; inCol; i++, pCol++){ + assert( pCol->zName==0 || pCol->hName==sqlite3StrIHash(pCol->zName) ); sqlite3DbFree(db, pCol->zName); sqlite3ExprDelete(db, pCol->pDflt); sqlite3DbFree(db, pCol->zColl); @@ -1238,6 +1239,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){ pCol = &p->aCol[p->nCol]; memset(pCol, 0, sizeof(p->aCol[0])); pCol->zName = z; + pCol->hName = sqlite3StrIHash(z); sqlite3ColumnPropertiesFromName(p, pCol); if( pType->n==0 ){ diff --git a/src/resolve.c b/src/resolve.c index 2def65f991..5877dfa371 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -294,6 +294,7 @@ static int lookupName( if( pSrcList ){ for(i=0, pItem=pSrcList->a; inSrc; i++, pItem++){ + u8 hCol; pTab = pItem->pTab; assert( pTab!=0 && pTab->zName!=0 ); assert( pTab->nCol>0 ); @@ -327,8 +328,9 @@ static int lookupName( if( 0==(cntTab++) ){ pMatch = pItem; } + hCol = sqlite3StrIHash(zCol); for(j=0, pCol=pTab->aCol; jnCol; j++, pCol++){ - if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ + if( pCol->hName==hCol && sqlite3StrICmp(pCol->zName, zCol)==0 ){ /* If there has been exactly one prior match and this match ** is for the right-hand table of a NATURAL JOIN or is in a ** USING clause, then skip this match. @@ -389,10 +391,11 @@ static int lookupName( if( pTab ){ int iCol; + u8 hCol = sqlite3StrIHash(zCol); pSchema = pTab->pSchema; cntTab++; for(iCol=0, pCol=pTab->aCol; iColnCol; iCol++, pCol++){ - if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ + if( pCol->hName==hCol && sqlite3StrICmp(pCol->zName, zCol)==0 ){ if( iCol==pTab->iPKey ){ iCol = -1; } diff --git a/src/select.c b/src/select.c index ce85c91d0b..76b9827e8c 100644 --- a/src/select.c +++ b/src/select.c @@ -2023,6 +2023,7 @@ int sqlite3ColumnsFromExprList( if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); } pCol->zName = zName; + pCol->hName = sqlite3StrIHash(zName); sqlite3ColumnPropertiesFromName(0, pCol); if( zName && sqlite3HashInsert(&ht, zName, pCol)==pCol ){ sqlite3OomFault(db); diff --git a/src/sqliteInt.h b/src/sqliteInt.h index d08c7ce1e7..aaa99a43a8 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1949,6 +1949,7 @@ struct Column { u8 notNull; /* An OE_ code for handling a NOT NULL constraint */ char affinity; /* One of the SQLITE_AFF_... values */ u8 szEst; /* Estimated size of value in this column. sizeof(INT)==1 */ + u8 hName; /* Column name hash for faster lookup */ u16 colFlags; /* Boolean properties. See COLFLAG_ defines below */ }; @@ -4567,6 +4568,7 @@ int sqlite3MatchEName( const char* ); Bitmask sqlite3ExprColUsed(Expr*); +u8 sqlite3StrIHash(const char*); int sqlite3ResolveExprNames(NameContext*, Expr*); int sqlite3ResolveExprListNames(NameContext*, ExprList*); void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*); diff --git a/src/util.c b/src/util.c index 693759bffc..09520d1d62 100644 --- a/src/util.c +++ b/src/util.c @@ -317,6 +317,19 @@ int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){ return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b]; } +/* +** Compute an 8-bit hash on a string that is insensitive to case differences +*/ +u8 sqlite3StrIHash(const char *z){ + u8 h = 0; + if( z==0 ) return 0; + while( z[0] ){ + h += UpperToLower[(unsigned char)z[0]]; + z++; + } + return h; +} + /* ** Compute 10 to the E-th power. Examples: E==1 results in 10. ** E==2 results in 100. E==50 results in 1.0e50. From 4047bdfd2c38b141b991ebaf3ada7666edc8fdc1 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 6 Apr 2020 20:35:52 +0000 Subject: [PATCH 07/11] Performance improvement in sqlite3ResolveExprNameList(). FossilOrigin-Name: 7e170e67f24c7cdef7e7ceac4e0b81a75382618e4abe9e604f3d7f6db9dc6396 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/resolve.c | 36 +++++++++++++++++++++++++++++++++--- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index d18793bda0..fa97f79655 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Performance\simprovement\sfor\scolumn\sname\slookup. -D 2020-04-06T18:16:31.753 +C Performance\simprovement\sin\ssqlite3ResolveExprNameList(). +D 2020-04-06T20:35:52.507 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -529,7 +529,7 @@ F src/pragma.h 9473160d220416456b40f27323bb4b316d4e4e08ffbf8bf88c5f7045d49c38e5 F src/prepare.c 8d4d6c8aa6afefc48027c54b41cdf134b4d6bc2fc4badbe483ad7fd9e1728a28 F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c 4071f2576808300198b539a8839281eb7150b0b8155c3eaa9165f0253bfff6dc +F src/resolve.c d36a2b1639e1c33d7b508abfd3452a63e7fd81737f6f3940bfef085fca6f21f4 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c ab4eb1aee1bd066feea5b6eff264220ae54459019654264e9f688368a7d0c0b5 F src/shell.c.in 759bb4a283651955ff2ddb104541b1805b1fff915017083bdd39975cd4e223aa @@ -1860,7 +1860,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 4cf8721f5ceb1fdaefdc355b3211f75c53c4cdf9d2582ca70fc96777a9b057c2 -R 21d736bf1132a719fd78a53a135a2ffc +P 1e4b6a93987cdfbf829e2ff35ef417c290625f2894ad11949e301af518f1fb44 +R 5912d7879df9e5ed94612a377e764286 U drh -Z 2d567e7c67065db6dbe909acd8dc5855 +Z 3f671a69f5df518d39221297552a02ec diff --git a/manifest.uuid b/manifest.uuid index 76c084d972..15622b5a78 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1e4b6a93987cdfbf829e2ff35ef417c290625f2894ad11949e301af518f1fb44 \ No newline at end of file +7e170e67f24c7cdef7e7ceac4e0b81a75382618e4abe9e604f3d7f6db9dc6396 \ No newline at end of file diff --git a/src/resolve.c b/src/resolve.c index 5877dfa371..60fed0b109 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1831,11 +1831,41 @@ int sqlite3ResolveExprListNames( ExprList *pList /* The expression list to be analyzed. */ ){ int i; - if( pList ){ - for(i=0; inExpr; i++){ - if( sqlite3ResolveExprNames(pNC, pList->a[i].pExpr) ) return WRC_Abort; + int savedHasAgg = 0; + Walker w; + if( pList==0 ) return WRC_Continue; + w.pParse = pNC->pParse; + w.xExprCallback = resolveExprStep; + w.xSelectCallback = resolveSelectStep; + w.xSelectCallback2 = 0; + w.u.pNC = pNC; + savedHasAgg = pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg|NC_HasWin); + pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin); + for(i=0; inExpr; i++){ + Expr *pExpr = pList->a[i].pExpr; + if( pExpr==0 ) continue; +#if SQLITE_MAX_EXPR_DEPTH>0 + w.pParse->nHeight += pExpr->nHeight; + if( sqlite3ExprCheckHeight(w.pParse, w.pParse->nHeight) ){ + return WRC_Abort; } +#endif + sqlite3WalkExpr(&w, pExpr); +#if SQLITE_MAX_EXPR_DEPTH>0 + w.pParse->nHeight -= pExpr->nHeight; +#endif + assert( EP_Agg==NC_HasAgg ); + assert( EP_Win==NC_HasWin ); + testcase( pNC->ncFlags & NC_HasAgg ); + testcase( pNC->ncFlags & NC_HasWin ); + if( pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg|NC_HasWin) ){ + ExprSetProperty(pExpr, pNC->ncFlags & (NC_HasAgg|NC_HasWin) ); + savedHasAgg |= pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg|NC_HasWin); + pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin); + } + if( pNC->nErr>0 || w.pParse->nErr>0 ) return WRC_Abort; } + pNC->ncFlags |= savedHasAgg; return WRC_Continue; } From b3120fdf5be0ae665448f0e3d694a53f12a635bc Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 7 Apr 2020 00:54:09 +0000 Subject: [PATCH 08/11] Remove dead code that was added during initial development of RENAME COLUMN but never actually served a purpose. FossilOrigin-Name: c95c4cda4640f05d61b13b4e60494dec07d4483734fc41ffcce73fb5163cbb0d --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/expr.c | 4 ---- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index fa97f79655..9f7663d7fa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Performance\simprovement\sin\ssqlite3ResolveExprNameList(). -D 2020-04-06T20:35:52.507 +C Remove\sdead\scode\sthat\swas\sadded\sduring\sinitial\sdevelopment\sof\sRENAME\sCOLUMN\nbut\snever\sactually\sserved\sa\spurpose. +D 2020-04-07T00:54:09.100 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -483,7 +483,7 @@ F src/date.c b29b349d277e3d579dcc295b24c0a2caed83fd8f090a9f7cbe6070c0fd662384 F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 793deaf88a0904f88285d93d6713c636d55ede0ffd9f08d10f4ea825531d367f F src/delete.c 11000121c4281c0bce4e41db29addfaea0038eaa127ece02557c9207bc3e541d -F src/expr.c 29b4aedca855c6ef86786db894c6961605a9a1e70af23617db2976aea6c2c122 +F src/expr.c daac9c5a0a47a9b8115ee24ef2d0e8be5e74e1d932fc72677b2c239380c2e0e1 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 4b575423b0a5d4898b1a7868ce985cf1a8ad91c741c9abbb108ff02536d20f41 F src/func.c f3dcdc0e95509864767c1f0991b19360f969e44177f4e058fd51da9a6154f47e @@ -1860,7 +1860,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 1e4b6a93987cdfbf829e2ff35ef417c290625f2894ad11949e301af518f1fb44 -R 5912d7879df9e5ed94612a377e764286 +P 7e170e67f24c7cdef7e7ceac4e0b81a75382618e4abe9e604f3d7f6db9dc6396 +R 96b603cf5952b339ffd4e6938833516a U drh -Z 3f671a69f5df518d39221297552a02ec +Z 5f8493cb155b275011c6713c52ec3f87 diff --git a/manifest.uuid b/manifest.uuid index 15622b5a78..1048e21996 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7e170e67f24c7cdef7e7ceac4e0b81a75382618e4abe9e604f3d7f6db9dc6396 \ No newline at end of file +c95c4cda4640f05d61b13b4e60494dec07d4483734fc41ffcce73fb5163cbb0d \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index b9b3b9ee6f..0629f508aa 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3844,10 +3844,6 @@ expr_code_doover: static const char zAff[] = "B\000C\000D\000E"; assert( SQLITE_AFF_BLOB=='A' ); assert( SQLITE_AFF_TEXT=='B' ); - if( iReg!=target ){ - sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target); - iReg = target; - } sqlite3VdbeAddOp4(v, OP_Affinity, iReg, 1, 0, &zAff[(aff-'B')*2], P4_STATIC); } From 2d99f9572180c67786357883ecffaceca596e33b Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 7 Apr 2020 01:18:23 +0000 Subject: [PATCH 09/11] The ALTER TABLE fix of check-in [7e5ad8e0ab7ee91a] is no longer needed due to the changes at check-in [4cf8721f5ceb1fda]. But, we keep the defense in place as an assert() for extra safety. FossilOrigin-Name: 230556e859536bbadf0daf8133a9a01ef4f03148b3296723e37bad66e3fc3d82 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/alter.c | 2 +- src/expr.c | 1 + 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 9f7663d7fa..57765085e0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sdead\scode\sthat\swas\sadded\sduring\sinitial\sdevelopment\sof\sRENAME\sCOLUMN\nbut\snever\sactually\sserved\sa\spurpose. -D 2020-04-07T00:54:09.100 +C The\sALTER\sTABLE\sfix\sof\scheck-in\s[7e5ad8e0ab7ee91a]\sis\sno\slonger\sneeded\sdue\nto\sthe\schanges\sat\scheck-in\s[4cf8721f5ceb1fda].\s\sBut,\swe\skeep\sthe\sdefense\nin\splace\sas\san\sassert()\sfor\sextra\ssafety. +D 2020-04-07T01:18:23.360 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -465,7 +465,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c db353ed3123b05730c58744e52a71711779abd8d9081e31c981b69ec42a911cc +F src/alter.c fa2c3be9b0ebecfafb7062072a0ae6eda126d3e5a9fd51b2eded5acd95dc783c F src/analyze.c 831bb090988477a00d3b4c000746e1b0454dcc93b10b793e6ebe1c47f25d193a F src/attach.c ff2daea0fe62080192e3f262670e4f61f5a86c1e7bea9cec34e960fe79852aa1 F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06 @@ -483,7 +483,7 @@ F src/date.c b29b349d277e3d579dcc295b24c0a2caed83fd8f090a9f7cbe6070c0fd662384 F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 793deaf88a0904f88285d93d6713c636d55ede0ffd9f08d10f4ea825531d367f F src/delete.c 11000121c4281c0bce4e41db29addfaea0038eaa127ece02557c9207bc3e541d -F src/expr.c daac9c5a0a47a9b8115ee24ef2d0e8be5e74e1d932fc72677b2c239380c2e0e1 +F src/expr.c b292bdecd64cd695109ceaa3c810f8b41f202368c75adb9ea680a875df5b0308 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 4b575423b0a5d4898b1a7868ce985cf1a8ad91c741c9abbb108ff02536d20f41 F src/func.c f3dcdc0e95509864767c1f0991b19360f969e44177f4e058fd51da9a6154f47e @@ -1860,7 +1860,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 7e170e67f24c7cdef7e7ceac4e0b81a75382618e4abe9e604f3d7f6db9dc6396 -R 96b603cf5952b339ffd4e6938833516a +P c95c4cda4640f05d61b13b4e60494dec07d4483734fc41ffcce73fb5163cbb0d +R 8efe08123193d0ec7b4ac8c33faea4db U drh -Z 5f8493cb155b275011c6713c52ec3f87 +Z 25c5bd97478bfa906937072a65ec4128 diff --git a/manifest.uuid b/manifest.uuid index 1048e21996..6bb0f559d1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c95c4cda4640f05d61b13b4e60494dec07d4483734fc41ffcce73fb5163cbb0d \ No newline at end of file +230556e859536bbadf0daf8133a9a01ef4f03148b3296723e37bad66e3fc3d82 \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index b041291a25..c357f22074 100644 --- a/src/alter.c +++ b/src/alter.c @@ -698,7 +698,7 @@ void *sqlite3RenameTokenMap(Parse *pParse, void *pPtr, Token *pToken){ RenameToken *pNew; assert( pPtr || pParse->db->mallocFailed ); renameTokenCheckAll(pParse, pPtr); - if( pParse->eParseMode!=PARSE_MODE_UNMAP ){ + if( ALWAYS(pParse->eParseMode!=PARSE_MODE_UNMAP) ){ pNew = sqlite3DbMallocZero(pParse->db, sizeof(RenameToken)); if( pNew ){ pNew->p = pPtr; diff --git a/src/expr.c b/src/expr.c index 0629f508aa..7165e4fa14 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1787,6 +1787,7 @@ void sqlite3ExprListSetName( int dequote /* True to cause the name to be dequoted */ ){ assert( pList!=0 || pParse->db->mallocFailed!=0 ); + assert( pParse->eParseMode!=PARSE_MODE_UNMAP || dequote==0 ); if( pList ){ struct ExprList_item *pItem; assert( pList->nExpr>0 ); From aa0696ee9a0b7ec3f9451520eb3bdcd3e7872b30 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 7 Apr 2020 13:08:56 +0000 Subject: [PATCH 10/11] Add the --spinner option to the fuzzcheck test program. FossilOrigin-Name: b1eae2686f03a6e20a49ca2b3a654b3019506d4941708ee3919c339cd093a57d --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/fuzzcheck.c | 25 +++++++++++++++++++++---- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 57765085e0..73f306b088 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\sALTER\sTABLE\sfix\sof\scheck-in\s[7e5ad8e0ab7ee91a]\sis\sno\slonger\sneeded\sdue\nto\sthe\schanges\sat\scheck-in\s[4cf8721f5ceb1fda].\s\sBut,\swe\skeep\sthe\sdefense\nin\splace\sas\san\sassert()\sfor\sextra\ssafety. -D 2020-04-07T01:18:23.360 +C Add\sthe\s--spinner\soption\sto\sthe\sfuzzcheck\stest\sprogram. +D 2020-04-07T13:08:56.300 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1016,7 +1016,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 F test/fuzz_common.tcl b7197de6ed1ee8250a4f82d67876f4561b42ee8cbbfc6160dcb66331bad3f830 F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 -F test/fuzzcheck.c 1ead09510c7bb3475675e499feb721790544e57e00168d687124d9d94ea843ac +F test/fuzzcheck.c a738e69ba6c743c3ed24ecd27ed2867b7c339b2db07b259f341cc9d982113583 F test/fuzzdata1.db d36e88741b4f23bcbaaf55b006290669d03c6c891cf13c7b3a53bc1b097b693f F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -1860,7 +1860,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 c95c4cda4640f05d61b13b4e60494dec07d4483734fc41ffcce73fb5163cbb0d -R 8efe08123193d0ec7b4ac8c33faea4db +P 230556e859536bbadf0daf8133a9a01ef4f03148b3296723e37bad66e3fc3d82 +R 5a2a574f2e79b4a35d530f14a5558dbb U drh -Z 25c5bd97478bfa906937072a65ec4128 +Z 678df51ea1c8b8197462f0a5c962356f diff --git a/manifest.uuid b/manifest.uuid index 6bb0f559d1..5613876c8d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -230556e859536bbadf0daf8133a9a01ef4f03148b3296723e37bad66e3fc3d82 \ No newline at end of file +b1eae2686f03a6e20a49ca2b3a654b3019506d4941708ee3919c339cd093a57d \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index 992b225d36..e5c272342f 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -1423,6 +1423,7 @@ static void showHelp(void){ " -q|--quiet Reduced output\n" " --rebuild Rebuild and vacuum the database file\n" " --result-trace Show the results of each SQL command\n" +" --spinner Use a spinner to show progress\n" " --sqlid N Use only SQL where sqlid=N\n" " --timeout N Abort if any single test needs more than N seconds\n" " -v|--verbose Increased output. Repeat for more output.\n" @@ -1449,6 +1450,7 @@ int main(int argc, char **argv){ int rebuildFlag = 0; /* --rebuild */ int vdbeLimitFlag = 0; /* --limit-vdbe */ int infoFlag = 0; /* --info */ + int bSpinner = 0; /* True for --spinner */ int timeoutTest = 0; /* undocumented --timeout-test flag */ int runFlags = 0; /* Flags sent to runSql() */ char *zMsg = 0; /* Add this message */ @@ -1575,6 +1577,9 @@ int main(int argc, char **argv){ if( strcmp(z,"result-trace")==0 ){ runFlags |= SQL_OUTPUT; }else + if( strcmp(z,"spinner")==0 ){ + bSpinner = 1; + }else if( strcmp(z,"sqlid")==0 ){ if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]); onlySqlid = integerValue(argv[++i]); @@ -1870,11 +1875,16 @@ int main(int argc, char **argv){ /* Run a test using each SQL script against each database. */ - if( !verboseFlag && !quietFlag ) printf("%s:", zDbName); + if( !verboseFlag && !quietFlag && !bSpinner ) printf("%s:", zDbName); for(pSql=g.pFirstSql; pSql; pSql=pSql->pNext){ if( isDbSql(pSql->a, pSql->sz) ){ sqlite3_snprintf(sizeof(g.zTestName), g.zTestName, "sqlid=%d",pSql->id); - if( verboseFlag ){ + if( bSpinner ){ + int nTotal =g.nSql; + int idx = pSql->seq; + printf("\r%s: %d/%d ", zDbName, idx, nTotal); + fflush(stdout); + }else if( verboseFlag ){ printf("%s\n", g.zTestName); fflush(stdout); }else if( !quietFlag ){ @@ -1898,7 +1908,12 @@ int main(int argc, char **argv){ const char *zVfs = "inmem"; sqlite3_snprintf(sizeof(g.zTestName), g.zTestName, "sqlid=%d,dbid=%d", pSql->id, pDb->id); - if( verboseFlag ){ + if( bSpinner ){ + int nTotal = g.nDb*g.nSql; + int idx = pSql->seq*g.nDb + pDb->id - 1; + printf("\r%s: %d/%d ", zDbName, idx, nTotal); + fflush(stdout); + }else if( verboseFlag ){ printf("%s\n", g.zTestName); fflush(stdout); }else if( !quietFlag ){ @@ -1977,7 +1992,9 @@ int main(int argc, char **argv){ } } } - if( !quietFlag && !verboseFlag ){ + if( bSpinner ){ + printf("\n"); + }else if( !quietFlag && !verboseFlag ){ printf(" 100%% - %d tests\n", g.nDb*g.nSql); } From 4b3282d8a0ab1ae0ef262d9b8d684f800b0558fa Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 7 Apr 2020 15:07:11 +0000 Subject: [PATCH 11/11] Limit LIKE/GLOB pattern length to 100 bytes (default is 50K) when running dbsql cases in the fuzzcheck utility. FossilOrigin-Name: 10306118e8591e727af477a1a15d136852d21170e645bd0e75f7c88346b037d7 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/fuzzcheck.c | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 73f306b088..43e422bbaa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\s--spinner\soption\sto\sthe\sfuzzcheck\stest\sprogram. -D 2020-04-07T13:08:56.300 +C Limit\sLIKE/GLOB\spattern\slength\sto\s100\sbytes\s(default\sis\s50K)\swhen\srunning\ndbsql\scases\sin\sthe\sfuzzcheck\sutility. +D 2020-04-07T15:07:11.446 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1016,7 +1016,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 F test/fuzz_common.tcl b7197de6ed1ee8250a4f82d67876f4561b42ee8cbbfc6160dcb66331bad3f830 F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 -F test/fuzzcheck.c a738e69ba6c743c3ed24ecd27ed2867b7c339b2db07b259f341cc9d982113583 +F test/fuzzcheck.c 656ee850f331872a784e7d6a10649efe2af123bdaacb728b5a03e4faee8b959c F test/fuzzdata1.db d36e88741b4f23bcbaaf55b006290669d03c6c891cf13c7b3a53bc1b097b693f F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -1860,7 +1860,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 230556e859536bbadf0daf8133a9a01ef4f03148b3296723e37bad66e3fc3d82 -R 5a2a574f2e79b4a35d530f14a5558dbb +P b1eae2686f03a6e20a49ca2b3a654b3019506d4941708ee3919c339cd093a57d +R b12213b0df5dc8fc33fac9cdcf090d4e U drh -Z 678df51ea1c8b8197462f0a5c962356f +Z 6587ee9cfa3092e47e4718062b1b99b1 diff --git a/manifest.uuid b/manifest.uuid index 5613876c8d..7e3d8e0200 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b1eae2686f03a6e20a49ca2b3a654b3019506d4941708ee3919c339cd093a57d \ No newline at end of file +10306118e8591e727af477a1a15d136852d21170e645bd0e75f7c88346b037d7 \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index e5c272342f..c57cf56521 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -894,6 +894,7 @@ int runCombinedDbSqlInput(const uint8_t *aData, size_t nByte){ if( depthLimit>0 ){ sqlite3_limit(cx.db, SQLITE_LIMIT_EXPR_DEPTH, depthLimit); } + sqlite3_limit(cx.db, SQLITE_LIMIT_LIKE_PATTERN_LENGTH, 100); sqlite3_hard_heap_limit64(heapLimit); if( nDb>=20 && aDb[18]==2 && aDb[19]==2 ){