Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix for bug #6: Correctly handle functions in the WHERE clause of a join. (CVS 513) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
bdd8ce584e16fe288a7e8386f897cb36 |
User & Date: | drh 2002-04-02 01:58:58.000 |
Context
2002-04-02
| ||
02:00 | Version 2.4.5 (CVS 514) (check-in: b18a7b777c user: drh tags: trunk) | |
01:58 | Fix for bug #6: Correctly handle functions in the WHERE clause of a join. (CVS 513) (check-in: bdd8ce584e user: drh tags: trunk) | |
01:44 | Fix for bug #7: Correctly display the P3 operand in a VDBE trace when the operand is really a pointer to a structure. (CVS 512) (check-in: 734dde765b user: drh tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. Also found here are subroutines ** to generate VDBE code to evaluate expressions. ** | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. Also found here are subroutines ** to generate VDBE code to evaluate expressions. ** ** $Id: where.c,v 1.39 2002/04/02 01:58:58 drh Exp $ */ #include "sqliteInt.h" /* ** The query generator uses an array of instances of this structure to ** help it analyze the subexpressions of the WHERE clause. Each WHERE ** clause subexpression is separated from the others by an AND operator. |
︙ | ︙ | |||
85 86 87 88 89 90 91 92 93 94 95 96 97 98 | return 1<< (p->iTable - base); } if( p->pRight ){ mask = exprTableUsage(base, p->pRight); } if( p->pLeft ){ mask |= exprTableUsage(base, p->pLeft); } return mask; } /* ** Return TRUE if the given operator is one of the operators that is ** allowed for an indexable WHERE clause. The allowed operators are | > > > > > > | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | return 1<< (p->iTable - base); } if( p->pRight ){ mask = exprTableUsage(base, p->pRight); } if( p->pLeft ){ mask |= exprTableUsage(base, p->pLeft); } if( p->pList ){ int i; for(i=0; i<p->pList->nExpr; i++){ mask |= exprTableUsage(base, p->pList->a[i].pExpr); } } return mask; } /* ** Return TRUE if the given operator is one of the operators that is ** allowed for an indexable WHERE clause. The allowed operators are |
︙ | ︙ |
Changes to test/select2.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # 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. The # focus of this file is testing the SELECT statement. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # 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. The # focus of this file is testing the SELECT statement. # # $Id: select2.test,v 1.17 2002/04/02 01:58:58 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table with some data # execsql {CREATE TABLE tbl1(f1 int, f2 int)} |
︙ | ︙ | |||
108 109 110 111 112 113 114 115 116 | # do_test select2-3.3 { execsql {DROP INDEX idx1} set sqlite_search_count 0 execsql {SELECT f1 FROM tbl2 WHERE f2==2000} set sqlite_search_count } {29999} finish_test | > > > > > > > > > > > > > > > | 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | # do_test select2-3.3 { execsql {DROP INDEX idx1} set sqlite_search_count 0 execsql {SELECT f1 FROM tbl2 WHERE f2==2000} set sqlite_search_count } {29999} # Make sure we can optimize functions in the WHERE clause that # use fields from two or more different table. (Bug #6) # do_test select2-4.1 { execsql { CREATE TABLE aa(a); CREATE TABLE bb(b); INSERT INTO aa VALUES(1); INSERT INTO aa VALUES(3); INSERT INTO bb VALUES(2); INSERT INTO bb VALUES(4); SELECT * FROM aa, bb WHERE max(a,b)>2; } } {1 4 3 2 3 4} finish_test |
Changes to www/changes.tcl.
︙ | ︙ | |||
21 22 23 24 25 26 27 | proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } | | > > > > > | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Apr 01 (2.4.5)} { <li>Bug fix: Correctly handle functions that appear in the WHERE clause of a SELECT.</li> <li>When the PRAGMA vdbe_trace=ON is set, correctly print the P3 operand value when it is a pointer to a structure rather than a pointer to a string.</li> <li>When inserting an explicit NULL into an INTEGER PRIMARY KEY, convert the NULL value into a unique key automatically.</li> } chng {2002 Mar 24 (2.4.4)} { <li>Allow "VIEW" to be a column name</li> <li>Added support for CASE expressions (patch from Dan Kennedy)</li> |
︙ | ︙ |