]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure a multi-row VALUES clause works correctly in a compound SELECT.
authordrh <drh@noemail.net>
Wed, 19 Feb 2014 01:31:02 +0000 (01:31 +0000)
committerdrh <drh@noemail.net>
Wed, 19 Feb 2014 01:31:02 +0000 (01:31 +0000)
FossilOrigin-Name: 85b355cfb40e8dbeb171980204ffad897184063f

manifest
manifest.uuid
src/parse.y
test/select4.test

index 21d08689e4c7174e79c40acee1d62f96d1fc1fb0..f819451ca78fe4204c10c2cda1dac679fc2dacab 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Tweaks\sin\ssupport\sof\sVDBE\sbranch\stest\scoverage.
-D 2014-02-19T00:53:46.757
+C Make\ssure\sa\smulti-row\sVALUES\sclause\sworks\scorrectly\sin\sa\scompound\sSELECT.
+D 2014-02-19T01:31:02.841
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -206,7 +206,7 @@ F src/os_unix.c 18f7f95dc6bcb9cf4d4a238d8e2de96611bc2ae5
 F src/os_win.c d4284f003445054a26689f1264b1b9bf7261bd1b
 F src/pager.c 0ffa313a30ed6d061d9c6601b7b175cc50a1cab7
 F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
-F src/parse.y cce844ccb80b5f969b04c25100c8d94338488efb
+F src/parse.y 2613ca5d609c2f3d71dd297351f010bcec16e1e0
 F src/pcache.c d8eafac28290d4bb80332005435db44991d07fc2
 F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
 F src/pcache1.c 102e6f5a2fbc646154463eb856d1fd716867b64c
@@ -777,7 +777,7 @@ F test/securedel2.test 2d54c28e46eb1fd6902089958b20b1b056c6f1c5
 F test/select1.test fc2a61f226a649393664ad54bc5376631801517c
 F test/select2.test 352480e0e9c66eda9c3044e412abdf5be0215b56
 F test/select3.test 2ce595f8fb8e2ac10071d3b4e424cadd4634a054
-F test/select4.test 00179be44e531fe04c1c3f15df216439dff2519d
+F test/select4.test 8c5a60d439e2df824aed56223566877a883c5c84
 F test/select5.test e758b8ef94f69b111df4cb819008856655dcd535
 F test/select6.test e76bd10a56988f15726c097a5d5a7966fe82d3b2
 F test/select7.test 7fd2ef598cfabb6b9ff6ac13973b91d0527df49d
@@ -1151,7 +1151,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P b287520c9226f7a9fab98142f5c207bfe959cd7e
-R db3eaca30cb3f9a4bcbd920e67b64796
+P b97825646996792d0a67b83f135658027c8569ca
+R e0d510b78dfc0d79538a4222d29a9363
 U drh
-Z 6e0e07262b8661a34d8eb8aae8107f91
+Z f971c993fbd0c297278e42fafe3ac2dc
index b1881b184d5af4f9ea03545ba1cecc649a91cace..7a4f65bb4a027e8ceaff93d8dd05f4462c5b9bb4 100644 (file)
@@ -1 +1 @@
-b97825646996792d0a67b83f135658027c8569ca
\ No newline at end of file
+85b355cfb40e8dbeb171980204ffad897184063f
\ No newline at end of file
index 373c126a25b71fd99e5b8660900ff5a601154dc8..ad9bedf0b477b66e8bad5456f6bd0fff6b82b1e1 100644 (file)
@@ -437,14 +437,22 @@ select(A) ::= with(W) selectnowith(X). {
 selectnowith(A) ::= oneselect(X).                      {A = X;}
 %ifndef SQLITE_OMIT_COMPOUND_SELECT
 selectnowith(A) ::= selectnowith(X) multiselect_op(Y) oneselect(Z).  {
-  if( Z ){
-    Z->op = (u8)Y;
-    Z->pPrior = X;
+  Select *pRhs = Z;
+  if( pRhs && pRhs->pPrior ){
+    SrcList *pFrom;
+    Token x;
+    x.n = 0;
+    pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
+    pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0,0);
+  }
+  if( pRhs ){
+    pRhs->op = (u8)Y;
+    pRhs->pPrior = X;
     if( Y!=TK_ALL ) pParse->hasCompound = 1;
   }else{
     sqlite3SelectDelete(pParse->db, X);
   }
-  A = Z;
+  A = pRhs;
 }
 %type multiselect_op {int}
 multiselect_op(A) ::= UNION(OP).             {A = @OP;}
index e205b37a4f6b4731d2670a1a3b03aad9737cb885..8fc200d43468c1b8dd83278b063bc8ffb7f55b8c 100644 (file)
@@ -824,4 +824,40 @@ do_test select4-13.1 {
   }
 } {1 2}
 
+# 2014-02-18: Make sure compound SELECTs work with VALUES clauses
+#
+do_execsql_test select4-14.1 {
+  CREATE TABLE t14(a,b,c);
+  INSERT INTO t14 VALUES(1,2,3),(4,5,6);
+  SELECT * FROM t14 INTERSECT VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3);
+} {1 2 3}
+do_execsql_test select4-14.2 {
+  SELECT * FROM t14 INTERSECT VALUES(1,2,3);
+} {1 2 3}
+do_execsql_test select4-14.3 {
+  SELECT * FROM t14
+   UNION VALUES(3,2,1),(2,3,1),(1,2,3),(7,8,9),(4,5,6)
+   UNION SELECT * FROM t14 ORDER BY 1, 2, 3
+} {1 2 3 2 3 1 3 2 1 4 5 6 7 8 9}
+do_execsql_test select4-14.4 {
+  SELECT * FROM t14
+   UNION VALUES(3,2,1)
+   UNION SELECT * FROM t14 ORDER BY 1, 2, 3
+} {1 2 3 3 2 1 4 5 6}
+do_execsql_test select4-14.5 {
+  SELECT * FROM t14 EXCEPT VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3);
+} {4 5 6}
+do_execsql_test select4-14.6 {
+  SELECT * FROM t14 EXCEPT VALUES(1,2,3)
+} {4 5 6}
+do_execsql_test select4-14.7 {
+  SELECT * FROM t14 EXCEPT VALUES(1,2,3) EXCEPT VALUES(4,5,6)
+} {}
+do_execsql_test select4-14.8 {
+  SELECT * FROM t14 EXCEPT VALUES('a','b','c') EXCEPT VALUES(4,5,6)
+} {1 2 3}
+do_execsql_test select4-14.9 {
+  SELECT * FROM t14 UNION ALL VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3);
+} {1 2 3 4 5 6 3 2 1 2 3 1 1 2 3 2 1 3}
+
 finish_test