SQLite

Check-in [70f5f3b85f]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Fix for ticket #2141. (CVS 3552)
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 70f5f3b85f30bbec0ddc59ba364e1229c09ed636
User & Date: drh 2007-01-04 01:20:29.000
Context
2007-01-04
14:36
Reactivate disabled "alter2" tests. (CVS 3553) (check-in: 093467a099 user: drh tags: trunk)
01:20
Fix for ticket #2141. (CVS 3552) (check-in: 70f5f3b85f user: drh tags: trunk)
01:20
Add a comment to vdbe.c to explain the use of an uninitialized variable. (CVS 3551) (check-in: 1773eb7bad user: drh tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/expr.c.
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
**    May you find forgiveness for yourself and forgive others.
**    May you share freely, never taking more than you give.
**
*************************************************************************
** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite.
**
** $Id: expr.c,v 1.270 2006/12/16 16:25:15 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>

/*
** Return the 'affinity' of the expression pExpr if any.
**







|







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
**    May you find forgiveness for yourself and forgive others.
**    May you share freely, never taking more than you give.
**
*************************************************************************
** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite.
**
** $Id: expr.c,v 1.271 2007/01/04 01:20:29 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>

/*
** Return the 'affinity' of the expression pExpr if any.
**
2204
2205
2206
2207
2208
2209
2210

2211
2212
2213
2214
2215
2216
2217
  NameContext *pNC = (NameContext *)pArg;
  Parse *pParse = pNC->pParse;
  SrcList *pSrcList = pNC->pSrcList;
  AggInfo *pAggInfo = pNC->pAggInfo;
  

  switch( pExpr->op ){

    case TK_COLUMN: {
      /* Check to see if the column is in one of the tables in the FROM
      ** clause of the aggregate query */
      if( pSrcList ){
        struct SrcList_item *pItem = pSrcList->a;
        for(i=0; i<pSrcList->nSrc; i++, pItem++){
          struct AggInfo_col *pCol;







>







2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
  NameContext *pNC = (NameContext *)pArg;
  Parse *pParse = pNC->pParse;
  SrcList *pSrcList = pNC->pSrcList;
  AggInfo *pAggInfo = pNC->pAggInfo;
  

  switch( pExpr->op ){
    case TK_AGG_COLUMN:
    case TK_COLUMN: {
      /* Check to see if the column is in one of the tables in the FROM
      ** clause of the aggregate query */
      if( pSrcList ){
        struct SrcList_item *pItem = pSrcList->a;
        for(i=0; i<pSrcList->nSrc; i++, pItem++){
          struct AggInfo_col *pCol;
Added test/tkt2141.test.


















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 2007 January 03
#
# The author disclaims copyright to this source code.  In place of
# a legal notice, here is a blessing:
#
#    May you do good and not evil.
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
# This file implements regression tests for SQLite library.
#
# This file implements tests to verify that ticket #2141 has been
# fixed.  
#
#
# $Id: tkt2141.test,v 1.1 2007/01/04 01:20:29 drh Exp $

set testdir [file dirname $argv0]
source $testdir/tester.tcl


do_test tkt2141-1.1 {
  execsql {
      CREATE TABLE tab1 (t1_id integer PRIMARY KEY, t1_desc);
      INSERT INTO tab1 VALUES(1,'rec 1 tab 1');
      CREATE TABLE tab2 (t2_id integer PRIMARY KEY, t2_id_t1, t2_desc);
      INSERT INTO tab2 VALUES(1,1,'rec 1 tab 2');
      CREATE TABLE tab3 (t3_id integer PRIMARY KEY, t3_id_t2, t3_desc);
      INSERT INTO tab3 VALUES(1,1,'aa');
      SELECT *
      FROM tab1 t1 LEFT JOIN tab2 t2 ON t1.t1_id = t2.t2_id_t1
      WHERE t2.t2_id IN
           (SELECT t2_id FROM tab2, tab3 ON t2_id = t3_id_t2
             WHERE t3_id IN (1,2) GROUP BY t2_id);
  }
} {1 {rec 1 tab 1} 1 1 {rec 1 tab 2}}
do_test tkt2141-1.2 {
  execsql {
      SELECT *
      FROM tab1 t1 LEFT JOIN tab2 t2 ON t1.t1_id = t2.t2_id_t1
      WHERE t2.t2_id IN
           (SELECT t2_id FROM tab2, tab3 ON t2_id = t3_id_t2
             WHERE t3_id IN (1,2));
  }
} {1 {rec 1 tab 1} 1 1 {rec 1 tab 2}}
do_test tkt2141-1.3 {
  execsql {
      SELECT *
      FROM tab1 t1 LEFT JOIN tab2 t2
      WHERE t2.t2_id IN
           (SELECT t2_id FROM tab2, tab3 ON t2_id = t3_id_t2
             WHERE t3_id IN (1,2));
  }
} {1 {rec 1 tab 1} 1 1 {rec 1 tab 2}}

finish_test