Index: third_party/sqlite/src/src/test3.c |
diff --git a/third_party/sqlite/src/src/test3.c b/third_party/sqlite/src/src/test3.c |
index 2a41068e5f9bd775a9f58343ffd0496601a2a437..6b4bfedbd983ec5e9ab9f0d9bfe1db3f68edcfd7 100644 |
--- a/third_party/sqlite/src/src/test3.c |
+++ b/third_party/sqlite/src/src/test3.c |
@@ -15,7 +15,11 @@ |
*/ |
#include "sqliteInt.h" |
#include "btreeInt.h" |
-#include "tcl.h" |
+#if defined(INCLUDE_SQLITE_TCL_H) |
+# include "sqlite_tcl.h" |
+#else |
+# include "tcl.h" |
+#endif |
#include <stdlib.h> |
#include <string.h> |
@@ -33,7 +37,7 @@ static int nRefSqlite3 = 0; |
** |
** Open a new database |
*/ |
-static int btree_open( |
+static int SQLITE_TCLAPI btree_open( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -79,7 +83,7 @@ static int btree_open( |
** |
** Close the given database. |
*/ |
-static int btree_close( |
+static int SQLITE_TCLAPI btree_close( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -114,7 +118,7 @@ static int btree_close( |
** |
** Start a new transaction |
*/ |
-static int btree_begin_transaction( |
+static int SQLITE_TCLAPI btree_begin_transaction( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -143,7 +147,7 @@ static int btree_begin_transaction( |
** |
** Returns pager statistics |
*/ |
-static int btree_pager_stats( |
+static int SQLITE_TCLAPI btree_pager_stats( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -193,7 +197,7 @@ static int btree_pager_stats( |
** |
** Create a new cursor. Return the ID for the cursor. |
*/ |
-static int btree_cursor( |
+static int SQLITE_TCLAPI btree_cursor( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -242,14 +246,13 @@ static int btree_cursor( |
** |
** Close a cursor opened using btree_cursor. |
*/ |
-static int btree_close_cursor( |
+static int SQLITE_TCLAPI btree_close_cursor( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
const char **argv /* Text of each argument */ |
){ |
BtCursor *pCur; |
- Btree *pBt; |
int rc; |
if( argc!=2 ){ |
@@ -258,12 +261,18 @@ static int btree_close_cursor( |
return TCL_ERROR; |
} |
pCur = sqlite3TestTextToPtr(argv[1]); |
- pBt = pCur->pBtree; |
- sqlite3_mutex_enter(pBt->db->mutex); |
- sqlite3BtreeEnter(pBt); |
+#if SQLITE_THREADSAFE>0 |
+ { |
+ Btree *pBt = pCur->pBtree; |
+ sqlite3_mutex_enter(pBt->db->mutex); |
+ sqlite3BtreeEnter(pBt); |
+ rc = sqlite3BtreeCloseCursor(pCur); |
+ sqlite3BtreeLeave(pBt); |
+ sqlite3_mutex_leave(pBt->db->mutex); |
+ } |
+#else |
rc = sqlite3BtreeCloseCursor(pCur); |
- sqlite3BtreeLeave(pBt); |
- sqlite3_mutex_leave(pBt->db->mutex); |
+#endif |
ckfree((char *)pCur); |
if( rc ){ |
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0); |
@@ -279,7 +288,7 @@ static int btree_close_cursor( |
** or 1 if the cursor was already on the last entry in the table or if |
** the table is empty. |
*/ |
-static int btree_next( |
+static int SQLITE_TCLAPI btree_next( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -314,7 +323,7 @@ static int btree_next( |
** Move the cursor to the first entry in the table. Return 0 if the |
** cursor was left point to something and 1 if the table is empty. |
*/ |
-static int btree_first( |
+static int SQLITE_TCLAPI btree_first( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -349,7 +358,7 @@ static int btree_first( |
** Return TRUE if the given cursor is not pointing at a valid entry. |
** Return FALSE if the cursor does point to a valid entry. |
*/ |
-static int btree_eof( |
+static int SQLITE_TCLAPI btree_eof( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -378,15 +387,14 @@ static int btree_eof( |
** |
** Return the number of bytes of payload |
*/ |
-static int btree_payload_size( |
+static int SQLITE_TCLAPI btree_payload_size( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
const char **argv /* Text of each argument */ |
){ |
BtCursor *pCur; |
- int n2; |
- u64 n1; |
+ u32 n; |
char zBuf[50]; |
if( argc!=2 ){ |
@@ -396,17 +404,9 @@ static int btree_payload_size( |
} |
pCur = sqlite3TestTextToPtr(argv[1]); |
sqlite3BtreeEnter(pCur->pBtree); |
- |
- /* The cursor may be in "require-seek" state. If this is the case, the |
- ** call to BtreeDataSize() will fix it. */ |
- sqlite3BtreeDataSize(pCur, (u32*)&n2); |
- if( pCur->apPage[pCur->iPage]->intKey ){ |
- n1 = 0; |
- }else{ |
- sqlite3BtreeKeySize(pCur, (i64*)&n1); |
- } |
+ n = sqlite3BtreePayloadSize(pCur); |
sqlite3BtreeLeave(pCur->pBtree); |
- sqlite3_snprintf(sizeof(zBuf),zBuf, "%d", (int)(n1+n2)); |
+ sqlite3_snprintf(sizeof(zBuf),zBuf, "%u", n); |
Tcl_AppendResult(interp, zBuf, 0); |
return SQLITE_OK; |
} |
@@ -425,7 +425,7 @@ static int btree_payload_size( |
** This command returns nothing if it works. It returns an error message |
** if something goes wrong. |
*/ |
-static int btree_varint_test( |
+static int SQLITE_TCLAPI btree_varint_test( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -509,7 +509,7 @@ static int btree_varint_test( |
** sqlite3 db test.db |
** set bt [btree_from_db db] |
*/ |
-static int btree_from_db( |
+static int SQLITE_TCLAPI btree_from_db( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -547,9 +547,9 @@ static int btree_from_db( |
/* |
** Usage: btree_ismemdb ID |
** |
-** Return true if the B-Tree is in-memory. |
+** Return true if the B-Tree is currently stored entirely in memory. |
*/ |
-static int btree_ismemdb( |
+static int SQLITE_TCLAPI btree_ismemdb( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -557,6 +557,7 @@ static int btree_ismemdb( |
){ |
Btree *pBt; |
int res; |
+ sqlite3_file *pFile; |
if( argc!=2 ){ |
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], |
@@ -566,7 +567,8 @@ static int btree_ismemdb( |
pBt = sqlite3TestTextToPtr(argv[1]); |
sqlite3_mutex_enter(pBt->db->mutex); |
sqlite3BtreeEnter(pBt); |
- res = sqlite3PagerIsMemdb(sqlite3BtreePager(pBt)); |
+ pFile = sqlite3PagerFile(sqlite3BtreePager(pBt)); |
+ res = (pFile->pMethods==0); |
sqlite3BtreeLeave(pBt); |
sqlite3_mutex_leave(pBt->db->mutex); |
Tcl_SetObjResult(interp, Tcl_NewBooleanObj(res)); |
@@ -578,7 +580,7 @@ static int btree_ismemdb( |
** |
** Set the size of the cache used by btree $ID. |
*/ |
-static int btree_set_cache_size( |
+static int SQLITE_TCLAPI btree_set_cache_size( |
void *NotUsed, |
Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ |
int argc, /* Number of arguments */ |
@@ -608,7 +610,7 @@ static int btree_set_cache_size( |
** |
** Set the size of the cache used by btree $ID. |
*/ |
-static int btree_insert( |
+static int SQLITE_TCLAPI btree_insert( |
ClientData clientData, |
Tcl_Interp *interp, |
int objc, |
@@ -616,27 +618,27 @@ static int btree_insert( |
){ |
BtCursor *pCur; |
int rc; |
- void *pKey = 0; |
- int nKey = 0; |
- void *pData = 0; |
- int nData = 0; |
+ BtreePayload x; |
if( objc!=4 && objc!=3 ){ |
Tcl_WrongNumArgs(interp, 1, objv, "?-intkey? CSR KEY VALUE"); |
return TCL_ERROR; |
} |
+ memset(&x, 0, sizeof(x)); |
if( objc==4 ){ |
- if( Tcl_GetIntFromObj(interp, objv[2], &nKey) ) return TCL_ERROR; |
- pData = (void*)Tcl_GetByteArrayFromObj(objv[3], &nData); |
+ if( Tcl_GetIntFromObj(interp, objv[2], &rc) ) return TCL_ERROR; |
+ x.nKey = rc; |
+ x.pData = (void*)Tcl_GetByteArrayFromObj(objv[3], &x.nData); |
}else{ |
- pKey = (void*)Tcl_GetByteArrayFromObj(objv[2], &nKey); |
+ x.pKey = (void*)Tcl_GetByteArrayFromObj(objv[2], &rc); |
+ x.nKey = rc; |
} |
pCur = (BtCursor*)sqlite3TestTextToPtr(Tcl_GetString(objv[1])); |
sqlite3_mutex_enter(pCur->pBtree->db->mutex); |
sqlite3BtreeEnter(pCur->pBtree); |
- rc = sqlite3BtreeInsert(pCur, pKey, nKey, pData, nData, 0, 0, 0); |
+ rc = sqlite3BtreeInsert(pCur, &x, 0, 0); |
sqlite3BtreeLeave(pCur->pBtree); |
sqlite3_mutex_leave(pCur->pBtree->db->mutex); |