]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure the names of all expressions in compound SELECT statements used
authordrh <drh@noemail.net>
Fri, 13 Oct 2006 15:34:16 +0000 (15:34 +0000)
committerdrh <drh@noemail.net>
Fri, 13 Oct 2006 15:34:16 +0000 (15:34 +0000)
as subqueries are correctly resolved.  Ticket #2018. (CVS 3477)

FossilOrigin-Name: b886eaa334150262ce4d1a1d0470ca4cf623a396

manifest
manifest.uuid
src/select.c
test/select7.test

index 435e01ddd4df00f996cb75ccf5c1b3b601da26dd..c772ae9854803454d6f0c4988262d6f08b00696d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Avoid\sexpanding\s%d\scontained\sin\sthe\saction\sof\sa\slemon\sparser\srule.\nTicket\s#1063.\s\sThis\sis\sa\sfix\sfor\slemon\sonly.\s\sIt\sdoes\snot\seffect\sSQLite.\s(CVS\s3476)
-D 2006-10-13T12:25:30
+C Make\ssure\sthe\snames\sof\sall\sexpressions\sin\scompound\sSELECT\sstatements\sused\nas\ssubqueries\sare\scorrectly\sresolved.\s\sTicket\s#2018.\s(CVS\s3477)
+D 2006-10-13T15:34:17
 F Makefile.in 4379c909d46b38b8c5db3533084601621d4f14b2
 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -92,7 +92,7 @@ F src/pragma.c 2ef4353448e202961a22312f34695128bbb6d69a
 F src/prepare.c 3d9a1bb0644e8bccb3b78cb0833d269719237f4e
 F src/printf.c b179b6ed12f793e028dd169e2e2e2b2a37eedc63
 F src/random.c d40f8d356cecbd351ccfab6eaedd7ec1b54f5261
-F src/select.c e247a5e1ea64dc3273a165549f0391fde8472f39
+F src/select.c 6ba6d8ead43d0575ce1f8b418cc039f8f301389a
 F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
 F src/shell.c 1c17cd03c9cc2ff618435156038f508c159ecf12
 F src/sqlite.h.in bf935004029631fd93d119bcf2f7259b9cb9ad5e
@@ -272,7 +272,7 @@ F test/select3.test 33c78663e6b1b41220dcec4eb6affb1a05001ffe
 F test/select4.test 305ba0a6e97efc5544def5e5cb49b54e1bf87fd9
 F test/select5.test 0b47058d3e916c1fc9fe81f44b438e02bade21ce
 F test/select6.test a4e97b713b096f17414f50d078ec4efe7dc43253
-F test/select7.test 1bf795b948c133a15a2a5e99d3270e652ec58ce6
+F test/select7.test 95697d8e8355ef7538e2fe768da16838bbd0fcde
 F test/server1.test e328b8e641ba8fe9273132cfef497383185dc1f5
 F test/shared.test 0ed247941236788c255b3b29b5a82d5ca71b6432
 F test/shared2.test 8b48f8d33494413ef4cf250110d89403e2bf6b23
@@ -410,7 +410,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 7a08c6272f76d53b13313019b4f9da3c8f02b650
-R 72da244980a6657de96aa81c8ad2d32c
+P 81daedcf48372949b9df009ce6121a514ecf6f2e
+R 51a343f1ad7e509354c3abfdf659cea7
 U drh
-Z 11de7993c61aa0125c5ab72259d0a36b
+Z 333f96e3dffc96d0cf5e4ba951325035
index 2243febd0f6534ceaded2c5ecc295fa7d56e64e5..0cd03a47df01bc242d6f682823023c3b9682da13 100644 (file)
@@ -1 +1 @@
-81daedcf48372949b9df009ce6121a514ecf6f2e
\ No newline at end of file
+b886eaa334150262ce4d1a1d0470ca4cf623a396
\ No newline at end of file
index 38dcf974880769ea889a025df08ec95e23267849..68e348ff96b331bd8dcf6837a40645e7672ce761 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that are called by the parser
 ** to handle SELECT statements in SQLite.
 **
-** $Id: select.c,v 1.321 2006/09/29 14:01:05 drh Exp $
+** $Id: select.c,v 1.322 2006/10/13 15:34:17 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -2605,7 +2605,14 @@ int sqlite3SelectResolve(
     }
   }
 
-  return SQLITE_OK;
+  /* If this is one SELECT of a compound, be sure to resolve names
+  ** in the other SELECTs.
+  */
+  if( p->pPrior ){
+    return sqlite3SelectResolve(pParse, p->pPrior, pOuterNC);
+  }else{
+    return SQLITE_OK;
+  }
 }
 
 /*
index fd0d573d9f7db95b3d25c15e20bab24983a4cb4c..3546ca35ccf6cf070e8ac337b80074b1de39ccf8 100644 (file)
@@ -10,7 +10,7 @@
 # focus of this file is testing compute SELECT statements and nested
 # views.
 #
-# $Id: select7.test,v 1.7 2005/03/29 03:11:00 danielk1977 Exp $
+# $Id: select7.test,v 1.8 2006/10/13 15:34:17 drh Exp $
 
 
 set testdir [file dirname $argv0]
@@ -71,5 +71,39 @@ ifcapable subquery {
     }
   } [list 0 [execsql {SELECT * FROM sqlite_master ORDER BY name}]]
 }
-finish_test
 
+# Ticket #2018 - Make sure names are resolved correctly on all
+# SELECT statements of a compound subquery.
+#
+ifcapable {subquery && compound} {
+  do_test select7-4.1 {
+    execsql {
+      CREATE TABLE IF NOT EXISTS photo(pk integer primary key, x);
+      CREATE TABLE IF NOT EXISTS tag(pk integer primary key, fk int, name);
+    
+      SELECT P.pk from PHOTO P WHERE NOT EXISTS ( 
+           SELECT T2.pk from TAG T2 WHERE T2.fk = P.pk 
+           EXCEPT 
+           SELECT T3.pk from TAG T3 WHERE T3.fk = P.pk AND T3.name LIKE '%foo%'
+      );
+    }
+  } {}
+  do_test select7-4.2 {
+    execsql {
+      INSERT INTO photo VALUES(1,1);
+      INSERT INTO photo VALUES(2,2);
+      INSERT INTO photo VALUES(3,3);
+      INSERT INTO tag VALUES(11,1,'one');
+      INSERT INTO tag VALUES(12,1,'two');
+      INSERT INTO tag VALUES(21,1,'one-b');
+      SELECT P.pk from PHOTO P WHERE NOT EXISTS ( 
+           SELECT T2.pk from TAG T2 WHERE T2.fk = P.pk 
+           EXCEPT 
+           SELECT T3.pk from TAG T3 WHERE T3.fk = P.pk AND T3.name LIKE '%foo%'
+      );
+    }
+  } {2 3}
+
+}
+
+finish_test