1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Add streaming version of sqlite3changeset_concat().

FossilOrigin-Name: 88eb6656bdb047a104837a2e15e7fe18c0a7a159
This commit is contained in:
dan
2014-09-25 20:43:28 +00:00
parent fa122adac1
commit cbf6d2d2aa
6 changed files with 203 additions and 99 deletions

View File

@ -715,27 +715,42 @@ static int test_sqlite3changeset_concat(
Tcl_Obj *CONST objv[]
){
int rc; /* Return code from changeset_invert() */
void *aLeft; /* Input changeset */
int nLeft; /* Size of buffer aChangeset in bytes */
void *aRight; /* Input changeset */
int nRight; /* Size of buffer aChangeset in bytes */
void *aOut; /* Output changeset */
int nOut; /* Size of buffer aOut in bytes */
TestStreamInput sLeft; /* Input stream */
TestStreamInput sRight; /* Input stream */
TestSessionsBlob sOut = {0,0}; /* Output blob */
if( objc!=3 ){
Tcl_WrongNumArgs(interp, 1, objv, "LEFT RIGHT");
return TCL_ERROR;
}
aLeft = (void *)Tcl_GetByteArrayFromObj(objv[1], &nLeft);
aRight = (void *)Tcl_GetByteArrayFromObj(objv[2], &nRight);
rc = sqlite3changeset_concat(nLeft, aLeft, nRight, aRight, &nOut, &aOut);
if( rc!=SQLITE_OK ){
return test_session_error(interp, rc);
memset(&sLeft, 0, sizeof(sLeft));
memset(&sRight, 0, sizeof(sRight));
sLeft.aData = Tcl_GetByteArrayFromObj(objv[1], &sLeft.nData);
sRight.aData = Tcl_GetByteArrayFromObj(objv[2], &sRight.nData);
sLeft.nStream = test_tcl_integer(interp, SESSION_STREAM_TCL_VAR);
sRight.nStream = sLeft.nStream;
if( sLeft.nStream>0 ){
rc = sqlite3changeset_concat_str(
testStreamInput, (void*)&sLeft,
testStreamInput, (void*)&sRight,
testSessionsOutput, (void*)&sOut
);
}else{
rc = sqlite3changeset_concat(
sLeft.nData, sLeft.aData, sRight.nData, sRight.aData, &sOut.n, &sOut.p
);
}
Tcl_SetObjResult(interp, Tcl_NewByteArrayObj((unsigned char *)aOut, nOut));
sqlite3_free(aOut);
return TCL_OK;
if( rc!=SQLITE_OK ){
rc = test_session_error(interp, rc);
}else{
Tcl_SetObjResult(interp,Tcl_NewByteArrayObj((unsigned char*)sOut.p,sOut.n));
}
sqlite3_free(sOut.p);
return rc;
}
/*