]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
The SRT_Table type for the SelectDest object is now just an SRT_EphemTab for
authordrh <drh@noemail.net>
Fri, 22 May 2015 17:29:27 +0000 (17:29 +0000)
committerdrh <drh@noemail.net>
Fri, 22 May 2015 17:29:27 +0000 (17:29 +0000)
which the ephemeral table has already been allocated.

FossilOrigin-Name: b9727e6bbfc3c62c601227e86e62f2f39792fd1d

manifest
manifest.uuid
src/select.c
src/update.c

index 155d76770a0063b88fbb7deac126457e1be0d5ec..405292cc6922622cf4f2937f8625fb5d2742a50b 100644 (file)
--- 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
index c5d3ebcd5a163a8c12a71a7addb368aac361d39b..f4cd12aa80d8f23f440f7c66da267d23e7d43d54 100644 (file)
@@ -1 +1 @@
-b9fb95194d4f7c535f1d175fd2e18d69d76e8fc4
\ No newline at end of file
+b9727e6bbfc3c62c601227e86e62f2f39792fd1d
\ No newline at end of file
index fff0cd9a28a47d0bbf82f9b2d33a4877b21f5c40..8fc2dbde3d11096ca3ee30a5dda83d26c27bf290 100644 (file)
@@ -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.
index 3af4017f1ba9a3143bbe2c9d0dd78b50aab3bd54..f8347448a17b7b4dffd089cfb07639b619d58264 100644 (file)
@@ -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. */