]> 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:42:01 +0000 (22:42 +0000)
committerdrh <>
Sat, 25 Mar 2023 22:42:01 +0000 (22:42 +0000)
zeroblobs prior to running comparisons.

FossilOrigin-Name: 60f4d19d91ac29f5c84eaab77d5a92b2005a05ef89c8855dd800a1c457eafb16

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

index 6f0b38ed29a4111b5fa24a6251df408172593c1e..aa4f06b1fca078813420fef39d70d4111f0d636a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C In\sthe\sbyte-code\sgenerator,\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.
-D 2023-03-25T19:46:21.347
+C When\sreading\ssqlite_stat4\sdata\sduring\squery\splanning,\sbe\ssure\sto\sexpand\nzeroblobs\sprior\sto\srunning\scomparisons.
+D 2023-03-25T22:42:01.719
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -697,7 +697,7 @@ F src/vdbeInt.h a4147a4ddf613cb1bcb555ace9e9e74a9c099d65facd88155f191b1fb4d74cfb
 F src/vdbeapi.c 40c47b1528d308a322203de21d2e0d711753257ed9771771b6129214b1d65932
 F src/vdbeaux.c 3f9e3b6585e7434aa11300169dd66ddf0fc963a0c6f7940bdc058335dadeb353
 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
@@ -749,7 +749,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
@@ -2045,9 +2045,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 671bf6f5320bb3add6c897b2c3c78db504d3f0a21ba5347247bc9073ef669f55
-Q +c104e5c6eeb89575319d9f94f49446142b06912fa8b283c19d46aa2ccddc5bda
-R f04882717cc138a296ec31363b93f6f2
+P 2d439ccca4f8fd2bcf2178b4ebea54d6a6434303eeb0fe3c6b0be4f2ea5cbb60
+Q +5c8dd8dfcaab9c364b3a126ca35880ef57f5cecbe030771e646c934c8cf43709
+R 24570b072fd412a1fab95cd86964f54b
 U drh
-Z c5b862812ffdba692a1c16d183413668
+Z dc732f5096d6f74aa901005a5cc8026e
 # Remove this line to create a well-formed Fossil manifest.
index a2e273f007ca59830144fa5c5d8812b5d9a98f4a..37da087942007fdb67c3fa4b73265559dc06af47 100644 (file)
@@ -1 +1 @@
-2d439ccca4f8fd2bcf2178b4ebea54d6a6434303eeb0fe3c6b0be4f2ea5cbb60
\ No newline at end of file
+60f4d19d91ac29f5c84eaab77d5a92b2005a05ef89c8855dd800a1c457eafb16
\ 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