]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not pass ORDER BY clauses with non-standard NULL handling to virtual table impleme...
authordan <dan@noemail.net>
Tue, 20 Aug 2019 15:47:28 +0000 (15:47 +0000)
committerdan <dan@noemail.net>
Tue, 20 Aug 2019 15:47:28 +0000 (15:47 +0000)
FossilOrigin-Name: a9a82ee88d2d12209a674bd19167277aa91a6912e7a8bbf3714f90d559307fee

manifest
manifest.uuid
src/where.c
test/nulls1.test

index 2dac1918ccfa250259aa91732cc6b65be675eb3c..0c034215e3a5d413822c7248c15df4777f2e3433 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sproblems\swith\swindow\sframes\sthat\suse\sORDER\sBY\s...\sNULLS\sLAST\setc.
-D 2019-08-19T19:59:50.467
+C Do\snot\spass\sORDER\sBY\sclauses\swith\snon-standard\sNULL\shandling\sto\svirtual\stable\simplementations.
+D 2019-08-20T15:47:28.909
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -609,7 +609,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c bbd6838bd79c0a32144d482fb0b6a9d2d1a252fb3b16d5005ec30f2f80413b0d
 F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
 F src/walker.c d5a94907dcac990e31976be9dc769d17f6a806782593d6aec9d760ee01ec22cd
-F src/where.c 52c433208eafdc7e1750ea4622cfffb5d14d906a0a9258e07bae4b6fee182fef
+F src/where.c 391e856e4e73e3b68731ed6ee4fa0cb0e43a17c8565ddaad2b554e06db9ad239
 F src/whereInt.h 807766a6a92893dbba8a887e5b13466d2257ce07a84cf1be0aae2c41aee3bf4f
 F src/wherecode.c 81c5d1eb909f8e1284df58367d25f748d126c475725665e7bb9b10a9bf702242
 F src/whereexpr.c 5cce1fd11876086890a27c05e0cb75ca97ba64ba6984f72154039f1cfd2e69cc
@@ -1182,7 +1182,7 @@ F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161
 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934
 F test/notnull.test a37b663d5bb728d66fc182016613fb8e4a0a4bbf3d75b8876a7527f7d4ed3f18
 F test/null.test 0dcce4f04284ec66108c503327ad6d224c0752b3
-F test/nulls1.test d2f1da489fd24d7af54aed9d7e117e4c7d6bb3e67f3a87ef54377cc088563073
+F test/nulls1.test 085aae8cd3442159d993e6b5317b7503a71d82107ab1a87390a370d5891945f9
 F test/numcast.test 5d126f7f581432e86a90d1e35cac625164aec4a1
 F test/numindex1.test 20a5450d4b056e48cd5db30e659f13347a099823
 F test/offset1.test f06b83657bcf26f9ce805e67450e189e282143b2
@@ -1837,7 +1837,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P bb9767a287097a615aeb4abdba689b10e1a1c36c016c8e55905b508075e62c86
-R 0d189432ffc682f45a241a646815eff1
+P 75d665a494dd7d6e77d5a80af386ee5accc0a53416d5493424dc0fef6c7b01a0
+R c52f59575d6f8f4774d29df09eb77ad3
 U dan
-Z 3a5c6bb3c2c9a1118645ddff85026963
+Z b71d521722a995099edda82dc88d1b7f
index 7a21ed26bbf5683c1c7effdbb211bdb1e9fe9732..3553c8723db4253e108046ae66526489a598c27f 100644 (file)
@@ -1 +1 @@
-75d665a494dd7d6e77d5a80af386ee5accc0a53416d5493424dc0fef6c7b01a0
\ No newline at end of file
+a9a82ee88d2d12209a674bd19167277aa91a6912e7a8bbf3714f90d559307fee
\ No newline at end of file
index 37eca3b7eaf2049d53dda4926ba54217e8427ee5..a6349987a4a1c3e8b8f11b725a4d4150d8f8f0a0 100644 (file)
@@ -933,6 +933,7 @@ static sqlite3_index_info *allocateIndexInfo(
     for(i=0; i<n; i++){
       Expr *pExpr = pOrderBy->a[i].pExpr;
       if( pExpr->op!=TK_COLUMN || pExpr->iTable!=pSrc->iCursor ) break;
+      if( pOrderBy->a[i].sortFlags & KEYINFO_ORDER_BIGNULL ) break;
     }
     if( i==n){
       nOrderBy = n;
index e54d60856d231663a8fa99d27c5625e374e1d908..9faf82110b771efa283aa3dee0fa14d263a3f8de 100644 (file)
@@ -118,4 +118,33 @@ do_execsql_test 3.2 {
   400 300
 }
 
+#-------------------------------------------------------------------------
+ifcapable vtab {
+  register_echo_module db
+  do_execsql_test 4.0 {
+    CREATE TABLE tx(a INTEGER PRIMARY KEY, b, c);
+    CREATE INDEX i1 ON tx(b);
+    INSERT INTO tx VALUES(1, 1, 1);
+    INSERT INTO tx VALUES(2, NULL, 2);
+    INSERT INTO tx VALUES(3, 3, 3);
+    INSERT INTO tx VALUES(4, NULL, 4);
+    INSERT INTO tx VALUES(5, 5, 5);
+    CREATE VIRTUAL TABLE te USING echo(tx);
+  }
+
+  do_execsql_test 4.1 {
+    SELECT * FROM tx ORDER BY b NULLS FIRST;
+  } {2 {} 2  4 {} 4  1 1 1  3 3 3  5 5 5}
+  do_execsql_test 4.2 {
+    SELECT * FROM te ORDER BY b NULLS FIRST;
+  } {2 {} 2  4 {} 4  1 1 1  3 3 3  5 5 5}
+
+  do_execsql_test 4.3 {
+    SELECT * FROM tx ORDER BY b NULLS LAST;
+  } {1 1 1  3 3 3  5 5 5  2 {} 2  4 {} 4}
+  do_execsql_test 4.4 {
+    SELECT * FROM te ORDER BY b NULLS LAST;
+  } {1 1 1  3 3 3  5 5 5  2 {} 2  4 {} 4}
+}
+
 finish_test