]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Report an error if a USING or ON clause is specified following a from-list element...
authordanielk1977 <danielk1977@noemail.net>
Wed, 1 Jul 2009 16:12:07 +0000 (16:12 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Wed, 1 Jul 2009 16:12:07 +0000 (16:12 +0000)
FossilOrigin-Name: 29b48972b65a17dab343b063a620cf8d456a923c

manifest
manifest.uuid
src/build.c
test/join.test
test/tkt3935.test
test/vtab6.test

index a12f4a6aa0eeed7f7e67ecda7824f9f845628441..806e668285cad08dcd173b96d6dc8b7226fbcea3 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Do\snot\signore\salias\s"a"\sin\sa\squery\sof\sthe\sform\s"SELECT\s...\sFROM\s(...)\sAS\sa"\sFix\sfor\s#3935.\sAlso\sexpand\supon\s(6751)\sto\sfix\ssome\ssimilar\sobscure\smemory\sleaks.\s(CVS\s6831)
-D 2009-07-01T14:56:40
+C Report\san\serror\sif\sa\sUSING\sor\sON\sclause\sis\sspecified\sfollowing\sa\sfrom-list\selement\sthat\sis\snot\sto\sthe\sright\sof\sa\sjoin\soperator.\sFix\sfor\s#3846.\s(CVS\s6832)
+D 2009-07-01T16:12:08
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 8b8fb7823264331210cddf103831816c286ba446
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -109,7 +109,7 @@ F src/btmutex.c 9b899c0d8df3bd68f527b0afe03088321b696d3c
 F src/btree.c 078eb41016d033707f8a94075cdde18249e48f75
 F src/btree.h f70b694e8c163227369a66863b01fbff9009f323
 F src/btreeInt.h 55346bc14b939ad41b297942e8b1b581e960fb99
-F src/build.c 1906bb2856f7013c9ab5ff1e0eeab033ed1c00ba
+F src/build.c 867028ee9f63f7bc8eb8d4a720bb98cf9b9a12b4
 F src/callback.c cb68b21b0d4ae7d11ae0e487933bce3323784dcf
 F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0
 F src/date.c ab5f7137656652a48434d64f96bdcdc823bb23b3
@@ -419,7 +419,7 @@ F test/ioerr2.test 1b56cb80d5b0726ee3ba325ca175734541e32955
 F test/ioerr3.test d3cec5e1a11ad6d27527d0d38573fbff14c71bdd
 F test/ioerr4.test fc6eddfec2efc2f1ed217b9eae4c1c1d3516ce86
 F test/ioerr5.test 89f69b09a6b5d4f5bbfe58d4231f28236d842dcb
-F test/join.test c5696c7e7efd8b3780c9308e4511742a937fe660
+F test/join.test a79084b09d862e7be924abb97d1b1342a0157209
 F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324
 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
@@ -656,7 +656,7 @@ F test/tkt3911.test 74cd324f3ba653040cc6d94cc4857b290d12d633
 F test/tkt3918.test e6cdf6bfcfe9ba939d86a4238a9dc55d6eec5d42
 F test/tkt3922.test 022ace32c049e3964f68492c12eb803e8e4856d8
 F test/tkt3929.test 6a4c3baefb4e75127356b7d675b5df42c35c00d1
-F test/tkt3935.test 209a67e511c15adb572d536689a4e02ea4fcbb00
+F test/tkt3935.test e15261fedb9e30a4305a311da614a5d8e693c767
 F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7
 F test/trace.test 19ffbc09885c3321d56358a5738feae8587fb377
 F test/trans.test d887cb07630dc39879a322d958ad8b006137485c
@@ -690,7 +690,7 @@ F test/vtab2.test 7bcffc050da5c68f4f312e49e443063e2d391c0d
 F test/vtab3.test baad99fd27217f5d6db10660522e0b7192446de1
 F test/vtab4.test 942f8b8280b3ea8a41dae20e7822d065ca1cb275
 F test/vtab5.test a0a84a89c622f4e2e816ebf39883dc319b4a1024
-F test/vtab6.test a56c947193fb28ddb453d38768cb8acc6f2eed79
+F test/vtab6.test 226b116d63ad77f9b084d556f772c45a0d28e9b5
 F test/vtab7.test a8c3c3cb3eb60be364991bd714e4927e26c4cd85
 F test/vtab8.test e19fa4a538fcd1bb66c22825fa8f71618fb13583
 F test/vtab9.test ea58d2b95d61955f87226381716b2d0b1d4e4f9b
@@ -738,7 +738,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
-P f17ef37897da9bcaf20b5acdce6840522c0a0b16
-R 0a4b75c01f05a0efdc0d38590a4ebf72
+P 42f9d1e56483a59353bff57d75f09ed67e1d9c3c
+R 23d368ef27404e6adaeea4f513ad5353
 U danielk1977
-Z aee332d7efb75dc0b087c0e560dcdc1e
+Z 8f538dfbca52be8303d8e87518479b92
index d5e0671925984356048024666ba32d1fbcdb3500..fff3e0e277f9f0fee637d19f3b77bb9fda231301 100644 (file)
@@ -1 +1 @@
-42f9d1e56483a59353bff57d75f09ed67e1d9c3c
\ No newline at end of file
+29b48972b65a17dab343b063a620cf8d456a923c
\ No newline at end of file
index 0bee735b7f4f09f071cdecec67d398a7ea6e0ae7..0696f1c82df3c2033abec537f695a23e9b849a32 100644 (file)
@@ -22,7 +22,7 @@
 **     COMMIT
 **     ROLLBACK
 **
-** $Id: build.c,v 1.555 2009/07/01 14:56:40 danielk1977 Exp $
+** $Id: build.c,v 1.556 2009/07/01 16:12:08 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 
@@ -3208,12 +3208,15 @@ SrcList *sqlite3SrcListAppendFromTerm(
 ){
   struct SrcList_item *pItem;
   sqlite3 *db = pParse->db;
+  if( !p && (pOn || pUsing) ){
+    sqlite3ErrorMsg(pParse, "a JOIN clause is required before %s", 
+      (pOn ? "ON" : "USING")
+    );
+    goto append_from_error;
+  }
   p = sqlite3SrcListAppend(db, p, pTable, pDatabase);
   if( p==0 || NEVER(p->nSrc==0) ){
-    sqlite3ExprDelete(db, pOn);
-    sqlite3IdListDelete(db, pUsing);
-    sqlite3SelectDelete(db, pSubquery);
-    return p;
+    goto append_from_error;
   }
   pItem = &p->a[p->nSrc-1];
   assert( pAlias!=0 );
@@ -3221,14 +3224,16 @@ SrcList *sqlite3SrcListAppendFromTerm(
     pItem->zAlias = sqlite3NameFromToken(db, pAlias);
   }
   pItem->pSelect = pSubquery;
-  if( p->nSrc>1 ){
-    pItem->pOn = pOn;
-    pItem->pUsing = pUsing;
-  }else{
-    sqlite3ExprDelete(db, pOn);
-    sqlite3IdListDelete(db, pUsing);
-  }
+  pItem->pOn = pOn;
+  pItem->pUsing = pUsing;
   return p;
+
+ append_from_error:
+  assert( p==0 );
+  sqlite3ExprDelete(db, pOn);
+  sqlite3IdListDelete(db, pUsing);
+  sqlite3SelectDelete(db, pSubquery);
+  return 0;
 }
 
 /*
index 59901b0e73dffdebe01af674f591e1b8cb7f2f4a..7fecbe876e5f574992578767a7779931cf8f9784 100644 (file)
@@ -12,7 +12,7 @@
 #
 # This file implements tests for joins, including outer joins.
 #
-# $Id: join.test,v 1.26 2008/12/05 00:00:07 drh Exp $
+# $Id: join.test,v 1.27 2009/07/01 16:12:08 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -309,10 +309,8 @@ do_test join-3.4.2 {
   }
 } {1 {cannot join using column d - column not present in both tables}}
 do_test join-3.5 {
-  catchsql {
-    SELECT * FROM t1 USING(a);
-  }
-} {0 {1 2 3 2 3 4 3 4 5}}
+  catchsql { SELECT * FROM t1 USING(a) }
+} {1 {a JOIN clause is required before USING}}
 do_test join-3.6 {
   catchsql {
     SELECT * FROM t1 JOIN t2 ON t3.a=t2.b;
index a392a55c62048743cfd45a9c543b17488840183d..abbeb3f8669e66d6a9eccf40c2a59d78dcb4dc72 100644 (file)
@@ -12,7 +12,7 @@
 #
 # This file implements tests to verify that ticket #3935 has been fixed.
 #
-# $Id: tkt3935.test,v 1.1 2009/07/01 14:56:41 danielk1977 Exp $
+# $Id: tkt3935.test,v 1.2 2009/07/01 16:12:08 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -33,22 +33,25 @@ do_test tkt3935.3 {
 
 
 do_test tkt3935.4 {
-  execsql { SELECT a FROM (t1) AS t ON b USING(a) }
-} {}
+  catchsql { SELECT a FROM (t1) AS t ON b USING(a) }
+} {1 {a JOIN clause is required before ON}}
 do_test tkt3935.5 {
-  execsql { SELECT a FROM (t1) AS t ON b }
-} {}
+  catchsql { SELECT a FROM (t1) AS t ON b }
+} {1 {a JOIN clause is required before ON}}
 do_test tkt3935.6 {
-  execsql { SELECT a FROM (SELECT * FROM t1) AS t ON b USING(a) }
-} {}
+  catchsql { SELECT a FROM (SELECT * FROM t1) AS t ON b USING(a) }
+} {1 {a JOIN clause is required before ON}}
 do_test tkt3935.7 {
-  execsql { SELECT a FROM (SELECT * FROM t1) AS t ON b }
-} {}
+  catchsql { SELECT a FROM (SELECT * FROM t1) AS t ON b }
+} {1 {a JOIN clause is required before ON}}
 do_test tkt3935.8 {
-  execsql { SELECT a FROM t1 AS t ON b }
-} {}
+  catchsql { SELECT a FROM t1 AS t ON b }
+} {1 {a JOIN clause is required before ON}}
 do_test tkt3935.9 {
-  execsql { SELECT a FROM t1 AS t ON b USING(a) }
-} {}
+  catchsql { SELECT a FROM t1 AS t ON b USING(a) }
+} {1 {a JOIN clause is required before ON}}
+do_test tkt3935.10 {
+  catchsql { SELECT a FROM t1 AS t USING(a) }
+} {1 {a JOIN clause is required before USING}}
 
 finish_test
index ed644a1df9a99819d8b37e51d1641559823e2487..a263973d33b8a0f7429e5c373c35a12fcaac7881 100644 (file)
@@ -14,7 +14,7 @@
 # virtual tables. The test cases in this file are copied from the file
 # join.test, and some of the comments still reflect that.
 #
-# $Id: vtab6.test,v 1.4 2008/07/12 14:52:21 drh Exp $
+# $Id: vtab6.test,v 1.5 2009/07/01 16:12:08 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -265,10 +265,8 @@ do_test vtab6-3.4 {
   }
 } {1 {cannot join using column a - column not present in both tables}}
 do_test vtab6-3.5 {
-  catchsql {
-    SELECT * FROM t1 USING(a);
-  }
-} {0 {1 2 3 2 3 4 3 4 5}}
+  catchsql { SELECT * FROM t1 USING(a) }
+} {1 {a JOIN clause is required before USING}}
 do_test vtab6-3.6 {
   catchsql {
     SELECT * FROM t1 JOIN t2 ON t3.a=t2.b;