]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhance EXPLAIN QUERY PLAN to report the generation of constant rows using
authordrh <drh@noemail.net>
Thu, 3 May 2018 01:37:13 +0000 (01:37 +0000)
committerdrh <drh@noemail.net>
Thu, 3 May 2018 01:37:13 +0000 (01:37 +0000)
VALUES or just a SELECT without FROM.

FossilOrigin-Name: c75eee69fa8a9b56ee58a4cc539e80cc982f43390dc3a357344d58479dd89a41

manifest
manifest.uuid
src/select.c
src/where.c
test/eqp.test
test/orderby1.test
test/with1.test
test/with3.test

index 18897a018aa8eb939a9896f1197ff6d01dcb8f0b..a51339acd35a69fc9a050377c73ea63be8c87790 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C More\stest\scase\supdates.\s\sTests\sare\sall\srunning\snow.
-D 2018-05-02T19:42:33.079
+C Enhance\sEXPLAIN\sQUERY\sPLAN\sto\sreport\sthe\sgeneration\sof\sconstant\srows\susing\nVALUES\sor\sjust\sa\sSELECT\swithout\sFROM.
+D 2018-05-03T01:37:13.698
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
@@ -493,7 +493,7 @@ F src/printf.c d3b7844ddeb11fbbdd38dd84d09c9c1ac171d21fb038473c3aa97981201cc660
 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 6415381a0e9d22c0e7cba33ca4a53f81474190862f5d4838190f5eb5b0b47bc9
 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
-F src/select.c 29294be54b5ef53e3359d37b394dc0077f5a594f9d07f06c5eabd1e3830abd9f
+F src/select.c e612d71bc58cad38f06c9ebb9e71fa2a9f643d5775f220388b7ba17df5fe21e3
 F src/shell.c.in 29309f2ab656c8817fbc3b7910b9af8464557b91cba75277a03669399c8e2730
 F src/sqlite.h.in d669de545f18f2f01362de02e309cd7f15185958c71bac8f53cd5438b46d2bea
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
@@ -577,7 +577,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c aa9cffc7a2bad6b826a86c8562dd4978398720ed41cb8ee7aa9d054eb8b456a0
 F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
 F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
-F src/where.c 8265aec8b13c19c9971b0012b004a8d18384dad619a07616c0a9f04401326451
+F src/where.c aa94ef44ef36763817ca952e68c03db7eee5e2d4f1f0c3a98823a58c074157bd
 F src/whereInt.h 2610cb87dd95509995b63decc674c60f2757697a206cfe0c085ee53d9c43cfff
 F src/wherecode.c 3368f0797a4b166e0773a4137d270d92ddcbce91618b11d1e9f11f7c39f33068
 F src/whereexpr.c e90b2e76dcabc81edff56633bf281bc01d93b71e0c81482dc06925ce39f5844a
@@ -791,7 +791,7 @@ F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
 F test/enc2.test 83437a79ba1545a55fb549309175c683fb334473
 F test/enc3.test 6807f7a7740a00361ca8d0ccd66bc60c8dc5f2b6
 F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020
-F test/eqp.test 0d06518e010ca5f02bd56b6a45fb70514a29c7eb97d244d72826d164477cfb1e
+F test/eqp.test 2ac18a1d6aa0a0a8f0eea1cc0ba7d63391e2f968a47f59643f889c7c87d238a4
 F test/errmsg.test eae9f091eb39ce7e20305de45d8e5d115b68fa856fba4ea6757b6ca3705ff7f9
 F test/eval.test a64c9105d6ff163df7cf09d6ac29cdad5922078c
 F test/exclusive.test 1206b87e192497d78c7f35552e86a9d05421498da300fb1cce5ca5351ccde3c3
@@ -1118,7 +1118,7 @@ F test/openv2.test 0d3040974bf402e19b7df4b783e447289d7ab394
 F test/optfuzz-db01.c a0c256905c8ac79f9a5de2f374a3d9f757bef0dca2a238dc7c10cc8a38031834
 F test/optfuzz-db01.txt 21f6bdeadc701cf11528276e2a55c70bfcb846ba42df327f979bd9e7b6ce7041
 F test/optfuzz.c 50e330304eb1992e15ddd11f3daaad9bcc0d9aaad09cb2bcc77f9515df2e88b1
-F test/orderby1.test c4bbefbdbc0b9c6046c88d3c996ab81b41f799c0885b3e656c02f9295c4773ba
+F test/orderby1.test bb8535f52c42e91cfa110622ccff70597e531198bb4b033185ad84c11522ab1b
 F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04
 F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99
 F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4
