]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Inline the relevent parts of sqlite3ExprAlloc() into spanExpr(), for a
authordrh <drh@noemail.net>
Mon, 26 Sep 2016 12:38:22 +0000 (12:38 +0000)
committerdrh <drh@noemail.net>
Mon, 26 Sep 2016 12:38:22 +0000 (12:38 +0000)
performance improvement.

FossilOrigin-Name: fe89225eab777c2c9cb1cbc31092b9e39f516842

manifest
manifest.uuid
src/parse.y

index ed564101c53e790de5a84b11dc818045e7def4af..c63bc38f9da3b56707f36fcff3b5a9a41b927d8c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Omit\sthe\sLikeOp\sobject\sfrom\sthe\sparser.\s\sChange\smore\ssqlite3PExpr()\scalls\sinto\nsqlite3ExprAlloc()\scalls.
-D 2016-09-24T17:42:43.549
+C Inline\sthe\srelevent\sparts\sof\ssqlite3ExprAlloc()\sinto\sspanExpr(),\sfor\sa\nperformance\simprovement.
+D 2016-09-26T12:38:22.166
 F Makefile.in 6fd48ffcf7c2deea7499062d1f3747f986c19678
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 5151cc64c4c05f3455f4f692ad11410a810d937f
@@ -375,7 +375,7 @@ F src/os_win.c 520f23475f1de530c435d30b67b7b15fe90874b0
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
 F src/pager.c bf5b71bde3e9b6110e7d6990607db881f6a471a2
 F src/pager.h 966d2769e76ae347c8a32c4165faf6e6cb64546d
-F src/parse.y b556d432d8e03104d8a8dfe13641416fd894b314
+F src/parse.y 6ad22b8f4a673de775d68c5c306dddd15839c45f
 F src/pcache.c 5583c8ade4b05075a60ba953ef471d1c1a9c05df
 F src/pcache.h 2cedcd8407eb23017d92790b112186886e179490
 F src/pcache1.c 4bb7a6a5300c67d0b033d25adb509c120c03e812
@@ -1525,7 +1525,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P a8cb1390fc1234b2e925090c4d770cca5d587bea
-R fa7d3ec531d0706f5c7953317248a4f0
+P 795454a3fa5f9ccc486593b5e16e8fad38c934fb
+R 0064134bdfbafdb61f074a12abc7c569
 U drh
-Z 1cbaf1fb8c7d4606c6693d2bf847d929
+Z 916f6b7f03e59b6765f98d6400d7b198
index 2c6e94a8b67d15da02f303fc558ea3c1d4755867..771d6a8e05de554e74ef6282ed135698328421d3 100644 (file)
@@ -1 +1 @@
-795454a3fa5f9ccc486593b5e16e8fad38c934fb
\ No newline at end of file
+fe89225eab777c2c9cb1cbc31092b9e39f516842
\ No newline at end of file
index cf79a5fc7adefe35063db7b063ea8a959310e65e..5c5e450f31c5bb2dda43cd68fb125163cf6d4bb5 100644 (file)
@@ -542,8 +542,8 @@ selcollist(A) ::= sclp(A) STAR. {
   Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
   A = sqlite3ExprListAppend(pParse, A, p);
 }
-selcollist(A) ::= sclp(A) nm(X) DOT STAR(Y). {
-  Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0, &Y);
+selcollist(A) ::= sclp(A) nm(X) DOT STAR. {
+  Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0, 0);
   Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
   A = sqlite3ExprListAppend(pParse,A, pDot);
@@ -837,10 +837,26 @@ idlist(A) ::= nm(Y).
   ** that created the expression.
   */
   static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token t){
-    pOut->pExpr = sqlite3ExprAlloc(pParse->db, op, &t, 1);
+    Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
+    if( p ){
+      memset(p, 0, sizeof(Expr));
+      p->op = (u8)op;
+      p->flags = EP_Leaf;
+      p->iAgg = -1;
+      p->u.zToken = (char*)&p[1];
+      memcpy(p->u.zToken, t.z, t.n);
+      p->u.zToken[t.n] = 0;
+      if( sqlite3Isquote(p->u.zToken[0]) ){
+        if( p->u.zToken[0]=='"' ) p->flags |= EP_DblQuoted;
+        sqlite3Dequote(p->u.zToken);
+      }
+#if SQLITE_MAX_EXPR_DEPTH>0
+      p->nHeight = 1;
+#endif  
+    }
+    pOut->pExpr = p;
     pOut->zStart = t.z;
     pOut->zEnd = &t.z[t.n];
-    if( pOut->pExpr ) pOut->pExpr->flags |= EP_Leaf;
   }
 }
 
@@ -864,8 +880,14 @@ expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
   spanSet(&A,&X,&Z); /*A-overwrites-X*/
   A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0);
 }
-term(A) ::= INTEGER|FLOAT|BLOB(X). {spanExpr(&A,pParse,@X,X);/*A-overwrites-X*/}
-term(A) ::= STRING(X).             {spanExpr(&A,pParse,@X,X);/*A-overwrites-X*/}
+term(A) ::= FLOAT|BLOB(X). {spanExpr(&A,pParse,@X,X);/*A-overwrites-X*/}
+term(A) ::= STRING(X).     {spanExpr(&A,pParse,@X,X);/*A-overwrites-X*/}
+term(A) ::= INTEGER(X). {
+  A.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
+  A.zStart = X.z;
+  A.zEnd = X.z + X.n;
+  if( A.pExpr ) A.pExpr->flags |= EP_Leaf;
+}
 expr(A) ::= VARIABLE(X).     {
   if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
     spanExpr(&A, pParse, TK_VARIABLE, X);
@@ -881,7 +903,7 @@ expr(A) ::= VARIABLE(X).     {
       sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
       A.pExpr = 0;
     }else{
-      A.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &t);
+      A.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, 0);
       if( A.pExpr ) sqlite3GetInt32(&t.z[1], &A.pExpr->iTable);
     }
   }