-C CREATE\sTABLE\s...\sAS\s...\suses\sshort\snames\sfor\scolumns.\s\sTicket\s#1036.\s(CVS\s2232)
-D 2005-01-18T17:20:10
+C Make\ssure\sUSING\sand\sNATURAL\swork\son\sjoins\seven\sif\sthe\scolumns\sare\srenamed\nusing\san\sAS\sphrase.\s\sTicket\s#523.\s(CVS\s2233)
+D 2005-01-18T17:40:04
F Makefile.in ffd81f5e926d40b457071b4de8d7c1fa18f39b5a
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1
F src/pragma.c ac594f74c90ffec043c43e49358719ffeb491eec
F src/printf.c 3d20b21cfecadacecac3fb7274e746cb81d3d357
F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
-F src/select.c f9239c5936598de7f20710d82b024ff0a1582cd3
+F src/select.c 29bc58118d75071d1fd4f412581fde82e3e77b7d
F src/shell.c 591364a0e9ca4ce53873e21e0294476c0c2b4770
F src/sqlite.h.in 0d5e48e506845b74a845c9470e01d3f472b59611
F src/sqliteInt.h c6414179a23cab108b4b07e8665f30829ce47f2a
F test/interrupt.test 5b4d8389e6cf2d01b94f87cfd02d9df1073bfb2d
F test/intpkey.test b57cf5236fde1bd8cbc1388fa0c91908f6fd9194
F test/ioerr.test 43cdd9dcbdedc2ec952031b3e53d3d5a4ee26000
-F test/join.test 76a6450903d641425bd2f6b773f02f68947f2a0e
+F test/join.test 59e5abff5965016e3c75996f1019e2e91664647f
F test/join2.test c97e4c5aa65dea462145529e58212a709b4722b8
F test/join3.test 67dc0d7c8dab3fff25796d0f3c3fd9c999aeded3
F test/join4.test 8dec387d06b3a4685e1104048065cf5236b99b93
F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl c3b50d3ac31c54be2a1af9b488a89d22f1e6e746
-P 9295050af1bf2d9d4dc63adc225a2848d67cbe17
-R a088aa4bf87c4c0ebda525aa7fbfbf2e
+P b1d4c42d2be07adda68d31c570ba7cf8b115c3ad
+R 2229ecff57bc19695a34edaabfd642a4
U drh
-Z 81817808d93adb08227cfb0c57264748
+Z 6801e1d74e0c718113858c851d4ea8ea
-b1d4c42d2be07adda68d31c570ba7cf8b115c3ad
\ No newline at end of file
+c06add57bf0ce17503181b584ea4197b39b9e538
\ No newline at end of file
** This file contains C code routines that are called by the parser
** to handle SELECT statements in SQLite.
**
-** $Id: select.c,v 1.227 2005/01/18 17:20:10 drh Exp $
+** $Id: select.c,v 1.228 2005/01/18 17:40:04 drh Exp $
*/
#include "sqliteInt.h"
static void addWhereTerm(
const char *zCol, /* Name of the column */
const Table *pTab1, /* First table */
+ const char *zAlias1, /* Alias for first table. May be NULL */
const Table *pTab2, /* Second table */
+ const char *zAlias2, /* Alias for second table. May be NULL */
Expr **ppExpr /* Add the equality term to this expression */
){
Token dummy;
setToken(&dummy, zCol);
pE1a = sqlite3Expr(TK_ID, 0, 0, &dummy);
pE2a = sqlite3Expr(TK_ID, 0, 0, &dummy);
- setToken(&dummy, pTab1->zName);
+ if( zAlias1==0 ){
+ zAlias1 = pTab1->zName;
+ }
+ setToken(&dummy, zAlias1);
pE1b = sqlite3Expr(TK_ID, 0, 0, &dummy);
- setToken(&dummy, pTab2->zName);
+ if( zAlias2==0 ){
+ zAlias2 = pTab2->zName;
+ }
+ setToken(&dummy, zAlias2);
pE2b = sqlite3Expr(TK_ID, 0, 0, &dummy);
pE1c = sqlite3Expr(TK_DOT, pE1b, pE1a, 0);
pE2c = sqlite3Expr(TK_DOT, pE2b, pE2a, 0);
for(j=0; j<pLeftTab->nCol; j++){
char *zName = pLeftTab->aCol[j].zName;
if( columnIndex(pRightTab, zName)>=0 ){
- addWhereTerm(zName, pLeftTab, pRightTab, &p->pWhere);
+ addWhereTerm(zName, pLeftTab, pLeft->zAlias,
+ pRightTab, pRight->zAlias, &p->pWhere);
}
}
}
"not present in both tables", zName);
return 1;
}
- addWhereTerm(zName, pLeftTab, pRightTab, &p->pWhere);
+ addWhereTerm(zName, pLeftTab, pLeft->zAlias,
+ pRightTab, pRight->zAlias, &p->pWhere);
}
}
}
#
# This file implements tests for joins, including outer joins.
#
-# $Id: join.test,v 1.14 2005/01/18 16:02:40 drh Exp $
+# $Id: join.test,v 1.15 2005/01/18 17:40:04 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
SELECT * FROM t2 NATURAL JOIN t1;
}
} {b 2 c 3 d 4 a 1 b 3 c 4 d 5 a 2}
-do_test join-1.4 {
+do_test join-1.3.2 {
+ execsql2 {
+ SELECT * FROM t2 AS x NATURAL JOIN t1;
+ }
+} {b 2 c 3 d 4 a 1 b 3 c 4 d 5 a 2}
+do_test join-1.3.3 {
+ execsql2 {
+ SELECT * FROM t2 NATURAL JOIN t1 AS y;
+ }
+} {b 2 c 3 d 4 a 1 b 3 c 4 d 5 a 2}
+do_test join-1.4.1 {
execsql2 {
SELECT * FROM t1 INNER JOIN t2 USING(b,c);
}
} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5}
+do_test join-1.4.2 {
+ execsql2 {
+ SELECT * FROM t1 AS x INNER JOIN t2 USING(b,c);
+ }
+} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5}
+do_test join-1.4.3 {
+ execsql2 {
+ SELECT * FROM t1 INNER JOIN t2 AS y USING(b,c);
+ }
+} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5}
+do_test join-1.4.4 {
+ execsql2 {
+ SELECT * FROM t1 AS x INNER JOIN t2 AS y USING(b,c);
+ }
+} {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5}
do_test join-1.5 {
execsql2 {
SELECT * FROM t1 INNER JOIN t2 USING(b);