1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

Test that the binary record "0x01 0x00" is interpreted by OP_Column as a vector of NULL (or default) values.

FossilOrigin-Name: 5bdc3c82bd10f924c12568eb0fa7a07393fc864f
This commit is contained in:
dan
2015-10-26 16:31:18 +00:00
parent 2b4e95226c
commit 6b513640c0
4 changed files with 107 additions and 10 deletions

View File

@@ -219,7 +219,7 @@ static int btree_cursor(
memset(pCur, 0, sqlite3BtreeCursorSize());
sqlite3BtreeEnter(pBt);
#ifndef SQLITE_OMIT_SHARED_CACHE
rc = sqlite3BtreeLockTable(pBt, iTable, wrFlag);
rc = sqlite3BtreeLockTable(pBt, iTable, !!wrFlag);
#endif
if( rc==SQLITE_OK ){
rc = sqlite3BtreeCursor(pBt, iTable, wrFlag, 0, pCur);
@@ -599,6 +599,51 @@ static int btree_set_cache_size(
return TCL_OK;
}
/*
** usage: btree_insert CSR ?KEY? VALUE
**
** Set the size of the cache used by btree $ID.
*/
static int btree_insert(
ClientData clientData,
Tcl_Interp *interp,
int objc,
Tcl_Obj *const objv[]
){
BtCursor *pCur;
int rc;
int bIntkey = 0;
void *pKey = 0;
int nKey = 0;
void *pData = 0;
int nData = 0;
if( objc!=4 && objc!=3 ){
Tcl_WrongNumArgs(interp, 1, objv, "?-intkey? CSR KEY VALUE");
return TCL_ERROR;
}
if( objc==4 ){
if( Tcl_GetIntFromObj(interp, objv[2], &nKey) ) return TCL_ERROR;
pData = (void*)Tcl_GetByteArrayFromObj(objv[3], &nData);
}else{
pKey = (void*)Tcl_GetByteArrayFromObj(objv[2], &nKey);
}
pCur = (BtCursor*)sqlite3TestTextToPtr(Tcl_GetString(objv[1]));
sqlite3BtreeEnter(pCur->pBtree);
if( rc==SQLITE_OK ){
rc = sqlite3BtreeInsert(pCur, pKey, nKey, pData, nData, 0, 0, 0);
}
sqlite3BtreeLeave(pCur->pBtree);
Tcl_ResetResult(interp);
if( rc ){
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
return TCL_ERROR;
}
return TCL_OK;
}
/*
@@ -630,5 +675,7 @@ int Sqlitetest3_Init(Tcl_Interp *interp){
Tcl_CreateCommand(interp, aCmd[i].zName, aCmd[i].xProc, 0, 0);
}
Tcl_CreateObjCommand(interp, "btree_insert", btree_insert, 0, 0);
return TCL_OK;
}