]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a failing assert() caused by changes on this branch.
authordan <Dan Kennedy>
Sat, 23 Sep 2023 18:52:22 +0000 (18:52 +0000)
committerdan <Dan Kennedy>
Sat, 23 Sep 2023 18:52:22 +0000 (18:52 +0000)
FossilOrigin-Name: d0e21f20bd8643d21c4b88fb75b83939d68e9b7118f7289a164656f11d2ee555

manifest
manifest.uuid
src/build.c
src/where.c
test/indexA.test

index 46a1de7f9e00518ebdee23bb19ea0c28fefcf0e3..c2647a59bf46caccf68e30a5cdc50c555c64ee88 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sharmless\scompiler\swarning.
-D 2023-09-23T18:49:30.025
+C Fix\sa\sfailing\sassert()\scaused\sby\schanges\son\sthis\sbranch.
+D 2023-09-23T18:52:22.726
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -652,7 +652,7 @@ F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522
 F src/btree.c d2e73513d382e6e4829b823fb41b5f2eddd9c5984b1492a7a6333cd91be15601
 F src/btree.h 03e3356f5208bcab8eed4e094240fdac4a7f9f5ddf5e91045ce589f67d47c240
 F src/btreeInt.h 91a9e0c41a0e71fa91a742ec285c63dd8dcb38b73d14fae0ed7209174ff0fdc1
-F src/build.c 41a29ee957aa2c16a1521e06aec8de3dcb0d38ca5c4888de734a57cd98e1cf5b
+F src/build.c a52c1e9a1747a5650aa9eb16c417bb9be07d2e66473431e73bbbd1b24047ed61
 F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d490
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c db847fac81837ff5e5028a5f7505147ac645ae676104adc5bc08e356f243de40
@@ -795,7 +795,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 01e051a1e713d9eabdb25df38602837cec8f4c2cae448ce2cf6accc87af903e9
 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
 F src/walker.c 7c7ea0115345851c3da4e04e2e239a29983b61fb5b038b94eede6aba462640e2
-F src/where.c cf43f273642ec541f70d6b56a883f5ab1b8c7c7cfd03ac95ee653b996035d911
+F src/where.c e2ce695f5963620d4c403fb97e51216ca364247090e806bec938c82af9573eee
 F src/whereInt.h 4b38c5889514e3aead3f27d0ee9a26e47c3f150efc59e2a8b4e3bc8835e4d7a1
 F src/wherecode.c 5d77db30a2a3dd532492ae882de114edba2fae672622056b1c7fd61f5917a8f1
 F src/whereexpr.c dc5096eca5ed503999be3bdee8a90c51361289a678d396a220912e9cb73b3c00
@@ -1249,7 +1249,7 @@ F test/index6.test b376a648e85aa71c50074382784e6cb0c126ec46e43d1ad15af9a4d234c52
 F test/index7.test b238344318e0b4e42126717f6554f0e7dfd0b39cecad4b736039b43e1e3b6eb3
 F test/index8.test caa097735c91dbc23d8a402f5e63a2a03c83840ba3928733ed7f9a03f8a912a3
 F test/index9.test 2ac891806a4136ef3e91280477e23114e67575207dc331e6797fa0ed9379f997
-F test/indexA.test 3658485f1df2556dde8f00eba4f9c95d717e909bbafa8292eddb2c9a43af4a93
+F test/indexA.test 0f2a0f67f49a437714f374b304f924c692319c1cb56b46d2de67b735a3d62eb2
 F test/indexedby.test f21eca4f7a6ffe14c8500a7ad6cd53166666c99e5ccd311842a28bc94a195fe0
 F test/indexexpr1.test 62558b1cfd7ccbe7bc015849cc6d1a13ef124e80cbd5b3a98dc66c3c9cce0cf4
 F test/indexexpr2.test 1c382e81ef996d8ae8b834a74f2a9013dddf59214c32201d7c8a656d739f999a
@@ -2122,8 +2122,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 66ed7abdfa228abde2052e3988589371f0e49b11582b1b4a83255d2df3a0aefa
-R 3d918228edaf1a5c115c6963cb404aa5
-U drh
-Z 32997293db3f338b2f37b2689aab4002
+P 7c4210253b660b385d14de3ae7ab30f038036308e1164ec17b40e2805b9b2235
+R 79f7b7ac29c4d246921dcdd8df4ce062
+U dan
+Z 1c7c371de6fd21faea295aab95777c4c
 # Remove this line to create a well-formed Fossil manifest.
