Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Correctly handle joins of move than 32 tables. Ticket #806. (CVS 1813) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | version_2 |
Files: | files | file ages | folders |
SHA1: |
5ba0acd6c788b6ec07b29dc40c17265f |
User & Date: | drh 2004-07-19 02:24:03.000 |
Context
2004-07-19
| ||
19:30 | Fix for ticket #813. (CVS 1820) (check-in: 0cc612f8aa user: drh tags: version_2) | |
02:24 | Correctly handle joins of move than 32 tables. Ticket #806. (CVS 1813) (check-in: 5ba0acd6c7 user: drh tags: version_2) | |
2004-07-18
| ||
23:03 | Use only unsigned characters in upper() and lower(). Ticket #708. (CVS 1807) (check-in: f9b2aa8f8a user: drh tags: version_2) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** 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. ** | | | 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 module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. ** ** $Id: where.c,v 1.89.2.1 2004/07/19 02:24:03 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. |
︙ | ︙ | |||
42 43 44 45 46 47 48 | ** are being used, so we assign a single bit in a 32-bit word to track ** that cursor. Then a 32-bit integer is able to show the set of all ** cursors being used. */ typedef struct ExprMaskSet ExprMaskSet; struct ExprMaskSet { int n; /* Number of assigned cursor values */ | | | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | ** are being used, so we assign a single bit in a 32-bit word to track ** that cursor. Then a 32-bit integer is able to show the set of all ** cursors being used. */ typedef struct ExprMaskSet ExprMaskSet; struct ExprMaskSet { int n; /* Number of assigned cursor values */ int ix[31]; /* Cursor assigned to each bit */ }; /* ** Determine the number of elements in an array. */ #define ARRAYSIZE(X) (sizeof(X)/sizeof(X[0])) |
︙ | ︙ | |||
119 120 121 122 123 124 125 | ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to ** the VDBE cursor number of the table. */ static int exprTableUsage(ExprMaskSet *pMaskSet, Expr *p){ unsigned int mask = 0; if( p==0 ) return 0; if( p->op==TK_COLUMN ){ | | > > | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to ** the VDBE cursor number of the table. */ static int exprTableUsage(ExprMaskSet *pMaskSet, Expr *p){ unsigned int mask = 0; if( p==0 ) return 0; if( p->op==TK_COLUMN ){ mask = getMask(pMaskSet, p->iTable); if( mask==0 ) mask = -1; return mask; } if( p->pRight ){ mask = exprTableUsage(pMaskSet, p->pRight); } if( p->pLeft ){ mask |= exprTableUsage(pMaskSet, p->pLeft); } |
︙ | ︙ |