diff --git a/manifest b/manifest index 7a34078a6c..d4c268de95 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\suninitialized\svariable\sin\sCASE\sexpression\scode\sgeneration. -D 2016-08-23T17:30:55.883 +C Fix\sa\sproblem\swith\srowvalue\sUPDATE\swhen\sthe\srowvalue\sis\snot\sthe\sleft-most\sand\nthe\sRHS\sis\sa\smulti-column\ssubquery. +D 2016-08-23T18:30:10.697 F Makefile.in cfd8fb987cd7a6af046daa87daa146d5aad0e088 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc d66d0395c38571aab3804f8db0fa20707ae4609a @@ -338,7 +338,7 @@ F src/ctime.c e77f3dc297b4b65c96da78b4ae4272fdfae863d7 F src/date.c 95c9a8d00767e7221a8e9a31f4e913fc8029bf6b F src/dbstat.c 19ee7a4e89979d4df8e44cfac7a8f905ec89b77d F src/delete.c 76c084f0265f4a3cd1ecf17eee112a94f1ccbc05 -F src/expr.c 511768687886e4e55b586678ab4111e49a4a346e +F src/expr.c 3d3cc24386929991ff0c4264a8dde45b298c599e F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c e2be0968c1adc679c87e467aa5b4f167588f38a8 F src/func.c 29cc9acb170ec1387b9f63eb52cd85f8de96c771 @@ -1025,7 +1025,7 @@ F test/rowvalue3.test dbe935260851b197dfbbbcb0ac2a15cb5f324fd4 F test/rowvalue4.test 318cdd40e66dfae686537eea581ae49cbb01195d F test/rowvalue5.test 01c7e0bc4048f30b58e6eb27ecd26e5bd312635e F test/rowvalue6.test d19b54feb604d5601f8614b15e214e0774c01087 -F test/rowvalue7.test 3c9a127954d3da309a271babdfc43dbcc5c4da7f +F test/rowvalue7.test 5d06ff19d9e6969e574a2e662a531dd0c67801a8 F test/rowvalue8.test 5900eddad9e2c3c2e26f1a95f74aafc1232ee5e0 F test/rowvaluefault.test 7b16485e3f2b371f3e3d05455b8ded6d0c090244 F test/rtree.test 0c8d9dd458d6824e59683c19ab2ffa9ef946f798 @@ -1520,7 +1520,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 07e69f43a294d35b5145a2b0242ee42d50adab14 -R 4aa2c65fcf3b3b47ff0ca17ab554bdbd +P c8ffae05e13033ec7425bf0f002df31f550bb7f1 +R 8c42685900faf8a76ebfa8d4883d872e U drh -Z 4308f4ee8b9a3cd69479e48fad7b9733 +Z b8c84bcbf71dd1d1d9c9f62200ebb8ca diff --git a/manifest.uuid b/manifest.uuid index c7f5a16ecd..bd556e03a8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c8ffae05e13033ec7425bf0f002df31f550bb7f1 \ No newline at end of file +e149e6b93a9afb3d574309c0db60e221e24078f7 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 829afc4cd6..2e09d07982 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1489,6 +1489,7 @@ ExprList *sqlite3ExprListAppendVector( sqlite3 *db = pParse->db; int n; int i; + int iFirst = pList ? pList->nExpr : 0; if( pColumns==0 ) goto vector_append_error; if( pExpr==0 ) goto vector_append_error; n = sqlite3ExprVectorSize(pExpr); @@ -1501,14 +1502,15 @@ ExprList *sqlite3ExprListAppendVector( Expr *pSubExpr = sqlite3ExprForVectorField(pParse, pExpr, i); pList = sqlite3ExprListAppend(pParse, pList, pSubExpr); if( pList ){ + assert( pList->nExpr==iFirst+i+1 ); pList->a[pList->nExpr-1].zName = pColumns->a[i].zName; pColumns->a[i].zName = 0; } } if( pExpr->op==TK_SELECT ){ - if( pList && pList->a[0].pExpr ){ - assert( pList->a[0].pExpr->op==TK_SELECT_COLUMN ); - pList->a[0].pExpr->pRight = pExpr; + if( pList && pList->a[iFirst].pExpr ){ + assert( pList->a[iFirst].pExpr->op==TK_SELECT_COLUMN ); + pList->a[iFirst].pExpr->pRight = pExpr; pExpr = 0; } } diff --git a/test/rowvalue7.test b/test/rowvalue7.test index a90e235ce2..f6764f301e 100644 --- a/test/rowvalue7.test +++ b/test/rowvalue7.test @@ -43,7 +43,7 @@ do_execsql_test 1.4 { } {1 2 11 22 | 3 4 99 55 | 5 6 55 66 |} do_execsql_test 1.5 { - UPDATE t1 SET b = 8, (c,d) = (123,456) WHERE a=3; + UPDATE t1 SET b = 8, (c,d) = (SELECT 123,456) WHERE a=3; SELECT *,'|' FROM t1 ORDER BY a; } {1 2 11 22 | 3 8 123 456 | 5 6 55 66 |}