From: drh <> Date: Thu, 23 Jul 2026 20:23:04 +0000 (+0000) Subject: New test cases for Bloom filter use on text keys as long as the X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=bed078a865a427e0a5e93fbb6ada2aa152bfdcdc;p=thirdparty%2Fsqlite.git New test cases for Bloom filter use on text keys as long as the collating sequence is binary. FossilOrigin-Name: 98ced971bfd48aedf862fa0f8674744723e36eeda2ad600e91062fc8b7d9da9e --- diff --git a/manifest b/manifest index 013559ad64..236dce7d0d 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index e9cfa467fd..0aa078dcac 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f38f4167110df11ba54816932126f695dc6e114d4001d0261669807a55ad7966 +98ced971bfd48aedf862fa0f8674744723e36eeda2ad600e91062fc8b7d9da9e diff --git a/test/bloom1.test b/test/bloom1.test index 8f16301384..6f5eb087ec 100644 --- a/test/bloom1.test +++ b/test/bloom1.test @@ -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