From: drh Date: Fri, 22 May 2015 17:29:27 +0000 (+0000) Subject: The SRT_Table type for the SelectDest object is now just an SRT_EphemTab for X-Git-Tag: version-3.8.11~240 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e2248cfd2d381a6d94fe7c02039a8df73175bff4;p=thirdparty%2Fsqlite.git 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 --- diff --git a/manifest b/manifest index 155d76770a..405292cc69 100644 --- a/manifest +++ b/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 diff --git a/manifest.uuid b/manifest.uuid index c5d3ebcd5a..f4cd12aa80 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b9fb95194d4f7c535f1d175fd2e18d69d76e8fc4 \ No newline at end of file +b9727e6bbfc3c62c601227e86e62f2f39792fd1d \ No newline at end of file diff --git a/src/select.c b/src/select.c index fff0cd9a28..8fc2dbde3d 100644 --- a/src/select.c +++ b/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. diff --git a/src/update.c b/src/update.c index 3af4017f1b..f8347448a1 100644 --- a/src/update.c +++ b/src/update.c @@ -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. */