1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-12 13:01:09 +03:00

Improvements to the column-cache for nested AND/OR operators.

FossilOrigin-Name: 4e725f53131d3584319c710c8710a068989543c6
This commit is contained in:
drh
2014-01-04 15:17:04 +00:00
parent 8c7d4ddd5a
commit 54e2adb5f3
3 changed files with 15 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
C Have\sFTS\sassign\sextremely\shigh\scosts\sto\splans\sthat\sfeature\sunusable\sMATCH\sconstraints.\sThis\sdiscourages\sthe\splanner\sfrom\schoosing\ssuch\splans,\swhich\slead\sto\s"unable\sto\suse\sfunction\sMATCH\sin\sthe\srequested\scontext"\serrors. C Improvements\sto\sthe\scolumn-cache\sfor\snested\sAND/OR\soperators.
D 2014-01-04T14:46:39.188 D 2014-01-04T15:17:04.888
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -175,7 +175,7 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
F src/ctime.c 77779efbe78dd678d84bfb4fc2e87b6b6ad8dccd F src/ctime.c 77779efbe78dd678d84bfb4fc2e87b6b6ad8dccd
F src/date.c 593c744b2623971e45affd0bde347631bdfa4625 F src/date.c 593c744b2623971e45affd0bde347631bdfa4625
F src/delete.c 22f3dc3fd6b82ebce3dabf951a4b157026943ac1 F src/delete.c 22f3dc3fd6b82ebce3dabf951a4b157026943ac1
F src/expr.c ca0959386f01d6e5d4dc67b362a4e4c912ebd054 F src/expr.c 15a86b7632da09924ccffb53fafa86e7d8727b70
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
F src/fkey.c 2ab0f5384b70594468ef3ac5c7ed8ca24bfd17d5 F src/fkey.c 2ab0f5384b70594468ef3ac5c7ed8ca24bfd17d5
F src/func.c 6325ac2ec10833ccf4d5c36d323709221d37ea19 F src/func.c 6325ac2ec10833ccf4d5c36d323709221d37ea19
@@ -1148,7 +1148,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
P 429018b19cb525a4bb0843d20955457b53900d4b 24f84b38131866f7b435ffe641bb2f6991a70db2 P fa8be488a3ad290722dae7a1a7396c77277b2149
R 2d783783dbaa85fb88df6c2aa4454d7b R 7b52b4a00e9a7616715e494e48bd3657
U dan U drh
Z 183032db794c33dfd03471ac339127f5 Z 701e96c9216858714def7e53249e15db

View File

@@ -1 +1 @@
fa8be488a3ad290722dae7a1a7396c77277b2149 4e725f53131d3584319c710c8710a068989543c6

View File

@@ -3388,7 +3388,7 @@ void sqlite3ExplainExprList(Vdbe *pOut, ExprList *pList){
sqlite3ExplainPrintf(pOut, "item[%d] = ", i); sqlite3ExplainPrintf(pOut, "item[%d] = ", i);
sqlite3ExplainPush(pOut); sqlite3ExplainPush(pOut);
sqlite3ExplainExpr(pOut, pList->a[i].pExpr); sqlite3ExplainExpr(pOut, pList->a[i].pExpr);
sqlite3ExplainPop(pOut); sqlite3ExplainPop(pOut, 1);
if( pList->a[i].zName ){ if( pList->a[i].zName ){
sqlite3ExplainPrintf(pOut, " AS %s", pList->a[i].zName); sqlite3ExplainPrintf(pOut, " AS %s", pList->a[i].zName);
} }
@@ -3538,8 +3538,8 @@ void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
case TK_AND: { case TK_AND: {
int d2 = sqlite3VdbeMakeLabel(v); int d2 = sqlite3VdbeMakeLabel(v);
testcase( jumpIfNull==0 ); testcase( jumpIfNull==0 );
sqlite3ExprCachePush(pParse);
sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL); sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL);
sqlite3ExprCachePush(pParse);
sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
sqlite3VdbeResolveLabel(v, d2); sqlite3VdbeResolveLabel(v, d2);
sqlite3ExprCachePop(pParse, 1); sqlite3ExprCachePop(pParse, 1);
@@ -3548,7 +3548,9 @@ void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
case TK_OR: { case TK_OR: {
testcase( jumpIfNull==0 ); testcase( jumpIfNull==0 );
sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
sqlite3ExprCachePush(pParse);
sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
sqlite3ExprCachePop(pParse, 1);
break; break;
} }
case TK_NOT: { case TK_NOT: {
@@ -3695,14 +3697,16 @@ void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
case TK_AND: { case TK_AND: {
testcase( jumpIfNull==0 ); testcase( jumpIfNull==0 );
sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
sqlite3ExprCachePush(pParse);
sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
sqlite3ExprCachePop(pParse, 1);
break; break;
} }
case TK_OR: { case TK_OR: {
int d2 = sqlite3VdbeMakeLabel(v); int d2 = sqlite3VdbeMakeLabel(v);
testcase( jumpIfNull==0 ); testcase( jumpIfNull==0 );
sqlite3ExprCachePush(pParse);
sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL); sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL);
sqlite3ExprCachePush(pParse);
sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
sqlite3VdbeResolveLabel(v, d2); sqlite3VdbeResolveLabel(v, d2);
sqlite3ExprCachePop(pParse, 1); sqlite3ExprCachePop(pParse, 1);