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

📄 test1.c

📁 轻量级数据库软件,嵌入式设计可以考虑考虑,性能不错
💻 C
📖 第 1 页 / 共 5 页
字号:
*/static int sqlite3_mprintf_double(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  int a[3], i;  double r;  char *z;  if( argc!=5 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],       " FORMAT INT INT DOUBLE\"", 0);    return TCL_ERROR;  }  for(i=2; i<4; i++){    if( Tcl_GetInt(interp, argv[i], &a[i-2]) ) return TCL_ERROR;  }  if( Tcl_GetDouble(interp, argv[4], &r) ) return TCL_ERROR;  z = sqlite3_mprintf(argv[1], a[0], a[1], r);  Tcl_AppendResult(interp, z, 0);  sqlite3_free(z);  return TCL_OK;}/*** Usage:  sqlite3_mprintf_scaled FORMAT DOUBLE DOUBLE**** Call mprintf with a single double argument which is the product of the** two arguments given above.  This is used to generate overflow and underflow** doubles to test that they are converted properly.*/static int sqlite3_mprintf_scaled(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  int i;  double r[2];  char *z;  if( argc!=4 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],       " FORMAT DOUBLE DOUBLE\"", 0);    return TCL_ERROR;  }  for(i=2; i<4; i++){    if( Tcl_GetDouble(interp, argv[i], &r[i-2]) ) return TCL_ERROR;  }  z = sqlite3_mprintf(argv[1], r[0]*r[1]);  Tcl_AppendResult(interp, z, 0);  sqlite3_free(z);  return TCL_OK;}/*** Usage:  sqlite3_mprintf_stronly FORMAT STRING**** Call mprintf with a single double argument which is the product of the** two arguments given above.  This is used to generate overflow and underflow** doubles to test that they are converted properly.*/static int sqlite3_mprintf_stronly(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  char *z;  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],       " FORMAT STRING\"", 0);    return TCL_ERROR;  }  z = sqlite3_mprintf(argv[1], argv[2]);  Tcl_AppendResult(interp, z, 0);  sqlite3_free(z);  return TCL_OK;}/*** Usage:  sqlite3_mprintf_hexdouble FORMAT HEX**** Call mprintf with a single double argument which is derived from the** hexadecimal encoding of an IEEE double.*/static int sqlite3_mprintf_hexdouble(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  char *z;  double r;  unsigned  x1, x2;  long long unsigned d;  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],       " FORMAT STRING\"", 0);    return TCL_ERROR;  }  if( sscanf(argv[2], "%08x%08x", &x2, &x1)!=2 ){    Tcl_AppendResult(interp, "2nd argument should be 16-characters of hex", 0);    return TCL_ERROR;  }  d = x2;  d = (d<<32) + x1;  memcpy(&r, &d, sizeof(r));  z = sqlite3_mprintf(argv[1], r);  Tcl_AppendResult(interp, z, 0);  sqlite3_free(z);  return TCL_OK;}/*** Usage: sqlite_malloc_fail N  ?REPEAT-INTERVAL?**** Rig sqliteMalloc() to fail on the N-th call and every REPEAT-INTERVAL call** after that.  If REPEAT-INTERVAL is 0 or is omitted, then only a single** malloc will fail.  If REPEAT-INTERVAL is 1 then all mallocs after the** first failure will continue to fail on every call.  If REPEAT-INTERVAL is** 2 then every other malloc will fail.  And so forth.**** Turn off this mechanism and reset the sqlite3ThreadData()->mallocFailed ** variable if N==0.*/#ifdef SQLITE_MEMDEBUGstatic int sqlite_malloc_fail(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  int n;  int rep;  if( argc!=2 && argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " N\"", 0);    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_extended_result_codes   DB    BOOLEAN***/static int test_extended_result_codes(  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 enable;  sqlite3 *db;  if( objc!=3 ){    Tcl_WrongNumArgs(interp, 1, objv, "DB BOOLEAN");    return TCL_ERROR;  }  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;  if( Tcl_GetBooleanFromObj(interp, objv[2], &enable) ) return TCL_ERROR;  sqlite3_extended_result_codes(db, enable);  return TCL_OK;}/*** 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 */

⌨️ 快捷键说明

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