]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
New test cases for Bloom filter use on text keys as long as the bloom-filter-on-text
authordrh <>
Thu, 23 Jul 2026 20:23:04 +0000 (20:23 +0000)
committerdrh <>
Thu, 23 Jul 2026 20:23:04 +0000 (20:23 +0000)
collating sequence is binary.

FossilOrigin-Name: 98ced971bfd48aedf862fa0f8674744723e36eeda2ad600e91062fc8b7d9da9e

manifest
manifest.uuid
test/bloom1.test

index 013559ad648b96f56e3fad10427d9886cad52449..236dce7d0db24f80692549385be79e9e6fb58ed4 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improved\sBloom-filter\sinvariant\schecking.
-D 2026-07-23T18:55:12.383
+C New\stest\scases\sfor\sBloom\sfilter\suse\son\stext\skeys\sas\slong\sas\sthe\ncollating\ssequence\sis\sbinary.
+D 2026-07-23T20:23:04.256
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -939,7 +939,7 @@ F test/bind2.test 918bc35135f4141809ead7585909cde57d44db90a7a62aef540127148f91aa
 F test/bindxfer.test efecd12c580c14df5f4ad3b3e83c667744a4f7e0
 F test/bitvec.test 75894a880520164d73b1305c1c3f96882615e142
 F test/blob.test e7ac6c7d3a985cc4678c64f325292529a69ae252
-F test/bloom1.test dd9847746e1a52db2f19bc5c8cb751990b2eb04692aee6e8c9972b84cd4069bf
+F test/bloom1.test 1bb23039a13e9b93dae94d3819ffc5ed9017c634319f2bfc4bdb7f000875cfce
 F test/boundary1.tcl 6421b2d920d8b09539503a8673339d32f7609eb1
 F test/boundary1.test 66d7f4706ccdb42d58eafdb081de07b0eb42d77b
 F test/boundary2.tcl e34ef4e930cf1083150d4d2c603e146bd3b76bcb
@@ -2217,8 +2217,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 3013d6ab4afd4f63fa63a773778adcf07821cfcb33e3ae42752aea13fd2b6224
-R 0e1584e2f9d4a83856c66208401cbfea
+P f38f4167110df11ba54816932126f695dc6e114d4001d0261669807a55ad7966
+R 438ee1d912e98a29a406472f7bcf9770
 U drh
-Z 3049f8ec6b5a896c591d2da0158d3d82
+Z 755ec0c18f267274a2f24d11dbb024d2
 # Remove this line to create a well-formed Fossil manifest.
index e9cfa467fd1a601a81a84e65fb6cd73b2ace164c..0aa078dcaca930fd709e80289bbf7e2c94103a09 100644 (file)
@@ -1 +1 @@
-f38f4167110df11ba54816932126f695dc6e114d4001d0261669807a55ad7966
+98ced971bfd48aedf862fa0f8674744723e36eeda2ad600e91062fc8b7d9da9e
index 8f16301384496f58efb718233ffdeb042457e69e..6f5eb087ecce260b842618eb34ea58b0f79ce375 100644 (file)
@@ -238,4 +238,54 @@ do_execsql_test 6.1 {
   );
 } 0
 
+# Bug 2026-07-21T04:39:35Z  (Really an enhancement request, not a bug)
+#
+# Bloom filters are used for text comparisons as long as the collating
+# sequence is BINARY.  For any other collating sequence, the Bloom filter
+# is omitted.
+#
+reset_db
+do_execsql_test 7.1 {
+  CREATE TABLE big(a INTEGER PRIMARY KEY, b TEXT);
+  CREATE TABLE small(k TEXT PRIMARY KEY, v TEXT) WITHOUT ROWID;
+  WITH RECURSIVE c(n) AS(VALUES(0) UNION ALL SELECT n+1 FROM c WHERE n<9999)
+    INSERT INTO big(b) SELECT format('k%07d',n) FROM c;
+  WITH RECURSIVE c(n) AS(VALUES(0) UNION ALL SELECT n+1 FROM c WHERE n<99)
+    INSERT INTO small(k,v) SELECT format('k%07d',n), n*1000 FROM c;
+  ANALYZE;
+}
+do_execsql_test 7.2 {
+  SELECT count(*) FROM big CROSS JOIN small
+   WHERE small.k=big.b AND small.v<>'nope';
+} 100
+do_eqp_test 7.3 {
+  SELECT count(*) FROM big CROSS JOIN small
+   WHERE small.k=big.b AND small.v<>'nope';
+} {
+  QUERY PLAN
+  |--SCAN big
+  |--BLOOM FILTER ON small (k=?)
+  `--SEARCH small USING PRIMARY KEY (k=?)
+}
+do_execsql_test 7.4 {
+  CREATE TABLE big2(a INTEGER PRIMARY KEY, b TEXT);
+  INSERT INTO big2 SELECT * FROM big;
+  CREATE TABLE small2(k TEXT COLLATE nocase, v TEXT);
+  CREATE INDEX sx1 on small2(k);
+  INSERT INTO small2 SELECT * FROM small;
+  ANALYZE;
+}
+do_execsql_test 7.5 {
+  SELECT count(*) FROM big2, small2
+   WHERE small2.k=big2.b AND small2.v<>'nope';
+} 100
+do_eqp_test 7.6 {
+  SELECT count(*) FROM big2, small2
+   WHERE small2.k=big2.b AND small2.v<>'nope';
+} {
+  QUERY PLAN
+  |--SCAN big2
+  `--SEARCH small2 USING INDEX sx1 (k=?)
+}
+
 finish_test