Avoid adding an artifical "LIMIT 1" on scalar subqueries that do not need it.
This seems like a pointless optimization as it makes minimal run-time difference
but does increase code complexity. Parked on a branch for historical
reference.
FossilOrigin-Name: c21628e9c166d8481138e04cfbc2ea5a54e92f6588d4407f615094e2e5a4b458
diff --git a/manifest b/manifest
index 7ff1732..766be20 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\smissing\scomma\sin\sthe\sprevious\scheck-in.
-D 2017-06-17T18:49:50.823
+C Avoid\sadding\san\sartifical\s"LIMIT\s1"\son\sscalar\ssubqueries\sthat\sdo\snot\sneed\sit.\nThis\sseems\slike\sa\spointless\soptimization\sas\sit\smakes\sminimal\srun-time\sdifference\nbut\sdoes\sincrease\scode\scomplexity.\s\sParked\son\sa\sbranch\sfor\shistorical\nreference.
+D 2017-06-17T19:06:17.565
F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 8eeb80162074004e906b53d7340a12a14c471a83743aab975947e95ce061efcc
@@ -358,7 +358,7 @@
F src/date.c cc42a41c7422389860d40419a5e3bce5eaf6e7835c3ba2677751dc653550a5c7
F src/dbstat.c 19ee7a4e89979d4df8e44cfac7a8f905ec89b77d
F src/delete.c 3213547e97b676c6fa79948b7a9ede4801ea04a01a2043241deafedf132ecf5d
-F src/expr.c 452c6f3aa656aabf3eefe96bb5f316b2c987fbc12c647964e4ed880f193ca31f
+F src/expr.c d2a511fbcd0fa55f5e751614003096195a5cde694d0ee3689f25646752a9d8dc
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
F src/fkey.c db65492ae549c3b548c9ef1f279ce1684f1c473b116e1c56a90878cd5dcf968d
F src/func.c 9d52522cc8ae7f5cdadfe14594262f1618bc1f86083c4cd6da861b4cf5af6174
@@ -1583,7 +1583,10 @@
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 9a443397a6b110f60cae32e1f758914d72931e16ddb423e4d4a119df526bf340
-R 48cf46cf5e03c592f1eb729aae9e27b1
+P f3db02f49073c3f08c3fd7816d85e5472d5e22df20d862fe4886eb2a97efb15f
+R b5ba50ec4dc157215e354d4e576a6a71
+T *branch * subquery-limit-opt
+T *sym-subquery-limit-opt *
+T -sym-trunk *
U drh
-Z 1075564756c6da5b66b28900b7b4b32b
+Z dd61568d206230960cbef07e1796efe9
diff --git a/manifest.uuid b/manifest.uuid
index 64f264f..cfc7920 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-f3db02f49073c3f08c3fd7816d85e5472d5e22df20d862fe4886eb2a97efb15f
\ No newline at end of file
+c21628e9c166d8481138e04cfbc2ea5a54e92f6588d4407f615094e2e5a4b458
\ No newline at end of file
diff --git a/src/expr.c b/src/expr.c
index 27cebdb..ea18be8 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -2717,8 +2717,12 @@
VdbeComment((v, "Init EXISTS result"));
}
sqlite3ExprDelete(pParse->db, pSel->pLimit);
- pSel->pLimit = sqlite3ExprAlloc(pParse->db, TK_INTEGER,
- &sqlite3IntTokens[1], 0);
+ if( (pSel->selFlags & SF_Aggregate)!=0 && pSel->pGroupBy==0 ){
+ pSel->pLimit = 0;
+ }else{
+ pSel->pLimit = sqlite3ExprAlloc(pParse->db, TK_INTEGER,
+ &sqlite3IntTokens[1], 0);
+ }
pSel->iLimit = 0;
pSel->selFlags &= ~SF_MultiValue;
if( sqlite3Select(pParse, pSel, &dest) ){