Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch tkt-a7b7803e Excluding Merge-Ins
This is equivalent to a diff from 7fecced4 to 0ae14217
2012-12-19
| ||
16:58 | Fix the segfault problem of ticket [a7b7803e8d1e869] which involved the use of "AS" named result columns as logical terms of the WHERE clause. (check-in: b3c9e8f8 user: drh tags: trunk) | |
16:32 | A couple more test cases. (Closed-Leaf check-in: 0ae14217 user: drh tags: tkt-a7b7803e) | |
16:25 | Additional test cases involving the use of a result column specified by its "AS" name as a logical term of the WHERE clause. Ticket [a7b7803e8d1e8699cd]. (check-in: d7cc364e user: drh tags: tkt-a7b7803e) | |
15:53 | Proposed fix for ticket [a7b7803e8d1e8699cd8a]. (check-in: 3d0e00c7 user: drh tags: tkt-a7b7803e) | |
02:36 | Better resolution of table and column names in joins where some of the terms of the FROM clause are parenthesized. (check-in: 7344e791 user: drh tags: name-resolution-fix) | |
2012-12-18
| ||
19:36 | Optimize the degenerate case of a FROM clause table name enclosed all by itself inside parentheses. Generate code as if the parentheses did not exist, rather than the old behavior of manifesting the parenthesized table into a transient table. Also, tag every FROM-clause SELECT subquery that is generated by a parenthesized FROM-clause expression using the SF_NestedFrom flag. The new SF_NestedFrom flag is not yet used for anything. (check-in: 7fecced4 user: drh tags: trunk) | |
16:07 | Resolve names in FROM-clause subqueries prior to resolving names in the result set expressions of a SELECT statement. (check-in: 9b67c633 user: drh tags: trunk) | |
Changes to src/where.c.
︙ | ︙ | |||
399 400 401 402 403 404 405 | memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm); if( pOld!=pWC->aStatic ){ sqlite3DbFree(db, pOld); } pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]); } pTerm = &pWC->a[idx = pWC->nTerm++]; | | | 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 | memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm); if( pOld!=pWC->aStatic ){ sqlite3DbFree(db, pOld); } pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]); } pTerm = &pWC->a[idx = pWC->nTerm++]; pTerm->pExpr = sqlite3ExprSkipCollate(p); pTerm->wtFlags = wtFlags; pTerm->pWC = pWC; pTerm->iParent = -1; return idx; } /* |
︙ | ︙ | |||
1184 1185 1186 1187 1188 1189 1190 | sqlite3 *db = pParse->db; /* Database connection */ if( db->mallocFailed ){ return; } pTerm = &pWC->a[idxTerm]; pMaskSet = pWC->pMaskSet; | | > | 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 | sqlite3 *db = pParse->db; /* Database connection */ if( db->mallocFailed ){ return; } pTerm = &pWC->a[idxTerm]; pMaskSet = pWC->pMaskSet; pExpr = pTerm->pExpr; assert( pExpr->op!=TK_AS && pExpr->op!=TK_COLLATE ); prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft); op = pExpr->op; if( op==TK_IN ){ assert( pExpr->pRight==0 ); if( ExprHasProperty(pExpr, EP_xIsSelect) ){ pTerm->prereqRight = exprSelectTableUsage(pMaskSet, pExpr->x.pSelect); }else{ |
︙ | ︙ |
Added test/tkt-a7b7803e.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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | # 2012 December 19 # # 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. Specifically, # it tests that ticket [a7b7803e8d1e8699cd8a460a38133b98892d2e17] has # been fixed. # set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/lock_common.tcl source $testdir/malloc_common.tcl do_test tkt-a7b7803e.1 { db eval { CREATE TABLE t1(a,b); INSERT INTO t1 VALUES(0,'first'),(99,'fuzzy'); SELECT (t1.a==0) AS x, b FROM t1 WHERE a=0 OR x; } } {1 first} do_test tkt-a7b7803e.2 { db eval { SELECT a, (t1.b='fuzzy') AS x FROM t1 WHERE x } } {99 1} do_test tkt-a7b7803e.3 { db eval { SELECT (a=99) AS x, (t1.b='fuzzy') AS y, * FROM t1 WHERE x AND y } } {1 1 99 fuzzy} do_test tkt-a7b7803e.4 { db eval { SELECT (a=99) AS x, (t1.b='first') AS y, * FROM t1 WHERE x OR y ORDER BY a } } {0 1 0 first 1 0 99 fuzzy} do_test tkt-a7b7803e.5 { db eval { SELECT (M.a=99) AS x, M.b, (N.b='first') AS y, N.b FROM t1 M, t1 N WHERE x OR y ORDER BY M.a, N.a } } {0 first 1 first 1 fuzzy 1 first 1 fuzzy 0 fuzzy} do_test tkt-a7b7803e.6 { db eval { SELECT (M.a=99) AS x, M.b, (N.b='first') AS y, N.b FROM t1 M, t1 N WHERE x AND y ORDER BY M.a, N.a } } {1 fuzzy 1 first} do_test tkt-a7b7803e.7 { db eval { SELECT (M.a=99) AS x, M.b, (N.b='first') AS y, N.b FROM t1 M JOIN t1 N ON x AND y ORDER BY M.a, N.a } } {1 fuzzy 1 first} do_test tkt-a7b7803e.8 { db eval { SELECT (M.a=99) AS x, M.b, (N.b='first') AS y, N.b FROM t1 M JOIN t1 N ON x ORDER BY M.a, N.a } } {1 fuzzy 1 first 1 fuzzy 0 fuzzy} finish_test |