亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? test1.c

?? sqlite庫(kù)
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/*** 2001 September 15**** The author disclaims copyright to this source code.  In place of** a legal notice, here is a blessing:****    May you do good and not evil.**    May you find forgiveness for yourself and forgive others.**    May you share freely, never taking more than you give.***************************************************************************** Code for testing all sorts of SQLite interfaces.  This code** is not included in the SQLite library.  It is used for automated** testing of the SQLite library.**** $Id: test1.c,v 1.209 2006/03/19 13:00:25 drh Exp $*/#include "sqliteInt.h"#include "tcl.h"#include "os.h"#include <stdlib.h>#include <string.h>/*** This is a copy of the first part of the SqliteDb structure in ** tclsqlite.c.  We need it here so that the get_sqlite_pointer routine** can extract the sqlite3* pointer from an existing Tcl SQLite** connection.*/struct SqliteDb {  sqlite3 *db;};/*** A TCL command that returns the address of the sqlite* pointer** for an sqlite connection instance.  Bad things happen if the** input is not an sqlite connection.*/static int get_sqlite_pointer(  void * clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *CONST objv[]){  struct SqliteDb *p;  Tcl_CmdInfo cmdInfo;  char zBuf[100];  if( objc!=2 ){    Tcl_WrongNumArgs(interp, 1, objv, "SQLITE-CONNECTION");    return TCL_ERROR;  }  if( !Tcl_GetCommandInfo(interp, Tcl_GetString(objv[1]), &cmdInfo) ){    Tcl_AppendResult(interp, "command not found: ",           Tcl_GetString(objv[1]), (char*)0);    return TCL_ERROR;  }  p = (struct SqliteDb*)cmdInfo.objClientData;  sprintf(zBuf, "%p", p->db);  if( strncmp(zBuf,"0x",2) ){    sprintf(zBuf, "0x%p", p->db);  }  Tcl_AppendResult(interp, zBuf, 0);  return TCL_OK;}const char *sqlite3TestErrorName(int rc){  const char *zName = 0;  switch( rc ){    case SQLITE_OK:         zName = "SQLITE_OK";          break;    case SQLITE_ERROR:      zName = "SQLITE_ERROR";       break;    case SQLITE_PERM:       zName = "SQLITE_PERM";        break;    case SQLITE_ABORT:      zName = "SQLITE_ABORT";       break;    case SQLITE_BUSY:       zName = "SQLITE_BUSY";        break;    case SQLITE_LOCKED:     zName = "SQLITE_LOCKED";      break;    case SQLITE_NOMEM:      zName = "SQLITE_NOMEM";       break;    case SQLITE_READONLY:   zName = "SQLITE_READONLY";    break;    case SQLITE_INTERRUPT:  zName = "SQLITE_INTERRUPT";   break;    case SQLITE_IOERR:      zName = "SQLITE_IOERR";       break;    case SQLITE_CORRUPT:    zName = "SQLITE_CORRUPT";     break;    case SQLITE_FULL:       zName = "SQLITE_FULL";        break;    case SQLITE_CANTOPEN:   zName = "SQLITE_CANTOPEN";    break;    case SQLITE_PROTOCOL:   zName = "SQLITE_PROTOCOL";    break;    case SQLITE_EMPTY:      zName = "SQLITE_EMPTY";       break;    case SQLITE_SCHEMA:     zName = "SQLITE_SCHEMA";      break;    case SQLITE_CONSTRAINT: zName = "SQLITE_CONSTRAINT";  break;    case SQLITE_MISMATCH:   zName = "SQLITE_MISMATCH";    break;    case SQLITE_MISUSE:     zName = "SQLITE_MISUSE";      break;    case SQLITE_NOLFS:      zName = "SQLITE_NOLFS";       break;    case SQLITE_AUTH:       zName = "SQLITE_AUTH";        break;    case SQLITE_FORMAT:     zName = "SQLITE_FORMAT";      break;    case SQLITE_RANGE:      zName = "SQLITE_RANGE";       break;    case SQLITE_ROW:        zName = "SQLITE_ROW";         break;    case SQLITE_DONE:       zName = "SQLITE_DONE";        break;    case SQLITE_NOTADB:     zName = "SQLITE_NOTADB";      break;    default:                zName = "SQLITE_Unknown";     break;  }  return zName;}#define errorName sqlite3TestErrorName/*** Convert an sqlite3_stmt* into an sqlite3*.  This depends on the** fact that the sqlite3* is the first field in the Vdbe structure.*/#define StmtToDb(X)   sqlite3_db_handle(X)/*** Check a return value to make sure it agrees with the results** from sqlite3_errcode.*/int sqlite3TestErrCode(Tcl_Interp *interp, sqlite3 *db, int rc){  if( rc!=SQLITE_MISUSE && rc!=SQLITE_OK && sqlite3_errcode(db)!=rc ){    char zBuf[200];    int r2 = sqlite3_errcode(db);    sprintf(zBuf, "error code %s (%d) does not match sqlite3_errcode %s (%d)",       errorName(rc), rc, errorName(r2), r2);    Tcl_ResetResult(interp);    Tcl_AppendResult(interp, zBuf, 0);    return 1;  }  return 0;}/*** Decode a pointer to an sqlite3 object.*/static int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb){  *ppDb = (sqlite3*)sqlite3TextToPtr(zA);  return TCL_OK;}/*** Decode a pointer to an sqlite3_stmt object.*/static int getStmtPointer(  Tcl_Interp *interp,   const char *zArg,    sqlite3_stmt **ppStmt){  *ppStmt = (sqlite3_stmt*)sqlite3TextToPtr(zArg);  return TCL_OK;}/*** Decode a pointer to an sqlite3_stmt object.*/static int getFilePointer(  Tcl_Interp *interp,   const char *zArg,    OsFile **ppFile){  *ppFile = (OsFile*)sqlite3TextToPtr(zArg);  return TCL_OK;}/*** Generate a text representation of a pointer that can be understood** by the getDbPointer and getVmPointer routines above.**** The problem is, on some machines (Solaris) if you do a printf with** "%p" you cannot turn around and do a scanf with the same "%p" and** get your pointer back.  You have to prepend a "0x" before it will** work.  Or at least that is what is reported to me (drh).  But this** behavior varies from machine to machine.  The solution used her is** to test the string right after it is generated to see if it can be** understood by scanf, and if not, try prepending an "0x" to see if** that helps.  If nothing works, a fatal error is generated.*/int sqlite3TestMakePointerStr(Tcl_Interp *interp, char *zPtr, void *p){  sqlite3_snprintf(100, zPtr, "%p", p);  return TCL_OK;}/*** The callback routine for sqlite3_exec_printf().*/static int exec_printf_cb(void *pArg, int argc, char **argv, char **name){  Tcl_DString *str = (Tcl_DString*)pArg;  int i;  if( Tcl_DStringLength(str)==0 ){    for(i=0; i<argc; i++){      Tcl_DStringAppendElement(str, name[i] ? name[i] : "NULL");    }  }  for(i=0; i<argc; i++){    Tcl_DStringAppendElement(str, argv[i] ? argv[i] : "NULL");  }  return 0;}/*** Usage:  sqlite3_exec_printf  DB  FORMAT  STRING**** Invoke the sqlite3_exec_printf() interface using the open database** DB.  The SQL is the string FORMAT.  The format string should contain** one %s or %q.  STRING is the value inserted into %s or %q.*/static int test_exec_printf(  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;  Tcl_DString str;  int rc;  char *zErr = 0;  char *zSql;  char zBuf[30];  if( argc!=4 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],        " DB FORMAT STRING", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;  Tcl_DStringInit(&str);  zSql = sqlite3_mprintf(argv[2], argv[3]);  rc = sqlite3_exec(db, zSql, exec_printf_cb, &str, &zErr);  sqlite3_free(zSql);  sprintf(zBuf, "%d", rc);  Tcl_AppendElement(interp, zBuf);  Tcl_AppendElement(interp, rc==SQLITE_OK ? Tcl_DStringValue(&str) : zErr);  Tcl_DStringFree(&str);  if( zErr ) free(zErr);  if( sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR;  return TCL_OK;}/*** Usage:  sqlite3_mprintf_z_test  SEPARATOR  ARG0  ARG1 ...**** Test the %z format of sqliteMPrintf().  Use multiple mprintf() calls to ** concatenate arg0 through argn using separator as the separator.** Return the result.*/static int test_mprintf_z(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  char *zResult = 0;  int i;  for(i=2; i<argc; i++){    zResult = sqlite3MPrintf("%z%s%s", zResult, argv[1], argv[i]);  }  Tcl_AppendResult(interp, zResult, 0);  sqliteFree(zResult);  return TCL_OK;}/*** Usage:  sqlite3_mprintf_n_test  STRING**** Test the %n format of sqliteMPrintf().  Return the length of the** input string.*/static int test_mprintf_n(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  char **argv            /* Text of each argument */){  char *zStr;  int n = 0;  zStr = sqlite3MPrintf("%s%n", argv[1], &n);  sqliteFree(zStr);  Tcl_SetObjResult(interp, Tcl_NewIntObj(n));  return TCL_OK;}/*** Usage:  sqlite3_get_table_printf  DB  FORMAT  STRING**** Invoke the sqlite3_get_table_printf() interface using the open database** DB.  The SQL is the string FORMAT.  The format string should contain** one %s or %q.  STRING is the value inserted into %s or %q.*/static int test_get_table_printf(  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;  Tcl_DString str;  int rc;  char *zErr = 0;  int nRow, nCol;  char **aResult;  int i;  char zBuf[30];  char *zSql;  if( argc!=4 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],        " DB FORMAT STRING", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;  Tcl_DStringInit(&str);  zSql = sqlite3_mprintf(argv[2],argv[3]);  rc = sqlite3_get_table(db, zSql, &aResult, &nRow, &nCol, &zErr);  sqlite3_free(zSql);  sprintf(zBuf, "%d", rc);  Tcl_AppendElement(interp, zBuf);  if( rc==SQLITE_OK ){    sprintf(zBuf, "%d", nRow);    Tcl_AppendElement(interp, zBuf);    sprintf(zBuf, "%d", nCol);    Tcl_AppendElement(interp, zBuf);    for(i=0; i<(nRow+1)*nCol; i++){      Tcl_AppendElement(interp, aResult[i] ? aResult[i] : "NULL");    }  }else{    Tcl_AppendElement(interp, zErr);  }  sqlite3_free_table(aResult);  if( zErr ) free(zErr);  if( sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR;  return TCL_OK;}/*** Usage:  sqlite3_last_insert_rowid DB**** Returns the integer ROWID of the most recent insert.*/static int test_last_rowid(  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;  char zBuf[30];  if( argc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " DB\"", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;  sprintf(zBuf, "%lld", sqlite3_last_insert_rowid(db));  Tcl_AppendResult(interp, zBuf, 0);  return SQLITE_OK;}/*** Usage:  sqlite3_key DB KEY**** Set the codec key.*/static int test_key(  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;  const char *zKey;  int nKey;  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],       " FILENAME\"", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;  zKey = argv[2];  nKey = strlen(zKey);#ifdef SQLITE_HAS_CODEC  sqlite3_key(db, zKey, nKey);#endif  return TCL_OK;}/*** Usage:  sqlite3_rekey DB KEY**** Change the codec key.*/static int test_rekey(  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;  const char *zKey;  int nKey;  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],       " FILENAME\"", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;  zKey = argv[2];  nKey = strlen(zKey);#ifdef SQLITE_HAS_CODEC  sqlite3_rekey(db, zKey, nKey);#endif  return TCL_OK;}/*** Usage:  sqlite3_close DB**** Closes the database opened by sqlite3_open.*/static int sqlite_test_close(  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!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],       " FILENAME\"", 0);    return TCL_ERROR;  }  if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;  rc = sqlite3_close(db);  Tcl_SetResult(interp, (char *)errorName(rc), TCL_STATIC);  return TCL_OK;}/*** Implementation of the x_coalesce() function.** Return the first argument non-NULL argument.*/static void ifnullFunc(sqlite3_context *context, int argc, sqlite3_value **argv){  int i;  for(i=0; i<argc; i++){    if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){      sqlite3_result_text(context, (char*)sqlite3_value_text(argv[i]),          sqlite3_value_bytes(argv[i]), SQLITE_TRANSIENT);      break;    }  }}/*** A structure into which to accumulate text.*/struct dstr {  int nAlloc;  /* Space allocated */  int nUsed;   /* Space used */  char *z;     /* The space */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品av麻豆的观看方式| 五月婷婷综合激情| 91精品国产综合久久国产大片| 国产综合成人久久大片91| 亚洲欧美成aⅴ人在线观看| 日韩三级.com| 欧美天堂亚洲电影院在线播放| 国产精品一区久久久久| 亚洲成人免费视频| 亚洲色图视频免费播放| 精品国产区一区| 欧美日韩专区在线| av一二三不卡影片| 国产一区二区免费看| 日韩av中文字幕一区二区| 亚洲精品午夜久久久| 国产精品久久久久婷婷| 精品国内片67194| 日韩一区二区精品| 欧美日韩亚州综合| 一本色道a无线码一区v| 成人免费视频播放| 国产精品一区二区久激情瑜伽| 日韩国产欧美在线视频| 亚洲高清免费观看| 亚洲国产日韩a在线播放性色| 亚洲视频一区二区在线观看| 欧美国产精品一区二区| 国产午夜久久久久| 国产午夜精品在线观看| 国产亚洲一区二区三区四区| 日韩一区二区影院| 91麻豆精品国产| 欧美日韩综合一区| 精品视频在线看| 欧美日韩一区视频| 欧美日韩国产欧美日美国产精品| 欧美在线啊v一区| 色狠狠综合天天综合综合| 94-欧美-setu| 色欧美片视频在线观看| 91国产免费看| 欧美日韩国产乱码电影| 日韩免费看网站| 亚洲精品在线观| 精品国产乱子伦一区| 久久青草国产手机看片福利盒子 | 成人欧美一区二区三区在线播放| 国产欧美综合色| 国产精品久久久久永久免费观看 | 精品日产卡一卡二卡麻豆| 在线不卡a资源高清| 欧美精三区欧美精三区| 91精品国产一区二区三区香蕉| 6080日韩午夜伦伦午夜伦| 欧美大片顶级少妇| 久久精品一区八戒影视| 国产精品午夜春色av| 亚洲天堂免费看| 亚洲国产成人porn| 精品一二三四区| 99这里只有精品| 欧美视频自拍偷拍| 日韩网站在线看片你懂的| 国产欧美日韩麻豆91| 亚洲精品乱码久久久久久久久 | 国产精品1区2区3区| 成人一区二区三区在线观看| 91丨九色porny丨蝌蚪| 欧美日韩一区二区三区免费看| 欧美一级欧美三级在线观看| 26uuuu精品一区二区| 亚洲婷婷综合久久一本伊一区| 亚洲不卡在线观看| 韩国欧美一区二区| 色av成人天堂桃色av| 日韩一级成人av| 国产精品久久久久久久久免费相片| 亚洲国产精品久久人人爱| 久久99精品久久久久久久久久久久| 成人性生交大片免费看在线播放 | 国产色产综合色产在线视频| 亚洲另类在线视频| 黄色资源网久久资源365| 成人短视频下载| 欧美一区二区三区播放老司机| 国产香蕉久久精品综合网| 亚洲一区二区三区四区五区黄| 蜜臀av性久久久久蜜臀aⅴ四虎| av电影在线观看完整版一区二区| 欧美调教femdomvk| 日本一二三不卡| 蜜桃视频在线观看一区| 97精品国产露脸对白| 精品国产在天天线2019| 亚洲精选视频在线| 成人毛片视频在线观看| 欧美一区二区女人| 一级特黄大欧美久久久| 国产不卡在线一区| 欧美mv和日韩mv的网站| 洋洋成人永久网站入口| 国产成人av网站| 日韩精品一区二区三区蜜臀| 亚洲激情图片小说视频| 成人小视频在线| 日韩欧美的一区二区| 亚洲电影一级黄| 91猫先生在线| 国产精品免费网站在线观看| 久久电影网站中文字幕| 欧美无人高清视频在线观看| 一区在线播放视频| 国产盗摄一区二区| 2017欧美狠狠色| 久久国产精品99精品国产| 欧美丰满嫩嫩电影| 亚洲一区二区av电影| 91在线码无精品| 中文字幕乱码久久午夜不卡 | 99久久99久久免费精品蜜臀| 精品sm在线观看| 天天色 色综合| 欧美视频精品在线| 依依成人综合视频| 91福利社在线观看| 亚洲色欲色欲www| www.日韩在线| 亚洲欧洲av色图| 99re在线精品| 亚洲免费观看高清完整版在线观看| 成人性视频网站| 亚洲欧洲三级电影| 91天堂素人约啪| 1区2区3区欧美| 色综合 综合色| 一区二区三区不卡视频| 欧美亚男人的天堂| 亚洲第一激情av| 欧美久久久影院| 免费在线观看视频一区| 91精品国产综合久久精品| 青青青爽久久午夜综合久久午夜| 欧美一级片免费看| 精品一区二区久久| 国产日韩成人精品| 99国产精品99久久久久久| 亚洲桃色在线一区| 欧美性感一类影片在线播放| 亚洲国产cao| 日韩美女天天操| 高清国产一区二区三区| 国产精品激情偷乱一区二区∴| 色欧美乱欧美15图片| 午夜精品一区在线观看| 欧美第一区第二区| 国产999精品久久久久久| √…a在线天堂一区| 欧美日韩三级视频| 日本91福利区| 2020国产精品自拍| 99精品视频一区| 日韩国产欧美在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品亚洲综合一区在线观看| 国产精品久久夜| 欧美日韩久久一区| 国产一区二区精品久久91| 亚洲视频电影在线| 91精品国产一区二区| 成人精品视频一区二区三区尤物| 亚洲激情综合网| 精品国产精品网麻豆系列| 成人午夜在线免费| 亚洲高清免费在线| 久久久精品免费免费| 在线一区二区三区四区| 韩国女主播成人在线观看| 亚洲日本在线天堂| 精品日韩一区二区三区免费视频| av不卡在线观看| 免费在线欧美视频| 亚洲女人****多毛耸耸8| 欧美精品在线视频| 成人h动漫精品一区二区| 五月激情综合色| 国产精品狼人久久影院观看方式| 欧美肥妇free| 91在线免费视频观看| 老司机精品视频导航| 又紧又大又爽精品一区二区| 欧美大黄免费观看| 在线观看av一区| 粉嫩aⅴ一区二区三区四区五区| 亚洲自拍偷拍av| 中文字幕一区二区5566日韩| 欧美不卡一二三| 欧美日韩在线三区| 色综合色综合色综合| 国产一区二区0|