mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Change the display of the P4 operand of CursorHint in EXPLAIN output to
function notation. FossilOrigin-Name: bee73d429cb0e99b43fb191ac15e298d0353b135
This commit is contained in:
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
||||
C Always\sprovide\sthe\sBTREE_BULKLOAD\shint,\seven\swhen\sSQLITE_ENABLE_CURSOR_HINTS\nis\snot\sdefined,\sas\sthat\shint\sgives\sa\s4%\sperformance\sincrease.
|
||||
D 2015-08-14T23:57:04.215
|
||||
C Change\sthe\sdisplay\sof\sthe\sP4\soperand\sof\sCursorHint\sin\sEXPLAIN\soutput\sto\nfunction\snotation.
|
||||
D 2015-08-15T00:51:23.737
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 2fc9ca6bf5949d415801c007ed3004a4bdb7c380
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -402,7 +402,7 @@ F src/vdbe.c 4dbcceb38f5c3e42c0725a56e7c76eb12adedebb
|
||||
F src/vdbe.h 529bb4a7bedcd28dccba5abb3927e3c5cb70a832
|
||||
F src/vdbeInt.h 7258d75fc2dad0bccdef14d7d8d2fd50fd1bf2d2
|
||||
F src/vdbeapi.c adabbd66eb2e3a10f3998485ee0be7e326d06ee4
|
||||
F src/vdbeaux.c 9f726265d3c4a64264c9aa80d35aa19c51a3c6f4
|
||||
F src/vdbeaux.c e8dbcc838ca29f0d2767e789f4fe5883541e4f6e
|
||||
F src/vdbeblob.c 4f2e8e075d238392df98c5e03a64342465b03f90
|
||||
F src/vdbemem.c ae38a0d35ae71cf604381a887c170466ba518090
|
||||
F src/vdbesort.c f5009e7a35e3065635d8918b9a31f498a499976b
|
||||
@ -560,7 +560,7 @@ F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2
|
||||
F test/createtab.test b5de160630b209c4b8925bdcbbaf48cc90b67fe8
|
||||
F test/cse.test 277350a26264495e86b1785f34d2d0c8600e021c
|
||||
F test/ctime.test 7bd009071e242aac4f18521581536b652b789a47
|
||||
F test/cursorhint.test c3844bed3eec3506b38b98ab5f0ca22a4ab9ecb4
|
||||
F test/cursorhint.test 0d79cce943e4e61910d9a5cf73b1e57b2b42429f
|
||||
F test/date.test 42973251b9429f2c41b77eb98a7b0b0ba2d3b2c0
|
||||
F test/dbstatus.test 8de104bb5606f19537d23cd553b41349b5ab1204
|
||||
F test/dbstatus2.test 10418e62b3db5dca070f0c3eef3ea13946f339c2
|
||||
@ -1374,7 +1374,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P bf383e665a191a4f33a540d1240960a922e22813
|
||||
R 87aadf49a7545642a0a9fb9a1d94cce7
|
||||
P 83a844357e132683ab3d88eee0fe32a8beeb6662
|
||||
R 64f1f656f75dd3e1a8b619dc73ce4cbc
|
||||
U drh
|
||||
Z 44853a09e3a1d8da8995535278d599e8
|
||||
Z 780f279750b73ad9a07ce3a651ba66ad
|
||||
|
@ -1 +1 @@
|
||||
83a844357e132683ab3d88eee0fe32a8beeb6662
|
||||
bee73d429cb0e99b43fb191ac15e298d0353b135
|
@ -1090,25 +1090,22 @@ static int displayComment(
|
||||
** that can be displayed in the P4 column of EXPLAIN output.
|
||||
*/
|
||||
static int displayP4Expr(int nTemp, char *zTemp, Expr *pExpr){
|
||||
const char *zBinOp = 0;
|
||||
const char *zOp = 0;
|
||||
int n;
|
||||
switch( pExpr->op ){
|
||||
case TK_STRING:
|
||||
sqlite3_snprintf(nTemp, zTemp, "%Q", pExpr->u.zToken);
|
||||
break;
|
||||
|
||||
case TK_INTEGER:
|
||||
sqlite3_snprintf(nTemp, zTemp, "%d", pExpr->u.iValue);
|
||||
break;
|
||||
|
||||
case TK_NULL:
|
||||
sqlite3_snprintf(nTemp, zTemp, "NULL");
|
||||
break;
|
||||
|
||||
case TK_REGISTER: {
|
||||
sqlite3_snprintf(nTemp, zTemp, "r[%d]", pExpr->iTable);
|
||||
break;
|
||||
}
|
||||
|
||||
case TK_COLUMN: {
|
||||
if( pExpr->iColumn<0 ){
|
||||
sqlite3_snprintf(nTemp, zTemp, "rowid");
|
||||
@ -1117,43 +1114,48 @@ static int displayP4Expr(int nTemp, char *zTemp, Expr *pExpr){
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TK_LT: zBinOp = "<"; break;
|
||||
case TK_LE: zBinOp = "<="; break;
|
||||
case TK_GT: zBinOp = ">"; break;
|
||||
case TK_GE: zBinOp = ">="; break;
|
||||
case TK_NE: zBinOp = "!="; break;
|
||||
case TK_EQ: zBinOp = "=="; break;
|
||||
case TK_IS: zBinOp = " IS "; break;
|
||||
case TK_ISNOT: zBinOp = " IS NOT "; break;
|
||||
case TK_AND: zBinOp = " AND "; break;
|
||||
case TK_OR: zBinOp = " OR "; break;
|
||||
case TK_PLUS: zBinOp = "+"; break;
|
||||
case TK_STAR: zBinOp = "*"; break;
|
||||
case TK_MINUS: zBinOp = "-"; break;
|
||||
case TK_REM: zBinOp = "%"; break;
|
||||
case TK_BITAND: zBinOp = "&"; break;
|
||||
case TK_BITOR: zBinOp = "|"; break;
|
||||
case TK_SLASH: zBinOp = "/"; break;
|
||||
case TK_LSHIFT: zBinOp = "<<"; break;
|
||||
case TK_RSHIFT: zBinOp = ">>"; break;
|
||||
case TK_CONCAT: zBinOp = "||"; break;
|
||||
case TK_LT: zOp = "LT"; break;
|
||||
case TK_LE: zOp = "LE"; break;
|
||||
case TK_GT: zOp = "GT"; break;
|
||||
case TK_GE: zOp = "GE"; break;
|
||||
case TK_NE: zOp = "NE"; break;
|
||||
case TK_EQ: zOp = "EQ"; break;
|
||||
case TK_IS: zOp = "IS"; break;
|
||||
case TK_ISNOT: zOp = "ISNOT"; break;
|
||||
case TK_AND: zOp = "AND"; break;
|
||||
case TK_OR: zOp = "OR"; break;
|
||||
case TK_PLUS: zOp = "ADD"; break;
|
||||
case TK_STAR: zOp = "MUL"; break;
|
||||
case TK_MINUS: zOp = "SUB"; break;
|
||||
case TK_REM: zOp = "REM"; break;
|
||||
case TK_BITAND: zOp = "BITAND"; break;
|
||||
case TK_BITOR: zOp = "BITOR"; break;
|
||||
case TK_SLASH: zOp = "DIV"; break;
|
||||
case TK_LSHIFT: zOp = "LSHIFT"; break;
|
||||
case TK_RSHIFT: zOp = "RSHIFT"; break;
|
||||
case TK_CONCAT: zOp = "CONCAT"; break;
|
||||
case TK_UMINUS: zOp = "MINUS"; break;
|
||||
case TK_UPLUS: zOp = "PLUS"; break;
|
||||
case TK_BITNOT: zOp = "BITNOT"; break;
|
||||
case TK_NOT: zOp = "NOT"; break;
|
||||
case TK_ISNULL: zOp = "ISNULL"; break;
|
||||
case TK_NOTNULL: zOp = "NOTNULL"; break;
|
||||
|
||||
default:
|
||||
sqlite3_snprintf(nTemp, zTemp, "%s", "expr");
|
||||
break;
|
||||
}
|
||||
|
||||
if( zBinOp && nTemp>5 ){
|
||||
int n = 1;
|
||||
zTemp[0] = '(';
|
||||
if( zOp ){
|
||||
sqlite3_snprintf(nTemp, zTemp, "%s(", zOp);
|
||||
n = sqlite3Strlen30(zTemp);
|
||||
n += displayP4Expr(nTemp-n, zTemp+n, pExpr->pLeft);
|
||||
sqlite3_snprintf(nTemp-n, zTemp+n, "%s", zBinOp);
|
||||
n += sqlite3Strlen30(zTemp+n);
|
||||
if( n<nTemp-1 && pExpr->pRight ){
|
||||
zTemp[n++] = ',';
|
||||
n += displayP4Expr(nTemp-n, zTemp+n, pExpr->pRight);
|
||||
}
|
||||
sqlite3_snprintf(nTemp-n, zTemp+n, ")");
|
||||
}
|
||||
|
||||
return sqlite3Strlen30(zTemp);
|
||||
}
|
||||
#endif /* VDBE_DISPLAY_P4 && defined(SQLITE_ENABLE_CURSOR_HINTS) */
|
||||
|
@ -59,7 +59,7 @@ do_test 1.1 {
|
||||
p4_of_opcode db CursorHint {
|
||||
SELECT * FROM t1 CROSS JOIN t2 WHERE a=x
|
||||
}
|
||||
} {/(r*==c0)/}
|
||||
} {{EQ(r[1],c0)}}
|
||||
do_test 1.2 {
|
||||
p5_of_opcode db OpenRead . {
|
||||
SELECT * FROM t1 CROSS JOIN t2 WHERE a=x
|
||||
@ -72,7 +72,7 @@ do_test 2.1 {
|
||||
p4_of_opcode db CursorHint {
|
||||
SELECT * FROM t2 CROSS JOIN t1 WHERE a=x
|
||||
}
|
||||
} {/(c0==r*)/}
|
||||
} {{EQ(c0,r[1])}}
|
||||
do_test 2.2 {
|
||||
p5_of_opcode db OpenRead . {
|
||||
SELECT * FROM t2 CROSS JOIN t1 WHERE a=x
|
||||
@ -85,12 +85,12 @@ do_test 3.1 {
|
||||
p4_of_opcode db CursorHint {
|
||||
SELECT * FROM t1 WHERE a=15 AND c=22 AND rowid!=98
|
||||
}
|
||||
} {/(c0==15).*(c2==22).*(rowid!=98)/}
|
||||
} {AND(AND(EQ(c0,15),EQ(c2,22)),NE(rowid,98))}
|
||||
do_test 3.2 {
|
||||
p4_of_opcode db CursorHint {
|
||||
SELECT * FROM t3 WHERE a<15 AND b>22 AND id!=98
|
||||
}
|
||||
} {/(c1<15).*(c2>22).*(c0!=98)/}
|
||||
} {AND(AND(LT(c1,15),GT(c2,22)),NE(c0,98))}
|
||||
|
||||
# Indexed queries
|
||||
#
|
||||
@ -102,7 +102,7 @@ do_test 4.1 {
|
||||
p4_of_opcode db CursorHint {
|
||||
SELECT * FROM t1 WHERE b>11;
|
||||
}
|
||||
} {/(c0>11)/}
|
||||
} {GT(c0,11)}
|
||||
do_test 4.2 {
|
||||
p5_of_opcode db OpenRead . {
|
||||
SELECT * FROM t1 WHERE b>11;
|
||||
@ -112,7 +112,7 @@ do_test 4.3 {
|
||||
p4_of_opcode db CursorHint {
|
||||
SELECT c FROM t1 WHERE b>11;
|
||||
}
|
||||
} {/(c0>11)/}
|
||||
} {GT(c0,11)}
|
||||
do_test 4.4 {
|
||||
p5_of_opcode db OpenRead . {
|
||||
SELECT c FROM t1 WHERE b>11;
|
||||
|
Reference in New Issue
Block a user