⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test1.c

📁 嵌入式数据库SQLITE,含移植到ARM_LINUX的说明
💻 C
📖 第 1 页 / 共 5 页
字号:
    return TCL_ERROR;  }  if( Tcl_GetInt(interp, argv[1], &n) ) return TCL_ERROR;  if( argc==3 ){    if( Tcl_GetInt(interp, argv[2], &rep) ) return TCL_ERROR;  }else{    rep = 0;  }  sqlite3_iMallocFail = n;  sqlite3_iMallocReset = rep;  return TCL_OK;}#endif/*** Usage: sqlite_malloc_stat**** Return the number of prior calls to sqliteMalloc() and sqliteFree().*/#ifdef SQLITE_MEMDEBUGstatic int sqlite_malloc_stat(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  char zBuf[200];  sprintf(zBuf, "%d %d %d", sqlite3_nMalloc,sqlite3_nFree,sqlite3_iMallocFail);  Tcl_AppendResult(interp, zBuf, 0);  return TCL_OK;}/*** This function implements a Tcl command that may be invoked using any of** the four forms enumerated below.**** sqlite_malloc_outstanding**     Return a summary of all unfreed blocks of memory allocated by the**     current thread. See comments above function sqlite3OutstandingMallocs() **     in util.c for a description of the returned value.**** sqlite_malloc_outstanding -bytes**     Return the total amount of unfreed memory (in bytes) allocated by **     this thread.**** sqlite_malloc_outstanding -maxbytes**     Return the maximum amount of dynamic memory in use at one time **     by this thread.**** sqlite_malloc_outstanding -clearmaxbytes**     Set the value returned by [sqlite_malloc_outstanding -maxbytes]**     to the current value of [sqlite_malloc_outstanding -bytes]. */static int sqlite_malloc_outstanding(  ClientData clientData,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int objc,              /* Number of arguments */  Tcl_Obj *CONST objv[]  /* Command arguments */){  extern int sqlite3OutstandingMallocs(Tcl_Interp *interp);#if defined(SQLITE_DEBUG) && defined(SQLITE_MEMDEBUG) && SQLITE_MEMDEBUG>1  if( objc==2 ){    const char *zArg = Tcl_GetString(objv[1]);#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT    ThreadData const *pTd = sqlite3ThreadDataReadOnly();    if( 0==strcmp(zArg, "-bytes") ){      Tcl_SetObjResult(interp, Tcl_NewIntObj(pTd->nAlloc));    }else if( 0==strcmp(zArg, "-clearmaxbytes") ){      sqlite3_nMaxAlloc = pTd->nAlloc;    }else #endif    if( 0==strcmp(zArg, "-maxbytes") ){      Tcl_SetObjResult(interp, Tcl_NewWideIntObj(sqlite3_nMaxAlloc));    }else{      Tcl_AppendResult(interp, "bad option \"", zArg,         "\": must be -bytes, -maxbytes or -clearmaxbytes", 0      );      return TCL_ERROR;    }    return TCL_OK;  }  if( objc!=1 ){    Tcl_WrongNumArgs(interp, 1, objv, "?-bytes?");    return TCL_ERROR;  }  return sqlite3OutstandingMallocs(interp);#else  return TCL_OK;#endif}#endif/*** Usage: sqlite3_enable_shared_cache      BOOLEAN***/#if !defined(SQLITE_OMIT_SHARED_CACHE)static int test_enable_shared(  ClientData clientData, /* Pointer to sqlite3_enable_XXX function */  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int objc,              /* Number of arguments */  Tcl_Obj *CONST objv[]  /* Command arguments */){  int rc;  int enable;  int ret = 0;  if( objc!=2 ){    Tcl_WrongNumArgs(interp, 1, objv, "BOOLEAN");    return TCL_ERROR;  }  if( Tcl_GetBooleanFromObj(interp, objv[1], &enable) ){    return TCL_ERROR;  }  ret = sqlite3ThreadDataReadOnly()->useSharedData;  rc = sqlite3_enable_shared_cache(enable);  if( rc!=SQLITE_OK ){    Tcl_SetResult(interp, (char *)sqlite3ErrStr(rc), TCL_STATIC);    return TCL_ERROR;  }  Tcl_SetObjResult(interp, Tcl_NewBooleanObj(ret));  return TCL_OK;}#endif/*** Usage: sqlite3_libversion_number***/static int test_libversion_number(  ClientData clientData, /* Pointer to sqlite3_enable_XXX function */  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int objc,              /* Number of arguments */  Tcl_Obj *CONST objv[]  /* Command arguments */){  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_libversion_number()));  return TCL_OK;}/*** Usage: sqlite3_table_column_metadata DB dbname tblname colname***/#ifdef SQLITE_ENABLE_COLUMN_METADATAstatic int test_table_column_metadata(  ClientData clientData, /* Pointer to sqlite3_enable_XXX function */  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int objc,              /* Number of arguments */  Tcl_Obj *CONST objv[]  /* Command arguments */){  sqlite3 *db;  const char *zDb;  const char *zTbl;  const char *zCol;  int rc;  Tcl_Obj *pRet;  const char *zDatatype;  const char *zCollseq;  int notnull;  int primarykey;  int autoincrement;  if( objc!=5 ){    Tcl_WrongNumArgs(interp, 1, objv, "DB dbname tblname colname");    return TCL_ERROR;  }  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;  zDb = Tcl_GetString(objv[2]);  zTbl = Tcl_GetString(objv[3]);  zCol = Tcl_GetString(objv[4]);  if( strlen(zDb)==0 ) zDb = 0;  rc = sqlite3_table_column_metadata(db, zDb, zTbl, zCol,       &zDatatype, &zCollseq, &notnull, &primarykey, &autoincrement);  if( rc!=SQLITE_OK ){    Tcl_AppendResult(interp, sqlite3_errmsg(db), 0);    return TCL_ERROR;  }  pRet = Tcl_NewObj();  Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zDatatype, -1));  Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zCollseq, -1));  Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(notnull));  Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(primarykey));  Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(autoincrement));  Tcl_SetObjResult(interp, pRet);  return TCL_OK;}#endif/*** Usage: sqlite3_load_extension DB-HANDLE FILE ?PROC?*/static int test_load_extension(  ClientData clientData, /* Not used */  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int objc,              /* Number of arguments */  Tcl_Obj *CONST objv[]  /* Command arguments */){  Tcl_CmdInfo cmdInfo;  sqlite3 *db;  int rc;  char *zDb;  char *zFile;  char *zProc = 0;  char *zErr = 0;  if( objc!=4 && objc!=3 ){    Tcl_WrongNumArgs(interp, 1, objv, "DB-HANDLE FILE ?PROC?");    return TCL_ERROR;  }  zDb = Tcl_GetString(objv[1]);  zFile = Tcl_GetString(objv[2]);  if( objc==4 ){    zProc = Tcl_GetString(objv[3]);  }  /* Extract the C database handle from the Tcl command name */  if( !Tcl_GetCommandInfo(interp, zDb, &cmdInfo) ){    Tcl_AppendResult(interp, "command not found: ", zDb, (char*)0);    return TCL_ERROR;  }  db = ((struct SqliteDb*)cmdInfo.objClientData)->db;  assert(db);  /* Call the underlying C function. If an error occurs, set rc to   ** TCL_ERROR and load any error string into the interpreter. If no   ** error occurs, set rc to TCL_OK.  */#ifdef SQLITE_OMIT_LOAD_EXTENSION  rc = SQLITE_ERROR;  zErr = sqlite3_mprintf("this build omits sqlite3_load_extension()");#else  rc = sqlite3_load_extension(db, zFile, zProc, &zErr);#endif  if( rc!=SQLITE_OK ){    Tcl_SetResult(interp, zErr ? zErr : "", TCL_VOLATILE);    rc = TCL_ERROR;  }else{    rc = TCL_OK;  }  sqlite3_free(zErr);  return rc;}/*** Usage: sqlite3_enable_load_extension DB-HANDLE ONOFF*/static int test_enable_load(  ClientData clientData, /* Not used */  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int objc,              /* Number of arguments */  Tcl_Obj *CONST objv[]  /* Command arguments */){  Tcl_CmdInfo cmdInfo;  sqlite3 *db;  char *zDb;  int onoff;  if( objc!=3 ){    Tcl_WrongNumArgs(interp, 1, objv, "DB-HANDLE ONOFF");    return TCL_ERROR;  }  zDb = Tcl_GetString(objv[1]);  /* Extract the C database handle from the Tcl command name */  if( !Tcl_GetCommandInfo(interp, zDb, &cmdInfo) ){    Tcl_AppendResult(interp, "command not found: ", zDb, (char*)0);    return TCL_ERROR;  }  db = ((struct SqliteDb*)cmdInfo.objClientData)->db;  assert(db);  /* Get the onoff parameter */  if( Tcl_GetBooleanFromObj(interp, objv[2], &onoff) ){    return TCL_ERROR;  }#ifdef SQLITE_OMIT_LOAD_EXTENSION  Tcl_AppendResult(interp, "this build omits sqlite3_load_extension()");  return TCL_ERROR;#else  sqlite3_enable_load_extension(db, onoff);  return TCL_OK;#endif}/*** Usage:  sqlite_abort**** Shutdown the process immediately.  This is not a clean shutdown.** This command is used to test the recoverability of a database in** the event of a program crash.*/static int sqlite_abort(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  assert( interp==0 );   /* This will always fail */  return TCL_OK;}/*** The following routine is a user-defined SQL function whose purpose** is to test the sqlite_set_result() API.*/static void testFunc(sqlite3_context *context, int argc, sqlite3_value **argv){  while( argc>=2 ){    const char *zArg0 = (char*)sqlite3_value_text(argv[0]);    if( zArg0 ){      if( 0==sqlite3StrICmp(zArg0, "int") ){        sqlite3_result_int(context, sqlite3_value_int(argv[1]));      }else if( sqlite3StrICmp(zArg0,"int64")==0 ){        sqlite3_result_int64(context, sqlite3_value_int64(argv[1]));      }else if( sqlite3StrICmp(zArg0,"string")==0 ){        sqlite3_result_text(context, (char*)sqlite3_value_text(argv[1]), -1,            SQLITE_TRANSIENT);      }else if( sqlite3StrICmp(zArg0,"double")==0 ){        sqlite3_result_double(context, sqlite3_value_double(argv[1]));      }else if( sqlite3StrICmp(zArg0,"null")==0 ){        sqlite3_result_null(context);      }else if( sqlite3StrICmp(zArg0,"value")==0 ){        sqlite3_result_value(context, argv[sqlite3_value_int(argv[1])]);      }else{        goto error_out;      }    }else{      goto error_out;    }    argc -= 2;    argv += 2;  }  return;error_out:  sqlite3_result_error(context,"first argument should be one of: "      "int int64 string double null value", -1);}/*** Usage:   sqlite_register_test_function  DB  NAME**** Register the test SQL function on the database DB under the name NAME.*/static int test_register_func(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  sqlite3 *db;  int rc;  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],        " DB FUNCTION-NAME", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;  rc = sqlite3_create_function(db, argv[2], -1, SQLITE_UTF8, 0,       testFunc, 0, 0);  if( rc!=0 ){    Tcl_AppendResult(interp, sqlite3ErrStr(rc), 0);    return TCL_ERROR;  }  if( sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR;  return TCL_OK;}/*** Usage:  sqlite3_finalize  STMT **** Finalize a statement handle.*/static int test_finalize(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  int rc;  sqlite3 *db;  if( objc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetStringFromObj(objv[0], 0), " <STMT>", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  if( pStmt ){    db = StmtToDb(pStmt);  }  rc = sqlite3_finalize(pStmt);  Tcl_SetResult(interp, (char *)errorName(rc), TCL_STATIC);  if( db && sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR;  return TCL_OK;}/*** Usage:  sqlite3_reset  STMT **** Reset a statement handle.*/static int test_reset(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  sqlite3_stmt *pStmt;  int rc;  if( objc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be \"",        Tcl_GetStringFromObj(objv[0], 0), " <STMT>", 0);    return TCL_ERROR;  }  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;  rc = sqlite3_reset(pStmt);  if( pStmt && sqlite3TestErrCode(interp, StmtToDb(pStmt), rc) ){    return TCL_ERROR;  }  Tcl_SetResult(interp, (char *)errorName(rc), TCL_STATIC);/*  if( rc ){    return TCL_ERROR;  }*/  return TCL_OK;}/*** Usage:  sqlite3_expired STMT 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -