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

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

?? tclsqlite.c

?? 這是一個(gè)嵌入式系統(tǒng)上運(yùn)行的輕量級(jí)數(shù)據(jù)庫(kù)
?? C
?? 第 1 頁(yè) / 共 3 頁(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.***************************************************************************** A TCL Interface to SQLite**** $Id: tclsqlite.c,v 1.59.2.1 2004/06/19 11:57:40 drh Exp $*/#ifndef NO_TCL     /* Omit this whole file if TCL is unavailable */#include "sqliteInt.h"#include "tcl.h"#include <stdlib.h>#include <string.h>#include <assert.h>/*** If TCL uses UTF-8 and SQLite is configured to use iso8859, then we** have to do a translation when going between the two.  Set the ** UTF_TRANSLATION_NEEDED macro to indicate that we need to do** this translation.  */#if defined(TCL_UTF_MAX) && !defined(SQLITE_UTF8)# define UTF_TRANSLATION_NEEDED 1#endif/*** New SQL functions can be created as TCL scripts.  Each such function** is described by an instance of the following structure.*/typedef struct SqlFunc SqlFunc;struct SqlFunc {  Tcl_Interp *interp;   /* The TCL interpret to execute the function */  char *zScript;        /* The script to be run */  SqlFunc *pNext;       /* Next function on the list of them all */};/*** There is one instance of this structure for each SQLite database** that has been opened by the SQLite TCL interface.*/typedef struct SqliteDb SqliteDb;struct SqliteDb {  sqlite *db;           /* The "real" database structure */  Tcl_Interp *interp;   /* The interpreter used for this database */  char *zBusy;          /* The busy callback routine */  char *zCommit;        /* The commit hook callback routine */  char *zTrace;         /* The trace callback routine */  char *zProgress;      /* The progress callback routine */  char *zAuth;          /* The authorization callback routine */  SqlFunc *pFunc;       /* List of SQL functions */  int rc;               /* Return code of most recent sqlite_exec() */};/*** An instance of this structure passes information thru the sqlite** logic from the original TCL command into the callback routine.*/typedef struct CallbackData CallbackData;struct CallbackData {  Tcl_Interp *interp;       /* The TCL interpreter */  char *zArray;             /* The array into which data is written */  Tcl_Obj *pCode;           /* The code to execute for each row */  int once;                 /* Set for first callback only */  int tcl_rc;               /* Return code from TCL script */  int nColName;             /* Number of entries in the azColName[] array */  char **azColName;         /* Column names translated to UTF-8 */};#ifdef UTF_TRANSLATION_NEEDED/*** Called for each row of the result.**** This version is used when TCL expects UTF-8 data but the database** uses the ISO8859 format.  A translation must occur from ISO8859 into** UTF-8.*/static int DbEvalCallback(  void *clientData,      /* An instance of CallbackData */  int nCol,              /* Number of columns in the result */  char ** azCol,         /* Data for each column */  char ** azN            /* Name for each column */){  CallbackData *cbData = (CallbackData*)clientData;  int i, rc;  Tcl_DString dCol;  Tcl_DStringInit(&dCol);  if( cbData->azColName==0 ){    assert( cbData->once );    cbData->once = 0;    if( cbData->zArray[0] ){      Tcl_SetVar2(cbData->interp, cbData->zArray, "*", "", 0);    }    cbData->azColName = malloc( nCol*sizeof(char*) );    if( cbData->azColName==0 ){ return 1; }    cbData->nColName = nCol;    for(i=0; i<nCol; i++){      Tcl_ExternalToUtfDString(NULL, azN[i], -1, &dCol);      cbData->azColName[i] = malloc( Tcl_DStringLength(&dCol) + 1 );      if( cbData->azColName[i] ){        strcpy(cbData->azColName[i], Tcl_DStringValue(&dCol));      }else{        return 1;      }      if( cbData->zArray[0] ){        Tcl_SetVar2(cbData->interp, cbData->zArray, "*",             Tcl_DStringValue(&dCol), TCL_LIST_ELEMENT|TCL_APPEND_VALUE);        if( azN[nCol]!=0 ){          Tcl_DString dType;          Tcl_DStringInit(&dType);          Tcl_DStringAppend(&dType, "typeof:", -1);          Tcl_DStringAppend(&dType, Tcl_DStringValue(&dCol), -1);          Tcl_DStringFree(&dCol);          Tcl_ExternalToUtfDString(NULL, azN[i+nCol], -1, &dCol);          Tcl_SetVar2(cbData->interp, cbData->zArray,                Tcl_DStringValue(&dType), Tcl_DStringValue(&dCol),               TCL_LIST_ELEMENT|TCL_APPEND_VALUE);          Tcl_DStringFree(&dType);        }      }            Tcl_DStringFree(&dCol);    }  }  if( azCol!=0 ){    if( cbData->zArray[0] ){      for(i=0; i<nCol; i++){        char *z = azCol[i];        if( z==0 ) z = "";        Tcl_DStringInit(&dCol);        Tcl_ExternalToUtfDString(NULL, z, -1, &dCol);        Tcl_SetVar2(cbData->interp, cbData->zArray, cbData->azColName[i],               Tcl_DStringValue(&dCol), 0);        Tcl_DStringFree(&dCol);      }    }else{      for(i=0; i<nCol; i++){        char *z = azCol[i];        if( z==0 ) z = "";        Tcl_DStringInit(&dCol);        Tcl_ExternalToUtfDString(NULL, z, -1, &dCol);        Tcl_SetVar(cbData->interp, cbData->azColName[i],                   Tcl_DStringValue(&dCol), 0);        Tcl_DStringFree(&dCol);      }    }  }  rc = Tcl_EvalObj(cbData->interp, cbData->pCode);  if( rc==TCL_CONTINUE ) rc = TCL_OK;  cbData->tcl_rc = rc;  return rc!=TCL_OK;}#endif /* UTF_TRANSLATION_NEEDED */#ifndef UTF_TRANSLATION_NEEDED/*** Called for each row of the result.**** This version is used when either of the following is true:****    (1) This version of TCL uses UTF-8 and the data in the**        SQLite database is already in the UTF-8 format.****    (2) This version of TCL uses ISO8859 and the data in the**        SQLite database is already in the ISO8859 format.*/static int DbEvalCallback(  void *clientData,      /* An instance of CallbackData */  int nCol,              /* Number of columns in the result */  char ** azCol,         /* Data for each column */  char ** azN            /* Name for each column */){  CallbackData *cbData = (CallbackData*)clientData;  int i, rc;  if( azCol==0 || (cbData->once && cbData->zArray[0]) ){    Tcl_SetVar2(cbData->interp, cbData->zArray, "*", "", 0);    for(i=0; i<nCol; i++){      Tcl_SetVar2(cbData->interp, cbData->zArray, "*", azN[i],         TCL_LIST_ELEMENT|TCL_APPEND_VALUE);      if( azN[nCol] ){        char *z = sqlite_mprintf("typeof:%s", azN[i]);        Tcl_SetVar2(cbData->interp, cbData->zArray, z, azN[i+nCol],           TCL_LIST_ELEMENT|TCL_APPEND_VALUE);        sqlite_freemem(z);      }    }    cbData->once = 0;  }  if( azCol!=0 ){    if( cbData->zArray[0] ){      for(i=0; i<nCol; i++){        char *z = azCol[i];        if( z==0 ) z = "";        Tcl_SetVar2(cbData->interp, cbData->zArray, azN[i], z, 0);      }    }else{      for(i=0; i<nCol; i++){        char *z = azCol[i];        if( z==0 ) z = "";        Tcl_SetVar(cbData->interp, azN[i], z, 0);      }    }  }  rc = Tcl_EvalObj(cbData->interp, cbData->pCode);  if( rc==TCL_CONTINUE ) rc = TCL_OK;  cbData->tcl_rc = rc;  return rc!=TCL_OK;}#endif/*** This is an alternative callback for database queries.  Instead** of invoking a TCL script to handle the result, this callback just** appends each column of the result to a list.  After the query** is complete, the list is returned.*/static int DbEvalCallback2(  void *clientData,      /* An instance of CallbackData */  int nCol,              /* Number of columns in the result */  char ** azCol,         /* Data for each column */  char ** azN            /* Name for each column */){  Tcl_Obj *pList = (Tcl_Obj*)clientData;  int i;  if( azCol==0 ) return 0;  for(i=0; i<nCol; i++){    Tcl_Obj *pElem;    if( azCol[i] && *azCol[i] ){#ifdef UTF_TRANSLATION_NEEDED      Tcl_DString dCol;      Tcl_DStringInit(&dCol);      Tcl_ExternalToUtfDString(NULL, azCol[i], -1, &dCol);      pElem = Tcl_NewStringObj(Tcl_DStringValue(&dCol), -1);      Tcl_DStringFree(&dCol);#else      pElem = Tcl_NewStringObj(azCol[i], -1);#endif    }else{      pElem = Tcl_NewObj();    }    Tcl_ListObjAppendElement(0, pList, pElem);  }  return 0;}/*** This is a second alternative callback for database queries.  A the** first column of the first row of the result is made the TCL result.*/static int DbEvalCallback3(  void *clientData,      /* An instance of CallbackData */  int nCol,              /* Number of columns in the result */  char ** azCol,         /* Data for each column */  char ** azN            /* Name for each column */){  Tcl_Interp *interp = (Tcl_Interp*)clientData;  Tcl_Obj *pElem;  if( azCol==0 ) return 1;  if( nCol==0 ) return 1;#ifdef UTF_TRANSLATION_NEEDED  {    Tcl_DString dCol;    Tcl_DStringInit(&dCol);    Tcl_ExternalToUtfDString(NULL, azCol[0], -1, &dCol);    pElem = Tcl_NewStringObj(Tcl_DStringValue(&dCol), -1);    Tcl_DStringFree(&dCol);  }#else  pElem = Tcl_NewStringObj(azCol[0], -1);#endif  Tcl_SetObjResult(interp, pElem);  return 1;}/*** Called when the command is deleted.*/static void DbDeleteCmd(void *db){  SqliteDb *pDb = (SqliteDb*)db;  sqlite_close(pDb->db);  while( pDb->pFunc ){    SqlFunc *pFunc = pDb->pFunc;    pDb->pFunc = pFunc->pNext;    Tcl_Free((char*)pFunc);  }  if( pDb->zBusy ){    Tcl_Free(pDb->zBusy);  }  if( pDb->zTrace ){    Tcl_Free(pDb->zTrace);  }  if( pDb->zAuth ){    Tcl_Free(pDb->zAuth);  }  Tcl_Free((char*)pDb);}/*** This routine is called when a database file is locked while trying** to execute SQL.*/static int DbBusyHandler(void *cd, const char *zTable, int nTries){  SqliteDb *pDb = (SqliteDb*)cd;  int rc;  char zVal[30];  char *zCmd;  Tcl_DString cmd;  Tcl_DStringInit(&cmd);  Tcl_DStringAppend(&cmd, pDb->zBusy, -1);  Tcl_DStringAppendElement(&cmd, zTable);  sprintf(zVal, " %d", nTries);  Tcl_DStringAppend(&cmd, zVal, -1);  zCmd = Tcl_DStringValue(&cmd);  rc = Tcl_Eval(pDb->interp, zCmd);  Tcl_DStringFree(&cmd);  if( rc!=TCL_OK || atoi(Tcl_GetStringResult(pDb->interp)) ){    return 0;  }  return 1;}/*** This routine is invoked as the 'progress callback' for the database.*/static int DbProgressHandler(void *cd){  SqliteDb *pDb = (SqliteDb*)cd;  int rc;  assert( pDb->zProgress );  rc = Tcl_Eval(pDb->interp, pDb->zProgress);  if( rc!=TCL_OK || atoi(Tcl_GetStringResult(pDb->interp)) ){    return 1;  }  return 0;}/*** This routine is called by the SQLite trace handler whenever a new** block of SQL is executed.  The TCL script in pDb->zTrace is executed.*/static void DbTraceHandler(void *cd, const char *zSql){  SqliteDb *pDb = (SqliteDb*)cd;  Tcl_DString str;  Tcl_DStringInit(&str);  Tcl_DStringAppend(&str, pDb->zTrace, -1);  Tcl_DStringAppendElement(&str, zSql);  Tcl_Eval(pDb->interp, Tcl_DStringValue(&str));  Tcl_DStringFree(&str);  Tcl_ResetResult(pDb->interp);}/*** This routine is called when a transaction is committed.  The** TCL script in pDb->zCommit is executed.  If it returns non-zero or** if it throws an exception, the transaction is rolled back instead** of being committed.*/static int DbCommitHandler(void *cd){  SqliteDb *pDb = (SqliteDb*)cd;  int rc;  rc = Tcl_Eval(pDb->interp, pDb->zCommit);  if( rc!=TCL_OK || atoi(Tcl_GetStringResult(pDb->interp)) ){    return 1;  }  return 0;}/*** This routine is called to evaluate an SQL function implemented** using TCL script.*/static void tclSqlFunc(sqlite_func *context, int argc, const char **argv){  SqlFunc *p = sqlite_user_data(context);  Tcl_DString cmd;  int i;  int rc;  Tcl_DStringInit(&cmd);  Tcl_DStringAppend(&cmd, p->zScript, -1);  for(i=0; i<argc; i++){    Tcl_DStringAppendElement(&cmd, argv[i] ? argv[i] : "");  }  rc = Tcl_Eval(p->interp, Tcl_DStringValue(&cmd));  if( rc ){    sqlite_set_result_error(context, Tcl_GetStringResult(p->interp), -1);   }else{    sqlite_set_result_string(context, Tcl_GetStringResult(p->interp), -1);  }}#ifndef SQLITE_OMIT_AUTHORIZATION/*** This is the authentication function.  It appends the authentication** type code and the two arguments to zCmd[] then invokes the result** on the interpreter.  The reply is examined to determine if the** authentication fails or succeeds.*/static int auth_callback(  void *pArg,  int code,  const char *zArg1,  const char *zArg2,  const char *zArg3,  const char *zArg4){  char *zCode;  Tcl_DString str;  int rc;  const char *zReply;  SqliteDb *pDb = (SqliteDb*)pArg;  switch( code ){    case SQLITE_COPY              : zCode="SQLITE_COPY"; break;    case SQLITE_CREATE_INDEX      : zCode="SQLITE_CREATE_INDEX"; break;    case SQLITE_CREATE_TABLE      : zCode="SQLITE_CREATE_TABLE"; break;    case SQLITE_CREATE_TEMP_INDEX : zCode="SQLITE_CREATE_TEMP_INDEX"; break;    case SQLITE_CREATE_TEMP_TABLE : zCode="SQLITE_CREATE_TEMP_TABLE"; break;    case SQLITE_CREATE_TEMP_TRIGGER: zCode="SQLITE_CREATE_TEMP_TRIGGER"; break;    case SQLITE_CREATE_TEMP_VIEW  : zCode="SQLITE_CREATE_TEMP_VIEW"; break;    case SQLITE_CREATE_TRIGGER    : zCode="SQLITE_CREATE_TRIGGER"; break;    case SQLITE_CREATE_VIEW       : zCode="SQLITE_CREATE_VIEW"; break;    case SQLITE_DELETE            : zCode="SQLITE_DELETE"; break;    case SQLITE_DROP_INDEX        : zCode="SQLITE_DROP_INDEX"; break;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类人妖一区二区av| 国模套图日韩精品一区二区| 91麻豆精品国产无毒不卡在线观看| 国模套图日韩精品一区二区| 亚洲精品写真福利| 精品99久久久久久| 欧美亚洲一区二区在线| 国产成人三级在线观看| 日韩激情视频网站| 亚洲精品免费视频| 久久欧美一区二区| 欧美二区三区的天堂| av电影在线观看完整版一区二区| 蜜桃一区二区三区四区| 伊人婷婷欧美激情| 日本一区二区三区久久久久久久久不 | 国产精品一区二区在线看| 亚洲乱码国产乱码精品精小说| 26uuu国产电影一区二区| 欧美酷刑日本凌虐凌虐| 色婷婷av一区二区三区大白胸| 国产一本一道久久香蕉| 青青草国产成人av片免费| 一级女性全黄久久生活片免费| 久久美女艺术照精彩视频福利播放| 欧美乱妇一区二区三区不卡视频| 99久久久久久| www.色综合.com| 国产成人av电影免费在线观看| 另类小说图片综合网| 午夜精品成人在线| 香蕉影视欧美成人| 一区二区在线电影| 亚洲女厕所小便bbb| 成人免费小视频| ...av二区三区久久精品| 亚洲国产电影在线观看| 亚洲国产精品av| 国产欧美中文在线| 国产精品情趣视频| 国产精品久久久久久久久久免费看| 国产日产欧美一区| 国产精品色婷婷久久58| 国产精品麻豆99久久久久久| 国产欧美日本一区视频| 国产精品久久久久久久浪潮网站 | 中文字幕欧美三区| 欧美激情在线观看视频免费| 亚洲国产精品精华液ab| 中文字幕一区二区三区精华液| 国产精品久久久久久久久久久免费看| 国产无人区一区二区三区| 国产日韩欧美精品综合| 欧美激情一区二区在线| 国产精品传媒在线| 亚洲自拍与偷拍| 午夜精品福利在线| 国内外成人在线| 风间由美一区二区av101| a亚洲天堂av| 欧美三电影在线| 91麻豆精品国产91久久久久| 欧美zozozo| 中文字幕不卡在线观看| 亚洲综合色视频| 日韩成人av影视| 国产麻豆视频一区| 99视频一区二区| 51精品秘密在线观看| 久久久综合视频| 亚洲色图一区二区三区| 午夜电影网一区| 国产乱码精品一区二区三区忘忧草| 成人免费va视频| 欧美日韩免费观看一区二区三区| 欧美一区二区三区影视| 国产夜色精品一区二区av| 自拍偷拍亚洲激情| 日韩成人午夜精品| 成人晚上爱看视频| 欧美久久久久免费| 国产欧美日韩视频在线观看| 亚洲综合一区二区| 国产精品资源网| 欧美亚洲图片小说| 久久精品无码一区二区三区| 亚洲影视在线播放| 国产精品996| 欧美日韩成人综合| 中文字幕免费观看一区| 日韩在线a电影| 成人动漫在线一区| 欧美一二三四区在线| 亚洲视频免费看| 九九**精品视频免费播放| 一本一道久久a久久精品| 精品国产一区二区三区久久影院| 国产精品亚洲а∨天堂免在线| 欧美伊人久久久久久久久影院| 久久综合av免费| 日本在线不卡视频| 91国产丝袜在线播放| 国产嫩草影院久久久久| 日韩电影在线一区二区三区| 99精品在线观看视频| 久久久精品综合| 美女视频一区在线观看| 欧美在线视频你懂得| 国产精品私人自拍| 国产在线精品一区二区夜色| 欧美福利一区二区| 亚洲激情男女视频| 成人一二三区视频| 久久亚洲私人国产精品va媚药| 午夜精品久久久| 欧美专区日韩专区| 自拍偷在线精品自拍偷无码专区| 国模套图日韩精品一区二区| 欧美一区二区三区系列电影| 一级做a爱片久久| 91视视频在线观看入口直接观看www| 久久久亚洲精品一区二区三区 | 韩国三级中文字幕hd久久精品| 欧美日高清视频| 亚洲综合区在线| 一本久久a久久精品亚洲| 国产精品美女久久久久aⅴ国产馆| 国产专区综合网| 久久久久亚洲综合| 精品无人码麻豆乱码1区2区 | 成人精品鲁一区一区二区| 欧美xxx久久| 黄一区二区三区| 26uuu久久天堂性欧美| 免费观看91视频大全| 8x福利精品第一导航| 人人爽香蕉精品| 日韩欧美电影一二三| 玖玖九九国产精品| 欧美xxxx老人做受| 国产一区91精品张津瑜| 久久久午夜电影| 成人性色生活片免费看爆迷你毛片| 国产拍揄自揄精品视频麻豆| 成人小视频在线| 自拍偷拍国产亚洲| 日本伦理一区二区| 丝袜a∨在线一区二区三区不卡| 91麻豆精品国产91久久久使用方法| 日本欧美一区二区在线观看| 日韩限制级电影在线观看| 国产在线观看免费一区| 国产精品区一区二区三区| caoporm超碰国产精品| 一区二区三区四区乱视频| 欧美日韩精品欧美日韩精品 | 国产精品免费观看视频| 99精品久久只有精品| 亚洲综合区在线| 日韩午夜av电影| 成人午夜短视频| 亚洲一区二区高清| 欧美大片一区二区三区| 国产suv一区二区三区88区| 亚洲色欲色欲www| 欧美丰满嫩嫩电影| 国产传媒久久文化传媒| 一区二区在线免费| 欧美白人最猛性xxxxx69交| 粉嫩一区二区三区在线看| 一区二区视频在线| 日韩一区二区精品在线观看| 国产 日韩 欧美大片| 亚洲主播在线播放| 久久女同精品一区二区| 91麻豆国产福利在线观看| 日本女优在线视频一区二区| 久久蜜桃av一区二区天堂| 日本精品一区二区三区四区的功能| 日韩在线播放一区二区| 中文字幕av在线一区二区三区| 在线观看视频一区二区| 久久成人免费日本黄色| 亚洲欧洲成人自拍| 日韩免费一区二区三区在线播放| 成人免费av网站| 蜜桃av噜噜一区| 亚洲免费伊人电影| 精品黑人一区二区三区久久| 一本大道久久a久久综合婷婷| 美女一区二区久久| 国产精品成人免费在线| 欧美大片一区二区| 在线观看av一区| 福利视频网站一区二区三区| 日本91福利区| 一区二区三区中文字幕电影 | 成人高清视频免费观看| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲美女免费视频|