]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem with rowvalue UPDATE when the rowvalue is not the left-most and
authordrh <drh@noemail.net>
Tue, 23 Aug 2016 18:30:10 +0000 (18:30 +0000)
committerdrh <drh@noemail.net>
Tue, 23 Aug 2016 18:30:10 +0000 (18:30 +0000)
the RHS is a multi-column subquery.

FossilOrigin-Name: e149e6b93a9afb3d574309c0db60e221e24078f7

manifest
manifest.uuid
src/expr.c
test/rowvalue7.test

index 7a34078a6c78ac7e6cde03029bbd3603f43aa698..d4c268de95847bf4b02615dc3e7c2634fb3a08f6 100644 (file)
--- 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
index c7f5a16ecdb51d24d7704ab5cd0ef54d9927269f..bd556e03a82cc466454593bc95ac30589027502a 100644 (file)
@@ -1 +1 @@
-c8ffae05e13033ec7425bf0f002df31f550bb7f1
\ No newline at end of file
+e149e6b93a9afb3d574309c0db60e221e24078f7
\ No newline at end of file
index 829afc4cd6cb7313904d21358bcbcf8ae35c9738..2e09d07982ba2c93c7828fb3d6b1741c59516391 100644 (file)
@@ -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;
     }
   }
index a90e235ce265be8559fe3a16c57a8822715f572e..f6764f301e4913d99c309d9a09c026fe78b446fd 100644 (file)
@@ -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 |}