Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a bug introduced by check-in (5316). Add some VDBE comments to the IN expression code generator. (CVS 5317) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
1043a605e2dcad4b5222674efe392ee9 |
User & Date: | drh 2008-06-26 21:45:26.000 |
Context
2008-06-27
| ||
00:47 | Tweaks to the IN expression code generator. Fix an an unrelated bug in the compound SELECT code generator. (CVS 5318) (check-in: a400578269 user: drh tags: trunk) | |
2008-06-26
| ||
21:45 | Fix a bug introduced by check-in (5316). Add some VDBE comments to the IN expression code generator. (CVS 5317) (check-in: 1043a605e2 user: drh tags: trunk) | |
20:06 | Avoid generating unnecessary SCopy instructions with the RHS of an IN operator is a list of values. (CVS 5316) (check-in: ec80474b1c user: drh tags: trunk) | |
Changes
Changes to src/expr.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 file contains routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions in SQLite. ** | | | 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.379 2008/06/26 21:45:26 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> /* ** Return the 'affinity' of the expression pExpr if any. ** |
︙ | ︙ | |||
1932 1933 1934 1935 1936 1937 1938 | /* Evaluate the expression and insert it into the temp table */ pParse->disableColCache++; r3 = sqlite3ExprCodeTarget(pParse, pE2, r1); assert( pParse->disableColCache>0 ); pParse->disableColCache--; sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1); | | | 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 | /* Evaluate the expression and insert it into the temp table */ pParse->disableColCache++; r3 = sqlite3ExprCodeTarget(pParse, pE2, r1); assert( pParse->disableColCache>0 ); pParse->disableColCache--; sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1); sqlite3ExprCacheAffinityChange(pParse, r3, 1); sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2); } sqlite3ReleaseTempReg(pParse, r1); sqlite3ReleaseTempReg(pParse, r2); } sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO); break; |
︙ | ︙ | |||
2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 | case TK_IN: { int rNotFound = 0; int rMayHaveNull = 0; int j1, j2, j3, j4, j5; char affinity; int eType; eType = sqlite3FindInIndex(pParse, pExpr, &rMayHaveNull); if( rMayHaveNull ){ rNotFound = ++pParse->nMem; } /* Figure out the affinity to use to create a key from the results ** of the expression. affinityStr stores a static string suitable for | > | 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 | case TK_IN: { int rNotFound = 0; int rMayHaveNull = 0; int j1, j2, j3, j4, j5; char affinity; int eType; VdbeNoopComment((v, "begin IN expr r%d", target)); eType = sqlite3FindInIndex(pParse, pExpr, &rMayHaveNull); if( rMayHaveNull ){ rNotFound = ++pParse->nMem; } /* Figure out the affinity to use to create a key from the results ** of the expression. affinityStr stores a static string suitable for |
︙ | ︙ | |||
2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 | ** expression. */ sqlite3VdbeAddOp2(v, OP_Copy, rNotFound, target); } } sqlite3VdbeJumpHere(v, j2); sqlite3VdbeJumpHere(v, j5); break; } #endif /* ** x BETWEEN y AND z ** ** This is equivalent to | > | 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 | ** expression. */ sqlite3VdbeAddOp2(v, OP_Copy, rNotFound, target); } } sqlite3VdbeJumpHere(v, j2); sqlite3VdbeJumpHere(v, j5); VdbeComment((v, "end IN expr r%d", target)); break; } #endif /* ** x BETWEEN y AND z ** ** This is equivalent to |
︙ | ︙ |