mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Fix a problem with the sqlite3sessions_fullchangeset() and sqlite3changebatch_add() APIs on this branch.
FossilOrigin-Name: a95a4bce8892eba3ab6e76a49975a52efeedebfd9af22bb31af30301b1d92328
This commit is contained in:
@@ -151,7 +151,6 @@ foreach {tn testfunction} {
|
|||||||
INSERT INTO x2 VALUES(X'abcd', X'1234', X'7890');
|
INSERT INTO x2 VALUES(X'abcd', X'1234', X'7890');
|
||||||
INSERT INTO x2 VALUES(X'0000', X'0000', X'0000');
|
INSERT INTO x2 VALUES(X'0000', X'0000', X'0000');
|
||||||
}
|
}
|
||||||
breakpoint
|
|
||||||
$testfunction $tn.2.6 {
|
$testfunction $tn.2.6 {
|
||||||
UPDATE x2 SET c = X'1234' WHERE a=X'abcd';
|
UPDATE x2 SET c = X'1234' WHERE a=X'abcd';
|
||||||
INSERT INTO x2 VALUES(X'1234', X'abcd', X'7890');
|
INSERT INTO x2 VALUES(X'1234', X'abcd', X'7890');
|
||||||
@@ -217,6 +216,8 @@ do_test 4.1 {
|
|||||||
list [catch { cb add $c1 } msg] $msg
|
list [catch { cb add $c1 } msg] $msg
|
||||||
} {1 SQLITE_RANGE}
|
} {1 SQLITE_RANGE}
|
||||||
|
|
||||||
|
cb delete
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
@@ -397,7 +397,7 @@ int sqlite3changebatch_add(sqlite3_changebatch *p, void *pBuf, int nBuf){
|
|||||||
int rc; /* Return code */
|
int rc; /* Return code */
|
||||||
int bConf = 0; /* Conflict was detected */
|
int bConf = 0; /* Conflict was detected */
|
||||||
|
|
||||||
rc = sqlite3changeset_start(&pIter, nBuf, pBuf);
|
rc = sqlite3changeset_start_v2(&pIter, nBuf, pBuf,SQLITE_CHANGESETSTART_FULL);
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
int rc2;
|
int rc2;
|
||||||
for(rc2 = sqlite3changeset_next(pIter);
|
for(rc2 = sqlite3changeset_next(pIter);
|
||||||
|
@@ -98,6 +98,7 @@ struct SessionInput {
|
|||||||
struct sqlite3_changeset_iter {
|
struct sqlite3_changeset_iter {
|
||||||
SessionInput in; /* Input buffer or stream */
|
SessionInput in; /* Input buffer or stream */
|
||||||
SessionBuffer tblhdr; /* Buffer to hold apValue/zTab/abPK/ */
|
SessionBuffer tblhdr; /* Buffer to hold apValue/zTab/abPK/ */
|
||||||
|
int bChangebatch; /* True for changebatch_add() */
|
||||||
int bPatchset; /* True if this is a patchset */
|
int bPatchset; /* True if this is a patchset */
|
||||||
int bInvert; /* True to invert changeset */
|
int bInvert; /* True to invert changeset */
|
||||||
int bSkipEmpty; /* Skip noop UPDATE changes */
|
int bSkipEmpty; /* Skip noop UPDATE changes */
|
||||||
@@ -2883,8 +2884,13 @@ int sqlite3changeset_start_v2(
|
|||||||
void *pChangeset, /* Pointer to buffer containing changeset */
|
void *pChangeset, /* Pointer to buffer containing changeset */
|
||||||
int flags
|
int flags
|
||||||
){
|
){
|
||||||
|
int rc;
|
||||||
|
sqlite3_changeset_iter *pIter = 0;
|
||||||
int bInvert = !!(flags & SQLITE_CHANGESETSTART_INVERT);
|
int bInvert = !!(flags & SQLITE_CHANGESETSTART_INVERT);
|
||||||
return sessionChangesetStart(pp, 0, 0, nChangeset, pChangeset, bInvert, 0);
|
rc = sessionChangesetStart(&pIter, 0, 0, nChangeset, pChangeset, bInvert, 0);
|
||||||
|
if( pIter && (flags & SQLITE_CHANGESETSTART_FULL) ) pIter->bChangebatch = 1;
|
||||||
|
*pp = pIter;
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3357,8 +3363,12 @@ static int sessionChangesetNextOne(
|
|||||||
**
|
**
|
||||||
** Such records are technically corrupt, but the rebaser was at one
|
** Such records are technically corrupt, but the rebaser was at one
|
||||||
** point generating them. Under most circumstances this is benign, but
|
** point generating them. Under most circumstances this is benign, but
|
||||||
** can cause spurious SQLITE_RANGE errors when applying the changeset. */
|
** can cause spurious SQLITE_RANGE errors when applying the changeset.
|
||||||
if( p->bPatchset==0 && p->op==SQLITE_UPDATE){
|
**
|
||||||
|
** Update for bedrock branch: Do not do this for changebatch_add() on
|
||||||
|
** this branch, as changesets generated by sqlite3sessions_fullchangeset()
|
||||||
|
** also have this property. */
|
||||||
|
if( p->bChangebatch==0 && p->bPatchset==0 && p->op==SQLITE_UPDATE){
|
||||||
for(i=0; i<p->nCol; i++){
|
for(i=0; i<p->nCol; i++){
|
||||||
if( p->abPK[i]==0 && p->apValue[i+p->nCol]==0 ){
|
if( p->abPK[i]==0 && p->apValue[i+p->nCol]==0 ){
|
||||||
sqlite3ValueFree(p->apValue[i]);
|
sqlite3ValueFree(p->apValue[i]);
|
||||||
|
@@ -581,12 +581,16 @@ int sqlite3changeset_start_v2(
|
|||||||
** The following flags may passed via the 4th parameter to
|
** The following flags may passed via the 4th parameter to
|
||||||
** [sqlite3changeset_start_v2] and [sqlite3changeset_start_v2_strm]:
|
** [sqlite3changeset_start_v2] and [sqlite3changeset_start_v2_strm]:
|
||||||
**
|
**
|
||||||
** <dt>SQLITE_CHANGESETAPPLY_INVERT <dd>
|
** <dt>SQLITE_CHANGESETSTART_INVERT <dd>
|
||||||
** Invert the changeset while iterating through it. This is equivalent to
|
** Invert the changeset while iterating through it. This is equivalent to
|
||||||
** inverting a changeset using sqlite3changeset_invert() before applying it.
|
** inverting a changeset using sqlite3changeset_invert() before applying it.
|
||||||
** It is an error to specify this flag with a patchset.
|
** It is an error to specify this flag with a patchset.
|
||||||
|
**
|
||||||
|
** <dt>SQLITE_CHANGESETSTART_FULL <dd>
|
||||||
|
** Do not trim extra fields added to fullchangeset changesets.
|
||||||
*/
|
*/
|
||||||
#define SQLITE_CHANGESETSTART_INVERT 0x0002
|
#define SQLITE_CHANGESETSTART_INVERT 0x0002
|
||||||
|
#define SQLITE_CHANGESETSTART_FULL 0x0004
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -305,14 +305,15 @@ static int SQLITE_TCLAPI test_session_cmd(
|
|||||||
}else{
|
}else{
|
||||||
if( iSub==7 ){
|
if( iSub==7 ){
|
||||||
rc = sqlite3session_patchset(pSession, &o.n, &o.p);
|
rc = sqlite3session_patchset(pSession, &o.n, &o.p);
|
||||||
|
assert_changeset_is_ok(o.n, o.p);
|
||||||
}else if( iSub==9 ){
|
}else if( iSub==9 ){
|
||||||
rc = sqlite3session_fullchangeset(pSession, &o.n, &o.p);
|
rc = sqlite3session_fullchangeset(pSession, &o.n, &o.p);
|
||||||
}else{
|
}else{
|
||||||
rc = sqlite3session_changeset(pSession, &o.n, &o.p);
|
rc = sqlite3session_changeset(pSession, &o.n, &o.p);
|
||||||
|
assert_changeset_is_ok(o.n, o.p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
assert_changeset_is_ok(o.n, o.p);
|
|
||||||
Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(o.p, o.n));
|
Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(o.p, o.n));
|
||||||
}
|
}
|
||||||
sqlite3_free(o.p);
|
sqlite3_free(o.p);
|
||||||
|
22
manifest
22
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Update\sthe\sbedrock\sbranch\sto\sversion\s3.41.0
|
C Fix\sa\sproblem\swith\sthe\ssqlite3sessions_fullchangeset()\sand\ssqlite3changebatch_add()\sAPIs\son\sthis\sbranch.
|
||||||
D 2023-02-21T21:22:24.906
|
D 2023-02-24T19:58:56.018
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -431,7 +431,7 @@ F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de
|
|||||||
F ext/rtree/util/randomshape.tcl 54ee03d0d4a1c621806f7f44d5b78d2db8fac26e0e8687c36c4bd0203b27dbff
|
F ext/rtree/util/randomshape.tcl 54ee03d0d4a1c621806f7f44d5b78d2db8fac26e0e8687c36c4bd0203b27dbff
|
||||||
F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
|
F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
|
||||||
F ext/rtree/visual01.txt e9c2564083bcd30ec51b07f881bffbf0e12b50a3f6fced0c222c5c1d2f94ac66
|
F ext/rtree/visual01.txt e9c2564083bcd30ec51b07f881bffbf0e12b50a3f6fced0c222c5c1d2f94ac66
|
||||||
F ext/session/changebatch1.test 9ceaa8f7b2a505933e250fbe6cbc550e4ce1e59d
|
F ext/session/changebatch1.test 51694900ccbdf144c2e403f99358b7a3f137354e2ba8d1033ef88a53f1a494f2
|
||||||
F ext/session/changebatchfault.test be49c793219bf387ad692a60856b921f0854ad6d
|
F ext/session/changebatchfault.test be49c793219bf387ad692a60856b921f0854ad6d
|
||||||
F ext/session/changeset.c 7a1e6a14c7e92d36ca177e92e88b5281acd709f3b726298dc34ec0fb58869cb5
|
F ext/session/changeset.c 7a1e6a14c7e92d36ca177e92e88b5281acd709f3b726298dc34ec0fb58869cb5
|
||||||
F ext/session/changesetfuzz.c 227076ab0ae4447d742c01ee88a564da6478bbf26b65108bf8fac9cd8b0b24aa
|
F ext/session/changesetfuzz.c 227076ab0ae4447d742c01ee88a564da6478bbf26b65108bf8fac9cd8b0b24aa
|
||||||
@@ -466,11 +466,11 @@ F ext/session/sessionrebase.test ccfa716b23bd1d3b03217ee58cfd90c78d4b99f53e6a9a2
|
|||||||
F ext/session/sessionsize.test 6f644aff31c7f1e4871e9ff3542766e18da68fc7e587b83a347ea9820a002dd8
|
F ext/session/sessionsize.test 6f644aff31c7f1e4871e9ff3542766e18da68fc7e587b83a347ea9820a002dd8
|
||||||
F ext/session/sessionstat1.test 218d351cf9fcd6648f125a26b607b140310160184723c2666091b54450a68fb5
|
F ext/session/sessionstat1.test 218d351cf9fcd6648f125a26b607b140310160184723c2666091b54450a68fb5
|
||||||
F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
|
F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
|
||||||
F ext/session/sqlite3changebatch.c d5553b79e012ee2cb06c0a96bdf9dfe19e66354390ea0036cc46c4953142d517
|
F ext/session/sqlite3changebatch.c d488b42d8fd49fb013a1e9c4535232680dabeb28ae8f9421b65ea0ccc3b430f7
|
||||||
F ext/session/sqlite3changebatch.h e72016998c9a22d439ddfd547b69e1ebac810c24
|
F ext/session/sqlite3changebatch.h e72016998c9a22d439ddfd547b69e1ebac810c24
|
||||||
F ext/session/sqlite3session.c 7084f9fb1c075cd0724d62d71affe5889ee514d60a02f8548e74e74f8e285df4
|
F ext/session/sqlite3session.c caa800fc9665e2e1bc15861ae285e47277c0950292fc5efa982503ce46b73929
|
||||||
F ext/session/sqlite3session.h 01807bb8c8f531c23052032e9d531eec49af79b7394f8213cf5a49784325b6a8
|
F ext/session/sqlite3session.h 55221fa46444a39b99a845d4e0e23ad192e152a88ba6e45b084b5bc9be5bdef8
|
||||||
F ext/session/test_session.c 0597d013e68abccb4aa808549139f985130a19732c2b827609a05100d8cbfeaf
|
F ext/session/test_session.c 40fbe5761b910dbf81d7b34197ef7b8956a2095cdd35b3e42e9c63778a67dec5
|
||||||
F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
|
F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
|
||||||
F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
|
F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
|
||||||
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
|
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
|
||||||
@@ -2081,8 +2081,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 73e9f8d0bf78bbbaa3435330e485126bb09f008f35c1d0f366efd5e511f8f4a9 7bb1f6dca2d2e0c0c70f1d2d0c7130c182fc45e48138c57a3fbe92ee1f68da96
|
P dc1d85707b130aae2f07b6b1961e0acd42d7a302b3518670f3dbfa96c179386d
|
||||||
R d031eada0322fc82071af9d5c997f8be
|
R 1b0ad48979e97c455633409f6f0e3549
|
||||||
U drh
|
U dan
|
||||||
Z 5aa61c87f2d7430205d3b620d31ec49a
|
Z 0fc1f6413ec534a029873988710cdbc0
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@@ -1 +1 @@
|
|||||||
dc1d85707b130aae2f07b6b1961e0acd42d7a302b3518670f3dbfa96c179386d
|
a95a4bce8892eba3ab6e76a49975a52efeedebfd9af22bb31af30301b1d92328
|
Reference in New Issue
Block a user