//static sqlite3 *getDbPointer(Tcl_Interp *pInterp, Tcl_Obj *pObj){ //sqlite3 *db; //Tcl_CmdInfo info; //char *zCmd = TCL.Tcl_GetString(pObj); //if( TCL.Tcl_GetCommandInfo(pInterp, zCmd, &info) ){ // db = *((sqlite3 **)info.objClientData); //}else{ // db = (sqlite3*)sqlite3TestTextToPtr(zCmd); //} //assert( db ); //return db; //static int test_enter_db_mutex( // void * clientData, // Tcl_Interp *interp, // int objc, // Tcl_Obj *CONST objv[] //){ // sqlite3 *db; // if( objc!=2 ){ // TCL.Tcl_WrongNumArgs(interp, 1, objv, "DB"); // return TCL.TCL_ERROR; // } // db = getDbPointer(interp, objv[1]); // if( !db ){ // return TCL.TCL_ERROR; // } // sqlite3_mutex_enter(sqlite3_db_mutex(db)); // return TCL.TCL_OK; //} //static int test_leave_db_mutex( // void * clientData, // Tcl_Interp *interp, // int objc, // Tcl_Obj *CONST objv[] //){ // sqlite3 *db; // if( objc!=2 ){ // TCL.Tcl_WrongNumArgs(interp, 1, objv, "DB"); // return TCL.TCL_ERROR; // } // db = getDbPointer(interp, objv[1]); // if( !db ){ // return TCL.TCL_ERROR; // } // sqlite3_mutex_leave(sqlite3_db_mutex(db)); // return TCL.TCL_OK; //} static public int Sqlitetest_mutex_Init(Tcl_Interp interp) { //static struct { // char *zName; // Tcl_ObjCmdProc *xProc; //} _aObjCmd[] aCmd = new _aObjCmd[] { new _aObjCmd("sqlite3_shutdown", test_shutdown), new _aObjCmd("sqlite3_initialize", test_initialize), new _aObjCmd("sqlite3_config", test_config), //new _aCmd("enter_db_mutex", (Tcl_ObjCmdProc*)test_enter_db_mutex }, //new _aCmd( "leave_db_mutex", (Tcl_ObjCmdProc*)test_leave_db_mutex }, //new _aCmd( "alloc_dealloc_mutex", (Tcl_ObjCmdProc)test_alloc_mutex ), //new _aCmd( "install_mutex_counters", (Tcl_ObjCmdProc)test_install_mutex_counters ), //new _aCmd( "read_mutex_counters", (Tcl_ObjCmdProc)test_read_mutex_counters ), //new _aCmd( "clear_mutex_counters", (Tcl_ObjCmdProc)test_clear_mutex_counters ), }; int i; for (i = 0; i < aCmd.Length; i++) {//sizeof(aCmd)/sizeof(aCmd[0]); i++){ TCL.Tcl_CreateObjCommand(interp, aCmd[i].zName, aCmd[i].xProc, null, null); } //Tcl_LinkVar(interp, "disable_mutex_init", // g.disableInit, VarFlag.SQLITE3_LINK_INT ); //Tcl_LinkVar(interp, "disable_mutex_try", // g.disableTry, VarFlag.SQLITE3_LINK_INT ); return(SQLITE_OK); }
/* ** read_mutex_counters */ static int test_read_mutex_counters( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv ) { Tcl_Obj pRet; int ii; string[] aName = new string[] { "fast", "recursive", "static_master", "static_mem", "static_open", "static_prng", "static_lru", "static_pmem" }; if (objc != 1) { TCL.Tcl_WrongNumArgs(interp, 1, objv, ""); return(TCL.TCL_ERROR); } pRet = TCL.Tcl_NewObj(); TCL.Tcl_IncrRefCount(pRet); for (ii = 0; ii < 8; ii++) { TCL.Tcl_ListObjAppendElement(interp, pRet, TCL.Tcl_NewStringObj(aName[ii], -1)); TCL.Tcl_ListObjAppendElement(interp, pRet, TCL.Tcl_NewIntObj(g.aCounter[ii])); } TCL.Tcl_SetObjResult(interp, pRet); TCL.Tcl_DecrRefCount(ref pRet); return(TCL.TCL_OK); }
/* ** Usage: btree_ismemdb ID ** ** Return true if the B-Tree is in-memory. */ static int btree_ismemdb( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { Btree pBt; int res; if (argc != 2) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " ID\""); return(TCL.TCL_ERROR); } pBt = (Btree)sqlite3TestTextToPtr(interp, argv[1].ToString()); sqlite3_mutex_enter(pBt.db.mutex); sqlite3BtreeEnter(pBt); res = sqlite3PagerIsMemdb(sqlite3BtreePager(pBt)) ? 1 : 0; sqlite3BtreeLeave(pBt); sqlite3_mutex_leave(pBt.db.mutex); TCL.Tcl_SetObjResult(interp, TCL.Tcl_NewBooleanObj(res)); return(TCL.TCL_OK); }
public static int Sqlitetest3_Init(Tcl_Interp interp) { _aCmd[] aCmd = new _aCmd[] { new _aCmd("btree_open", (Tcl_CmdProc)btree_open), new _aCmd("btree_close", (Tcl_CmdProc)btree_close), new _aCmd("btree_begin_transaction", (Tcl_CmdProc)btree_begin_transaction), new _aCmd("btree_pager_stats", (Tcl_CmdProc)btree_pager_stats), new _aCmd("btree_cursor", (Tcl_CmdProc)btree_cursor), new _aCmd("btree_close_cursor", (Tcl_CmdProc)btree_close_cursor), new _aCmd("btree_next", (Tcl_CmdProc)btree_next), //new _aCmd( "btree_eof", (Tcl_CmdProc)btree_eof ), new _aCmd("btree_payload_size", (Tcl_CmdProc)btree_payload_size), new _aCmd("btree_first", (Tcl_CmdProc)btree_first), new _aCmd("btree_varint_test", (Tcl_CmdProc)btree_varint_test), new _aCmd("btree_from_db", (Tcl_CmdProc)btree_from_db), new _aCmd("btree_ismemdb", (Tcl_CmdProc)btree_ismemdb), //new _aCmd( "btree_set_cache_size", (Tcl_CmdProc)btree_set_cache_size ), }; int i; for (i = 0; i < aCmd.Length; i++) { //sizeof(aCmd)/sizeof(aCmd[0]); i++){ TCL.Tcl_CreateCommand(interp, aCmd[i].zName, aCmd[i].xProc, null, null); } return(TCL.TCL_OK); }
/* ** Usage: btree_first ID ** ** 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( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { BtCursor pCur; int rc; int res = 0; string zBuf = "";//[100]; if (argc != 2) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0].ToString(), " ID\""); return(TCL.TCL_ERROR); } pCur = (BtCursor)sqlite3TestTextToPtr(interp, argv[1].ToString()); #if SQLITE_TEST sqlite3BtreeEnter(pCur.pBtree); #endif rc = sqlite3BtreeFirst(pCur, ref res); #if SQLITE_TEST sqlite3BtreeLeave(pCur.pBtree); #endif if (rc != 0) { TCL.Tcl_AppendResult(interp, errorName(rc), null);; return(TCL.TCL_ERROR); } sqlite3_snprintf(100, ref zBuf, "%d", res); TCL.Tcl_AppendResult(interp, zBuf); return(SQLITE_OK); }
/* ** Usage: btree_close_cursor ID ** ** Close a cursor opened using btree_cursor. */ static int btree_close_cursor( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { BtCursor pCur; Btree pBt; int rc; if (argc != 2) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0].ToString(), " ID\""); return(TCL.TCL_ERROR); } pCur = (BtCursor)sqlite3TestTextToPtr(interp, argv[1].ToString()); pBt = pCur.pBtree; sqlite3BtreeEnter(pBt); rc = sqlite3BtreeCloseCursor(pCur); sqlite3BtreeLeave(pBt); pCur = null;//ckfree( (char*)pCur ); if (rc != 0) { TCL.Tcl_AppendResult(interp, errorName(rc), null);; return(TCL.TCL_ERROR); } return(SQLITE_OK); }
/* ** Usage: btree_close ID ** ** Close the given database. */ static int btree_close( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { Btree pBt; int rc; if (argc != 2) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0].ToString(), " ID\"", null); return(TCL.TCL_ERROR); } pBt = (Btree)sqlite3TestTextToPtr(interp, argv[1].ToString()); rc = sqlite3BtreeClose(ref pBt); if (rc != SQLITE_OK) { TCL.Tcl_AppendResult(interp, errorName(rc), null); return(TCL.TCL_ERROR); } nRefSqlite3--; if (nRefSqlite3 == 0) { sqlite3_mutex_leave(sDb.mutex); sqlite3_mutex_free(ref sDb.mutex); sDb.mutex = null; sDb.pVfs = null; } return(TCL.TCL_OK); }
/* ** Usage: btree_begin_transaction ID ** ** Start a new transaction */ static int btree_begin_transaction( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { Btree pBt; int rc; if (argc != 2) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0].ToString(), " ID\"", null); return(TCL.TCL_ERROR); } pBt = (Btree)sqlite3TestTextToPtr(interp, argv[1].ToString()); sqlite3BtreeEnter(pBt); rc = sqlite3BtreeBeginTrans(pBt, 1); sqlite3BtreeLeave(pBt); if (rc != SQLITE_OK) { TCL.Tcl_AppendResult(interp, errorName(rc), null);; return(TCL.TCL_ERROR); } return(TCL.TCL_OK); }
/* ** USAGE: utf8_to_utf8 HEX ** ** The argument is a UTF8 string represented _in hexadecimal. ** The UTF8 might not be well-formed. Run this string through ** sqlite3Utf8to8() convert it back to hex and return the result. */ static int utf8_to_utf8( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv ) { #if SQLITE_DEBUG int n = 0; int nOut; string zOrig; byte[] z; if (objc != 2) { TCL.Tcl_WrongNumArgs(interp, 1, objv, "HEX"); return(TCL.TCL_ERROR); } zOrig = TCL.Tcl_GetStringFromObj(objv[1], out n); z = new byte[2 * n + 1];//sqlite3Malloc( n + 3 ); nOut = sqlite3TestHexToBin(zOrig, n, z); //z[n] = 0; nOut = sqlite3Utf8To8(z); sqlite3TestBinToHex(z, zOrig.Length); TCL.Tcl_AppendResult(interp, Encoding.ASCII.GetString(z, 0, n)); //sqlite3_free( z ); return(TCL.TCL_OK); #else Tcl_AppendResult(interp, "[utf8_to_utf8] unavailable - SQLITE_DEBUG not defined", 0 ); return(TCL.TCL_ERROR); #endif }
/* ** Returns 1 if data is ready, or 0 if not. */ static int next2(Tcl_Interp interp, tclvar_cursor pCur, Tcl_Obj pObj) { Tcl_Obj p; if (pObj != null) { if (null == pCur.pList2) { p = TCL.Tcl_NewStringObj("array names", -1); TCL.Tcl_IncrRefCount(p); TCL.Tcl_ListObjAppendElement(null, p, pObj); TCL.Tcl_EvalObjEx(interp, p, TCL.TCL_EVAL_GLOBAL); TCL.Tcl_DecrRefCount(ref p); pCur.pList2 = TCL.Tcl_GetObjResult(interp); TCL.Tcl_IncrRefCount(pCur.pList2); Debug.Assert(pCur.i2 == 0); } else { int n = 0; pCur.i2++; TCL.Tcl_ListObjLength(null, pCur.pList2, out n); if (pCur.i2 >= n) { TCL.Tcl_DecrRefCount(ref pCur.pList2); pCur.pList2 = null; pCur.i2 = 0; return(0); } } } return(1); }
/* ** USAGE: hexio_render_int32 INTEGER ** ** Render INTEGER has a 32-bit big-endian integer _in hexadecimal. */ static int hexio_render_int32( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv ) { int val = 0; byte[] aNum = new byte[10]; if (objc != 2) { TCL.Tcl_WrongNumArgs(interp, 1, objv, "INTEGER"); return(TCL.TCL_ERROR); } if (TCL.Tcl_GetIntFromObj(interp, objv[1], ref val)) { return(TCL.TCL_ERROR); } aNum[0] = (byte)(val >> 24); aNum[1] = (byte)(val >> 16); aNum[2] = (byte)(val >> 8); aNum[3] = (byte)val; sqlite3TestBinToHex(aNum, 4); TCL.Tcl_SetObjResult(interp, TCL.Tcl_NewStringObj(aNum, 8)); return(TCL.TCL_OK); }
/* ** A TCL command to take the md5 hash of a file. The argument is the ** name of the file. */ static int md5file_cmd(object cd, Tcl_Interp interp, int argc, Tcl_Obj[] argv) { StreamReader _in = null; byte[] digest = new byte[16]; StringBuilder zBuf = new StringBuilder(10240); if (argc != 2) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " FILENAME\"", 0); return(TCL.TCL_ERROR); } Debugger.Break(); // TODO -- _in = fopen( argv[1], "rb" ); if (_in == null) { TCL.Tcl_AppendResult(interp, "unable to open file \"", argv[1], "\" for reading", 0); return(TCL.TCL_ERROR); } Debugger.Break(); // TODO //MD5Init( ctx ); //for(;;){ // int n; // n = fread(zBuf, 1, zBuf.Capacity, _in); // if( n<=0 ) break; // MD5Update(ctx, zBuf.ToString(), (unsigned)n); //} //fclose(_in); //MD5Final(digest, ctx); // DigestToBase16(digest, zBuf); //Tcl_AppendResult( interp, zBuf ); return(TCL.TCL_OK); }
public static int Sqlitetest2_Init(Tcl_Interp interp) { //extern int sqlite3_io_error_persist; //extern int sqlite3_io_error_pending; //extern int sqlite3_io_error_hit; //extern int sqlite3_io_error_hardhit; //extern int sqlite3_diskfull_pending; //extern int sqlite3_diskfull; //extern int sqlite3_pager_n_sort_bucket; //static struct { // char *zName; // Tcl_CmdProc *xProc; //} aCmd[] = { _aCmd[] aCmd = new _aCmd[] { //new _aCmd( "pager_open", (Tcl_CmdProc)pager_open ), //new _aCmd( "pager_close", (Tcl_CmdProc)pager_close ), // { "pager_commit", (Tcl_CmdProc*)pager_commit }, // { "pager_rollback", (Tcl_CmdProc*)pager_rollback }, // { "pager_stmt_begin", (Tcl_CmdProc*)pager_stmt_begin }, // { "pager_stmt_commit", (Tcl_CmdProc*)pager_stmt_commit }, // { "pager_stmt_rollback", (Tcl_CmdProc*)pager_stmt_rollback }, // { "pager_stats", (Tcl_CmdProc*)pager_stats }, // { "pager_pagecount", (Tcl_CmdProc*)pager_pagecount }, // { "page_get", (Tcl_CmdProc*)page_get }, // { "page_lookup", (Tcl_CmdProc*)page_lookup }, // { "page_unref", (Tcl_CmdProc*)page_unref }, // { "page_read", (Tcl_CmdProc*)page_read }, // { "page_write", (Tcl_CmdProc*)page_write }, // { "page_number", (Tcl_CmdProc*)page_number }, // { "pager_truncate", (Tcl_CmdProc*)pager_truncate }, #if !SQLITE_OMIT_DISKIO // { "fake_big_file", (Tcl_CmdProc*)fake_big_file }, #endif new _aCmd("sqlite3BitvecBuiltinTest", (Tcl_CmdProc)testBitvecBuiltinTest), new _aCmd("sqlite3_test_control_pending_byte", (Tcl_CmdProc)testPendingByte), }; int i; for (i = 0; i < aCmd.Length; i++) {//sizeof(aCmd)/sizeof(aCmd[0]); i++){ TCL.Tcl_CreateCommand(interp, aCmd[i].zName, aCmd[i].xProc, null, null); } TCL.Tcl_LinkVar(interp, "sqlite_io_error_pending", sqlite3_io_error_pending, VarFlags.SQLITE3_LINK_INT); TCL.Tcl_LinkVar(interp, "sqlite_io_error_persist", sqlite3_io_error_persist, VarFlags.SQLITE3_LINK_INT); TCL.Tcl_LinkVar(interp, "sqlite_io_error_hit", sqlite3_io_error_hit, VarFlags.SQLITE3_LINK_INT); TCL.Tcl_LinkVar(interp, "sqlite_io_error_hardhit", sqlite3_io_error_hardhit, VarFlags.SQLITE3_LINK_INT); TCL.Tcl_LinkVar(interp, "sqlite_diskfull_pending", sqlite3_diskfull_pending, VarFlags.SQLITE3_LINK_INT); TCL.Tcl_LinkVar(interp, "sqlite_diskfull", sqlite3_diskfull, VarFlags.SQLITE3_LINK_INT); TCL.Tcl_LinkVar(interp, "sqlite_pending_byte", TCLsqlite3PendingByte, VarFlags.SQLITE3_LINK_INT); TCLsqlite3PendingByte.iValue = sqlite3PendingByte; return(TCL.TCL_OK); }
/* ** Usage: btree_cursor ID TABLENUM WRITEABLE ** ** Create a new cursor. Return the ID for the cursor. */ static int btree_cursor( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { Btree pBt; int iTable = 0; BtCursor pCur; int rc = SQLITE_OK; int wrFlag = 0; StringBuilder zBuf = new StringBuilder(30); if (argc != 4) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0].ToString(), " ID TABLENUM WRITEABLE\""); return(TCL.TCL_ERROR); } pBt = (Btree)sqlite3TestTextToPtr(interp, argv[1].ToString()); if (TCL.Tcl_GetInt(interp, argv[2], out iTable)) { return(TCL.TCL_ERROR); } if (TCL.Tcl_GetBoolean(interp, argv[3], out wrFlag)) { return(TCL.TCL_ERROR); } //pCur = (BtCursor )ckalloc(sqlite3BtreeCursorSize()); pCur = new BtCursor();// memset( pCur, 0, sqlite3BtreeCursorSize() ); sqlite3BtreeEnter(pBt); #if !SQLITE_OMIT_SHARED_CACHE rc = sqlite3BtreeLockTable(pBt, iTable, wrFlag); #endif if (rc == SQLITE_OK) { rc = sqlite3BtreeCursor(pBt, iTable, wrFlag, null, pCur); } sqlite3BtreeLeave(pBt); if (rc != 0) { pCur = null;// ckfree( pCur ); TCL.Tcl_AppendResult(interp, errorName(rc), null); ; return(TCL.TCL_ERROR); } sqlite3_snprintf(30, zBuf, "->%p", pCur); if (TCL.Tcl_CreateCommandPointer(interp, zBuf, pCur)) { return(TCL.TCL_ERROR); } else { TCL.Tcl_AppendResult(interp, zBuf); } return(SQLITE_OK); }
/* ** USAGE: hexio_get_int HEXDATA ** ** Interpret the HEXDATA argument as a big-endian integer. Return ** the value of that integer. HEXDATA can contain between 2 and 8 ** hexadecimal digits. */ static int hexio_get_int( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv ) { int val; int nIn = 0, nOut; string zIn; byte[] aOut; byte[] aNum = new byte[4]; if (objc != 2) { TCL.Tcl_WrongNumArgs(interp, 1, objv, "HEXDATA"); return(TCL.TCL_ERROR); } zIn = TCL.Tcl_GetStringFromObj(objv[1], ref nIn); aOut = new byte[nIn / 2];// sqlite3Malloc( nIn / 2 ); if (aOut == null) { return(TCL.TCL_ERROR); } nOut = sqlite3TestHexToBin(zIn, nIn, aOut); if (nOut >= 4) { aNum[0] = aOut[0]; // memcpy( aNum, aOut, 4 ); aNum[1] = aOut[1]; aNum[2] = aOut[2]; aNum[3] = aOut[3]; } else { //memset(aNum, 0, sizeof(aNum)); //memcpy(&aNum[4-nOut], aOut, nOut); aNum[4 - nOut] = aOut[0]; if (nOut > 1) { aNum[4 - nOut + 1] = aOut[1]; } if (nOut > 2) { aNum[4 - nOut + 2] = aOut[2]; } if (nOut > 3) { aNum[4 - nOut + 3] = aOut[3]; } } aOut = null;// sqlite3DbFree( db, ref aOut ); val = (aNum[0] << 24) | (aNum[1] << 16) | (aNum[2] << 8) | aNum[3]; TCL.Tcl_SetObjResult(interp, TCL.Tcl_NewIntObj(val)); return(TCL.TCL_OK); }
/* ** Usage: hexio_read FILENAME OFFSET AMT ** ** Read AMT bytes from file FILENAME beginning at OFFSET from the ** beginning of the file. Convert that information to hexadecimal ** and return the resulting HEX string. */ static int hexio_read( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv ) { int offset = 0; int amt = 0, got; string zFile; byte[] zBuf; FileStream _in; if (objc != 4) { TCL.Tcl_WrongNumArgs(interp, 1, objv, "FILENAME OFFSET AMT"); return(TCL.TCL_ERROR); } if (TCL.Tcl_GetIntFromObj(interp, objv[2], ref offset)) { return(TCL.TCL_ERROR); } if (TCL.Tcl_GetIntFromObj(interp, objv[3], ref amt)) { return(TCL.TCL_ERROR); } zFile = TCL.Tcl_GetString(objv[1]); zBuf = new byte[amt * 2 + 1];// sqlite3Malloc( amt * 2 + 1 ); if (zBuf == null) { return(TCL.TCL_ERROR); } _in = new FileStream(zFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //if( _in==null){ // _in = fopen(zFile, "r"); //} if (_in == null) { TCL.Tcl_AppendResult(interp, "cannot open input file ", zFile); return(TCL.TCL_ERROR); } _in.Seek(offset, SeekOrigin.Begin); //fseek(_in, offset, SEEK_SET); got = _in.Read(zBuf, 0, amt); // got = fread( zBuf, 1, amt, _in ); _in.Flush(); _in.Close(); // fclose( _in ); if (got < 0) { got = 0; } sqlite3TestBinToHex(zBuf, got); TCL.Tcl_AppendResult(interp, System.Text.Encoding.UTF8.GetString(zBuf).Substring(0, got * 2)); zBuf = null;// sqlite3DbFree( db, ref zBuf ); return(TCL.TCL_OK); }
/* ** tclcmd: sqlite3_auto_extension_broken ** ** Register the broken extension to be loaded automatically. */ static int autoExtBrokenObjCmd( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv ) { int rc = sqlite3_auto_extension((dxInit)broken_init); TCL.Tcl_SetObjResult(interp, TCL.Tcl_NewIntObj(rc)); return(SQLITE_OK); }
/* ** Usage: btree_open FILENAME NCACHE FLAGS ** ** Open a new database */ static int btree_open( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { Btree pBt = null; int rc; int nCache = 0; int flags = 0; string zBuf = ""; if (argc != 4) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0].ToString(), " FILENAME NCACHE FLAGS\"", ""); return(TCL.TCL_ERROR); } if (TCL.Tcl_GetInt(interp, argv[2], ref nCache)) { return(TCL.TCL_ERROR); } if (TCL.Tcl_GetInt(interp, argv[3], ref flags)) { return(TCL.TCL_ERROR); } nRefSqlite3++; if (nRefSqlite3 == 1) { sDb.pVfs = sqlite3_vfs_find(null); sDb.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE); sqlite3_mutex_enter(sDb.mutex); } rc = sqlite3BtreeOpen(argv[1].ToString(), sDb, ref pBt, flags, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB); if (rc != SQLITE_OK) { TCL.Tcl_AppendResult(interp, errorName(rc), null); return(TCL.TCL_ERROR); } sqlite3BtreeSetCacheSize(pBt, nCache); sqlite3_snprintf(100, ref zBuf, "->%p", pBt); if (TCL.Tcl_CreateCommandPointer(interp, zBuf, pBt)) { return(TCL.TCL_ERROR); } else { TCL.Tcl_AppendResult(interp, zBuf, null); } return(TCL.TCL_OK); }
/* ** Usage: hexio_write FILENAME OFFSET DATA ** ** Write DATA into file FILENAME beginning at OFFSET from the ** beginning of the file. DATA is expressed _in hexadecimal. */ static int hexio_write( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv ) { int offset = 0; int nIn = 0, nOut, written; string zFile; string zIn; byte[] aOut; FileStream _out; if (objc != 4) { TCL.Tcl_WrongNumArgs(interp, 1, objv, "FILENAME OFFSET HEXDATA"); return(TCL.TCL_ERROR); } if (TCL.Tcl_GetIntFromObj(interp, objv[2], ref offset)) { return(TCL.TCL_ERROR); } zFile = TCL.Tcl_GetString(objv[1]); zIn = TCL.Tcl_GetStringFromObj(objv[3], ref nIn); aOut = new byte[nIn / 2 + 1];//sqlite3Malloc( nIn/2 ); if (aOut == null) { return(TCL.TCL_ERROR); } nOut = sqlite3TestHexToBin(zIn, nIn, aOut); _out = new FileStream(zFile, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);// fopen( zFile, "r+b" ); //if( _out==0 ){ // _out = fopen(zFile, "r+"); //} if (_out == null) { TCL.Tcl_AppendResult(interp, "cannot open output file ", zFile); return(TCL.TCL_ERROR); } _out.Seek(offset, SeekOrigin.Begin); // fseek( _out, offset, SEEK_SET ); written = (int)_out.Position; _out.Write(aOut, 0, nOut); // written = fwrite( aOut, 1, nOut, _out ); written = (int)_out.Position - written; aOut = null; // sqlite3DbFree( db, ref aOut ); _out.Flush(); _out.Close(); // fclose( _out ); TCL.Tcl_SetObjResult(interp, TCL.Tcl_NewIntObj(written)); return(TCL.TCL_OK); }
//static class _aObjCmd { // public string zName; // public Tcl_ObjCmdProc xProc; // public object clientData; //} /* ** Register commands with the TCL interpreter. */ static public int Sqlitetestwholenumber_Init(Tcl_Interp interp) { _aObjCmd[] aObjCmd = new _aObjCmd[] { new _aObjCmd("register_wholenumber_module", register_wholenumber_module, 0), }; int i; for (i = 0; i < aObjCmd.Length; i++) {//sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){ TCL.Tcl_CreateObjCommand(interp, aObjCmd[i].zName, aObjCmd[i].xProc, aObjCmd[i].clientData, null); } return(TCL.TCL_OK); }
/* ** This procedure registers the TCL procs defined in this file. */ public static int Sqlitetest_autoext_Init(Tcl_Interp interp) { #if !SQLITE_OMIT_LOAD_EXTENSION TCL.Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_sqr", autoExtSqrObjCmd, null, null); TCL.Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_cube", autoExtCubeObjCmd, null, null); TCL.Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_broken", autoExtBrokenObjCmd, null, null); #endif TCL.Tcl_CreateObjCommand(interp, "sqlite3_reset_auto_extension", resetAutoExtObjCmd, null, null); return(TCL.TCL_OK); }
/* ** Create and free a mutex. Return the mutex pointer. The pointer ** will be invalid since the mutex has already been freed. The ** return pointer just checks to see if the mutex really was allocated. */ static int test_alloc_mutex( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv) { #if SQLITE_THREADSAFE sqlite3_mutex p = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); StringBuilder zBuf = new StringBuilder(100); sqlite3_mutex_free(p); sqlite3_snprintf(100, zBuf, "->%p", p); TCL.Tcl_AppendResult(interp, zBuf); #endif return(TCL.TCL_OK); }
/* ** Close a tclvar cursor. */ static int tclvarClose(ref sqlite3_vtab_cursor cur) { tclvar_cursor pCur = (tclvar_cursor )cur; if (pCur.pList1 != null) { TCL.Tcl_DecrRefCount(ref pCur.pList1); } if (pCur.pList2 != null) { TCL.Tcl_DecrRefCount(ref pCur.pList2); } cur = null;//sqlite3_free(pCur); return(SQLITE_OK); }
/* ** Create and free a mutex. Return the mutex pointer. The pointer ** will be invalid since the mutex has already been freed. The ** return pointer just checks to see if the mutex really was allocated. */ static int test_alloc_mutex( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv) { #if SQLITE_THREADSAFE sqlite3_mutex p = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); string zBuf = "";//[100]; sqlite3_mutex_free(ref p); sqlite3_snprintf(100, ref zBuf, "%p", p); TCL.Tcl_AppendResult(interp, zBuf); #endif return(TCL.TCL_OK); }
/* ** sqlite3BitvecBuiltinTest SIZE PROGRAM ** ** Invoke the SQLITE_TESTCTRL_BITVEC_TEST operator on test_control. ** See comments on sqlite3BitvecBuiltinTest() for additional information. */ static int testBitvecBuiltinTest( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { int sz = 0, rc; int nProg = 0; int[] aProg = new int[100]; string z; if (argc != 3) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " SIZE PROGRAM\""); } if (TCL.Tcl_GetInt(interp, argv[1], out sz)) { return(TCL.TCL_ERROR); } z = argv[2].ToString() + '\0'; int iz = 0; while (nProg < 99 && z[iz] != 0) { while (z[iz] != 0 && !sqlite3Isdigit(z[iz])) { iz++; } if (z[iz] == 0) { break; } while (sqlite3Isdigit(z[iz])) { aProg[nProg] = aProg[nProg] * 10 + (z[iz] - 48); iz++; } nProg++; } aProg[nProg] = 0; rc = sqlite3_test_control(SQLITE_TESTCTRL_BITVEC_TEST, sz, aProg); TCL.Tcl_SetObjResult(interp, TCL.Tcl_NewIntObj(rc)); return(TCL.TCL_OK); }
/* ** Usage: btree_pager_stats ID ** ** Returns pager statistics */ static int btree_pager_stats( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { Btree pBt; int i; int[] a; if (argc != 2) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0].ToString(), " ID\""); return(TCL.TCL_ERROR); } pBt = (Btree)sqlite3TestTextToPtr(interp, argv[1].ToString()); /* Normally in this file, with a b-tree handle opened using the ** [btree_open] command it is safe to call sqlite3BtreeEnter() directly. ** But this function is sometimes called with a btree handle obtained ** from an open SQLite connection (using [btree_from_db]). In this case ** we need to obtain the mutex for the controlling SQLite handle before ** it is safe to call sqlite3BtreeEnter(). */ sqlite3_mutex_enter(pBt.db.mutex); sqlite3BtreeEnter(pBt); a = sqlite3PagerStats(sqlite3BtreePager(pBt)); for (i = 0; i < 11; i++) { string[] zName = new string[] { "ref", "page", "max", "size", "state", "err", "hit", "miss", "ovfl", "read", "write" }; string zBuf = "";//char zBuf[100]; TCL.Tcl_AppendElement(interp, zName[i]); sqlite3_snprintf(100, ref zBuf, "%d", a[i]); TCL.Tcl_AppendElement(interp, zBuf); } sqlite3BtreeLeave(pBt); /* Release the mutex on the SQLite handle that controls this b-tree */ sqlite3_mutex_leave(pBt.db.mutex); return(TCL.TCL_OK); }
/* ** TCLCMD: autoinstall_test_functions ** ** Invoke this TCL command to use sqlite3_auto_extension() to cause ** the standard set of test functions to be loaded into each new ** database connection. */ static int autoinstall_test_funcs( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv ) { //extern int Md5_Register(sqlite3*); int rc = sqlite3_auto_extension((dxInit)registerTestFunctions); if (rc == SQLITE_OK) { rc = sqlite3_auto_extension((dxInit)Md5_Register); } TCL.Tcl_SetObjResult(interp, TCL.Tcl_NewIntObj(rc)); return(TCL.TCL_OK); }
protected void grdMain_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { TOS += Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "OS")); TCL += Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "CL")); } else if (e.Row.RowType == DataControlRowType.Footer) { Label lblTOS = (Label)e.Row.FindControl("lblOSTotal"); lblTOS.Text = TOS.ToString(); Label lblTCL = (Label)e.Row.FindControl("lblCLTotal"); lblTCL.Text = TCL.ToString(); } }
/* ** usage: btree_from_db DB-HANDLE ** ** This command returns the btree handle for the main database associated ** with the database-handle passed as the argument. Example usage: ** ** sqlite3 db test.db ** set bt [btree_from_db db] */ static int btree_from_db( object NotUsed, Tcl_Interp interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ TclObject[] argv /* Text of each argument */ ) { string zBuf = "";//char zBuf[100]; WrappedCommand info = null; sqlite3 db; Btree pBt; int iDb = 0; if (argc != 2 && argc != 3) { TCL.Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0].ToString(), " DB-HANDLE ?N?\""); return(TCL.TCL_ERROR); } if (TCL.Tcl_GetCommandInfo(interp, argv[1].ToString(), ref info)) { TCL.Tcl_AppendResult(interp, "No such db-handle: \"", argv[1], "\""); return(TCL.TCL_ERROR); } if (argc == 3) { iDb = atoi(argv[2].ToString()); } db = ((SqliteDb)info.objClientData).db; Debug.Assert(db != null); pBt = db.aDb[iDb].pBt; sqlite3_snprintf(50, ref zBuf, "->%p", pBt); if (TCL.Tcl_CreateCommandPointer(interp, zBuf, pBt)) { return(TCL.TCL_ERROR); } else { TCL.Tcl_SetResult(interp, zBuf, TCL.TCL_VOLATILE); } return(TCL.TCL_OK); }
/* ** sqlite3_initialize */ static int test_initialize( object clientdata, Tcl_Interp interp, int objc, Tcl_Obj[] objv) { int rc; if (objc != 1) { TCL.Tcl_WrongNumArgs(interp, 1, objv, ""); return(TCL.TCL_ERROR); } rc = sqlite3_initialize(); TCL.Tcl_SetResult(interp, sqlite3TestErrorName(rc), TCL.TCL_VOLATILE); return(TCL.TCL_OK); }