@@ -1611,9 +1611,9 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2
 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972
 F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
 F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
-F test/with1.test 6b98f6f2adef8909b171d0d1e3b0439e3f4d4b75be94533aaddf7f15fe002e16
+F test/with1.test 58475190cd8caaeebea8cfeb2a264ec97a0c492b8ffe9ad20cefbb23df462f96
 F test/with2.test e0030e2f0267a910d6c0e4f46f2dfe941c1cc0d4f659ba69b3597728e7e8f1ab
-F test/with3.test 2829c3de40a9e18d13f35f8f1670f549d26a4778acbd82a3454ad9b0a07de40b
+F test/with3.test 5e8ce2c585170bbbc0544e2a01a4941fa0be173ba5265e5c92eb588cd99a232d
 F test/with4.test 257be66c0c67fee1defbbac0f685c3465e2cad037f21ce65f23f86084f198205
 F test/withM.test 693b61765f2b387b5e3e24a4536e2e82de15ff64
 F test/without_rowid1.test 533add9100255e4cc430d371b3ecfb79f11f956b86c3a1b9d34413bf8e482d8f
@@ -1727,7 +1727,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 5f0e803e33aa557865d5fc830d9202d628de9a94c9757058ca48f1a560702cd3
-R 082b82ad611d4d87c26221d79d5fbd45
+P dab5e5294813891469660cceb211ac1a1e526715bb57dcdbb1ab90321e6a4dad
+R 53c64522178e60b44f774331a15b70e5
 U drh
