-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
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
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.
);
} 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