Change the way an Expr that has been converted to TK_REGISTER stores its original opcode. The previous method, overloading Expr.iColumn, did not work in all cases.

FossilOrigin-Name: 71ea9d0e148fbd3d633651c61c81044e37cf88b9
This commit is contained in:
dan 2009-08-19 17:17:00 +00:00
parent 0f9a34ea4f
commit fcd4a150e2
5 changed files with 14 additions and 14 deletions

View File

@ -1,5 +1,5 @@
C Fix\san\sassert()\sfailure\sthat\smay\sfollow\san\sOOM\serror.
D 2009-08-19T16:34:31
C Change\sthe\sway\san\sExpr\sthat\shas\sbeen\sconverted\sto\sTK_REGISTER\sstores\sits\soriginal\sopcode.\sThe\sprevious\smethod,\soverloading\sExpr.iColumn,\sdid\snot\swork\sin\sall\scases.
D 2009-08-19T17:17:01
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 0f7761c5d1c62ae7a841e3393ffaff1fa0f5c00a
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -114,7 +114,7 @@ F src/callback.c cb68b21b0d4ae7d11ae0e487933bce3323784dcf
F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0
F src/date.c ab5f7137656652a48434d64f96bdcdc823bb23b3
F src/delete.c dcf07632d8ca3d4086df8b65ea907a47278e6382
F src/expr.c 1dac211523b00d504c35e72b6d28d97621895420
F src/expr.c 335d3008417050a6992ecf2c78819f2911a7cb18
F src/fault.c dc88c821842157460750d2d61a8a8b4197d047ff
F src/func.c e536218d193b8d326aab91120bc4c6f28aa2b606
F src/global.c 271952d199a8cc59d4ce840b3bbbfd2f30c8ba32
@ -163,7 +163,7 @@ F src/select.c 67b0778c9585905c8aa75aaa469e76ef3c1d315a
F src/shell.c db2643650b9268df89a4bedca3f1c6d9e786f1bb
F src/sqlite.h.in 3ccf717d82101f19548d0b1243f0a6f4854d51ee
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
F src/sqliteInt.h a9516142b907d890150847edbe3c9831acd9acb1
F src/sqliteInt.h 36a21a90b67f9a14868bd56086b997726dfb0a34
F src/sqliteLimit.h ffe93f5a0c4e7bd13e70cd7bf84cfb5c3465f45d
F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76
F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d
@ -211,7 +211,7 @@ F src/vdbeInt.h 831c254a6eef237ef4664c8381a0137586567007
F src/vdbeapi.c 0ab8ada7260b32031ca97f338caecf0812460624
F src/vdbeaux.c 4956536a636468fd07284028c39aab65ea99777e
F src/vdbeblob.c a3f3e0e877fc64ea50165eec2855f5ada4477611
F src/vdbemem.c afd6ce02945e659f65642f290a37ccf4a88c4dcb
F src/vdbemem.c 6075cc7f8ea3064c3229ad30dd0f23903ea4e035
F src/vtab.c aedd76e8670d5a5379f93804398d3ba960125547
F src/walker.c 1edca756275f158b80f20eb6f104c8d3fcc96a04
F src/where.c 2e61e33f3649ef5940ef63ed285d37d03bc03dc5
@ -747,7 +747,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
P 740a93e89c5f12672d72de7b3c55807deac613d4
R 0c503f3d121dc88e27c6f16947df7b7a
P 14a715c5639b2bc69b129485ca32e96366dab4c4
R 89df65d7caba8e808134aaf6a22f2021
U dan
Z 349f817f99fd27db57dd3a92eb75a026
Z dfc672a723805ae86ee20de2e2eef473

View File

@ -1 +1 @@
14a715c5639b2bc69b129485ca32e96366dab4c4
71ea9d0e148fbd3d633651c61c81044e37cf88b9

View File

@ -2836,7 +2836,7 @@ static int evalConstExpr(Walker *pWalker, Expr *pExpr){
int r2;
r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
if( NEVER(r1!=r2) ) sqlite3ReleaseTempReg(pParse, r1);
pExpr->iColumn = pExpr->op;
pExpr->op2 = pExpr->op;
pExpr->op = TK_REGISTER;
pExpr->iTable = r2;
return WRC_Prune;

View File

@ -1577,11 +1577,11 @@ struct Expr {
int iTable; /* TK_COLUMN: cursor number of table holding column
** TK_REGISTER: register number */
i16 iColumn; /* TK_COLUMN: column index. -1 for rowid
** TK_REGISTER: original value of Expr.op */
i16 iColumn; /* TK_COLUMN: column index. -1 for rowid */
i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */
u16 flags2; /* Second set of flags. EP2_... */
u8 flags2; /* Second set of flags. EP2_... */
u8 op2; /* If a TK_REGISTER, the original value of Expr.op */
AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
Table *pTab; /* Table for TK_COLUMN expressions. */
#if SQLITE_MAX_EXPR_DEPTH>0

View File

@ -1000,7 +1000,7 @@ int sqlite3ValueFromExpr(
}
op = pExpr->op;
if( op==TK_REGISTER ){
op = pExpr->iColumn;
op = pExpr->op2;
}
if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){