Fix a problem causing the pre-update hook to be passed an incorrect rowid

value in some single-pass multi-row updates.

FossilOrigin-Name: 62257eb53c13d4c7ed128d5d89f6f10d4aff945c
This commit is contained in:
dan 2017-01-11 20:10:30 +00:00
parent 2c6fec21dc
commit e206ea7f48
3 changed files with 11 additions and 7 deletions

View File

@ -1,5 +1,5 @@
C Fix\sa\sproblem\swith\ssingle-pass\smulti-row\sUPDATE\sstatements\sthat\sinvoke\sREPLACE\nconflict\shandling.
D 2017-01-11T19:03:08.308
C Fix\sa\sproblem\scausing\sthe\spre-update\shook\sto\sbe\spassed\san\sincorrect\srowid\nvalue\sin\ssome\ssingle-pass\smulti-row\supdates.
D 2017-01-11T20:10:30.712
F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
@ -451,7 +451,7 @@ F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
F src/tokenize.c 5c2f516876fc27fbd7753913f032f49eb89e83b5
F src/treeview.c 4e44ade3bfe59d82005039f72e09333ce2b4162c
F src/trigger.c c9f0810043b265724fdb1bdd466894f984dfc182
F src/update.c 4ed0fcccccd6488ee8a3bc02df10979b503f25d7
F src/update.c 715bbfe276c9d008482cdb0ecd86ff996dba3b6c
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
F src/util.c a88b0466fddf445ce752226d4698ca3faada620a
F src/vacuum.c 33c174b28886b2faf26e503b5a49a1c01a9b1c16
@ -1544,7 +1544,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 cab86c90945126c24c40cf2dedd053a8c46d00d6
R 91b60fc45aced248f038aee86694df0e
P 0a2b8e1b9dc600b5a93622e8eea6218649df5e0f
R d791ce37848d763756ad4c9c28aa682a
U dan
Z f69bdc261645bb06f02a001c239441ef
Z 064d431f5a23ac6118a97592b16afa49

View File

@ -1 +1 @@
0a2b8e1b9dc600b5a93622e8eea6218649df5e0f
62257eb53c13d4c7ed128d5d89f6f10d4aff945c

View File

@ -643,6 +643,10 @@ void sqlite3Update(
OPFLAG_ISUPDATE | ((hasFK || chngKey) ? 0 : OPFLAG_ISNOOP),
regNewRowid
);
if( eOnePass==ONEPASS_MULTI ){
assert( hasFK==0 && chngKey==0 );
sqlite3VdbeChangeP5(v, OPFLAG_SAVEPOSITION);
}
if( !pParse->nested ){
sqlite3VdbeAppendP4(v, pTab, P4_TABLE);
}