Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Bug fix to the left outer join logic. (CVS 1726) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
957d908e6b84cd599b5cfd82af80c8fa |
User & Date: | drh 2002-08-13 13:15:50.000 |
Context
2002-08-13
| ||
13:15 | Bug fix to the left outer join logic. (CVS 708) (check-in: f9d3d4c123 user: drh tags: trunk) | |
13:15 | Bug fix to the left outer join logic. (CVS 1726) (check-in: 957d908e6b user: drh tags: trunk) | |
00:02 | Version 2.6.3 (CVS 707) (check-in: ba706aca0a user: drh tags: trunk) | |
Changes
Deleted src/TODO.
|
| < < < < < < |
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.60 2002/08/13 13:15:51 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. |
︙ | ︙ | |||
570 571 572 573 574 575 576 577 578 579 580 581 582 583 | } pWInfo->a[i].pIdx = pBestIdx; pWInfo->a[i].score = bestScore; loopMask |= 1<<idx; if( pBestIdx ){ pWInfo->a[i].iCur = pParse->nTab++; pWInfo->peakNTab = pParse->nTab; } } /* Check to see if the ORDER BY clause is or can be satisfied by the ** use of an index on the first table. */ if( ppOrderBy && *ppOrderBy && pTabList->nSrc>0 ){ | > > | 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 | } pWInfo->a[i].pIdx = pBestIdx; pWInfo->a[i].score = bestScore; loopMask |= 1<<idx; if( pBestIdx ){ pWInfo->a[i].iCur = pParse->nTab++; pWInfo->peakNTab = pParse->nTab; }else{ pWInfo->a[i].iCur = -1; } } /* Check to see if the ORDER BY clause is or can be satisfied by the ** use of an index on the first table. */ if( ppOrderBy && *ppOrderBy && pTabList->nSrc>0 ){ |
︙ | ︙ | |||
1073 1074 1075 1076 1077 1078 1079 | sqliteVdbeResolveLabel(v, pLevel->brk); if( pLevel->inOp!=OP_Noop ){ sqliteVdbeAddOp(v, pLevel->inOp, pLevel->inP1, pLevel->inP2); } if( pLevel->iLeftJoin ){ int addr; addr = sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iLeftJoin, 0); | | > > > | 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 | sqliteVdbeResolveLabel(v, pLevel->brk); if( pLevel->inOp!=OP_Noop ){ sqliteVdbeAddOp(v, pLevel->inOp, pLevel->inP1, pLevel->inP2); } if( pLevel->iLeftJoin ){ int addr; addr = sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iLeftJoin, 0); sqliteVdbeAddOp(v, OP_NotNull, 1, addr+4 + (pLevel->iCur>=0)); sqliteVdbeAddOp(v, OP_NullRow, base+i, 0); if( pLevel->iCur>=0 ){ sqliteVdbeAddOp(v, OP_NullRow, pLevel->iCur, 0); } sqliteVdbeAddOp(v, OP_Goto, 0, pLevel->top); } } sqliteVdbeResolveLabel(v, pWInfo->iBreak); for(i=0; i<pTabList->nSrc; i++){ if( pTabList->a[i].pTab->isTransient ) continue; pLevel = &pWInfo->a[i]; |
︙ | ︙ |