From: drh Date: Fri, 18 Jul 2008 17:03:52 +0000 (+0000) Subject: Make sure expression spans are set correctly for "x.*" expressions in X-Git-Tag: version-3.6.10~739 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e54a62ad85d64a772ab7947a404a489dd5dd4808;p=thirdparty%2Fsqlite.git Make sure expression spans are set correctly for "x.*" expressions in the result set of a SELECT. Ticket #3229. (CVS 5438) FossilOrigin-Name: 17a9984e7668be388c4042c070718a02b284a336 --- diff --git a/manifest b/manifest index f2aaa5394e..275b062796 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Performance\simprovement:\sreduce\sthe\snumber\sof\scalls\sto\sptrmapPageno()\smade\sby\sptrmapPut()\sand\sptrmapGet().\s(CVS\s5437) -D 2008-07-18T09:34:57 +C Make\ssure\sexpression\sspans\sare\sset\scorrectly\sfor\s"x.*"\sexpressions\sin\r\nthe\sresult\sset\sof\sa\sSELECT.\s\sTicket\s#3229.\s(CVS\s5438) +D 2008-07-18T17:03:53 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in a03f7cb4f7ad50bc53a788c6c544430e81f95de4 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -104,7 +104,7 @@ F src/callback.c aa492a0ad8c2d454edff9fb8a57fae13743cf71d F src/complete.c cb14e06dbe79dee031031f0d9e686ff306afe07c F src/date.c e841168e5520bbbb2a1cbcdce7531d8b23017b4d F src/delete.c 4a1f98fb2ffead69c8c685dcac33253ac6f9d56d -F src/expr.c 17f7deae5c7a7813a86295813e757219d1a25cf9 +F src/expr.c 18d04f1c15e760d4329b5e0383a0c8a8320f0005 F src/fault.c 3638519d1e0b82bccfafcb9f5ff491918b28f8e1 F src/func.c 08422a7bd06c25c5e6823d525f7c63563e3fcf61 F src/global.c f12dc84d23f52d2ed42d1bdb5460fa3caf63e890 @@ -136,7 +136,7 @@ F src/os_unix.c 1df6108efdb7957a9f28b9700600e58647c9c12d F src/os_win.c 2bf2f8cd700299564cc236262c2668e1e02c626a F src/pager.c e65d78bdbd316c3ca0135d2a98ecc607873145aa F src/pager.h 588c1ac195228b2da45c4e5f7ab6c2fd253d1751 -F src/parse.y 097bff733e89fbf554a07d9327046718ce364011 +F src/parse.y d1316f1b8b251412bdf4926c4c34803977958b65 F src/pragma.c 6fad83fbcc7ec6e76d91fe2805fe972ff3af6a0c F src/prepare.c c9bb0aacb7a571d049805699ed18f2bb136ea091 F src/printf.c 2174222bc346a11b1eac2a654ccc4f635355ae7e @@ -241,7 +241,7 @@ F test/collate8.test 7ed2461305ac959886a064dc1e3cf15e155a183f F test/collate9.test 3adcc799229545940df2f25308dd1ad65869145a F test/collateA.test b8218ab90d1fa5c59dcf156efabb1b2599c580d6 F test/colmeta.test 087c42997754b8c648819832241daf724f813322 -F test/colname.test fa138771a03d1851e6ec2d10f2a9592c3ea4d5dd +F test/colname.test d717fcf45ad33ed0cc6ad6e1e7f5749afdcc4c77 F test/conflict.test bb29b052c60a1f7eb6382be77902061d1f305318 F test/corrupt.test af069d971853dbe12af936910bfa49d92f7b16e9 F test/corrupt2.test e56f45006e7eb3ee680ad3b61c92cc14ae09986e @@ -608,7 +608,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P c94318b982e9bb5b4c743cf8d5659f9eec697366 -R 1c9e4fce9b074d6791cf7915301ae383 -U danielk1977 -Z a5d1990c3bbe25fa6befea839cd03776 +P d807fb271340901bbf3e06de23d91132422d1408 +R 5afb3355c9e7275b2ae02909f2aaa9f9 +U drh +Z 628f79923a0f0af78e8025613e48d7b3 diff --git a/manifest.uuid b/manifest.uuid index 7e78ab34ca..27e9764199 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d807fb271340901bbf3e06de23d91132422d1408 \ No newline at end of file +17a9984e7668be388c4042c070718a02b284a336 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index b6f55a19b9..87be4a9157 100644 --- a/src/expr.c +++ b/src/expr.c @@ -12,7 +12,7 @@ ** This file contains routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions in SQLite. ** -** $Id: expr.c,v 1.385 2008/07/09 01:39:44 drh Exp $ +** $Id: expr.c,v 1.386 2008/07/18 17:03:53 drh Exp $ */ #include "sqliteInt.h" #include @@ -465,7 +465,7 @@ Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){ void sqlite3ExprSpan(Expr *pExpr, Token *pLeft, Token *pRight){ assert( pRight!=0 ); assert( pLeft!=0 ); - if( pExpr && pRight->z && pLeft->z ){ + if( pExpr ){ pExpr->span.z = pLeft->z; pExpr->span.n = pRight->n + (pRight->z - pLeft->z); } diff --git a/src/parse.y b/src/parse.y index 65c1747195..7642fe93f3 100644 --- a/src/parse.y +++ b/src/parse.y @@ -14,7 +14,7 @@ ** the parser. Lemon will also generate a header file containing ** numeric codes for all of the tokens. ** -** @(#) $Id: parse.y,v 1.245 2008/07/08 23:40:20 drh Exp $ +** @(#) $Id: parse.y,v 1.246 2008/07/18 17:03:53 drh Exp $ */ // All token codes are small integers with #defines that begin with "TK_" @@ -417,8 +417,8 @@ selcollist(A) ::= sclp(P) STAR. { Expr *p = sqlite3PExpr(pParse, TK_ALL, 0, 0, 0); A = sqlite3ExprListAppend(pParse, P, p, 0); } -selcollist(A) ::= sclp(P) nm(X) DOT STAR. { - Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, 0); +selcollist(A) ::= sclp(P) nm(X) DOT STAR(Y). { + Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &Y); Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &X); Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); A = sqlite3ExprListAppend(pParse,P, pDot, 0); diff --git a/test/colname.test b/test/colname.test index 781ffb4393..e5ebfc0bb9 100644 --- a/test/colname.test +++ b/test/colname.test @@ -13,7 +13,7 @@ # The focus of this file is testing how SQLite generates the names # of columns in a result set. # -# $Id: colname.test,v 1.1 2008/07/15 20:56:17 drh Exp $ +# $Id: colname.test,v 1.2 2008/07/18 17:03:53 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -250,5 +250,11 @@ do_test colname-4.13 { } } {v6.a 1 v6.x 4 v6.a:1 11 v6.x:1 14 v6.a:2 1 v6.b 2 v6.c 3 v6.x:2 4 v6.y 5 v6.z 6 v6.a:3 11 v6.b:1 12 v6.c:1 13 v6.x:3 14 v6.y:1 15 v6.z:1 16} +# ticket #3229 +do_test colname-5.1 { + db eval { + SELECT x.* FROM sqlite_master X LIMIT 1; + } +} {table tabc tabc 2 {CREATE TABLE tabc(a,b,c)}} finish_test