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

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

?? build.c

?? sqlite庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*** 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.***************************************************************************** This file contains C code routines that are called by the SQLite parser** when syntax rules are reduced.  The routines in this file handle the** following kinds of SQL syntax:****     CREATE TABLE**     DROP TABLE**     CREATE INDEX**     DROP INDEX**     creating ID lists**     BEGIN TRANSACTION**     COMMIT**     ROLLBACK**** $Id: build.c,v 1.393 2006/03/24 03:36:26 drh Exp $*/#include "sqliteInt.h"#include <ctype.h>/*** This routine is called when a new SQL statement is beginning to** be parsed.  Initialize the pParse structure as needed.*/void sqlite3BeginParse(Parse *pParse, int explainFlag){  pParse->explain = explainFlag;  pParse->nVar = 0;}#ifndef SQLITE_OMIT_SHARED_CACHE/*** The TableLock structure is only used by the sqlite3TableLock() and** codeTableLocks() functions.*/struct TableLock {  int iDb;             /* The database containing the table to be locked */  int iTab;            /* The root page of the table to be locked */  u8 isWriteLock;      /* True for write lock.  False for a read lock */  const char *zName;   /* Name of the table */};/*** Record the fact that we want to lock a table at run-time.  **** The table to be locked has root page iTab and is found in database iDb.** A read or a write lock can be taken depending on isWritelock.**** This routine just records the fact that the lock is desired.  The** code to make the lock occur is generated by a later call to** codeTableLocks() which occurs during sqlite3FinishCoding().*/void sqlite3TableLock(  Parse *pParse,     /* Parsing context */  int iDb,           /* Index of the database containing the table to lock */  int iTab,          /* Root page number of the table to be locked */  u8 isWriteLock,    /* True for a write lock */  const char *zName  /* Name of the table to be locked */){  int i;  int nBytes;  TableLock *p;  if( 0==sqlite3ThreadDataReadOnly()->useSharedData || iDb<0 ){    return;  }  for(i=0; i<pParse->nTableLock; i++){    p = &pParse->aTableLock[i];    if( p->iDb==iDb && p->iTab==iTab ){      p->isWriteLock = (p->isWriteLock || isWriteLock);      return;    }  }  nBytes = sizeof(TableLock) * (pParse->nTableLock+1);  sqliteReallocOrFree((void **)&pParse->aTableLock, nBytes);  if( pParse->aTableLock ){    p = &pParse->aTableLock[pParse->nTableLock++];    p->iDb = iDb;    p->iTab = iTab;    p->isWriteLock = isWriteLock;    p->zName = zName;  }}/*** Code an OP_TableLock instruction for each table locked by the** statement (configured by calls to sqlite3TableLock()).*/static void codeTableLocks(Parse *pParse){  int i;  Vdbe *pVdbe;   assert( sqlite3ThreadDataReadOnly()->useSharedData || pParse->nTableLock==0 );  if( 0==(pVdbe = sqlite3GetVdbe(pParse)) ){    return;  }  for(i=0; i<pParse->nTableLock; i++){    TableLock *p = &pParse->aTableLock[i];    int p1 = p->iDb;    if( p->isWriteLock ){      p1 = -1*(p1+1);    }    sqlite3VdbeOp3(pVdbe, OP_TableLock, p1, p->iTab, p->zName, P3_STATIC);  }}#else  #define codeTableLocks(x)#endif/*** This routine is called after a single SQL statement has been** parsed and a VDBE program to execute that statement has been** prepared.  This routine puts the finishing touches on the** VDBE program and resets the pParse structure for the next** parse.**** Note that if an error occurred, it might be the case that** no VDBE code was generated.*/void sqlite3FinishCoding(Parse *pParse){  sqlite3 *db;  Vdbe *v;  if( sqlite3MallocFailed() ) return;  if( pParse->nested ) return;  if( !pParse->pVdbe ){    if( pParse->rc==SQLITE_OK && pParse->nErr ){      pParse->rc = SQLITE_ERROR;      return;    }  }  /* Begin by generating some termination code at the end of the  ** vdbe program  */  db = pParse->db;  v = sqlite3GetVdbe(pParse);  if( v ){    sqlite3VdbeAddOp(v, OP_Halt, 0, 0);    /* The cookie mask contains one bit for each database file open.    ** (Bit 0 is for main, bit 1 is for temp, and so forth.)  Bits are    ** set for each database that is used.  Generate code to start a    ** transaction on each used database and to verify the schema cookie    ** on each used database.    */    if( pParse->cookieGoto>0 ){      u32 mask;      int iDb;      sqlite3VdbeJumpHere(v, pParse->cookieGoto-1);      for(iDb=0, mask=1; iDb<db->nDb; mask<<=1, iDb++){        if( (mask & pParse->cookieMask)==0 ) continue;        sqlite3VdbeAddOp(v, OP_Transaction, iDb, (mask & pParse->writeMask)!=0);        sqlite3VdbeAddOp(v, OP_VerifyCookie, iDb, pParse->cookieValue[iDb]);      }      /* Once all the cookies have been verified and transactions opened,       ** obtain the required table-locks. This is a no-op unless the       ** shared-cache feature is enabled.      */      codeTableLocks(pParse);      sqlite3VdbeAddOp(v, OP_Goto, 0, pParse->cookieGoto);    }#ifndef SQLITE_OMIT_TRACE    /* Add a No-op that contains the complete text of the compiled SQL    ** statement as its P3 argument.  This does not change the functionality    ** of the program.     **    ** This is used to implement sqlite3_trace().    */    sqlite3VdbeOp3(v, OP_Noop, 0, 0, pParse->zSql, pParse->zTail-pParse->zSql);#endif /* SQLITE_OMIT_TRACE */  }  /* Get the VDBE program ready for execution  */  if( v && pParse->nErr==0 && !sqlite3MallocFailed() ){    FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0;    sqlite3VdbeTrace(v, trace);    sqlite3VdbeMakeReady(v, pParse->nVar, pParse->nMem+3,                         pParse->nTab+3, pParse->explain);    pParse->rc = SQLITE_DONE;    pParse->colNamesSet = 0;  }else if( pParse->rc==SQLITE_OK ){    pParse->rc = SQLITE_ERROR;  }  pParse->nTab = 0;  pParse->nMem = 0;  pParse->nSet = 0;  pParse->nVar = 0;  pParse->cookieMask = 0;  pParse->cookieGoto = 0;}/*** Run the parser and code generator recursively in order to generate** code for the SQL statement given onto the end of the pParse context** currently under construction.  When the parser is run recursively** this way, the final OP_Halt is not appended and other initialization** and finalization steps are omitted because those are handling by the** outermost parser.**** Not everything is nestable.  This facility is designed to permit** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER.  Use** care if you decide to try to use this routine for some other purposes.*/void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){  va_list ap;  char *zSql;# define SAVE_SZ  (sizeof(Parse) - offsetof(Parse,nVar))  char saveBuf[SAVE_SZ];  if( pParse->nErr ) return;  assert( pParse->nested<10 );  /* Nesting should only be of limited depth */  va_start(ap, zFormat);  zSql = sqlite3VMPrintf(zFormat, ap);  va_end(ap);  if( zSql==0 ){    return;   /* A malloc must have failed */  }  pParse->nested++;  memcpy(saveBuf, &pParse->nVar, SAVE_SZ);  memset(&pParse->nVar, 0, SAVE_SZ);  sqlite3RunParser(pParse, zSql, 0);  sqliteFree(zSql);  memcpy(&pParse->nVar, saveBuf, SAVE_SZ);  pParse->nested--;}/*** Locate the in-memory structure that describes a particular database** table given the name of that table and (optionally) the name of the** database containing the table.  Return NULL if not found.**** If zDatabase is 0, all databases are searched for the table and the** first matching table is returned.  (No checking for duplicate table** names is done.)  The search order is TEMP first, then MAIN, then any** auxiliary databases added using the ATTACH command.**** See also sqlite3LocateTable().*/Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){  Table *p = 0;  int i;  assert( zName!=0 );  for(i=OMIT_TEMPDB; i<db->nDb; i++){    int j = (i<2) ? i^1 : i;   /* Search TEMP before MAIN */    if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue;    p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, strlen(zName)+1);    if( p ) break;  }  return p;}/*** Locate the in-memory structure that describes a particular database** table given the name of that table and (optionally) the name of the** database containing the table.  Return NULL if not found.  Also leave an** error message in pParse->zErrMsg.**** The difference between this routine and sqlite3FindTable() is that this** routine leaves an error message in pParse->zErrMsg where** sqlite3FindTable() does not.*/Table *sqlite3LocateTable(Parse *pParse, const char *zName, const char *zDbase){  Table *p;  /* Read the database schema. If an error occurs, leave an error message  ** and code in pParse and return NULL. */  if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){    return 0;  }  p = sqlite3FindTable(pParse->db, zName, zDbase);  if( p==0 ){    if( zDbase ){      sqlite3ErrorMsg(pParse, "no such table: %s.%s", zDbase, zName);    }else{      sqlite3ErrorMsg(pParse, "no such table: %s", zName);    }    pParse->checkSchema = 1;  }  return p;}/*** Locate the in-memory structure that describes ** a particular index given the name of that index** and the name of the database that contains the index.** Return NULL if not found.**** If zDatabase is 0, all databases are searched for the** table and the first matching index is returned.  (No checking** for duplicate index names is done.)  The search order is** TEMP first, then MAIN, then any auxiliary databases added** using the ATTACH command.*/Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){  Index *p = 0;  int i;  for(i=OMIT_TEMPDB; i<db->nDb; i++){    int j = (i<2) ? i^1 : i;  /* Search TEMP before MAIN */    Schema *pSchema = db->aDb[j].pSchema;    if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue;    assert( pSchema || (j==1 && !db->aDb[1].pBt) );    if( pSchema ){      p = sqlite3HashFind(&pSchema->idxHash, zName, strlen(zName)+1);    }    if( p ) break;  }  return p;}/*** Reclaim the memory used by an index*/static void freeIndex(Index *p){  sqliteFree(p->zColAff);  sqliteFree(p);}/*** Remove the given index from the index hash table, and free** its memory structures.**** The index is removed from the database hash tables but** it is not unlinked from the Table that it indexes.** Unlinking from the Table must be done by the calling function.*/static void sqliteDeleteIndex(Index *p){  Index *pOld;  const char *zName = p->zName;  pOld = sqlite3HashInsert(&p->pSchema->idxHash, zName, strlen( zName)+1, 0);  assert( pOld==0 || pOld==p );  freeIndex(p);}/*** For the index called zIdxName which is found in the database iDb,** unlike that index from its Table then remove the index from** the index hash table and free all memory structures associated** with the index.*/void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){  Index *pIndex;  int len;  Hash *pHash = &db->aDb[iDb].pSchema->idxHash;  len = strlen(zIdxName);  pIndex = sqlite3HashInsert(pHash, zIdxName, len+1, 0);  if( pIndex ){    if( pIndex->pTable->pIndex==pIndex ){      pIndex->pTable->pIndex = pIndex->pNext;    }else{      Index *p;      for(p=pIndex->pTable->pIndex; p && p->pNext!=pIndex; p=p->pNext){}      if( p && p->pNext==pIndex ){        p->pNext = pIndex->pNext;      }    }    freeIndex(pIndex);  }  db->flags |= SQLITE_InternChanges;}/*** Erase all schema information from the in-memory hash tables of** a single database.  This routine is called to reclaim memory** before the database closes.  It is also called during a rollback** if there were schema changes during the transaction or if a** schema-cookie mismatch occurs.**** If iDb<=0 then reset the internal schema tables for all database** files.  If iDb>=2 then reset the internal schema for only the** single file indicated.*/void sqlite3ResetInternalSchema(sqlite3 *db, int iDb){  int i, j;  assert( iDb>=0 && iDb<db->nDb );  for(i=iDb; i<db->nDb; i++){    Db *pDb = &db->aDb[i];    if( pDb->pSchema ){      sqlite3SchemaFree(pDb->pSchema);    }    if( iDb>0 ) return;  }  assert( iDb==0 );  db->flags &= ~SQLITE_InternChanges;  /* If one or more of the auxiliary database files has been closed,  ** then remove them from the auxiliary database list.  We take the  ** opportunity to do this here since we have just deleted all of the  ** schema hash tables and therefore do not have to make any changes  ** to any of those tables.  */  for(i=0; i<db->nDb; i++){    struct Db *pDb = &db->aDb[i];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
舔着乳尖日韩一区| 欧美二区在线观看| 欧美三区在线视频| 久久久91精品国产一区二区三区| 亚洲欧美日韩一区二区| 理论片日本一区| 日韩丝袜情趣美女图片| 亚洲色图一区二区| 国产成人免费av在线| 日韩视频免费直播| 亚洲国产精品天堂| 色中色一区二区| 欧美激情一区二区三区全黄| 精品亚洲成a人| 日韩三级视频在线看| 亚洲高清在线视频| 91国产丝袜在线播放| 中文字幕一区视频| 成人美女在线视频| 国产亚洲午夜高清国产拍精品 | 555www色欧美视频| 中文字幕字幕中文在线中不卡视频| 久久激情五月婷婷| 日韩精品一区二区三区在线| 日韩国产一二三区| 欧美人伦禁忌dvd放荡欲情| 亚洲综合成人网| 欧美亚洲高清一区二区三区不卡| 亚洲人成电影网站色mp4| 91天堂素人约啪| 亚洲免费在线观看视频| 91欧美一区二区| 一区二区三区四区视频精品免费| 99精品久久99久久久久| 综合亚洲深深色噜噜狠狠网站| 成人深夜福利app| 中文字幕视频一区| 色综合久久88色综合天天免费| 亚洲欧洲制服丝袜| 欧美日韩亚洲国产综合| 国产精品 日产精品 欧美精品| 精品国产一区二区三区不卡 | 成人蜜臀av电影| 中文字幕综合网| 欧美三级韩国三级日本三斤| 视频精品一区二区| 精品国产1区二区| 国产99久久久久久免费看农村| 国产精品网站在线播放| av一区二区三区黑人| 亚洲综合色噜噜狠狠| 在线不卡免费欧美| 激情六月婷婷综合| 国产精品久久久久久一区二区三区| 99国产精品一区| 午夜精品久久久久影视| 久久久99精品免费观看| 色噜噜狠狠一区二区三区果冻| 日韩电影在线看| 久久女同精品一区二区| 色94色欧美sute亚洲线路一ni| 日韩精品电影在线| 久久久久99精品国产片| 日本高清无吗v一区| 国产在线视频不卡二| 亚洲啪啪综合av一区二区三区| 日韩亚洲欧美成人一区| av欧美精品.com| 日韩精品五月天| 亚洲同性同志一二三专区| 欧美精品第1页| 99re这里只有精品首页| 精品综合免费视频观看| 久久99精品久久只有精品| 国产精品久久久久久久久免费樱桃| 欧美日韩激情一区| 丁香五精品蜜臀久久久久99网站 | 国产精品久线在线观看| 欧美精品xxxxbbbb| 成人av资源下载| 久久精品国产一区二区三| 一区二区久久久久| 国产欧美一区二区精品性色| 日韩午夜激情免费电影| 日本韩国一区二区| 成人91在线观看| 国产一区二区不卡在线| 人人爽香蕉精品| 一区二区三区在线不卡| 国产精品久久久久aaaa樱花| 日韩精品一区二区三区中文不卡| 日本韩国欧美三级| 成a人片国产精品| 国产在线播放一区| 久久99精品国产.久久久久久| 一区二区三区日韩精品| 日本一区二区三区四区| 精品乱码亚洲一区二区不卡| 欧美一区日韩一区| 欧美日韩国产中文| 欧洲一区在线电影| 日本韩国欧美国产| 91色综合久久久久婷婷| 成+人+亚洲+综合天堂| 国产精品一级片在线观看| 国内精品嫩模私拍在线| 久久99精品久久只有精品| 毛片不卡一区二区| 另类中文字幕网| 经典三级在线一区| 国产主播一区二区三区| 国产一区二区网址| 国产精品123| 粉嫩绯色av一区二区在线观看| 久久精品国产免费看久久精品| 美女精品一区二区| 久久99久久久欧美国产| 九九九精品视频| 国产久卡久卡久卡久卡视频精品| 国产在线精品视频| 成人精品一区二区三区中文字幕| 本田岬高潮一区二区三区| 成人av手机在线观看| 日本道精品一区二区三区| 欧美成人vps| 精品国产伦理网| 国产亚洲女人久久久久毛片| 中文字幕中文在线不卡住| 中文字幕亚洲一区二区va在线| 亚洲乱码国产乱码精品精可以看| 亚洲综合在线电影| 日韩高清欧美激情| 国产裸体歌舞团一区二区| 成人国产视频在线观看| 在线免费观看日韩欧美| 日韩一区二区三区三四区视频在线观看 | 久久精品国产网站| 成人影视亚洲图片在线| 色综合一个色综合亚洲| 67194成人在线观看| 久久精品男人的天堂| 亚洲精选视频在线| 老司机午夜精品99久久| www.亚洲色图| 91麻豆精品国产91久久久久久| 精品国产露脸精彩对白| 自拍偷拍亚洲激情| 日本大胆欧美人术艺术动态| 国产成人福利片| 在线免费不卡电影| 久久久久国产精品厨房| 亚洲永久精品大片| 国产精品18久久久久久vr| 91久久人澡人人添人人爽欧美| 欧美videos中文字幕| 亚洲天堂福利av| 极品少妇xxxx精品少妇偷拍| 色屁屁一区二区| 久久无码av三级| 亚洲成人黄色小说| jlzzjlzz亚洲日本少妇| 欧美一区二区精品在线| 亚洲精品伦理在线| 久久国产夜色精品鲁鲁99| 色婷婷综合中文久久一本| 久久亚洲捆绑美女| 日韩av一区二区三区四区| 91亚洲永久精品| 国产拍欧美日韩视频二区| 日韩va亚洲va欧美va久久| 91国内精品野花午夜精品| 国产婷婷一区二区| 精品一区二区三区欧美| 欧美日韩一级二级| 亚洲免费成人av| 不卡大黄网站免费看| 久久这里只精品最新地址| 欧美aaaaaa午夜精品| 欧美日韩国产高清一区二区| 综合欧美亚洲日本| 成人激情av网| 中文字幕欧美日本乱码一线二线| 精品一二三四在线| 国产精品久久久久久久浪潮网站| 久久99久久久欧美国产| 欧美一区二区三区系列电影| 午夜精品久久久久久久久久| 欧洲av在线精品| 夜夜爽夜夜爽精品视频| 色播五月激情综合网| 亚洲精品高清在线| 色综合久久久久网| 一区二区免费看| 欧美在线不卡一区| 亚洲国产精品久久艾草纯爱| 欧美日韩一级二级三级| 日韩国产欧美视频| 欧美一区二区三区四区在线观看| 五月天丁香久久| 欧美一级生活片|