]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Ensure that collation sequences on non-PK columns of a WITHOUT ROWID table are used...
authordan <Dan Kennedy>
Fri, 20 Mar 2026 11:35:15 +0000 (11:35 +0000)
committerdan <Dan Kennedy>
Fri, 20 Mar 2026 11:35:15 +0000 (11:35 +0000)
FossilOrigin-Name: 078b3162d0d3d3035f4d3ad88664066d99c218a731ac481b9f1172529e26e4eb

manifest
manifest.uuid
src/build.c
test/rowvalueA.test

index 0035f5d3956964e29074bc05a602d526045a6646..f0c2d5b0ac98d031cfec49242cd087f7af91eb31 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Ensure\sthat\ssqlite3RCStr\svalues\sreturned\sby\sjson_group_array()\sand\njson_group_object()\sare\szero-terminated.
-D 2026-03-19T23:49:29.059
+C Ensure\sthat\scollation\ssequences\son\snon-PK\scolumns\sof\sa\sWITHOUT\sROWID\stable\sare\sused\scorrectly\swhen\sthey\sare\spart\sof\sa\srow\svalue\scomparison.\sFix\sfor\sforum\spost\s[forum:7a308e933d\s|\s7a308e933d].
+D 2026-03-20T11:35:15.730
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -676,7 +676,7 @@ F src/btmutex.c 30dada73a819a1ef5b7583786370dce1842e12e1ad941e4d05ac29695528daea
 F src/btree.c fb350c445316c1cc0529703c0b76450770a1de0ab0440641a56b19f05d6fefbe
 F src/btree.h e823c46d87f63d904d735a24b76146d19f51f04445ea561f71cc3382fd1307f0
 F src/btreeInt.h 9c0f9ea5c9b5f4dcaea18111d43efe95f2ac276cd86d770dce10fd99ccc93886
-F src/build.c b993e4adef4c4cdfd7abf62e2676c467bb1923f25f40c3c7ab2a7bfbace3de7f
+F src/build.c b6efb70b142fd0f6a88ec1d9d43b905f2e38a59973c6f0e329e5cbe376a7f035
 F src/callback.c 3605bbf02bd7ed46c79cd48346db4a32fc51d67624400539c0532f4eead804ad
 F src/carray.c 3efe3982d5fb323334c29328a4e189ccaef6b95612a6084ad5fa124fd5db1179
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
@@ -1561,7 +1561,7 @@ F test/rowvalue6.test d19b54feb604d5601f8614b15e214e0774c01087
 F test/rowvalue7.test 06ec0aca725bf683313d03793aa2943bc7f45a901848c7056a9665b769c8fc38
 F test/rowvalue8.test 5900eddad9e2c3c2e26f1a95f74aafc1232ee5e0
 F test/rowvalue9.test 7499a8fd7ca3a3f0e19d94e135355439aa2b596f86b775ca8de79672da2ca378
-F test/rowvalueA.test 1c5ed13f3b0641452ae35e6488d6ecc16cefce99f2adf7c07c513530e2aac6b7
+F test/rowvalueA.test 7d28bf6c2f8a2af8adbba2c4eda9136a4dd36250b8966ba05b34c0954f78efd7
 F test/rowvaluefault.test 963ae9cdaed30a85a29668dd514e639f3556cae903ee9f172ea972d511c54fff
 F test/rowvaluevtab.test cd9747bb3f308086944c07968f547ad6b05022e698d80b9ffbdfe09ce0b8da6f
 F test/rtree.test 0c8d9dd458d6824e59683c19ab2ffa9ef946f798
@@ -2195,8 +2195,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 539769b63e4044018be2993894b1962df6a6ae58636682b7fb7a2dd5aaf4075c
-R f204b1ed3a5a1166ad1c711925746777
-U drh
-Z 739be31dd461ba606b382c9fb3f1b390
+P 88a931ea2ae734478928c2a6021b00b0f2be490328260630e176cf3cc7111472
+R 3a8ae62427f2beb0c4936f72e745b41a
+U dan
+Z 3025019227a8a6014385337b8f60a744
 # Remove this line to create a well-formed Fossil manifest.
index 37456c0a135e7de27fe14f319327d4fb7ac48066..6dd2987495984aac5ffa7cd99c084b0e2d92039f 100644 (file)
@@ -1 +1 @@
-88a931ea2ae734478928c2a6021b00b0f2be490328260630e176cf3cc7111472
+078b3162d0d3d3035f4d3ad88664066d99c218a731ac481b9f1172529e26e4eb
index c4519414519b0c3bdf4513eefc9688780fd88e37..e357976200076fd2da3f411f72701577f6543bb3 100644 (file)
@@ -2494,9 +2494,10 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
     if( !hasColumn(pPk->aiColumn, j, i)
      && (pTab->aCol[i].colFlags & COLFLAG_VIRTUAL)==0
     ){
+      const char *zColl = sqlite3ColumnColl(&pTab->aCol[i]);
       assert( j<pPk->nColumn );
       pPk->aiColumn[j] = i;
-      pPk->azColl[j] = sqlite3StrBINARY;
+      pPk->azColl[j] = zColl ? zColl : sqlite3StrBINARY;
       j++;
     }
   }
index 16429f985addd169bfe5b14c97e7f1ded6c4c6bc..247b7bf88cb233f9587d5bc8a88b5c5f3e62e3fe 100644 (file)
@@ -96,6 +96,30 @@ do_execsql_test 3.3 {
   SELECT * FROM x2 CROSS JOIN x1 WHERE (1234, x2.y) > (x1.a, x1.b);
 } {1234 abc 1234 ABCD}
 
+#-------------------------------------------------------------------------
+# Test the fix for forum post https://sqlite.org/forum/forumpost/7a308e933d
+#
+do_execsql_test 4.0 {
+  CREATE TABLE t1 (a PRIMARY KEY, b COLLATE NOCASE) WITHOUT ROWID;
+  INSERT INTO t1 VALUES ('BBB', 'a');
+}
+do_execsql_test 4.1 {
+  SELECT * FROM t1 WHERE (t1.a, t1.b) <= ('BBB', 'CCC');
+} {BBB a}
+
+do_execsql_test 4.2 {
+  DROP TABLE t1;
+  CREATE TABLE t0 (c0);
+  INSERT INTO t0 VALUES ('True');
+
+  CREATE TABLE t1 (c0 COLLATE NOCASE, c1 PRIMARY KEY) WITHOUT ROWID;
+  INSERT INTO t1 VALUES ('a', 1);
+  INSERT INTO t1 VALUES ('a', 'True');
+}
+
+do_execsql_test 4.3 {
+  SELECT * FROM t0, t1 WHERE (t1.c1, t1.c0) <= (t0.c0, t0.c0);
+} {True a 1 True a True}
 
 
 finish_test