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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? select.c

?? 新版輕量級嵌入式數據庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
  char const *zOriginDb = 0;  char const *zOriginTab = 0;  char const *zOriginCol = 0;  int j;  if( pExpr==0 || pNC->pSrcList==0 ) return 0;  /* The TK_AS operator can only occur in ORDER BY, GROUP BY, HAVING,  ** and LIMIT clauses.  But pExpr originates in the result set of a  ** SELECT.  So pExpr can never contain an AS operator.  */  assert( pExpr->op!=TK_AS );  switch( pExpr->op ){    case TK_COLUMN: {      /* The expression is a column. Locate the table the column is being      ** extracted from in NameContext.pSrcList. This table may be real      ** database table or a subquery.      */      Table *pTab = 0;            /* Table structure column is extracted from */      Select *pS = 0;             /* Select the column is extracted from */      int iCol = pExpr->iColumn;  /* Index of column in pTab */      while( pNC && !pTab ){        SrcList *pTabList = pNC->pSrcList;        for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);        if( j<pTabList->nSrc ){          pTab = pTabList->a[j].pTab;          pS = pTabList->a[j].pSelect;        }else{          pNC = pNC->pNext;        }      }      if( pTab==0 ){        /* FIX ME:        ** This can occurs if you have something like "SELECT new.x;" inside        ** a trigger.  In other words, if you reference the special "new"        ** table in the result set of a select.  We do not have a good way        ** to find the actual table type, so call it "TEXT".  This is really        ** something of a bug, but I do not know how to fix it.        **        ** This code does not produce the correct answer - it just prevents        ** a segfault.  See ticket #1229.        */        zType = "TEXT";        break;      }      assert( pTab );#ifndef SQLITE_OMIT_SUBQUERY      if( pS ){        /* The "table" is actually a sub-select or a view in the FROM clause        ** of the SELECT statement. Return the declaration type and origin        ** data for the result-set column of the sub-select.        */        if( iCol>=0 && iCol<pS->pEList->nExpr ){          /* If iCol is less than zero, then the expression requests the          ** rowid of the sub-select or view. This expression is legal (see           ** test case misc2.2.2) - it always evaluates to NULL.          */          NameContext sNC;          Expr *p = pS->pEList->a[iCol].pExpr;          sNC.pSrcList = pS->pSrc;          sNC.pNext = 0;          sNC.pParse = pNC->pParse;          zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol);         }      }else#endif      if( pTab->pSchema ){        /* A real table */        assert( !pS );        if( iCol<0 ) iCol = pTab->iPKey;        assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );        if( iCol<0 ){          zType = "INTEGER";          zOriginCol = "rowid";        }else{          zType = pTab->aCol[iCol].zType;          zOriginCol = pTab->aCol[iCol].zName;        }        zOriginTab = pTab->zName;        if( pNC->pParse ){          int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);          zOriginDb = pNC->pParse->db->aDb[iDb].zName;        }      }      break;    }#ifndef SQLITE_OMIT_SUBQUERY    case TK_SELECT: {      /* The expression is a sub-select. Return the declaration type and      ** origin info for the single column in the result set of the SELECT      ** statement.      */      NameContext sNC;      Select *pS = pExpr->pSelect;      Expr *p = pS->pEList->a[0].pExpr;      sNC.pSrcList = pS->pSrc;      sNC.pNext = pNC;      sNC.pParse = pNC->pParse;      zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol);       break;    }#endif  }    if( pzOriginDb ){    assert( pzOriginTab && pzOriginCol );    *pzOriginDb = zOriginDb;    *pzOriginTab = zOriginTab;    *pzOriginCol = zOriginCol;  }  return zType;}/*** Generate code that will tell the VDBE the declaration types of columns** in the result set.*/static void generateColumnTypes(  Parse *pParse,      /* Parser context */  SrcList *pTabList,  /* List of tables */  ExprList *pEList    /* Expressions defining the result set */){  Vdbe *v = pParse->pVdbe;  int i;  NameContext sNC;  sNC.pSrcList = pTabList;  sNC.pParse = pParse;  for(i=0; i<pEList->nExpr; i++){    Expr *p = pEList->a[i].pExpr;    const char *zOrigDb = 0;    const char *zOrigTab = 0;    const char *zOrigCol = 0;    const char *zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);    /* The vdbe must make it's own copy of the column-type and other     ** column specific strings, in case the schema is reset before this    ** virtual machine is deleted.    */    sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, P3_TRANSIENT);    sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, P3_TRANSIENT);    sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, P3_TRANSIENT);    sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, P3_TRANSIENT);  }}/*** Generate code that will tell the VDBE the names of columns** in the result set.  This information is used to provide the** azCol[] values in the callback.*/static void generateColumnNames(  Parse *pParse,      /* Parser context */  SrcList *pTabList,  /* List of tables */  ExprList *pEList    /* Expressions defining the result set */){  Vdbe *v = pParse->pVdbe;  int i, j;  sqlite3 *db = pParse->db;  int fullNames, shortNames;#ifndef SQLITE_OMIT_EXPLAIN  /* If this is an EXPLAIN, skip this step */  if( pParse->explain ){    return;  }#endif  assert( v!=0 );  if( pParse->colNamesSet || v==0 || sqlite3MallocFailed() ) return;  pParse->colNamesSet = 1;  fullNames = (db->flags & SQLITE_FullColNames)!=0;  shortNames = (db->flags & SQLITE_ShortColNames)!=0;  sqlite3VdbeSetNumCols(v, pEList->nExpr);  for(i=0; i<pEList->nExpr; i++){    Expr *p;    p = pEList->a[i].pExpr;    if( p==0 ) continue;    if( pEList->a[i].zName ){      char *zName = pEList->a[i].zName;      sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, strlen(zName));      continue;    }    if( p->op==TK_COLUMN && pTabList ){      Table *pTab;      char *zCol;      int iCol = p->iColumn;      for(j=0; j<pTabList->nSrc && pTabList->a[j].iCursor!=p->iTable; j++){}      assert( j<pTabList->nSrc );      pTab = pTabList->a[j].pTab;      if( iCol<0 ) iCol = pTab->iPKey;      assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );      if( iCol<0 ){        zCol = "rowid";      }else{        zCol = pTab->aCol[iCol].zName;      }      if( !shortNames && !fullNames && p->span.z && p->span.z[0] ){        sqlite3VdbeSetColName(v, i, COLNAME_NAME, (char*)p->span.z, p->span.n);      }else if( fullNames || (!shortNames && pTabList->nSrc>1) ){        char *zName = 0;        char *zTab;         zTab = pTabList->a[j].zAlias;        if( fullNames || zTab==0 ) zTab = pTab->zName;        sqlite3SetString(&zName, zTab, ".", zCol, (char*)0);        sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, P3_DYNAMIC);      }else{        sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, strlen(zCol));      }    }else if( p->span.z && p->span.z[0] ){      sqlite3VdbeSetColName(v, i, COLNAME_NAME, (char*)p->span.z, p->span.n);      /* sqlite3VdbeCompressSpace(v, addr); */    }else{      char zName[30];      assert( p->op!=TK_COLUMN || pTabList==0 );      sprintf(zName, "column%d", i+1);      sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, 0);    }  }  generateColumnTypes(pParse, pTabList, pEList);}#ifndef SQLITE_OMIT_COMPOUND_SELECT/*** Name of the connection operator, used for error messages.*/static const char *selectOpName(int id){  char *z;  switch( id ){    case TK_ALL:       z = "UNION ALL";   break;    case TK_INTERSECT: z = "INTERSECT";   break;    case TK_EXCEPT:    z = "EXCEPT";      break;    default:           z = "UNION";       break;  }  return z;}#endif /* SQLITE_OMIT_COMPOUND_SELECT *//*** Forward declaration*/static int prepSelectStmt(Parse*, Select*);/*** Given a SELECT statement, generate a Table structure that describes** the result set of that SELECT.*/Table *sqlite3ResultSetOfSelect(Parse *pParse, char *zTabName, Select *pSelect){  Table *pTab;  int i, j;  ExprList *pEList;  Column *aCol, *pCol;  while( pSelect->pPrior ) pSelect = pSelect->pPrior;  if( prepSelectStmt(pParse, pSelect) ){    return 0;  }  if( sqlite3SelectResolve(pParse, pSelect, 0) ){    return 0;  }  pTab = sqliteMalloc( sizeof(Table) );  if( pTab==0 ){    return 0;  }  pTab->nRef = 1;  pTab->zName = zTabName ? sqliteStrDup(zTabName) : 0;  pEList = pSelect->pEList;  pTab->nCol = pEList->nExpr;  assert( pTab->nCol>0 );  pTab->aCol = aCol = sqliteMalloc( sizeof(pTab->aCol[0])*pTab->nCol );  for(i=0, pCol=aCol; i<pTab->nCol; i++, pCol++){    Expr *p, *pR;    char *zType;    char *zName;    char *zBasename;    CollSeq *pColl;    int cnt;    NameContext sNC;        /* Get an appropriate name for the column    */    p = pEList->a[i].pExpr;    assert( p->pRight==0 || p->pRight->token.z==0 || p->pRight->token.z[0]!=0 );    if( (zName = pEList->a[i].zName)!=0 ){      /* If the column contains an "AS <name>" phrase, use <name> as the name */      zName = sqliteStrDup(zName);    }else if( p->op==TK_DOT               && (pR=p->pRight)!=0 && pR->token.z && pR->token.z[0] ){      /* For columns of the from A.B use B as the name */      zName = sqlite3MPrintf("%T", &pR->token);    }else if( p->span.z && p->span.z[0] ){      /* Use the original text of the column expression as its name */      zName = sqlite3MPrintf("%T", &p->span);    }else{      /* If all else fails, make up a name */      zName = sqlite3MPrintf("column%d", i+1);    }    sqlite3Dequote(zName);    if( sqlite3MallocFailed() ){      sqliteFree(zName);      sqlite3DeleteTable(0, pTab);      return 0;    }    /* Make sure the column name is unique.  If the name is not unique,    ** append a integer to the name so that it becomes unique.    */    zBasename = zName;    for(j=cnt=0; j<i; j++){      if( sqlite3StrICmp(aCol[j].zName, zName)==0 ){        zName = sqlite3MPrintf("%s:%d", zBasename, ++cnt);        j = -1;        if( zName==0 ) break;      }    }    if( zBasename!=zName ){      sqliteFree(zBasename);    }    pCol->zName = zName;    /* Get the typename, type affinity, and collating sequence for the    ** column.    */    memset(&sNC, 0, sizeof(sNC));    sNC.pSrcList = pSelect->pSrc;    zType = sqliteStrDup(columnType(&sNC, p, 0, 0, 0));    pCol->zType = zType;    pCol->affinity = sqlite3ExprAffinity(p);    pColl = sqlite3ExprCollSeq(pParse, p);    if( pColl ){      pCol->zColl = sqliteStrDup(pColl->zName);    }  }  pTab->iPKey = -1;  return pTab;}/*** Prepare a SELECT statement for processing by doing the following** things:****    (1)  Make sure VDBE cursor numbers have been assigned to every**         element of the FROM clause.****    (2)  Fill in the pTabList->a[].pTab fields in the SrcList that **         defines FROM clause.  When views appear in the FROM clause,**         fill pTabList->a[].pSelect with a copy of the SELECT statement**         that implements the view.  A copy is made of the view's SELECT**         statement so that we can freely modify or delete that statement**         without worrying about messing up the presistent representation**         of the view.****    (3)  Add terms to the WHERE clause to accomodate the NATURAL keyword**         on joins and the ON and USING clause of joins.****    (4)  Scan the list of columns in the result set (pEList) looking**         for instances of the "*" operator or the TABLE.* operator.**         If found, expand each "*" to be every column in every table**         and TABLE.* to be every column in TABLE.**** Return 0 on success.  If there are problems, leave an error message** in pParse and return non-zero.*/static int prepSelectStmt(Parse *pParse, Select *p){  int i, j, k, rc;  SrcList *pTabList;  ExprList *pEList;  struct SrcList_item *pFrom;  if( p==0 || p->pSrc==0 || sqlite3MallocFailed() ){    return 1;  }  pTabList = p->pSrc;  pEList = p->pEList;  /* Make sure cursor numbers have been assigned to all entries in  ** the FROM clause of the SELECT statement.  */  sqlite3SrcListAssignCursors(pParse, p->pSrc);  /* Look up every table named in the FROM clause of the select.  If  ** an entry of the FROM clause is a subquery instead of a table or view,  ** then create a transient table structure to describe the subquery.  */  for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){    Table *pTab;    if( pFrom->pTab!=0 ){      /* This statement has already been prepared.  There is no need      ** to go further. */      assert( i==0 );      return 0;    }    if( pFrom->zName==0 ){#ifndef SQLITE_OMIT_SUBQUERY      /* A sub-query in the FROM clause of a SELECT */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
这里只有精品视频在线观看| 国产suv精品一区二区6| 精品精品欲导航| 欧美电影精品一区二区| 国产日产亚洲精品系列| 国产精品传媒在线| 欧美一卡在线观看| 91理论电影在线观看| 丝袜诱惑亚洲看片| 免费在线观看成人| 国模冰冰炮一区二区| 91麻豆文化传媒在线观看| 欧美丝袜丝交足nylons图片| 91精品国模一区二区三区| 久久久久97国产精华液好用吗| 国产日产欧美一区二区视频| 一区二区三区在线观看欧美| 久久精品久久久精品美女| 国产高清久久久| 国产在线精品一区二区| 日本高清不卡一区| 精品久久久久久亚洲综合网| 亚洲精品欧美激情| 日韩av成人高清| 成人国产精品免费观看视频| 正在播放亚洲一区| 久久精品在这里| 中文字幕视频一区二区三区久| 欧美aaaaaa午夜精品| 成人动漫精品一区二区| 欧美一级片在线观看| 亚洲国产激情av| 亚洲电影一级黄| 成人综合激情网| 欧美日韩激情一区二区| 亚洲欧洲成人自拍| 青青草97国产精品免费观看无弹窗版| 丁香五精品蜜臀久久久久99网站| 91精品国产欧美日韩| 国产精品久久久久久久久免费丝袜 | 色综合久久久久综合99| 欧美成人伊人久久综合网| 自拍视频在线观看一区二区| 免费日本视频一区| 欧美午夜片在线观看| 国产欧美精品一区二区三区四区 | 黄色精品一二区| 在线看不卡av| 国产日本一区二区| 免费的国产精品| 欧美亚州韩日在线看免费版国语版| 欧美激情自拍偷拍| 久久精品国产精品亚洲红杏| 色8久久人人97超碰香蕉987| 国产欧美日韩麻豆91| 首页综合国产亚洲丝袜| 成人黄色小视频在线观看| 久久精品人人爽人人爽| 免费精品视频最新在线| 欧美美女激情18p| 日韩一级成人av| 成人97人人超碰人人99| 亚洲成av人片一区二区梦乃| 日韩成人一区二区三区在线观看| 国产一区二区精品在线观看| 欧美裸体一区二区三区| 亚洲人吸女人奶水| 99re成人精品视频| 久久久精品tv| 国内外成人在线| 日韩欧美国产麻豆| 午夜国产不卡在线观看视频| 成人免费视频网站在线观看| 欧美国产日韩a欧美在线观看| 久久国产免费看| 精品国产凹凸成av人导航| 日韩精品电影一区亚洲| 91.com视频| 日韩av电影天堂| 制服丝袜激情欧洲亚洲| 亚洲一区av在线| 欧美亚洲国产怡红院影院| 亚洲欧美国产77777| 91年精品国产| 亚洲欧美一区二区久久| 国产激情精品久久久第一区二区 | 亚洲色图欧美激情| 色噜噜狠狠色综合欧洲selulu| 中文字幕一区在线观看视频| 风流少妇一区二区| 亚洲视频在线观看三级| 欧美国产精品久久| 亚洲成人动漫一区| 777亚洲妇女| 日韩高清中文字幕一区| 91福利在线免费观看| 亚洲一区二区视频| 欧美日韩视频在线第一区| 亚洲人亚洲人成电影网站色| 93久久精品日日躁夜夜躁欧美| 国产精品国产自产拍在线| 色屁屁一区二区| 亚洲国产精品视频| 日韩欧美一二区| 国产一本一道久久香蕉| 国产三级欧美三级日产三级99| 99麻豆久久久国产精品免费优播| 国产精品久久毛片a| 欧美日韩一区不卡| 日本女人一区二区三区| 久久久久综合网| 91麻豆国产自产在线观看| 亚洲男人天堂一区| 色狠狠一区二区| 秋霞午夜鲁丝一区二区老狼| 欧美一区2区视频在线观看| 国产盗摄一区二区三区| 亚洲人成伊人成综合网小说| 欧美另类z0zxhd电影| 国产一区三区三区| 国产精品人人做人人爽人人添 | 中文字幕欧美国产| 99精品一区二区三区| 一区二区三区产品免费精品久久75| 欧美日韩国产一区二区三区地区| 久久91精品国产91久久小草| 中文字幕亚洲在| 欧美一区永久视频免费观看| 国产一区二区免费在线| 亚洲18色成人| 久久免费电影网| 亚洲高清中文字幕| 国产欧美日韩不卡免费| 欧美优质美女网站| 国产精品亚洲一区二区三区妖精| 综合亚洲深深色噜噜狠狠网站| 欧美性受xxxx| 国产成都精品91一区二区三| 亚洲精品国产无天堂网2021| 久久综合色婷婷| 色94色欧美sute亚洲线路一ni| 日韩成人精品视频| 1000部国产精品成人观看| 91麻豆精品国产91久久久资源速度| 成人精品gif动图一区| 午夜视频久久久久久| 日韩午夜av电影| 欧美色大人视频| 成人黄色免费短视频| 精品一区二区三区av| 亚洲综合精品自拍| 欧美久久一二区| 91麻豆成人久久精品二区三区| 日本va欧美va瓶| 亚洲一区二区精品视频| 中文一区在线播放| 欧美一卡2卡三卡4卡5免费| 91在线视频免费观看| 麻豆精品一区二区三区| 亚洲成av人影院在线观看网| 欧美激情一区二区在线| 久久五月婷婷丁香社区| 欧美自拍偷拍一区| 色中色一区二区| 国产精品亚洲午夜一区二区三区| 天堂精品中文字幕在线| 亚洲午夜在线电影| 亚洲素人一区二区| 中文字幕乱码一区二区免费| 欧美不卡视频一区| 欧美午夜影院一区| 在线观看亚洲精品| 成人激情图片网| 成人免费毛片嘿嘿连载视频| 六月婷婷色综合| 奇米精品一区二区三区在线观看一 | 欧美成人一区二区三区片免费| 欧美日韩一区久久| 亚洲一区二区欧美日韩| 欧美日韩视频在线第一区| 欧美亚洲尤物久久| 丰满放荡岳乱妇91ww| 久久99久久99精品免视看婷婷 | 日本精品视频一区二区三区| 国产福利精品导航| 国产精品一卡二卡| 麻豆精品在线视频| 蜜桃精品在线观看| 五月天丁香久久| 亚洲一区二区在线免费看| 亚洲欧美一区二区三区久本道91| 中文字幕av一区二区三区免费看 | 国产成人在线视频网址| 国内成+人亚洲+欧美+综合在线| 一区二区三区欧美视频| 亚洲国产另类av| 性欧美疯狂xxxxbbbb| 日韩精品电影一区亚洲| 亚洲超碰精品一区二区| 婷婷夜色潮精品综合在线|