Пример #1
0
        //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);
        }
Пример #2
0
        /*
        ** 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);
        }
Пример #3
0
        /*
        ** 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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        /*
        ** 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);
        }
Пример #6
0
        /*
        ** 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);
        }
Пример #7
0
        /*
        ** 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);
        }
Пример #8
0
        /*
        ** 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);
        }
Пример #9
0
     /*
     ** 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
     }
Пример #10
0
/*
** 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);
        }
Пример #11
0
        /*
        ** 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);
        }
Пример #12
0
        /*
        ** 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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        /*
        ** 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);
        }
Пример #15
0
        /*
        ** 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);
        }
Пример #16
0
        /*
        ** 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);
        }
Пример #17
0
        /*
        ** 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);
        }
Пример #18
0
        /*
        ** 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);
        }
Пример #19
0
        /*
        ** 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);
        }
Пример #20
0
        //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);
        }
Пример #21
0
        /*
        ** 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);
        }
Пример #22
0
        /*
        ** 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);
        }
Пример #23
0
/*
** 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);
        }
Пример #24
0
        /*
        ** 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);
        }
Пример #25
0
        /*
        ** 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);
        }
Пример #26
0
        /*
        ** 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);
        }
Пример #27
0
        /*
        ** 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();
            }
        }
Пример #29
0
        /*
        ** 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);
        }
Пример #30
0
        /*
        ** 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);
        }