index 2037af927b34a5d7655e28dde4310eb946c49441..b92702d6d8dab709c2c825246e16f5df92ec281e 100644 (file)
@@ -1 +1 @@
-7c4210253b660b385d14de3ae7ab30f038036308e1164ec17b40e2805b9b2235
\ No newline at end of file
+d0e21f20bd8643d21c4b88fb75b83939d68e9b7118f7289a164656f11d2ee555
\ No newline at end of file
index 2f672653e67d4ff0861f4d2cab19baf257f09898..b3e963974f1fb1f3df5cd946d1662e568d3cacfe 100644 (file)
@@ -4277,6 +4277,7 @@ void sqlite3CreateIndex(
   assert( HasRowid(pTab)
       || pTab->iPKey<0 || sqlite3TableColumnToIndex(pIndex, pTab->iPKey)>=0 );
   recomputeColumnsNotIndexed(pParse, pIndex);
+  if( pParse->nErr ) goto exit_create_index;
   if( pTblName!=0 && pIndex->nColumn>=pTab->nCol ){
     pIndex->isCovering = 1;
     for(j=0; j<pTab->nCol; j++){
index 2dd40025a7e3302b008a9d86f046a6d4a6ecf190..65f7f5acdf3f1d2bf5659c724cd8f9a6ba71096b 100644 (file)
@@ -1149,6 +1149,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter(
   assert( pLoop!=0 );
   assert( v!=0 );
   assert( pLoop->wsFlags & WHERE_BLOOMFILTER );
+  assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 );
 
   addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
   do{
index 6de9c94861bca9334ca0f14539d4fbea535454ea..2e67359f3bc7b7d5cb641d73099469d1dafc4bd2 100644 (file)
@@ -140,5 +140,135 @@ foreach {tn idx} {
 
 }
 
+reset_db
+do_execsql_test 3.0 {
+  CREATE TABLE x1(a TEXT, d PRIMARY KEY, b, c) WITHOUT ROWID;
+  INSERT INTO x1 VALUES('2', 1, 'two', 'ii');
+  INSERT INTO x1 VALUES('2.0', 2, 'twopointoh', 'ii.0');
+
+  CREATE TABLE x2(a NUMERIC, b, c, d PRIMARY KEY) WITHOUT ROWID;
+  INSERT INTO x2 VALUES('2', 'two', 'ii', 1);
+  INSERT INTO x2 VALUES('2.0', 'twopointoh', 'ii.0', 2);
+
+  CREATE TABLE x3(d PRIMARY KEY, a REAL, b, c) WITHOUT ROWID;
+  INSERT INTO x3 VALUES(34, '2', 'two', 'ii');
+  INSERT INTO x3 VALUES(35, '2.0', 'twopointoh', 'ii.0');
+}
+
+foreach {tn idx} {
+  0 {
+  }
+  1 {
+    CREATE INDEX i1 ON x1(b, c) WHERE a=2;
+    CREATE INDEX i2 ON x2(b, c) WHERE a=2;
+    CREATE INDEX i3 ON x3(b, c) WHERE a=2;
+  }
+  2 {
+    CREATE INDEX i1 ON x1(b, c) WHERE a=2.0;
+    CREATE INDEX i2 ON x2(b, c) WHERE a=2.0;
+    CREATE INDEX i3 ON x3(b, c) WHERE a=2.0;
+  }
+  3 {
+    CREATE INDEX i1 ON x1(b, c) WHERE a='2.0';
+    CREATE INDEX i2 ON x2(b, c) WHERE a='2.0';
+    CREATE INDEX i3 ON x3(b, c) WHERE a='2.0';
+  }
+  4 {
+    CREATE INDEX i1 ON x1(b, c) WHERE a='2';
+    CREATE INDEX i2 ON x2(b, c) WHERE a='2';
+    CREATE INDEX i3 ON x3(b, c) WHERE a='2';
+  }
+} {
+  execsql { DROP INDEX IF EXISTS i1 }
+  execsql { DROP INDEX IF EXISTS i2 }
+  execsql { DROP INDEX IF EXISTS i3 }
+
+  execsql $idx
+  do_execsql_test 3.1.$tn.1 {
+    SELECT a, b, c, typeof(a) FROM x1 WHERE a=2
+  } {2 two ii text}
+  do_execsql_test 3.1.$tn.2 {
+    SELECT a, b, c, typeof(a) FROM x1 WHERE a=2.0
+  } {2.0 twopointoh ii.0 text}
+  do_execsql_test 3.1.$tn.3 {
+    SELECT a, b, c, typeof(a) FROM x1 WHERE a='2'
+  } {2 two ii text}
+  do_execsql_test 3.1.$tn.4 {
+    SELECT a, b, c, typeof(a) FROM x1 WHERE a='2.0'
+  } {2.0 twopointoh ii.0 text}
+
+  do_execsql_test 3.1.$tn.5 {
+    SELECT a, b, c, typeof(a) FROM x2 WHERE a=2
+  } {2 two ii integer 2 twopointoh ii.0 integer}
+  do_execsql_test 3.1.$tn.6 {
+    SELECT a, b, c, typeof(a) FROM x2 WHERE a=2.0
+  } {2 two ii integer 2 twopointoh ii.0 integer}
+  do_execsql_test 3.1.$tn.7 {
+    SELECT a, b, c, typeof(a) FROM x2 WHERE a='2'
+  } {2 two ii integer 2 twopointoh ii.0 integer}
+  do_execsql_test 3.1.$tn.8 {
+    SELECT a, b, c, typeof(a) FROM x2 WHERE a='2.0'
+  } {2 two ii integer 2 twopointoh ii.0 integer}
+
+  do_execsql_test 3.1.$tn.9 {
+    SELECT a, b, c, typeof(a) FROM x3 WHERE a=2
+  } {2.0 two ii real 2.0 twopointoh ii.0 real}
+  do_execsql_test 3.1.$tn.10 {
+    SELECT a, b, c, typeof(a) FROM x3 WHERE a=2.0
+  } {2.0 two ii real 2.0 twopointoh ii.0 real}
+  do_execsql_test 3.1.$tn.11 {
+    SELECT a, b, c, typeof(a) FROM x3 WHERE a='2'
+  } {2.0 two ii real 2.0 twopointoh ii.0 real}
+  do_execsql_test 3.1.$tn.12 {
+    SELECT a, b, c, typeof(a) FROM x3 WHERE a='2.0'
+  } {2.0 two ii real 2.0 twopointoh ii.0 real}
+}
+
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 4.0 {
+  CREATE TABLE t2(a INTEGER, b TEXT);
+  INSERT INTO t2 VALUES(1, 'two');
+  INSERT INTO t2 VALUES(2, 'two');
+  INSERT INTO t2 VALUES(3, 'two');
+  INSERT INTO t2 VALUES(1, 'three');
+  INSERT INTO t2 VALUES(2, 'three');
+  INSERT INTO t2 VALUES(3, 'three');
+
+  CREATE INDEX t2a_two ON t2(a) WHERE b='two';
+}
+
+# explain_i { SELECT sum(a), b FROM t2 WHERE b='two' }
+do_execsql_test 4.1.1 {
+  SELECT sum(a), b FROM t2 WHERE b='two'
+} {6 two}
+do_eqp_test 4.1.2 {
+  SELECT sum(a), b FROM t2 WHERE b='two'
+} {USING COVERING INDEX t2a_two}
+
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 5.0 {
+  CREATE TABLE t1(a INTEGER PRIMQRY KEY, b, c);
+}
+do_catchsql_test 5.1 {
+  CREATE INDEX ex1 ON t1(c) WHERE b IS 'abc' COLLATE g;
+} {1 {no such collation sequence: g}}
+
+#proc xyz {lhs rhs} {
+#  return [string compare $lhs $rhs]
+#}
+#db collate xyz xyz
+#do_execsql_test 5.2 {
+#  CREATE INDEX ex1 ON t1(c) WHERE b IS 'abc' COLLATE xyz;
+#}
+#db close
+#sqlite3 db test.db
+#do_execsql_test 5.3 {
+#  SELECT * FROM t1
+#}
+
+
+
 finish_test