]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Update the fts5vocab table to handle "ORDER BY term" efficiently.
authordan <dan@noemail.net>
Wed, 21 Sep 2016 14:41:09 +0000 (14:41 +0000)
committerdan <dan@noemail.net>
Wed, 21 Sep 2016 14:41:09 +0000 (14:41 +0000)
FossilOrigin-Name: d4928fb5cd63a72808f01778fa5a11395385dedf

ext/fts5/fts5_vocab.c
ext/fts5/test/fts5vocab.test
manifest
manifest.uuid

index f3a2381cc171d4578b9715f6425ebeccbf317184..82c7dc90560b150049badb21948d6b346c8ca7fe 100644 (file)
@@ -279,8 +279,19 @@ static int fts5VocabBestIndexMethod(
     }
   }
 
-  pInfo->idxNum = idxNum;
+  /* This virtual table always delivers results in ascending order of
+  ** the "term" column (column 0). So if the user has requested this
+  ** specifically - "ORDER BY term" or "ORDER BY term ASC" - set the
+  ** sqlite3_index_info.orderByConsumed flag to tell the core the results
+  ** are already in sorted order.  */
+  if( pInfo->nOrderBy==1 
+   && pInfo->aOrderBy[0].iColumn==0 
+   && pInfo->aOrderBy[0].desc==0
+  ){
+    pInfo->orderByConsumed = 1;
+  }
 
+  pInfo->idxNum = idxNum;
   return SQLITE_OK;
 }
 
index f7278dd5c10823d0316207fed011b7f471c64d35..5e0499fbf9479b0dc5ef31ba0b1e05c20a9134aa 100644 (file)
@@ -442,8 +442,44 @@ if {[detail_is_none]} {
 }
 
 sqlite3_fts5_may_be_corrupt 0
+}
 
+#-------------------------------------------------------------------------
+# Test that both "ORDER BY term" and "ORDER BY term DESC" work.
+#
+reset_db
+do_execsql_test 9.1 {
+  CREATE VIRTUAL TABLE x1 USING fts5(x);
+  INSERT INTO x1 VALUES('def ABC ghi');
+  INSERT INTO x1 VALUES('DEF abc GHI');
+}
+
+do_execsql_test 9.2 {
+  CREATE VIRTUAL TABLE rrr USING fts5vocab(x1, row);
+  SELECT * FROM rrr
+} {
+  abc 2 2 def 2 2 ghi 2 2
 }
+do_execsql_test 9.3 {
+  SELECT * FROM rrr ORDER BY term ASC
+} {
+  abc 2 2 def 2 2 ghi 2 2
+}
+do_execsql_test 9.4 {
+  SELECT * FROM rrr ORDER BY term DESC
+} {
+  ghi 2 2 def 2 2 abc 2 2 
+}
+do_test 9.5 {
+  set e2 [db eval { EXPLAIN SELECT * FROM rrr ORDER BY term ASC }]
+  expr [lsearch $e2 SorterSort]<0
+} 1
+do_test 9.6 {
+  set e2 [db eval { EXPLAIN SELECT * FROM rrr ORDER BY term DESC }]
+  expr [lsearch $e2 SorterSort]<0
+} 0
+
+
 
 finish_test
 
index df03ff132c64c62474d9f98829713c05a3e5bc62..9a46ee79a89bceceb1cb70533023c8303e315bfd 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improved\simplementation\sof\s64-bit\ssigned\sinteger\smultiply\sthat\scorrectly\ndetects\soverflow\s(and\spromotes\sto\sfloating-point)\sin\ssome\scorner\scases.\nFix\sfor\sticket\s[1ec41379c9c1e400]
-D 2016-09-20T22:04:05.970
+C Update\sthe\sfts5vocab\stable\sto\shandle\s"ORDER\sBY\sterm"\sefficiently.
+D 2016-09-21T14:41:09.595
 F Makefile.in 6fd48ffcf7c2deea7499062d1f3747f986c19678
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc e1aa788e84f926e42239ee167c53f785bedacacd
@@ -113,7 +113,7 @@ F ext/fts5/fts5_test_tok.c db08af63673c3a7d39f053b36fd6e065017706be
 F ext/fts5/fts5_tokenize.c 2ce7b44183538ec46b7907726262ee43ffdd39a8
 F ext/fts5/fts5_unicode2.c b450b209b157d598f7b9df9f837afb75a14c24bf
 F ext/fts5/fts5_varint.c a5aceacda04dafcbae725413d7a16818ecd65738
-F ext/fts5/fts5_vocab.c dba72ca393d71c2588548b51380387f6b44c77a8
+F ext/fts5/fts5_vocab.c e44fefa7f0c1db252998af071daf06a7147e17e7
 F ext/fts5/fts5parse.y e51b375403421b8b37428a89b095d00597129aae
 F ext/fts5/mkportersteps.tcl 5acf962d2e0074f701620bb5308155fa1e4a63ba
 F ext/fts5/test/fts5_common.tcl b01c584144b5064f30e6c648145a2dd6bc440841
@@ -195,7 +195,7 @@ F ext/fts5/test/fts5unicode3.test 35c3d02aa7acf7d43d8de3bfe32c15ba96e8928e
 F ext/fts5/test/fts5unindexed.test e9539d5b78c677315e7ed8ea911d4fd25437c680
 F ext/fts5/test/fts5update.test 57c7012a7919889048947addae10e0613df45529
 F ext/fts5/test/fts5version.test 978f59541d8cef7e8591f8be2115ec5ccb863e2e
-F ext/fts5/test/fts5vocab.test 480d780aa6b699816c5066225fbd86f3a0239477
+F ext/fts5/test/fts5vocab.test 026799f8d24befc452cbddda79822f5ae8d5f4eb
 F ext/fts5/tool/fts5speed.tcl b0056f91a55b2d1a3684ec05729de92b042e2f85
 F ext/fts5/tool/fts5txt2db.tcl 526a9979c963f1c54fd50976a05a502e533a4c59
 F ext/fts5/tool/loadfts5.tcl 95b03429ee6b138645703c6ca192c3ac96eaf093
@@ -1525,7 +1525,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 72429063956614975d90cae2a829cfa4296694da
-R 91d60e6e7ebec7104f81d972c645f360
-U drh
-Z 545cfa3e1675ae70fe7fd8b14cbd5249
+P db3ebd7c52cfc5fcc7be00f52e9d7c84719f7b93
+R b069306c2d67148a9ccacc36a85fb205
+U dan
+Z 47d40874d45f38572688cc85bd002b66
index 55a4112105584f578c7c8798175e36135a7c2df6..adc77774f657e46007e053cd43caec824f0dbb55 100644 (file)
@@ -1 +1 @@
-db3ebd7c52cfc5fcc7be00f52e9d7c84719f7b93
\ No newline at end of file
+d4928fb5cd63a72808f01778fa5a11395385dedf
\ No newline at end of file