diff options
author | dan <Dan Kennedy> | 2021-04-22 17:40:28 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2021-04-22 17:40:28 +0000 |
commit | 6d29a4fe5be41d63d7c2ba8a82ad9777a4acc39f (patch) | |
tree | 247da9aa4d9b2d65af46c371ee635cf4d89da9dd /ext/session/sqlite3session.c | |
parent | a23a873fbb02bdb20923aae7d2476f07d4245bc3 (diff) | |
download | sqlite-6d29a4fe5be41d63d7c2ba8a82ad9777a4acc39f.tar.gz sqlite-6d29a4fe5be41d63d7c2ba8a82ad9777a4acc39f.zip |
Add the sqlite3session_object_config() API. Current used to enable/disable collecting data for sqlite3session_changeset_size().
FossilOrigin-Name: 4d5fd2151e024d11289b6c4fbce2996d8d07b2b5a1c953ef895c237e79d3aa55
Diffstat (limited to 'ext/session/sqlite3session.c')
-rw-r--r-- | ext/session/sqlite3session.c | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index 077a6e090..1f6c58b4d 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -42,6 +42,7 @@ struct SessionHook { struct sqlite3_session { sqlite3 *db; /* Database handle session is attached to */ char *zDb; /* Name of database session is attached to */ + int bEnableSize; /* True if changeset_size() enabled */ int bEnable; /* True if currently recording */ int bIndirect; /* True if all changes are indirect */ int bAutoAttach; /* True to auto-attach tables */ @@ -1124,9 +1125,11 @@ static int sessionInitTable(sqlite3_session *pSession, SessionTable *pTab){ pTab->bStat1 = 1; } - pSession->nMaxChangesetSize += ( - 1 + sessionVarintLen(pTab->nCol) + pTab->nCol + strlen(pTab->zName) + 1 - ); + if( pSession->bEnableSize ){ + pSession->nMaxChangesetSize += ( + 1 + sessionVarintLen(pTab->nCol) + pTab->nCol + strlen(pTab->zName)+1 + ); + } } } return (pSession->rc || pTab->abPK==0); @@ -1411,7 +1414,9 @@ static void sessionPreupdateOneChange( } assert( rc==SQLITE_OK ); - rc = sessionUpdateMaxSize(op, pSession, pTab, pC); + if( pSession->bEnableSize ){ + rc = sessionUpdateMaxSize(op, pSession, pTab, pC); + } } @@ -2627,7 +2632,9 @@ int sqlite3session_changeset( void **ppChangeset /* OUT: Buffer containing changeset */ ){ int rc = sessionGenerateChangeset(pSession, 0, 0, 0, pnChangeset,ppChangeset); - assert( rc || pnChangeset==0 || *pnChangeset<=pSession->nMaxChangesetSize ); + assert( rc || pnChangeset==0 + || pSession->bEnableSize==0 || *pnChangeset<=pSession->nMaxChangesetSize + ); return rc; } @@ -2721,6 +2728,32 @@ sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession){ } /* +** Configure the session object passed as the first argument. +*/ +int sqlite3session_object_config(sqlite3_session *pSession, int op, void *pArg){ + int rc = SQLITE_OK; + switch( op ){ + case SQLITE_SESSION_OBJCONFIG_SIZE: { + int iArg = *(int*)pArg; + if( iArg>=0 ){ + if( pSession->pTable ){ + rc = SQLITE_MISUSE; + }else{ + pSession->bEnableSize = (iArg!=0); + } + } + *(int*)pArg = pSession->bEnableSize; + break; + } + + default: + rc = SQLITE_MISUSE; + } + + return rc; +} + +/* ** Return the maximum size of sqlite3session_changeset() output. */ sqlite3_int64 sqlite3session_changeset_size(sqlite3_session *pSession){ |