1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-08 03:22:21 +03:00

Allow WHERE clause terms on the left table of a LEFT OUTER JOIN to

contain aggregate subqueries.  Ticket #1697. (CVS 3117)

FossilOrigin-Name: a286e54e26f9a364127649eeea160d5fa8928faf
This commit is contained in:
drh
2006-03-02 04:44:23 +00:00
parent d589a92a26
commit 41714d6f83
4 changed files with 26 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
C Change\sthe\sROUND()\sfunction\sto\sreturn\sa\sREAL\svalue\sinstead\sof\sTEXT.\nTicket\s#1699.\s(CVS\s3116) C Allow\sWHERE\sclause\sterms\son\sthe\sleft\stable\sof\sa\sLEFT\sOUTER\sJOIN\sto\ncontain\saggregate\ssubqueries.\s\sTicket\s#1697.\s(CVS\s3117)
D 2006-03-02T03:02:48 D 2006-03-02T04:44:24
F Makefile.in 5d8dff443383918b700e495de42ec65bc1c8865b F Makefile.in 5d8dff443383918b700e495de42ec65bc1c8865b
F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -42,7 +42,7 @@ F src/complete.c 7d1a44be8f37de125fcafd3d3a018690b3799675
F src/date.c cd2bd5d1ebc6fa12d6312f69789ae5b0a2766f2e F src/date.c cd2bd5d1ebc6fa12d6312f69789ae5b0a2766f2e
F src/delete.c 2dea1a83e6ef534346e74fd03114d3a7b16f08fc F src/delete.c 2dea1a83e6ef534346e74fd03114d3a7b16f08fc
F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b
F src/expr.c 9c957fabf95ef62288151eecd5c490a629470666 F src/expr.c 2d72534daaa1ac7bd8eec1db39536071ada20d41
F src/func.c ea1a4480bacfb17f8e08d675313f024fe7136c00 F src/func.c ea1a4480bacfb17f8e08d675313f024fe7136c00
F src/hash.c 449f3d6620193aa557f5d86cbc5cc6b87702b185 F src/hash.c 449f3d6620193aa557f5d86cbc5cc6b87702b185
F src/hash.h 1b3f7e2609141fd571f62199fc38687d262e9564 F src/hash.h 1b3f7e2609141fd571f62199fc38687d262e9564
@@ -177,7 +177,7 @@ F test/insert3.test 0096bd9766f94f4fa06ef712658e590b782cb44f
F test/interrupt.test cd24dc5bedd02325be4bfa5d6209fae01c465157 F test/interrupt.test cd24dc5bedd02325be4bfa5d6209fae01c465157
F test/intpkey.test af4fd826c4784ec5c93b444de07adea0254d0d30 F test/intpkey.test af4fd826c4784ec5c93b444de07adea0254d0d30
F test/ioerr.test 804d56cfa698e7c90590921f984eb49ceb30c2a9 F test/ioerr.test 804d56cfa698e7c90590921f984eb49ceb30c2a9
F test/join.test db3802739fb695bdfa2e88805e3d64ec5ffbebd1 F test/join.test a74f84f8ac503a69de3bc5e2e3a33aefa4476846
F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324 F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324
F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
F test/join4.test 1a352e4e267114444c29266ce79e941af5885916 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
@@ -355,7 +355,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
P 1fe9ca078b77b79ac738a095d8d4c82ae0926286 P 9dbadfb2111f7d7f971e1832db3992ed5851d8b1
R b3fdad5802e6bee698b446a91a4e2c53 R 5d4d777adb4a6491f27099755fa5e993
U drh U drh
Z 321fd91bd847dc54e0ab9246b1daf202 Z 8b78e5445d0958fbc886976c3af969ba

View File

@@ -1 +1 @@
9dbadfb2111f7d7f971e1832db3992ed5851d8b1 a286e54e26f9a364127649eeea160d5fa8928faf

View File

@@ -12,7 +12,7 @@
** This file contains routines used for analyzing expressions and ** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite. ** for generating VDBE code that evaluates expressions in SQLite.
** **
** $Id: expr.c,v 1.254 2006/02/10 07:07:15 danielk1977 Exp $ ** $Id: expr.c,v 1.255 2006/03/02 04:44:24 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -1692,7 +1692,9 @@ void sqlite3ExprCode(Parse *pParse, Expr *pExpr){
#ifndef SQLITE_OMIT_SUBQUERY #ifndef SQLITE_OMIT_SUBQUERY
case TK_EXISTS: case TK_EXISTS:
case TK_SELECT: { case TK_SELECT: {
if( pExpr->iColumn==0 ){
sqlite3CodeSubselect(pParse, pExpr); sqlite3CodeSubselect(pParse, pExpr);
}
sqlite3VdbeAddOp(v, OP_MemLoad, pExpr->iColumn, 0); sqlite3VdbeAddOp(v, OP_MemLoad, pExpr->iColumn, 0);
VdbeComment((v, "# load subquery result")); VdbeComment((v, "# load subquery result"));
break; break;

View File

@@ -12,7 +12,7 @@
# #
# This file implements tests for joins, including outer joins. # This file implements tests for joins, including outer joins.
# #
# $Id: join.test,v 1.20 2005/06/06 17:11:46 drh Exp $ # $Id: join.test,v 1.21 2006/03/02 04:44:24 drh Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
@@ -443,4 +443,17 @@ ifcapable view {
} ;# ifcapable view } ;# ifcapable view
} ;# ifcapable compound } ;# ifcapable compound
# Ticket #1697: Left Join WHERE clause terms that contain an
# aggregate subquery.
#
do_test join-10.1 {
execsql {
CREATE TABLE t21(a,b,c);
CREATE TABLE t22(p,q);
CREATE INDEX i22 ON t22(q);
SELECT a FROM t21 LEFT JOIN t22 ON b=p WHERE q=
(SELECT max(m.q) FROM t22 m JOIN t21 n ON n.b=m.p WHERE n.c=1);
}
} {}
finish_test finish_test