-Z 58923cc0a63a66a0c06aeccf7817dd66
+Z 33f2e8b7048beb839b528a03308b5edb
index f082081d38f6f25d8ae9b3a5ef1983c61cc43785..4dc52e5fa5a831ea1d4db5679f806cae476030e9 100644 (file)
@@ -1 +1 @@
-dab5e5294813891469660cceb211ac1a1e526715bb57dcdbb1ab90321e6a4dad
\ No newline at end of file
+c75eee69fa8a9b56ee58a4cc539e80cc982f43390dc3a357344d58479dd89a41
\ No newline at end of file
index 76dfef912ae2e1f47cf04f66cea225305e8b7db6..14e485b2b3ac13f9abaf0a86185163d178dac621 100644 (file)
@@ -2373,10 +2373,9 @@ static int multiSelectValues(
   Select *p,            /* The right-most of SELECTs to be coded */
   SelectDest *pDest     /* What to do with query results */
 ){
-  Select *pPrior;
-  Select *pRightmost = p;
   int nRow = 1;
   int rc = 0;
+  int bShowAll = p->pLimit==0;
   assert( p->selFlags & SF_MultiValue );
   do{
     assert( p->selFlags & SF_Values );
@@ -2385,15 +2384,13 @@ static int multiSelectValues(
     if( p->pPrior==0 ) break;
     assert( p->pPrior->pNext==p );
     p = p->pPrior;
-    nRow++;
+    nRow += bShowAll;
   }while(1);
-  ExplainQueryPlan((pParse, 0, "SCAN %d CONSTANT ROWS", nRow));
+  ExplainQueryPlan((pParse, 0, "SCAN %d CONSTANT ROW%s", nRow,
+                    nRow==1 ? "" : "S"));
   while( p ){
-    pPrior = p->pPrior;
-    p->pPrior = 0;
-    rc = sqlite3Select(pParse, p, pDest);
-    p->pPrior = pPrior;
-    if( rc || pRightmost->pLimit ) break;
+    selectInnerLoop(pParse, p, -1, 0, 0, pDest, 1, 1);
+    if( !bShowAll ) break;
     p->nSelectRow = nRow;
     p = p->pNext;
   }
index 1145a554a5391bbf1b5033649ecdc41c72b03d4b..d76d9f81e296c574f628ec49b6e3993c62b711c2 100644 (file)
@@ -4592,7 +4592,7 @@ WhereInfo *sqlite3WhereBegin(
     if( wctrlFlags & WHERE_WANT_DISTINCT ){
       pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
     }
-    /* ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW")); */
+    ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW"));
   }else{
     /* Assign a bit from the bitmask to every term in the FROM clause.
     **
index d25814628b80b10af76e19a263be38febdd6b25a..4638c34aa49ae0b89b8d725360019a7f7ca635b2 100644 (file)
@@ -89,6 +89,7 @@ do_eqp_test 1.7 {
 } {
   QUERY PLAN
   |--MATERIALIZE xxxxxx
+  |  `--SCAN CONSTANT ROW
   |--SCAN SUBQUERY xxxxxx
   `--SCAN TABLE t3
 }
@@ -99,7 +100,9 @@ do_eqp_test 1.8 {
   |--MATERIALIZE xxxxxx
   |  `--COMPOUND QUERY
   |     |--LEFT-MOST SUBQUERY
+  |     |  `--SCAN CONSTANT ROW
   |     `--UNION USING TEMP B-TREE
+  |        `--SCAN CONSTANT ROW
   |--SCAN SUBQUERY xxxxxx
   `--SCAN TABLE t3
 }
@@ -110,6 +113,7 @@ do_eqp_test 1.9 {
   |--MATERIALIZE xxxxxx
   |  `--COMPOUND QUERY
   |     |--LEFT-MOST SUBQUERY
+  |     |  `--SCAN CONSTANT ROW
   |     `--EXCEPT USING TEMP B-TREE
   |        `--SCAN TABLE t3
   |--SCAN SUBQUERY xxxxxx
@@ -122,6 +126,7 @@ do_eqp_test 1.10 {
   |--MATERIALIZE xxxxxx
   |  `--COMPOUND QUERY
   |     |--LEFT-MOST SUBQUERY
+  |     |  `--SCAN CONSTANT ROW
   |     `--INTERSECT USING TEMP B-TREE
   |        `--SCAN TABLE t3
   |--SCAN SUBQUERY xxxxxx
@@ -135,6 +140,7 @@ do_eqp_test 1.11 {
   |--MATERIALIZE xxxxxx
   |  `--COMPOUND QUERY
   |     |--LEFT-MOST SUBQUERY
+  |     |  `--SCAN CONSTANT ROW
   |     `--UNION ALL
   |        `--SCAN TABLE t3
   |--SCAN SUBQUERY xxxxxx
index 3983ff5db37b417ff0ab6ab7339e64768060fae3..13bd7bfb5a96de09ed8b267bb47d1549f927d3e8 100644 (file)
@@ -454,9 +454,12 @@ do_test 4.0 {
 
 # No sorting of queries that omit the FROM clause.
 #
-do_execsql_test 5.0 {
-  EXPLAIN QUERY PLAN SELECT 5 ORDER BY 1
-} {}
+do_eqp_test 5.0 {
+  SELECT 5 ORDER BY 1
+} {
+  QUERY PLAN
+  `--SCAN CONSTANT ROW
+}
 do_execsql_test 5.1 {
   EXPLAIN QUERY PLAN SELECT 5 UNION ALL SELECT 3 ORDER BY 1
 } {~/B-TREE/}
index f1a06250491b084716efea8697e0cb212021fec4..f8965399fc80309e6801a265b389489241bb07e0 100644 (file)
@@ -1005,6 +1005,7 @@ do_eqp_test 19.1b {
 } {
   QUERY PLAN
   |--MATERIALIZE xxxxxx
+  |  `--SCAN CONSTANT ROW
   |--SCAN SUBQUERY xxxxxx
   `--SCAN SUBQUERY xxxxxx
 }
index d13544cfa0f568aa25d704b82be71992cc1eebfc..de150b1fc1dd2affca26408af832bb5219f3312d 100644 (file)
@@ -83,6 +83,7 @@ ifcapable analyze {
     QUERY PLAN
     |--MATERIALIZE xxxxxx
     |  |--SETUP
+    |  |  `--SCAN CONSTANT ROW
     |  `--RECURSIVE STEP
     |     `--SCAN TABLE cnt
     |--SCAN SUBQUERY xxxxxx
@@ -96,6 +97,7 @@ ifcapable analyze {
     QUERY PLAN
     |--MATERIALIZE xxxxxx
     |  |--SETUP
+    |  |  `--SCAN CONSTANT ROW
     |  `--RECURSIVE STEP
     |     `--SCAN TABLE cnt
     |--SCAN TABLE y1
@@ -117,6 +119,7 @@ do_eqp_test 3.2.2 {
   QUERY PLAN
   |--MATERIALIZE xxxxxx
   |  |--SETUP
+  |  |  |--SCAN CONSTANT ROW
   |  |  `--SCALAR SUBQUERY
   |  |     `--SCAN TABLE w2
   |  `--RECURSIVE STEP