Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Update the fts5vocab table to handle "ORDER BY term" efficiently. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
d4928fb5cd63a72808f01778fa5a1139 |
User & Date: | dan 2016-09-21 14:41:09.595 |
Context
2016-09-21
| ||
17:47 | Do not run test "delete_db.test" with either the journaltest or inmemoryjournal permutations. Ensure that the multiplexor tests in delete_db.test are performed in non-autovacuum mode. (check-in: 46b7d19e02 user: dan tags: trunk) | |
14:41 | Update the fts5vocab table to handle "ORDER BY term" efficiently. (check-in: d4928fb5cd user: dan tags: trunk) | |
2016-09-20
| ||
22:04 | Improved implementation of 64-bit signed integer multiply that correctly detects overflow (and promotes to floating-point) in some corner cases. Fix for ticket [1ec41379c9c1e400] (check-in: db3ebd7c52 user: drh tags: trunk) | |
Changes
Changes to ext/fts5/fts5_vocab.c.
︙ | ︙ | |||
275 276 277 278 279 280 281 | if( iTermLe>=0 ){ idxNum |= FTS5_VOCAB_TERM_LE; pInfo->aConstraintUsage[iTermLe].argvIndex = ++nArg; pInfo->estimatedCost = pInfo->estimatedCost / 2; } } | > > > > > | > > > > | > > | 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 | if( iTermLe>=0 ){ idxNum |= FTS5_VOCAB_TERM_LE; pInfo->aConstraintUsage[iTermLe].argvIndex = ++nArg; pInfo->estimatedCost = pInfo->estimatedCost / 2; } } /* 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; } /* ** Implementation of xOpen method. */ static int fts5VocabOpenMethod( |
︙ | ︙ |
Changes to ext/fts5/test/fts5vocab.test.
︙ | ︙ | |||
438 439 440 441 442 443 444 | } else { do_catchsql_test 8.2.2 { SELECT * FROM x1_c } {1 {database disk image is malformed}} } sqlite3_fts5_may_be_corrupt 0 | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 | } else { do_catchsql_test 8.2.2 { SELECT * FROM x1_c } {1 {database disk image is malformed}} } 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 |