diff options
author | dan <dan@noemail.net> | 2015-06-02 18:07:58 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2015-06-02 18:07:58 +0000 |
commit | 167fd757f0799d5c6519d66cd9f26e6ffcb2f1bd (patch) | |
tree | 4482f33a4ccf87878095e1bddd515f85f7d57137 /src/vdbeapi.c | |
parent | dbef6e752e9c1d26f9f1a0a62fee3e523b490bf0 (diff) | |
parent | 467c1c70fb519279fe5f806425923417673eb2f1 (diff) | |
download | sqlite-167fd757f0799d5c6519d66cd9f26e6ffcb2f1bd.tar.gz sqlite-167fd757f0799d5c6519d66cd9f26e6ffcb2f1bd.zip |
Merge latest trunk changes with this branch.
FossilOrigin-Name: c9ffda4abb4390bbc5719e269196e2807b254f97
Diffstat (limited to 'src/vdbeapi.c')
-rw-r--r-- | src/vdbeapi.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/vdbeapi.c b/src/vdbeapi.c index e03640dfb..010fbfba1 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -212,6 +212,36 @@ int sqlite3_value_type(sqlite3_value* pVal){ return aType[pVal->flags&MEM_AffMask]; } +/* Make a copy of an sqlite3_value object +*/ +sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){ + sqlite3_value *pNew; + if( pOrig==0 ) return 0; + pNew = sqlite3_malloc( sizeof(*pNew) ); + if( pNew==0 ) return 0; + memset(pNew, 0, sizeof(*pNew)); + memcpy(pNew, pOrig, MEMCELLSIZE); + pNew->flags &= ~MEM_Dyn; + pNew->db = 0; + if( pNew->flags&(MEM_Str|MEM_Blob) ){ + pNew->flags &= ~(MEM_Static|MEM_Dyn); + pNew->flags |= MEM_Ephem; + if( sqlite3VdbeMemMakeWriteable(pNew)!=SQLITE_OK ){ + sqlite3ValueFree(pNew); + pNew = 0; + } + } + return pNew; +} + +/* Destroy an sqlite3_value object previously obtained from +** sqlite3_value_dup(). +*/ +void sqlite3_value_free(sqlite3_value *pOld){ + sqlite3ValueFree(pOld); +} + + /**************************** sqlite3_result_ ******************************* ** The following routines are used by user-defined functions to specify ** the function result. |