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

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

?? tclsqlite.c

?? sqlite 3.3.8 支持加密的版本
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
        return TCL_ERROR;
      }
      if( choice==DB_EXISTS ){
        pRet = Tcl_NewBooleanObj(0);
        Tcl_IncrRefCount(pRet);
      }else{
        pRet = 0;
      }
    }
    if( objc==3 ){
      pArray = pScript = 0;
    }else if( objc==4 ){
      pArray = 0;
      pScript = objv[3];
    }else{
      pArray = objv[3];
      if( Tcl_GetString(pArray)[0]==0 ) pArray = 0;
      pScript = objv[4];
    }

    Tcl_IncrRefCount(objv[2]);
    zSql = Tcl_GetStringFromObj(objv[2], 0);
    while( rc==TCL_OK && zSql[0] ){
      int i;                     /* Loop counter */
      int nVar;                  /* Number of bind parameters in the pStmt */
      int nCol;                  /* Number of columns in the result set */
      Tcl_Obj **apColName = 0;   /* Array of column names */
      int len;                   /* String length of zSql */
  
      /* Try to find a SQL statement that has already been compiled and
      ** which matches the next sequence of SQL.
      */
      pStmt = 0;
      pPreStmt = pDb->stmtList;
      len = strlen(zSql);
      if( pPreStmt && sqlite3_expired(pPreStmt->pStmt) ){
        flushStmtCache(pDb);
        pPreStmt = 0;
      }
      for(; pPreStmt; pPreStmt=pPreStmt->pNext){
        int n = pPreStmt->nSql;
        if( len>=n 
            && memcmp(pPreStmt->zSql, zSql, n)==0
            && (zSql[n]==0 || zSql[n-1]==';')
        ){
          pStmt = pPreStmt->pStmt;
          zLeft = &zSql[pPreStmt->nSql];

          /* When a prepared statement is found, unlink it from the
          ** cache list.  It will later be added back to the beginning
          ** of the cache list in order to implement LRU replacement.
          */
          if( pPreStmt->pPrev ){
            pPreStmt->pPrev->pNext = pPreStmt->pNext;
          }else{
            pDb->stmtList = pPreStmt->pNext;
          }
          if( pPreStmt->pNext ){
            pPreStmt->pNext->pPrev = pPreStmt->pPrev;
          }else{
            pDb->stmtLast = pPreStmt->pPrev;
          }
          pDb->nStmt--;
          break;
        }
      }
  
      /* If no prepared statement was found.  Compile the SQL text
      */
      if( pStmt==0 ){
        if( SQLITE_OK!=sqlite3_prepare(pDb->db, zSql, -1, &pStmt, &zLeft) ){
          Tcl_SetObjResult(interp, dbTextToObj(sqlite3_errmsg(pDb->db)));
          rc = TCL_ERROR;
          break;
        }
        if( pStmt==0 ){
          if( SQLITE_OK!=sqlite3_errcode(pDb->db) ){
            /* A compile-time error in the statement
            */
            Tcl_SetObjResult(interp, dbTextToObj(sqlite3_errmsg(pDb->db)));
            rc = TCL_ERROR;
            break;
          }else{
            /* The statement was a no-op.  Continue to the next statement
            ** in the SQL string.
            */
            zSql = zLeft;
            continue;
          }
        }
        assert( pPreStmt==0 );
      }

      /* Bind values to parameters that begin with $ or :
      */  
      nVar = sqlite3_bind_parameter_count(pStmt);
      nParm = 0;
      if( nVar>sizeof(aParm)/sizeof(aParm[0]) ){
        apParm = (Tcl_Obj**)Tcl_Alloc(nVar*sizeof(apParm[0]));
      }else{
        apParm = aParm;
      }
      for(i=1; i<=nVar; i++){
        const char *zVar = sqlite3_bind_parameter_name(pStmt, i);
        if( zVar!=0 && (zVar[0]=='$' || zVar[0]==':') ){
          Tcl_Obj *pVar = Tcl_GetVar2Ex(interp, &zVar[1], 0, 0);
          if( pVar ){
            int n;
            u8 *data;
            char *zType = pVar->typePtr ? pVar->typePtr->name : "";
            char c = zType[0];
            if( c=='b' && strcmp(zType,"bytearray")==0 && pVar->bytes==0 ){
              /* Only load a BLOB type if the Tcl variable is a bytearray and
              ** has no string representation. */
              data = Tcl_GetByteArrayFromObj(pVar, &n);
              sqlite3_bind_blob(pStmt, i, data, n, SQLITE_STATIC);
              Tcl_IncrRefCount(pVar);
              apParm[nParm++] = pVar;
            }else if( (c=='b' && strcmp(zType,"boolean")==0) ||
                  (c=='i' && strcmp(zType,"int")==0) ){
              Tcl_GetIntFromObj(interp, pVar, &n);
              sqlite3_bind_int(pStmt, i, n);
            }else if( c=='d' && strcmp(zType,"double")==0 ){
              double r;
              Tcl_GetDoubleFromObj(interp, pVar, &r);
              sqlite3_bind_double(pStmt, i, r);
            }else if( c=='w' && strcmp(zType,"wideInt")==0 ){
              Tcl_WideInt v;
              Tcl_GetWideIntFromObj(interp, pVar, &v);
              sqlite3_bind_int64(pStmt, i, v);
            }else{
              data = (unsigned char *)Tcl_GetStringFromObj(pVar, &n);
              sqlite3_bind_text(pStmt, i, (char *)data, n, SQLITE_STATIC);
              Tcl_IncrRefCount(pVar);
              apParm[nParm++] = pVar;
            }
          }else{
            sqlite3_bind_null( pStmt, i );
          }
        }
      }

      /* Compute column names */
      nCol = sqlite3_column_count(pStmt);
      if( pScript ){
        apColName = (Tcl_Obj**)Tcl_Alloc( sizeof(Tcl_Obj*)*nCol );
        if( apColName==0 ) break;
        for(i=0; i<nCol; i++){
          apColName[i] = dbTextToObj(sqlite3_column_name(pStmt,i));
          Tcl_IncrRefCount(apColName[i]);
        }
      }

      /* If results are being stored in an array variable, then create
      ** the array(*) entry for that array
      */
      if( pArray ){
        Tcl_Obj *pColList = Tcl_NewObj();
        Tcl_Obj *pStar = Tcl_NewStringObj("*", -1);
        Tcl_IncrRefCount(pColList);
        for(i=0; i<nCol; i++){
          Tcl_ListObjAppendElement(interp, pColList, apColName[i]);
        }
        Tcl_ObjSetVar2(interp, pArray, pStar, pColList,0);
        Tcl_DecrRefCount(pColList);
        Tcl_DecrRefCount(pStar);
      }

      /* Execute the SQL
      */
      while( rc==TCL_OK && pStmt && SQLITE_ROW==sqlite3_step(pStmt) ){
        for(i=0; i<nCol; i++){
          Tcl_Obj *pVal;
          
          /* Set pVal to contain the i'th column of this row. */
          switch( sqlite3_column_type(pStmt, i) ){
            case SQLITE_BLOB: {
              int bytes = sqlite3_column_bytes(pStmt, i);
              pVal = Tcl_NewByteArrayObj(sqlite3_column_blob(pStmt, i), bytes);
              break;
            }
            case SQLITE_INTEGER: {
              sqlite_int64 v = sqlite3_column_int64(pStmt, i);
              if( v>=-2147483647 && v<=2147483647 ){
                pVal = Tcl_NewIntObj(v);
              }else{
                pVal = Tcl_NewWideIntObj(v);
              }
              break;
            }
            case SQLITE_FLOAT: {
              double r = sqlite3_column_double(pStmt, i);
              pVal = Tcl_NewDoubleObj(r);
              break;
            }
            case SQLITE_NULL: {
              pVal = dbTextToObj(pDb->zNull);
              break;
            }
            default: {
              pVal = dbTextToObj((char *)sqlite3_column_text(pStmt, i));
              break;
            }
          }
  
          if( pScript ){
            if( pArray==0 ){
              Tcl_ObjSetVar2(interp, apColName[i], 0, pVal, 0);
            }else{
              Tcl_ObjSetVar2(interp, pArray, apColName[i], pVal, 0);
            }
          }else if( choice==DB_ONECOLUMN ){
            assert( pRet==0 );
            if( pRet==0 ){
              pRet = pVal;
              Tcl_IncrRefCount(pRet);
            }
            rc = TCL_BREAK;
            i = nCol;
          }else if( choice==DB_EXISTS ){
            Tcl_DecrRefCount(pRet);
            pRet = Tcl_NewBooleanObj(1);
            Tcl_IncrRefCount(pRet);
            rc = TCL_BREAK;
            i = nCol;
          }else{
            Tcl_ListObjAppendElement(interp, pRet, pVal);
          }
        }
  
        if( pScript ){
          rc = Tcl_EvalObjEx(interp, pScript, 0);
          if( rc==TCL_CONTINUE ){
            rc = TCL_OK;
          }
        }
      }
      if( rc==TCL_BREAK ){
        rc = TCL_OK;
      }

      /* Free the column name objects */
      if( pScript ){
        for(i=0; i<nCol; i++){
          Tcl_DecrRefCount(apColName[i]);
        }
        Tcl_Free((char*)apColName);
      }

      /* Free the bound string and blob parameters */
      for(i=0; i<nParm; i++){
        Tcl_DecrRefCount(apParm[i]);
      }
      if( apParm!=aParm ){
        Tcl_Free((char*)apParm);
      }

      /* Reset the statement.  If the result code is SQLITE_SCHEMA, then
      ** flush the statement cache and try the statement again.
      */
      rc2 = sqlite3_reset(pStmt);
      if( SQLITE_SCHEMA==rc2 ){
        /* After a schema change, flush the cache and try to run the
        ** statement again
        */
        flushStmtCache( pDb );
        sqlite3_finalize(pStmt);
        if( pPreStmt ) Tcl_Free((char*)pPreStmt);
        continue;
      }else if( SQLITE_OK!=rc2 ){
        /* If a run-time error occurs, report the error and stop reading
        ** the SQL
        */
        Tcl_SetObjResult(interp, dbTextToObj(sqlite3_errmsg(pDb->db)));
        sqlite3_finalize(pStmt);
        rc = TCL_ERROR;
        if( pPreStmt ) Tcl_Free((char*)pPreStmt);
        break;
      }else if( pDb->maxStmt<=0 ){
        /* If the cache is turned off, deallocated the statement */
        if( pPreStmt ) Tcl_Free((char*)pPreStmt);
        sqlite3_finalize(pStmt);
      }else{
        /* Everything worked and the cache is operational.
        ** Create a new SqlPreparedStmt structure if we need one.
        ** (If we already have one we can just reuse it.)
        */
        if( pPreStmt==0 ){
          len = zLeft - zSql;
          pPreStmt = (SqlPreparedStmt*)Tcl_Alloc( sizeof(*pPreStmt) + len );
          if( pPreStmt==0 ) return TCL_ERROR;
          pPreStmt->pStmt = pStmt;
          pPreStmt->nSql = len;
          memcpy(pPreStmt->zSql, zSql, len);
          pPreStmt->zSql[len] = 0;
        }

        /* Add the prepared statement to the beginning of the cache list
        */
        pPreStmt->pNext = pDb->stmtList;
        pPreStmt->pPrev = 0;
        if( pDb->stmtList ){
         pDb->stmtList->pPrev = pPreStmt;
        }
        pDb->stmtList = pPreStmt;
        if( pDb->stmtLast==0 ){
          assert( pDb->nStmt==0 );
          pDb->stmtLast = pPreStmt;
        }else{
          assert( pDb->nStmt>0 );
        }
        pDb->nStmt++;
   
        /* If we have too many statement in cache, remove the surplus from the
        ** end of the cache list.
        */
        while( pDb->nStmt>pDb->maxStmt ){
          sqlite3_finalize(pDb->stmtLast->pStmt);
          pDb->stmtLast = pDb->stmtLast->pPrev;
          Tcl_Free((char*)pDb->stmtLast->pNext);
          pDb->stmtLast->pNext = 0;
          pDb->nStmt--;
        }
      }

      /* Proceed to the next statement */
      zSql = zLeft;
    }
    Tcl_DecrRefCount(objv[2]);

    if( pRet ){
      if( rc==TCL_OK ){
        Tcl_SetObjResult(interp, pRet);
      }
      Tcl_DecrRefCount(pRet);
    }else if( rc==TCL_OK ){
      Tcl_ResetResult(interp);
    }
    break;
  }

  /*
  **     $db function NAME SCRIPT
  **
  ** Create a new SQL function called NAME.  Whenever that function is
  ** called, invoke SCRIPT to evaluate the function.
  */
  case DB_FUNCTION: {
    SqlFunc *pFunc;
    Tcl_Obj *pScript;
    char *zName;
    if( objc!=4 ){
      Tcl_WrongNumArgs(interp, 2, objv, "NAME SCRIPT");
      return TCL_ERROR;
    }
    zName = Tcl_GetStringFromObj(objv[2], 0);
    pScript = objv[3];
    pFunc = findSqlFunc(pDb, zName);
    if( pFunc==0 ) return TCL_ERROR;
    if( pFunc->pScript ){
      Tcl_DecrRefCount(pFunc->pScript);
    }
    pFunc->pScript = pScript;
    Tcl_IncrRefCount(pScript);
    pFunc->useEvalObjv = safeToUseEvalObjv(interp, pScript);
    rc = sqlite3_create_function(pDb->db, zName, -1, SQLITE_UTF8,
        pFunc, tclSqlFunc, 0, 0);
    if( rc!=SQLITE_OK ){
      rc = TCL_ERROR;
      Tcl_SetResult(interp, (char *)sqlite3_errmsg(pDb->db), TCL_VOLATILE);
    }else{
      /* Must flush any cached statements */
      flushStmtCache( pDb );
    }
    break;
  }

  /*
  **     $db interrupt
  **
  ** Interrupt the execution of the inner-most SQL interpreter.  This
  ** causes the SQL statement to return an error of SQLITE_INTERRUPT.
  */
  case DB_INTERRUPT: {
    sqlite3_interrupt(pDb->db);
    break;
  }

  /*
  **     $db nullvalue ?STRING?
  **
  ** Change text used when a NULL comes back from the database. If ?STRING?
  ** is not present, then the current string used for NULL is returned.
  ** If STRING is present, then STRING is returned.
  **
  */
  case DB_NULLVALUE: {
    if( objc!=2 && objc!=3 ){
      Tcl_WrongNumArgs(interp, 2, objv, "NULLVALUE");
      return TCL_ERROR;
    }
    if( objc==3 ){
      int len;
      char *zNull = Tcl_GetStringFromObj(objv[2], &len);
      if( pDb->zNull ){
        Tcl_Free(pDb->zNull);
      }
      if( zNull && len>0 ){
        pDb->zNull = Tcl_Alloc( len + 1 );
        strncpy(pDb->zNull, zNull, len);
        pDb->zNull[len] = '\0';
      }else{

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久免费| 国产成人啪午夜精品网站男同| 久久精品国产亚洲aⅴ| 91精品国产入口| 亚洲一区二区三区中文字幕在线| 国产成人精品影视| 国产精品视频九色porn| 久久99蜜桃精品| 久久精品水蜜桃av综合天堂| 国产美女视频一区| 色狠狠一区二区三区香蕉| 亚洲国产乱码最新视频| 99久久久国产精品| 亚洲chinese男男1069| 91亚洲午夜精品久久久久久| 欧美极品美女视频| av电影在线观看不卡| 综合亚洲深深色噜噜狠狠网站| 欧美视频在线一区二区三区| 亚洲精品写真福利| 久久国产剧场电影| 久久一夜天堂av一区二区三区| 极品尤物av久久免费看| 伊人婷婷欧美激情| 91麻豆精品一区二区三区| 午夜精品久久久久影视| 欧美一级久久久| 亚洲成人精品一区二区| 日韩视频免费观看高清完整版 | 波多野结衣亚洲| 亚洲精品成人天堂一二三| 色综合久久中文字幕综合网| 亚洲精品综合在线| 精品国产乱码久久久久久浪潮| 麻豆成人久久精品二区三区小说| 国产精品国产自产拍高清av| 91伊人久久大香线蕉| 日韩欧美精品三级| 色哟哟精品一区| 综合在线观看色| 欧美大片免费久久精品三p| 国产一区二区免费视频| 欧洲亚洲国产日韩| 国产成人在线观看| 国产精品亲子乱子伦xxxx裸| 色婷婷久久久久swag精品| 亚洲午夜成aⅴ人片| 日韩欧美亚洲国产另类| 日韩电影在线一区| 亚洲精品乱码久久久久久久久| 欧美片网站yy| 91免费在线看| 午夜在线成人av| 中文字幕一区二区三区四区| 欧美精品欧美精品系列| 午夜不卡av在线| 亚洲人精品午夜| 欧美一区二区三区啪啪| 欧美性受xxxx| 精品一区二区三区免费毛片爱| 亚洲444eee在线观看| 国产精品麻豆99久久久久久| 色综合久久中文字幕| 99精品视频在线免费观看| 日韩 欧美一区二区三区| 中文字幕欧美三区| 欧美日韩高清一区二区| 国产尤物一区二区在线| 亚洲国产精品尤物yw在线观看| 欧美v日韩v国产v| 亚洲va韩国va欧美va精品| 国产嫩草影院久久久久| 91精品欧美久久久久久动漫| 欧美日韩mp4| 成人动漫一区二区| 成人国产精品免费观看动漫 | 777午夜精品免费视频| 色狠狠桃花综合| 麻豆精品在线播放| 蜜桃视频一区二区三区在线观看| 国产精品国产三级国产| 精品久久久久久综合日本欧美| 欧美电视剧免费观看| 色综合色综合色综合| 欧洲av在线精品| 成人免费毛片a| 国产精品久久久久久久久图文区| 捆绑调教一区二区三区| 丝袜亚洲精品中文字幕一区| 亚洲色图欧美在线| 一区二区三区波多野结衣在线观看| 久久精品欧美一区二区三区不卡| 欧美日韩在线三级| 午夜精品福利视频网站| 久久99精品久久久久久久久久久久| 亚洲国产wwwccc36天堂| 视频精品一区二区| 亚洲国产成人av网| 日韩欧美一区电影| 亚洲国产高清不卡| 久久久久9999亚洲精品| 自拍偷拍欧美激情| 国产精品久久久久久一区二区三区| 亚洲欧美日韩国产手机在线| 久久九九全国免费| 中文字幕一区二区三区四区| 亚洲丝袜精品丝袜在线| 欧美中文字幕一区二区三区| 欧美精品久久99久久在免费线| 色婷婷精品久久二区二区蜜臂av| 91黄色免费观看| 床上的激情91.| 欧美日韩电影在线| 亚洲高清免费观看高清完整版在线观看 | 亚洲日本护士毛茸茸| 亚洲精品写真福利| 亚洲黄色小说网站| 狠狠色丁香婷婷综合久久片| 国产九色精品成人porny| 色综合久久久久综合体桃花网| 99热精品一区二区| 99re成人在线| 欧美成人一区二区三区| 久久综合九色综合欧美亚洲| 一区二区三区四区亚洲| 亚洲国产一区二区视频| 亚洲精品免费在线观看| 久久女同性恋中文字幕| 国产亚洲婷婷免费| 91碰在线视频| 色伊人久久综合中文字幕| 91在线小视频| 国产美女视频一区| 欧美日韩高清一区二区三区| 日韩欧美国产一二三区| 一区二区三区在线播| 亚洲国产成人av好男人在线观看| 亚洲伦理在线免费看| 午夜久久久久久久久| 亚洲日本乱码在线观看| 成人av在线影院| 欧美在线一二三四区| 国产精品丝袜黑色高跟| 日韩中文字幕亚洲一区二区va在线| 久久先锋影音av| 亚洲午夜精品久久久久久久久| 老司机精品视频导航| 欧美肥妇free| 精品国产欧美一区二区| 国产精品中文字幕日韩精品| 欧美人妇做爰xxxⅹ性高电影| 欧美va日韩va| 香蕉久久夜色精品国产使用方法| 成人精品国产福利| 成人午夜视频网站| 久久精品在这里| 亚洲大片免费看| 成人一区二区在线观看| 色老汉一区二区三区| 在线成人小视频| 亚洲欧美在线高清| 美国精品在线观看| 8x福利精品第一导航| 中文字幕一区二区三区av| 国产精品一区2区| 欧美老女人在线| 久久影院电视剧免费观看| 国产一区二区三区在线观看免费| 亚洲精品一区二区三区在线观看| 亚洲激情图片小说视频| 国产欧美一区二区三区沐欲| 午夜视频一区二区| 亚洲一区二区在线免费观看视频 | 亚洲国产欧美在线人成| 91在线看国产| 福利一区二区在线观看| www.日韩在线| 亚洲视频你懂的| 国产精品一级在线| 国产视频一区不卡| 久久成人免费电影| 最新国产成人在线观看| 在线视频中文字幕一区二区| 久久精品亚洲精品国产欧美| 99综合电影在线视频| 久久久久国产精品麻豆| 成人18视频在线播放| 国产亚洲精品aa| 日韩av一二三| 久久色中文字幕| 国产一区 二区| 亚洲视频在线观看三级| 成人午夜激情视频| 日韩理论片一区二区| 99免费精品视频| 91蜜桃婷婷狠狠久久综合9色| 五月激情综合婷婷| 在线观看免费亚洲| 亚洲激情自拍视频| 国产精品亚洲成人|