]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Change the display of the P4 operand of CursorHint in EXPLAIN output to
authordrh <drh@noemail.net>
Sat, 15 Aug 2015 00:51:23 +0000 (00:51 +0000)
committerdrh <drh@noemail.net>
Sat, 15 Aug 2015 00:51:23 +0000 (00:51 +0000)
function notation.

FossilOrigin-Name: bee73d429cb0e99b43fb191ac15e298d0353b135

manifest
manifest.uuid
src/vdbeaux.c
test/cursorhint.test

index 931701bf6bf5787c1a0533f690e03aaa7912c723..32218e8eda2b07554c918e57744b38651638554d 100644 (file)
--- a/manifest
+++ b/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
index 9c7ac55d4bc473c27edf1f4b9493275234f05054..dd4f395a20055b875e2405f634c2b5cb16542883 100644 (file)
@@ -1 +1 @@
-83a844357e132683ab3d88eee0fe32a8beeb6662
\ No newline at end of file
+bee73d429cb0e99b43fb191ac15e298d0353b135
\ No newline at end of file
index df6ac61f82ebe9a94ffc16382d8e58dec03aba10..37be7f44c889bf5d0ef79f6986576544339e2b5b 100644 (file)
@@ -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);
-    n += displayP4Expr(nTemp-n, zTemp+n, pExpr->pRight);
+    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) */
index b9677b640d9eff516326738298a9bd4dd0533c23..9d12c90d7bb79eb91194d77ad05104331801beb9 100644 (file)
@@ -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;