mirror of https://github.com/sqlite/sqlite
The SRT_Table type for the SelectDest object is now just an SRT_EphemTab for
which the ephemeral table has already been allocated. FossilOrigin-Name: b9727e6bbfc3c62c601227e86e62f2f39792fd1d
This commit is contained in:
parent
6b76418e67
commit
e2248cfd2d
17
manifest
17
manifest
|
@ -1,5 +1,5 @@
|
|||
C Have\sr-tree\sprefer\sto\suse\sthe\sconstraint\s"col\sMATCH\s?"\sover\s"rowid\s=\s?".
|
||||
D 2015-05-22T16:08:42.447
|
||||
C The\sSRT_Table\stype\sfor\sthe\sSelectDest\sobject\sis\snow\sjust\san\sSRT_EphemTab\sfor\nwhich\sthe\sephemeral\stable\shas\salready\sbeen\sallocated.
|
||||
D 2015-05-22T17:29:27.432
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 0a6ae26396ec696221021780dffbb894ff3cead7
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
|
@ -250,7 +250,7 @@ F src/printf.c 13ce37e5574f9b0682fa86dbcf9faf76b9d82a15
|
|||
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
||||
F src/resolve.c 99eabf7eff0bfa65b75939b46caa82e2b2133f28
|
||||
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
|
||||
F src/select.c 95e728e1bdbca2ee45016308e3eb6d19095155cc
|
||||
F src/select.c 6adad8d698a382f83009eed7b73080273fa993ca
|
||||
F src/shell.c 07dda7cd692911d2f22269953418d049f2e2c0ee
|
||||
F src/sqlite.h.in 0127e418883c2b41f7fbc056bc1033fa56fbd2a5
|
||||
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
|
||||
|
@ -308,7 +308,7 @@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
|||
F src/threads.c 6bbcc9fe50c917864d48287b4792d46d6e873481
|
||||
F src/tokenize.c af8cbbca6db6b664ffecafa236b06629ef6d35c4
|
||||
F src/trigger.c 322f23aad694e8f31d384dcfa386d52a48d3c52f
|
||||
F src/update.c 3c4ecc282accf12d39edb8d524cf089645e55a13
|
||||
F src/update.c 487747b328b7216bb7f6af0695d6937d5c9e605f
|
||||
F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
|
||||
F src/util.c a6431c92803b975b7322724a7b433e538d243539
|
||||
F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
|
||||
|
@ -1278,8 +1278,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
|||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P 799817bfb2bc95963c0e0d70063c4cb15c94ef74
|
||||
Q +b9e45596d823a6659f4ce2450afcd703feb788d8
|
||||
R 28f0e486e27f35ba4c09d0bec0224e3e
|
||||
U dan
|
||||
Z e4a60b1b66e40fbda6f3bf3e83ae873e
|
||||
P b9fb95194d4f7c535f1d175fd2e18d69d76e8fc4
|
||||
R b9824a32563c5717dba8f6fd0e248f54
|
||||
U drh
|
||||
Z 6ae4be6461472ee1a411850c6b256793
|
||||
|
|
|
@ -1 +1 @@
|
|||
b9fb95194d4f7c535f1d175fd2e18d69d76e8fc4
|
||||
b9727e6bbfc3c62c601227e86e62f2f39792fd1d
|
20
src/select.c
20
src/select.c
|
@ -816,6 +816,8 @@ static void selectInnerLoop(
|
|||
int r1 = sqlite3GetTempRange(pParse, nPrefixReg+1);
|
||||
testcase( eDest==SRT_Table );
|
||||
testcase( eDest==SRT_EphemTab );
|
||||
testcase( eDest==SRT_Fifo );
|
||||
testcase( eDest==SRT_DistFifo );
|
||||
sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1+nPrefixReg);
|
||||
#ifndef SQLITE_OMIT_CTE
|
||||
if( eDest==SRT_DistFifo ){
|
||||
|
@ -1231,10 +1233,7 @@ static void generateSortTail(
|
|||
VdbeComment((v, "%s", aOutEx[i].zName ? aOutEx[i].zName : aOutEx[i].zSpan));
|
||||
}
|
||||
switch( eDest ){
|
||||
case SRT_Table:
|
||||
case SRT_EphemTab: {
|
||||
testcase( eDest==SRT_Table );
|
||||
testcase( eDest==SRT_EphemTab );
|
||||
sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
|
||||
sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid);
|
||||
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
|
||||
|
@ -2583,15 +2582,14 @@ static int generateOutputSubroutine(
|
|||
*/
|
||||
codeOffset(v, p->iOffset, iContinue);
|
||||
|
||||
assert( pDest->eDest!=SRT_Exists );
|
||||
assert( pDest->eDest!=SRT_Table );
|
||||
switch( pDest->eDest ){
|
||||
/* Store the result as data using a unique key.
|
||||
*/
|
||||
case SRT_Table:
|
||||
case SRT_EphemTab: {
|
||||
int r1 = sqlite3GetTempReg(pParse);
|
||||
int r2 = sqlite3GetTempReg(pParse);
|
||||
testcase( pDest->eDest==SRT_Table );
|
||||
testcase( pDest->eDest==SRT_EphemTab );
|
||||
sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, r1);
|
||||
sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iSDParm, r2);
|
||||
sqlite3VdbeAddOp3(v, OP_Insert, pDest->iSDParm, r1, r2);
|
||||
|
@ -2619,16 +2617,6 @@ static int generateOutputSubroutine(
|
|||
break;
|
||||
}
|
||||
|
||||
#if 0 /* Never occurs on an ORDER BY query */
|
||||
/* If any row exist in the result set, record that fact and abort.
|
||||
*/
|
||||
case SRT_Exists: {
|
||||
sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iSDParm);
|
||||
/* The LIMIT clause will terminate the loop for us */
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If this is a scalar select that is part of an expression, then
|
||||
** store the results in the appropriate memory cell and break out
|
||||
** of the scan loop.
|
||||
|
|
|
@ -743,12 +743,10 @@ static void updateVirtualTable(
|
|||
*/
|
||||
assert( v );
|
||||
ephemTab = pParse->nTab++;
|
||||
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, pTab->nCol+1+(pRowid!=0));
|
||||
sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
|
||||
|
||||
/* fill the ephemeral table
|
||||
*/
|
||||
sqlite3SelectDestInit(&dest, SRT_Table, ephemTab);
|
||||
sqlite3SelectDestInit(&dest, SRT_EphemTab, ephemTab);
|
||||
sqlite3Select(pParse, pSelect, &dest);
|
||||
|
||||
/* Generate code to scan the ephemeral table and call VUpdate. */
|
||||
|
|
Loading…
Reference in New Issue