]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
When reading sqlite_stat4 data during query planning, be sure to expand
authordrh <>
Sat, 25 Mar 2023 22:37:23 +0000 (22:37 +0000)
committerdrh <>
Sat, 25 Mar 2023 22:37:23 +0000 (22:37 +0000)
zeroblobs prior to running comparisons.  Fix for the issue identified
by [forum:/forumpost/5275207102|forum post 5275207102].

FossilOrigin-Name: 5c8dd8dfcaab9c364b3a126ca35880ef57f5cecbe030771e646c934c8cf43709

manifest
manifest.uuid
src/vdbemem.c
test/analyzeE.test

index 5146a1ff25accd4da697c78e153f043ee245718a..0f9117b1ce4fca99cef0b09e8d5a5b2111652df4 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C In\sthe\sbyte-code,\swhen\sthe\sresult\sof\san\sexpression\sneeds\sto\sbe\sin\sa\sparticular\nregister,\salways\suse\sthe\ssqlite3ExprCode()\sroutine\sbecause\sit\shas\sthe\ssmarts\nto\sknow\swhether\sto\suse\sOP_Copy\sor\sOP_SCopy.\s\sDo\snot\stry\sto\sOP_SCopy\sinline\nbecause\san\sOP_Copy\smight\sbe\srequired.\s\sFix\sfor\sthe\sproblem\sidentified\sby\n[forum:/forumpost/5522082cfc|forum\spost\s5522082cfc].
-D 2023-03-25T19:44:25.803
+C When\sreading\ssqlite_stat4\sdata\sduring\squery\splanning,\sbe\ssure\sto\sexpand\nzeroblobs\sprior\sto\srunning\scomparisons.\s\sFix\sfor\sthe\sissue\sidentified\nby\s[forum:/forumpost/5275207102|forum\spost\s5275207102].
+D 2023-03-25T22:37:23.202
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -701,7 +701,7 @@ F src/vdbeInt.h a4147a4ddf613cb1bcb555ace9e9e74a9c099d65facd88155f191b1fb4d74cfb
 F src/vdbeapi.c 40c47b1528d308a322203de21d2e0d711753257ed9771771b6129214b1d65932
 F src/vdbeaux.c 0f5201346a83a35a08e833c3a03abe626119c07b7361c28bc6a259b98540f1d6
 F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd
-F src/vdbemem.c 656a51f3e99d7123ef852413c0249101718f3f3138e66be37ba2f16dcf7ce43e
+F src/vdbemem.c cbd2305d6444dc0aa3ab0dbe8f45ca5166da6f5a9bb6402be9739b6443a83fd0
 F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35
 F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823
 F src/vdbevtab.c aae4bd769410eb7e1d02c42613eec961d514459b1c3c1c63cfc84e92a137daac
@@ -753,7 +753,7 @@ F test/analyze8.test 29ef237d8a59b39cc31c3310134fefe96a690b195e3deed5ecb65283908
 F test/analyze9.test 30e1cb99336045a384a11d97900720184333c88174b3b89bc07444ea39e7df19
 F test/analyzeC.test 1111830ad355d29a294a5dda654dd5f6a8622c6a223a4f7b7b3d091df7a7a42b
 F test/analyzeD.test 485f621cfd2ef0a8f8ac79672586651bfa495bd899db50461bb4b558400ab3c1
-F test/analyzeE.test 8770de3834bb9aea1c892f4d155a5bd9578c23c0c3f199dc6f1b5d597b5bf65c
+F test/analyzeE.test d2ec7921c162cdc33ac8e7eb01f9ebf78100610af7c94c8552bbf551de1fb397
 F test/analyzeF.test 40b5cc3ad7b10e81020d7ca86f1417647ecfae7477cfd88acc5aa7ae1068f949
 F test/analyzeG.test 623be33038c49648872746c8dd8b23b5792c08fef173c55e82f1b12fca259852
 F test/analyzer1.test 459fa02c445ddbf0101a3bad47b34290a35f2e49
@@ -2051,8 +2051,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P a13c01d076d23f0de500e8e6283e803dfc96f0da7509c0d97d598d6b3e7b930b
-R e8d8985bf9d367c8fad5202d85b330d3
+P c104e5c6eeb89575319d9f94f49446142b06912fa8b283c19d46aa2ccddc5bda
+R a2c3c428afb2b0766c34c47704a29efd
 U drh
-Z 42699f196a341272ef4b9eed5abfaeeb
+Z 5b3601bdf9b325a3bd0226a3a60df613
 # Remove this line to create a well-formed Fossil manifest.
index a0a545044e2be24fc6cb7e58ac08a60587358585..4c444a3bb67dcc53384e590f786489d3f8817719 100644 (file)
@@ -1 +1 @@
-c104e5c6eeb89575319d9f94f49446142b06912fa8b283c19d46aa2ccddc5bda
\ No newline at end of file
+5c8dd8dfcaab9c364b3a126ca35880ef57f5cecbe030771e646c934c8cf43709
\ No newline at end of file
index 02588707debc8243c73b329df1aaffc45a857cbd..1b8808ea6f407fea357e4a389b22b60820257d7f 100644 (file)
@@ -1587,6 +1587,7 @@ static int valueFromExpr(
     rc = valueFromExpr(db, pExpr->pLeft, enc, aff, ppVal, pCtx);
     testcase( rc!=SQLITE_OK );
     if( *ppVal ){
+      rc = ExpandBlob(*ppVal);
       sqlite3VdbeMemCast(*ppVal, aff, enc);
       sqlite3ValueApplyAffinity(*ppVal, affinity, enc);
     }
index 9b5a27b87a097086b28befe31fa7838038f3fca2..2547daa1c8b20d1a069d0babf2f999fa58b211a6 100644 (file)
@@ -275,6 +275,20 @@ do_execsql_test analyzeE-6.4 {
   SELECT count(*) FROM sqlite_stat4 WHERE idx='i1' AND neq<>'1 1 1 1 1 1';
 } 0
 
-
+# 2023-03-25 https://sqlite.org/forum/forumpost/5275207102
+# Correctly expand zeroblobs while processing STAT4 information
+# during query planning.
+#
+reset_db
+do_execsql_test analyzeE-7.0 {
+  CREATE TABLE t1(a TEXT COLLATE binary);
+  CREATE INDEX t1x ON t1(a);
+  INSERT INTO t1(a) VALUES(0),('apple'),(NULL),(''),('banana');
+  ANALYZE;
+  SELECT format('(%s)',a) FROM t1 WHERE t1.a > CAST(zeroblob(5) AS TEXT);
+} {(0) (apple) (banana)}
+do_execsql_test analyzeE-7.1 {
+  SELECT format('(%s)',a) FROM t1 WHERE t1.a <= CAST(zeroblob(5) AS TEXT);
+} {()}
 
 finish_test