Use OP_Sort rather than OP_Rewind in order to sort the content of a new

index on the CREATE INDEX statement.  Add an ALWAYS() to the merge sort
logic to document an unreachable branch.

FossilOrigin-Name: f01766f42342f043bf0cbe1e07224963011f01b7
This commit is contained in:
drh 2011-08-17 00:40:58 +00:00
parent ad2148da00
commit 9da058bb5c
5 changed files with 15 additions and 13 deletions

View File

@ -1,5 +1,5 @@
C Updated\scomments\son\sthe\smultiplexor\sextension.\s\sNo\schanges\sto\scode.
D 2011-08-15T19:44:30.942
C Use\sOP_Sort\srather\sthan\sOP_Rewind\sin\sorder\sto\ssort\sthe\scontent\sof\sa\snew\nindex\son\sthe\sCREATE\sINDEX\sstatement.\s\sAdd\san\sALWAYS()\sto\sthe\smerge\ssort\nlogic\sto\sdocument\san\sunreachable\sbranch.
D 2011-08-17T00:40:58.276
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 8c930e7b493d59099ea1304bd0f2aed152eb3315
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -127,7 +127,7 @@ F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
F src/btree.c a30bdcc27eedc36a38a3a11e1ba83de9a6729f7e
F src/btree.h f5d775cd6cfc7ac32a2535b70e8d2af48ef5f2ce
F src/btreeInt.h 67978c014fa4f7cc874032dd3aacadd8db656bc3
F src/build.c 77b40abf79e1541356f552c9681b0b431aba672b
F src/build.c 77be7c2174300e94404ca89a2a9bbd8047d0ce11
F src/callback.c 0425c6320730e6d3981acfb9202c1bed9016ad1a
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
F src/ctime.c 7f283795650dd4122cc07bd02193c40193b32cc6
@ -245,7 +245,7 @@ F src/vdbeapi.c 11dc47987abacb76ad016dcf5abc0dc422482a98
F src/vdbeaux.c 8fb978eb73a97b34d352dd3ef3bff35b1b3fa7e9
F src/vdbeblob.c f024f0bf420f36b070143c32b15cc7287341ffd3
F src/vdbemem.c 0498796b6ffbe45e32960d6a1f5adfb6e419883b
F src/vdbesort.c af82a8b0d0dbf67f8b03d9a70d3d6fcd3bdf83ba
F src/vdbesort.c a63bab05465ef7f8d28d46757eef55f84828d9a7
F src/vdbetrace.c 5d0dc3d5fd54878cc8d6d28eb41deb8d5885b114
F src/vtab.c 901791a47318c0562cd0c676a2c6ff1bc530e582
F src/wal.c 3154756177d6219e233d84291d5b05f4e06ff5e9
@ -544,7 +544,7 @@ F test/jrnlmode3.test 556b447a05be0e0963f4311e95ab1632b11c9eaa
F test/keyword1.test a2400977a2e4fde43bf33754c2929fda34dbca05
F test/lastinsert.test 474d519c68cb79d07ecae56a763aa7f322c72f51
F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200
F test/like.test 9cc5261d22f2108a27cedff8a972aa3284a4ba52
F test/like.test 7b4aaa4a8192fdec90e0a905984c92a688c51e48
F test/like2.test 3b2ee13149ba4a8a60b59756f4e5d345573852da
F test/limit.test 2db7b3b34fb925b8e847d583d2eb67531d0ce67e
F test/loadext.test dab17f7014f8079698dbd4b02705562b0ce6db5f
@ -960,7 +960,7 @@ F tool/symbols.sh caaf6ccc7300fd43353318b44524853e222557d5
F tool/tostr.awk 11760e1b94a5d3dcd42378f3cc18544c06cfa576
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
F tool/warnings.sh 2ebae31e1eb352696f3c2f7706a34c084b28c262
P c1daa809a17a97610e51f9babd90f36908921245
R b2a38ddd9a0fb78674a7b9b801a2c178
P 0f42ef697e197d193867c0d6be3c9cf6471488c6
R 379592adaec833a4cd5b123be0966811
U drh
Z fd99972c6519c355091efb4b8ed6aaf8
Z ca898c130a5f289776aff7d373cdb475

View File

@ -1 +1 @@
0f42ef697e197d193867c0d6be3c9cf6471488c6
f01766f42342f043bf0cbe1e07224963011f01b7

View File

@ -2385,7 +2385,7 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
sqlite3VdbeAddOp2(v, OP_IdxInsert, iSorter, regRecord);
sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1);
sqlite3VdbeJumpHere(v, addr1);
addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSorter, 0);
addr1 = sqlite3VdbeAddOp2(v, OP_Sort, iSorter, 0);
sqlite3VdbeAddOp2(v, OP_RowKey, iSorter, regRecord);
}

View File

@ -692,7 +692,7 @@ int sqlite3VdbeSorterRowkey(VdbeCursor *pCsr, Mem *pOut){
** were passed to the sorter - meaning it is always large enough for the
** largest key. But this could change very easily, so we leave the call
** to sqlite3VdbeMemGrow() in. */
if( sqlite3VdbeMemGrow(pOut, pIter->nKey, 0) ){
if( NEVER(sqlite3VdbeMemGrow(pOut, pIter->nKey, 0)) ){
return SQLITE_NOMEM;
}
pOut->n = pIter->nKey;

View File

@ -308,8 +308,8 @@ do_test like-3.18 {
#
do_test like-3.19 {
set sqlite_like_count 0
db eval {CREATE INDEX i1 ON t1(x);}
queryplan {
CREATE INDEX i1 ON t1(x);
SELECT x FROM t1 WHERE x GLOB 'abc*' ORDER BY 1;
}
} {abc abcd nosort {} i1}
@ -522,7 +522,7 @@ do_test like-5.24 {
}
} {zz-lower-lower zZ-lower-upper Zz-upper-lower ZZ-upper-upper nosort {} i2}
do_test like-5.25 {
queryplan {
db eval {
PRAGMA case_sensitive_like=on;
CREATE TABLE t3(x TEXT);
CREATE INDEX i3 ON t3(x);
@ -530,6 +530,8 @@ do_test like-5.25 {
INSERT INTO t3 VALUES('zZ-lower-upper');
INSERT INTO t3 VALUES('Zz-upper-lower');
INSERT INTO t3 VALUES('zz-lower-lower');
}
queryplan {
SELECT x FROM t3 WHERE x LIKE 'zz%';
}
} {zz-lower-lower nosort {} i3}