]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Performance optimization: Avoid calling convertCompoundSelecctToSubquery()
authordrh <drh@noemail.net>
Mon, 5 Aug 2013 22:05:02 +0000 (22:05 +0000)
committerdrh <drh@noemail.net>
Mon, 5 Aug 2013 22:05:02 +0000 (22:05 +0000)
on queries that do not use the UNION, EXCEPT, or INTERSECT operators.

FossilOrigin-Name: c589b2fed7beabc2337d701094c22635914d9c23

manifest
manifest.uuid
src/parse.y
src/select.c
src/sqliteInt.h

index bbd353d8a340455fd9d6ddeb92262a416c09f632..5e6cb063f9fe6531cb5edbb492066fa01c32644a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C For\sthe\svtshim\smodule,\salways\szero\sout\sthe\sxChildDestroy\sfunction\spointer\safter\scalling\sit.
-D 2013-08-05T21:54:17.483
+C Performance\soptimization:\sAvoid\scalling\sconvertCompoundSelecctToSubquery()\non\squeries\sthat\sdo\snot\suse\sthe\sUNION,\sEXCEPT,\sor\sINTERSECT\soperators.
+D 2013-08-05T22:05:02.528
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -206,7 +206,7 @@ F src/os_unix.c 9eafa5458cf2ff684ddccff82c9bb113c7cad847
 F src/os_win.c 1d84f2079d9b91f91a4b5dbfa5e08f1b1a0ed0ff
 F src/pager.c 5d2f7475260a8588f9c441bb309d2b7eaa7ded3b
 F src/pager.h 5cb78b8e1adfd5451e600be7719f5a99d87ac3b1
-F src/parse.y 599bc6338f3a6a7e1d656669a5667b9d77aea86b
+F src/parse.y 27c6b4138497d6f8360ba7847da6ed48033f957f
 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
 F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
 F src/pcache1.c d23d07716de96c7c0c2503ec5051a4384c3fb938
@@ -216,12 +216,12 @@ F src/printf.c 41c49dac366a3a411190001a8ab495fa8887974e
 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
 F src/resolve.c 17e670996729ac41aadf6a31f57b4e6f29b3d819
 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
-F src/select.c 97273e41f57993e817bf0e816f9b19c4c07fc15b
+F src/select.c 8b148eb851f384412aea57091659d14b369918ca
 F src/shell.c 52f975eae87c8338c4dfbf4c2842d2a0971f01fd
 F src/sqlite.h.in 442c109e0c3447c34b1794971ecdb673ce08a843
 F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
 F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
-F src/sqliteInt.h abae976c5cfc00333bd612fc1d31d64056ea1e63
+F src/sqliteInt.h def0e436c0d4ca5084305ca6ae898020fbafaae4
 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
 F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158
 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
@@ -1105,7 +1105,7 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
 F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
-P 7301bedd94c8610568349953b18ff3575203e1b2
-R 1ef3cdfcb1aa69d8497541e7dc588a14
-U mistachkin
-Z 3969855045273c6e2ecf0a52e071caf5
+P 240f7252c66ad3ff5ae0ef06455c1ff9bd78bbb4
+R 2fa5b161c92663b5ccc93db65bbe97fe
+U drh
+Z 4bd26a74b5ae2ab01f7864a9d28488af
index 3f7cd97cd912d8eb02454635c3466ec16ca701ba..b872e4ded8fd065776050ea241f21f7e70cdd13c 100644 (file)
@@ -1 +1 @@
-240f7252c66ad3ff5ae0ef06455c1ff9bd78bbb4
\ No newline at end of file
+c589b2fed7beabc2337d701094c22635914d9c23
\ No newline at end of file
index 139040339cf0cbdc5cffc1457e893f71392da40b..e9c8a15635159189a977b9aea9ffb074818284b1 100644 (file)
@@ -417,6 +417,7 @@ select(A) ::= select(X) multiselect_op(Y) oneselect(Z).  {
   if( Z ){
     Z->op = (u8)Y;
     Z->pPrior = X;
+    if( Y!=TK_ALL ) pParse->hasCompound = 1;
   }else{
     sqlite3SelectDelete(pParse->db, X);
   }
index bd7f54372ec65aa327d657b41a1e500d2532e935..83fcf7ed40604e3dd407e23d1fe78681b4f1fac1 100644 (file)
@@ -3639,10 +3639,12 @@ static int exprWalkNoop(Walker *NotUsed, Expr *NotUsed2){
 static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
   Walker w;
   memset(&w, 0, sizeof(w));
-  w.xSelectCallback = convertCompoundSelectToSubquery;
   w.xExprCallback = exprWalkNoop;
   w.pParse = pParse;
-  sqlite3WalkSelect(&w, pSelect);
+  if( pParse->hasCompound ){
+    w.xSelectCallback = convertCompoundSelectToSubquery;
+    sqlite3WalkSelect(&w, pSelect);
+  }
   w.xSelectCallback = selectExpander;
   sqlite3WalkSelect(&w, pSelect);
 }
index 7a4983ad5dc283051a072d35584d2c520cb732c5..67f7df2474dee0d25eb2404930771333ef7ec2c4 100644 (file)
@@ -2078,6 +2078,7 @@ struct Select {
 #define SF_Values          0x0080  /* Synthesized from VALUES clause */
 #define SF_Materialize     0x0100  /* Force materialization of views */
 #define SF_NestedFrom      0x0200  /* Part of a parenthesized FROM clause */
+#define SF_MaybeConvert    0x0400  /* Need convertCompoundSelectToSubquery() */
 
 
 /*
@@ -2199,6 +2200,7 @@ struct Parse {
   u8 iColCache;        /* Next entry in aColCache[] to replace */
   u8 isMultiWrite;     /* True if statement may modify/insert multiple rows */
   u8 mayAbort;         /* True if statement may throw an ABORT exception */
+  u8 hasCompound;      /* Need to invoke convertCompoundSelectToSubquery() */
   int aTempReg[8];     /* Holding area for temporary registers */
   int nRangeReg;       /* Size of the temporary register block */
   int iRangeReg;       /* First register in temporary register block */