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

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

?? expr.c

?? 嵌入式數(shù)據(jù)系統(tǒng)軟件!
?? C
?? 第 1 頁 / 共 5 頁
字號:
  if( cnt!=1 ){    char *z = 0;    char *zErr;    zErr = cnt==0 ? "no such column: %s" : "ambiguous column name: %s";    if( zDb ){      sqlite3SetString(&z, zDb, ".", zTab, ".", zCol, (char*)0);    }else if( zTab ){      sqlite3SetString(&z, zTab, ".", zCol, (char*)0);    }else{      z = sqlite3StrDup(zCol);    }    if( z ){      sqlite3ErrorMsg(pParse, zErr, z);      sqlite3_free(z);      pTopNC->nErr++;    }else{      db->mallocFailed = 1;    }  }  /* If a column from a table in pSrcList is referenced, then record  ** this fact in the pSrcList.a[].colUsed bitmask.  Column 0 causes  ** bit 0 to be set.  Column 1 sets bit 1.  And so forth.  If the  ** column number is greater than the number of bits in the bitmask  ** then set the high-order bit of the bitmask.  */  if( pExpr->iColumn>=0 && pMatch!=0 ){    int n = pExpr->iColumn;    if( n>=sizeof(Bitmask)*8 ){      n = sizeof(Bitmask)*8-1;    }    assert( pMatch->iCursor==pExpr->iTable );    pMatch->colUsed |= ((Bitmask)1)<<n;  }lookupname_end:  /* Clean up and return  */  sqlite3_free(zDb);  sqlite3_free(zTab);  sqlite3ExprDelete(pExpr->pLeft);  pExpr->pLeft = 0;  sqlite3ExprDelete(pExpr->pRight);  pExpr->pRight = 0;  pExpr->op = TK_COLUMN;lookupname_end_2:  sqlite3_free(zCol);  if( cnt==1 ){    assert( pNC!=0 );    sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);    if( pMatch && !pMatch->pSelect ){      pExpr->pTab = pMatch->pTab;    }    /* Increment the nRef value on all name contexts from TopNC up to    ** the point where the name matched. */    for(;;){      assert( pTopNC!=0 );      pTopNC->nRef++;      if( pTopNC==pNC ) break;      pTopNC = pTopNC->pNext;    }    return 0;  } else {    return 1;  }}/*** This routine is designed as an xFunc for walkExprTree().**** Resolve symbolic names into TK_COLUMN operators for the current** node in the expression tree.  Return 0 to continue the search down** the tree or 2 to abort the tree walk.**** This routine also does error checking and name resolution for** function names.  The operator for aggregate functions is changed** to TK_AGG_FUNCTION.*/static int nameResolverStep(void *pArg, Expr *pExpr){  NameContext *pNC = (NameContext*)pArg;  Parse *pParse;  if( pExpr==0 ) return 1;  assert( pNC!=0 );  pParse = pNC->pParse;  if( ExprHasAnyProperty(pExpr, EP_Resolved) ) return 1;  ExprSetProperty(pExpr, EP_Resolved);#ifndef NDEBUG  if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){    SrcList *pSrcList = pNC->pSrcList;    int i;    for(i=0; i<pNC->pSrcList->nSrc; i++){      assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursor<pParse->nTab);    }  }#endif  switch( pExpr->op ){    /* Double-quoted strings (ex: "abc") are used as identifiers if    ** possible.  Otherwise they remain as strings.  Single-quoted    ** strings (ex: 'abc') are always string literals.    */    case TK_STRING: {      if( pExpr->token.z[0]=='\'' ) break;      /* Fall thru into the TK_ID case if this is a double-quoted string */    }    /* A lone identifier is the name of a column.    */    case TK_ID: {      lookupName(pParse, 0, 0, &pExpr->token, pNC, pExpr);      return 1;    }      /* A table name and column name:     ID.ID    ** Or a database, table and column:  ID.ID.ID    */    case TK_DOT: {      Token *pColumn;      Token *pTable;      Token *pDb;      Expr *pRight;      /* if( pSrcList==0 ) break; */      pRight = pExpr->pRight;      if( pRight->op==TK_ID ){        pDb = 0;        pTable = &pExpr->pLeft->token;        pColumn = &pRight->token;      }else{        assert( pRight->op==TK_DOT );        pDb = &pExpr->pLeft->token;        pTable = &pRight->pLeft->token;        pColumn = &pRight->pRight->token;      }      lookupName(pParse, pDb, pTable, pColumn, pNC, pExpr);      return 1;    }    /* Resolve function names    */    case TK_CONST_FUNC:    case TK_FUNCTION: {      ExprList *pList = pExpr->pList;    /* The argument list */      int n = pList ? pList->nExpr : 0;  /* Number of arguments */      int no_such_func = 0;       /* True if no such function exists */      int wrong_num_args = 0;     /* True if wrong number of arguments */      int is_agg = 0;             /* True if is an aggregate function */      int i;      int auth;                   /* Authorization to use the function */      int nId;                    /* Number of characters in function name */      const char *zId;            /* The function name. */      FuncDef *pDef;              /* Information about the function */      int enc = ENC(pParse->db);  /* The database encoding */      zId = (char*)pExpr->token.z;      nId = pExpr->token.n;      pDef = sqlite3FindFunction(pParse->db, zId, nId, n, enc, 0);      if( pDef==0 ){        pDef = sqlite3FindFunction(pParse->db, zId, nId, -1, enc, 0);        if( pDef==0 ){          no_such_func = 1;        }else{          wrong_num_args = 1;        }      }else{        is_agg = pDef->xFunc==0;      }#ifndef SQLITE_OMIT_AUTHORIZATION      if( pDef ){        auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);        if( auth!=SQLITE_OK ){          if( auth==SQLITE_DENY ){            sqlite3ErrorMsg(pParse, "not authorized to use function: %s",                                    pDef->zName);            pNC->nErr++;          }          pExpr->op = TK_NULL;          return 1;        }      }#endif      if( is_agg && !pNC->allowAgg ){        sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId);        pNC->nErr++;        is_agg = 0;      }else if( no_such_func ){        sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId);        pNC->nErr++;      }else if( wrong_num_args ){        sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()",             nId, zId);        pNC->nErr++;      }      if( is_agg ){        pExpr->op = TK_AGG_FUNCTION;        pNC->hasAgg = 1;      }      if( is_agg ) pNC->allowAgg = 0;      for(i=0; pNC->nErr==0 && i<n; i++){        walkExprTree(pList->a[i].pExpr, nameResolverStep, pNC);      }      if( is_agg ) pNC->allowAgg = 1;      /* FIX ME:  Compute pExpr->affinity based on the expected return      ** type of the function       */      return is_agg;    }#ifndef SQLITE_OMIT_SUBQUERY    case TK_SELECT:    case TK_EXISTS:#endif    case TK_IN: {      if( pExpr->pSelect ){        int nRef = pNC->nRef;#ifndef SQLITE_OMIT_CHECK        if( pNC->isCheck ){          sqlite3ErrorMsg(pParse,"subqueries prohibited in CHECK constraints");        }#endif        sqlite3SelectResolve(pParse, pExpr->pSelect, pNC);        assert( pNC->nRef>=nRef );        if( nRef!=pNC->nRef ){          ExprSetProperty(pExpr, EP_VarSelect);        }      }      break;    }#ifndef SQLITE_OMIT_CHECK    case TK_VARIABLE: {      if( pNC->isCheck ){        sqlite3ErrorMsg(pParse,"parameters prohibited in CHECK constraints");      }      break;    }#endif  }  return 0;}/*** This routine walks an expression tree and resolves references to** table columns.  Nodes of the form ID.ID or ID resolve into an** index to the table in the table list and a column offset.  The ** Expr.opcode for such nodes is changed to TK_COLUMN.  The Expr.iTable** value is changed to the index of the referenced table in pTabList** plus the "base" value.  The base value will ultimately become the** VDBE cursor number for a cursor that is pointing into the referenced** table.  The Expr.iColumn value is changed to the index of the column ** of the referenced table.  The Expr.iColumn value for the special** ROWID column is -1.  Any INTEGER PRIMARY KEY column is tried as an** alias for ROWID.**** Also resolve function names and check the functions for proper** usage.  Make sure all function names are recognized and all functions** have the correct number of arguments.  Leave an error message** in pParse->zErrMsg if anything is amiss.  Return the number of errors.**** If the expression contains aggregate functions then set the EP_Agg** property on the expression.*/int sqlite3ExprResolveNames(   NameContext *pNC,       /* Namespace to resolve expressions in. */  Expr *pExpr             /* The expression to be analyzed. */){  int savedHasAgg;  if( pExpr==0 ) return 0;#if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0  if( (pExpr->nHeight+pNC->pParse->nHeight)>SQLITE_MAX_EXPR_DEPTH ){    sqlite3ErrorMsg(pNC->pParse,        "Expression tree is too large (maximum depth %d)",       SQLITE_MAX_EXPR_DEPTH    );    return 1;  }  pNC->pParse->nHeight += pExpr->nHeight;#endif  savedHasAgg = pNC->hasAgg;  pNC->hasAgg = 0;  walkExprTree(pExpr, nameResolverStep, pNC);#if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0  pNC->pParse->nHeight -= pExpr->nHeight;#endif  if( pNC->nErr>0 ){    ExprSetProperty(pExpr, EP_Error);  }  if( pNC->hasAgg ){    ExprSetProperty(pExpr, EP_Agg);  }else if( savedHasAgg ){    pNC->hasAgg = 1;  }  return ExprHasProperty(pExpr, EP_Error);}/*** A pointer instance of this structure is used to pass information** through walkExprTree into codeSubqueryStep().*/typedef struct QueryCoder QueryCoder;struct QueryCoder {  Parse *pParse;       /* The parsing context */  NameContext *pNC;    /* Namespace of first enclosing query */};#ifdef SQLITE_TEST  int sqlite3_enable_in_opt = 1;#else  #define sqlite3_enable_in_opt 1#endif/*** This function is used by the implementation of the IN (...) operator.** It's job is to find or create a b-tree structure that may be used** either to test for membership of the (...) set or to iterate through** its members, skipping duplicates.**** The cursor opened on the structure (database table, database index ** or ephermal table) is stored in pX->iTable before this function returns.** The returned value indicates the structure type, as follows:****   IN_INDEX_ROWID - The cursor was opened on a database table.**   IN_INDEX_INDEX - The cursor was opened on a database indec.**   IN_INDEX_EPH -   The cursor was opened on a specially created and**                    populated epheremal table.**** An existing structure may only be used if the SELECT is of the simple** form:****     SELECT <column> FROM <table>**** If the mustBeUnique parameter is false, the structure will be used ** for fast set membership tests. In this case an epheremal table must ** be used unless <column> is an INTEGER PRIMARY KEY or an index can ** be found with <column> as its left-most column.**** If mustBeUnique is true, then the structure will be used to iterate** through the set members, skipping any duplicates. In this case an** epheremal table must be used unless the selected <column> is guaranteed** to be unique - either because it is an INTEGER PRIMARY KEY or it** is unique by virtue of a constraint or implicit index.*/#ifndef SQLITE_OMIT_SUBQUERYint sqlite3FindInIndex(Parse *pParse, Expr *pX, int mustBeUnique){  Select *p;  int eType = 0;  int iTab = pParse->nTab++;  /* The follwing if(...) expression is true if the SELECT is of the   ** simple form:  **  **     SELECT <column> FROM <table>  **  ** If this is the case, it may be possible to use an existing table  ** or index instead of generating an epheremal table.  */  if( sqlite3_enable_in_opt   && (p=pX->pSelect) && !p->pPrior   && !p->isDistinct && !p->isAgg && !p->pGroupBy   && p->pSrc && p->pSrc->nSrc==1 && !p->pSrc->a[0].pSelect   && !p->pSrc->a[0].pTab->pSelect                                     && p->pEList->nExpr==1 && p->pEList->a[0].pExpr->op==TK_COLUMN   && !p->pLimit && !p->pOffset && !p->pWhere  ){    sqlite3 *db = pParse->db;    Index *pIdx;    Expr *pExpr = p->pEList->a[0].pExpr;    int iCol = pExpr->iColumn;    Vdbe *v = sqlite3GetVdbe(pParse);    /* This function is only called from two places. In both cases the vdbe    ** has already been allocated. So assume sqlite3GetVdbe() is always    ** successful here.    */    assert(v);    if( iCol<0 ){      int iMem = pParse->nMem++;      int iAddr;      Table *pTab = p->pSrc->a[0].pTab;      int iDb = sqlite3SchemaToIndex(db, pTab->pSchema);      sqlite3VdbeUsesBtree(v, iDb);      sqlite3VdbeAddOp(v, OP_MemLoad, iMem, 0);      iAddr = sqlite3VdbeAddOp(v, OP_If, 0, iMem);      sqlite3VdbeAddOp(v, OP_MemInt, 1, iMem);      sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);      eType = IN_INDEX_ROWID;      sqlite3VdbeJumpHere(v, iAddr);    }else{      /* The collation sequence used by the comparison. If an index is to       ** be used in place of a temp-table, it must be ordered according      ** to this collation sequence.      */      CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr);      /* Check that the affinity that will be used to perform the       ** comparison is the same as the affinity of the column. If      ** it is not, it is not possible to use any index.      */      Table *pTab = p->pSrc->a[0].pTab;      char aff = comparisonAffinity(pX);      int affinity_ok = (pTab->aCol[iCol].affinity==aff||aff==SQLITE_AFF_NONE);      for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){        if( (pIdx->aiColumn[0]==iCol)         && (pReq==sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], -1, 0))         && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利国产成人精品照片| eeuss影院一区二区三区| 亚洲人一二三区| 国产精品你懂的在线欣赏| 国产色综合久久| 久久久久久亚洲综合| 国产日韩亚洲欧美综合| 久久九九久久九九| 久久久一区二区| 亚洲欧洲av在线| 一区二区三区四区蜜桃| 亚洲国产成人porn| 久久国产精品区| 国产高清视频一区| 色猫猫国产区一区二在线视频| 在线看日本不卡| 欧美一区二区视频在线观看2020 | 精品午夜久久福利影院| 黄色成人免费在线| a在线播放不卡| 欧美日韩久久久久久| 精品动漫一区二区三区在线观看| 午夜精品久久久久久久99水蜜桃| 青草国产精品久久久久久| 国产麻豆视频一区| 色综合色综合色综合| 91精品久久久久久久久99蜜臂| 国产日韩欧美一区二区三区乱码| 亚洲精品国产无天堂网2021| 免费看欧美美女黄的网站| 丁香啪啪综合成人亚洲小说| 欧美影视一区在线| 久久久久久久久久电影| 亚洲一卡二卡三卡四卡| 国产老女人精品毛片久久| 欧美在线不卡一区| 久久午夜羞羞影院免费观看| 亚洲精品成人精品456| 激情综合色综合久久| 欧美性色黄大片| 国产精品少妇自拍| 日韩—二三区免费观看av| 97se亚洲国产综合自在线观| 欧美一区二区视频在线观看2022 | 99麻豆久久久国产精品免费优播| 3d成人h动漫网站入口| 中文字幕在线一区免费| 国产一区二区三区在线观看免费视频| 91国偷自产一区二区三区成为亚洲经典| 亚洲精品一区二区三区影院| 亚洲成av人片在www色猫咪| 99麻豆久久久国产精品免费| 久久久久久久电影| 久久99精品视频| 日韩一区二区三区av| 亚洲一区二区精品久久av| 一本一道久久a久久精品 | 2023国产精品| 男人的天堂久久精品| 欧美精品tushy高清| 亚洲综合视频网| 色呦呦国产精品| 亚洲欧美日韩国产综合| 96av麻豆蜜桃一区二区| 国产精品色在线观看| 成人亚洲一区二区一| 国产日韩精品一区| 成人开心网精品视频| 国产精品乱码一区二三区小蝌蚪| 国产精品自拍毛片| 久久精品一区二区三区不卡牛牛| 国精产品一区一区三区mba视频 | 日韩精品乱码免费| 欧美日韩视频专区在线播放| 亚洲午夜国产一区99re久久| 欧美日韩精品一区二区天天拍小说 | 亚洲电影欧美电影有声小说| 在线看日韩精品电影| 亚洲亚洲人成综合网络| 欧美日韩在线直播| 成人免费视频一区| 亚洲精品免费播放| 欧美女孩性生活视频| 青青草97国产精品免费观看无弹窗版| 欧美精品在欧美一区二区少妇| 亚洲国产精品人人做人人爽| 欧美精品一级二级| 精品无人码麻豆乱码1区2区| 久久精品一区二区三区av| av亚洲产国偷v产偷v自拍| 一卡二卡三卡日韩欧美| 91精品国产综合久久久蜜臀图片 | 性做久久久久久久免费看| 欧美二区三区的天堂| 国模娜娜一区二区三区| 国产精品素人一区二区| 日本丶国产丶欧美色综合| 蜜臀99久久精品久久久久久软件| 久久久久久久久久电影| 色视频欧美一区二区三区| 日本不卡的三区四区五区| 日本一区二区三区dvd视频在线| 色播五月激情综合网| 日本三级亚洲精品| 国产精品不卡在线观看| 欧美日本在线看| 丰满放荡岳乱妇91ww| 五月婷婷久久丁香| 欧美激情在线观看视频免费| 欧美视频一二三区| 国产a级毛片一区| 婷婷综合五月天| 国产精品白丝在线| 精品日韩欧美在线| 欧美视频中文字幕| 成人免费视频视频在线观看免费 | 青青草国产成人av片免费| 中文字幕一区二区在线播放| 欧美大片免费久久精品三p| aaa亚洲精品一二三区| 久久99精品视频| 天堂在线一区二区| 亚洲精品高清在线观看| 久久久五月婷婷| 777午夜精品视频在线播放| 91女厕偷拍女厕偷拍高清| 国产精品一区二区在线播放| 三级一区在线视频先锋| 亚洲人成网站色在线观看| 国产日产欧美一区二区三区| 日韩欧美中文字幕制服| 欧美唯美清纯偷拍| 91九色最新地址| 91麻豆国产在线观看| 粉嫩在线一区二区三区视频| 蜜桃av噜噜一区二区三区小说| 亚洲乱码精品一二三四区日韩在线| 久久久久久久av麻豆果冻| 日韩一区二区免费电影| 欧美日韩精品福利| 欧美二区在线观看| 欧美一区二区三区精品| 欧美精品1区2区3区| 欧美乱熟臀69xxxxxx| 欧美午夜精品电影| 欧美色成人综合| 91成人网在线| 欧美精品aⅴ在线视频| 91精品在线免费| 91精品国产综合久久小美女| 制服丝袜在线91| 日韩欧美亚洲国产精品字幕久久久| 欧美三电影在线| 欧美高清www午色夜在线视频| 精品视频全国免费看| 7777女厕盗摄久久久| 日韩精品最新网址| 久久理论电影网| 国产精品美女一区二区三区 | 亚洲成人动漫精品| 日韩高清一区在线| 激情成人综合网| 波多野结衣中文一区| 91麻豆精品在线观看| 欧美视频中文一区二区三区在线观看| 欧美日韩成人在线| 精品国精品国产| 欧美激情一区二区三区全黄| 亚洲青青青在线视频| 亚洲超碰精品一区二区| 久久不见久久见免费视频7 | 五月综合激情网| 麻豆高清免费国产一区| 国产高清视频一区| 91福利视频网站| 日韩精品中文字幕一区二区三区| 久久久久久9999| 亚洲午夜免费福利视频| 精品一区二区免费| 色88888久久久久久影院野外| 欧美日韩激情一区| 久久在线观看免费| 亚洲免费看黄网站| 精品一区二区三区在线播放视频| 成人avav影音| 91精品国产品国语在线不卡| 国产欧美日韩不卡免费| 午夜电影网亚洲视频| 国产99久久久国产精品免费看| 日本久久一区二区三区| 精品少妇一区二区三区视频免付费| 国产精品久久久久影视| 日韩国产欧美在线视频| 99精品视频中文字幕| 精品日韩成人av| 午夜欧美2019年伦理| 99国产精品国产精品毛片| 日韩精品一区国产麻豆| 一区二区三区在线高清| 成人精品视频一区二区三区|