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

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

?? sqliteint.h

?? sqlite 3.3.8 支持加密的版本
?? H
?? 第 1 頁 / 共 5 頁
字號:
** three columns in the table.  In the Index structure describing
** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
** The value of aiColumn is {2, 0}.  aiColumn[0]==2 because the 
** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
** The second column to be indexed (c1) has an index of 0 in
** Ex1.aCol[], hence Ex2.aiColumn[1]==0.
**
** The Index.onError field determines whether or not the indexed columns
** must be unique and what to do if they are not.  When Index.onError=OE_None,
** it means this is not a unique index.  Otherwise it is a unique index
** and the value of Index.onError indicate the which conflict resolution 
** algorithm to employ whenever an attempt is made to insert a non-unique
** element.
*/
struct Index {
  char *zName;     /* Name of this index */
  int nColumn;     /* Number of columns in the table used by this index */
  int *aiColumn;   /* Which columns are used by this index.  1st is 0 */
  unsigned *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
  Table *pTable;   /* The SQL table being indexed */
  int tnum;        /* Page containing root of this index in database file */
  u8 onError;      /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
  u8 autoIndex;    /* True if is automatically created (ex: by UNIQUE) */
  char *zColAff;   /* String defining the affinity of each column */
  Index *pNext;    /* The next index associated with the same table */
  Schema *pSchema; /* Schema containing this index */
  u8 *aSortOrder;  /* Array of size Index.nColumn. True==DESC, False==ASC */
  char **azColl;   /* Array of collation sequence names for index */
};

/*
** Each token coming out of the lexer is an instance of
** this structure.  Tokens are also used as part of an expression.
**
** Note if Token.z==0 then Token.dyn and Token.n are undefined and
** may contain random values.  Do not make any assuptions about Token.dyn
** and Token.n when Token.z==0.
*/
struct Token {
  const unsigned char *z; /* Text of the token.  Not NULL-terminated! */
  unsigned dyn  : 1;      /* True for malloced memory, false for static */
  unsigned n    : 31;     /* Number of characters in this token */
};

/*
** An instance of this structure contains information needed to generate
** code for a SELECT that contains aggregate functions.
**
** If Expr.op==TK_AGG_COLUMN or TK_AGG_FUNCTION then Expr.pAggInfo is a
** pointer to this structure.  The Expr.iColumn field is the index in
** AggInfo.aCol[] or AggInfo.aFunc[] of information needed to generate
** code for that node.
**
** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the
** original Select structure that describes the SELECT statement.  These
** fields do not need to be freed when deallocating the AggInfo structure.
*/
struct AggInfo {
  u8 directMode;          /* Direct rendering mode means take data directly
                          ** from source tables rather than from accumulators */
  u8 useSortingIdx;       /* In direct mode, reference the sorting index rather
                          ** than the source table */
  int sortingIdx;         /* Cursor number of the sorting index */
  ExprList *pGroupBy;     /* The group by clause */
  int nSortingColumn;     /* Number of columns in the sorting index */
  struct AggInfo_col {    /* For each column used in source tables */
    int iTable;              /* Cursor number of the source table */
    int iColumn;             /* Column number within the source table */
    int iSorterColumn;       /* Column number in the sorting index */
    int iMem;                /* Memory location that acts as accumulator */
    Expr *pExpr;             /* The original expression */
  } *aCol;
  int nColumn;            /* Number of used entries in aCol[] */
  int nColumnAlloc;       /* Number of slots allocated for aCol[] */
  int nAccumulator;       /* Number of columns that show through to the output.
                          ** Additional columns are used only as parameters to
                          ** aggregate functions */
  struct AggInfo_func {   /* For each aggregate function */
    Expr *pExpr;             /* Expression encoding the function */
    FuncDef *pFunc;          /* The aggregate function implementation */
    int iMem;                /* Memory location that acts as accumulator */
    int iDistinct;           /* Ephermeral table used to enforce DISTINCT */
  } *aFunc;
  int nFunc;              /* Number of entries in aFunc[] */
  int nFuncAlloc;         /* Number of slots allocated for aFunc[] */
};

/*
** Each node of an expression in the parse tree is an instance
** of this structure.
**
** Expr.op is the opcode.  The integer parser token codes are reused
** as opcodes here.  For example, the parser defines TK_GE to be an integer
** code representing the ">=" operator.  This same integer code is reused
** to represent the greater-than-or-equal-to operator in the expression
** tree.
**
** Expr.pRight and Expr.pLeft are subexpressions.  Expr.pList is a list
** of argument if the expression is a function.
**
** Expr.token is the operator token for this node.  For some expressions
** that have subexpressions, Expr.token can be the complete text that gave
** rise to the Expr.  In the latter case, the token is marked as being
** a compound token.
**
** An expression of the form ID or ID.ID refers to a column in a table.
** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is
** the integer cursor number of a VDBE cursor pointing to that table and
** Expr.iColumn is the column number for the specific column.  If the
** expression is used as a result in an aggregate SELECT, then the
** value is also stored in the Expr.iAgg column in the aggregate so that
** it can be accessed after all aggregates are computed.
**
** If the expression is a function, the Expr.iTable is an integer code
** representing which function.  If the expression is an unbound variable
** marker (a question mark character '?' in the original SQL) then the
** Expr.iTable holds the index number for that variable.
**
** If the expression is a subquery then Expr.iColumn holds an integer
** register number containing the result of the subquery.  If the
** subquery gives a constant result, then iTable is -1.  If the subquery
** gives a different answer at different times during statement processing
** then iTable is the address of a subroutine that computes the subquery.
**
** The Expr.pSelect field points to a SELECT statement.  The SELECT might
** be the right operand of an IN operator.  Or, if a scalar SELECT appears
** in an expression the opcode is TK_SELECT and Expr.pSelect is the only
** operand.
**
** If the Expr is of type OP_Column, and the table it is selecting from
** is a disk table or the "old.*" pseudo-table, then pTab points to the
** corresponding table definition.
*/
struct Expr {
  u8 op;                 /* Operation performed by this node */
  char affinity;         /* The affinity of the column or 0 if not a column */
  u16 flags;             /* Various flags.  See below */
  CollSeq *pColl;        /* The collation type of the column or 0 */
  Expr *pLeft, *pRight;  /* Left and right subnodes */
  ExprList *pList;       /* A list of expressions used as function arguments
                         ** or in "<expr> IN (<expr-list)" */
  Token token;           /* An operand token */
  Token span;            /* Complete text of the expression */
  int iTable, iColumn;   /* When op==TK_COLUMN, then this expr node means the
                         ** iColumn-th field of the iTable-th table. */
  AggInfo *pAggInfo;     /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
  int iAgg;              /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
  int iRightJoinTable;   /* If EP_FromJoin, the right table of the join */
  Select *pSelect;       /* When the expression is a sub-select.  Also the
                         ** right side of "<expr> IN (<select>)" */
  Table *pTab;           /* Table for OP_Column expressions. */
  Schema *pSchema;
};

/*
** The following are the meanings of bits in the Expr.flags field.
*/
#define EP_FromJoin     0x01  /* Originated in ON or USING clause of a join */
#define EP_Agg          0x02  /* Contains one or more aggregate functions */
#define EP_Resolved     0x04  /* IDs have been resolved to COLUMNs */
#define EP_Error        0x08  /* Expression contains one or more errors */
#define EP_Distinct     0x10  /* Aggregate function with DISTINCT keyword */
#define EP_VarSelect    0x20  /* pSelect is correlated, not constant */
#define EP_Dequoted     0x40  /* True if the string has been dequoted */
#define EP_InfixFunc    0x80  /* True for an infix function: LIKE, GLOB, etc */

/*
** These macros can be used to test, set, or clear bits in the 
** Expr.flags field.
*/
#define ExprHasProperty(E,P)     (((E)->flags&(P))==(P))
#define ExprHasAnyProperty(E,P)  (((E)->flags&(P))!=0)
#define ExprSetProperty(E,P)     (E)->flags|=(P)
#define ExprClearProperty(E,P)   (E)->flags&=~(P)

/*
** A list of expressions.  Each expression may optionally have a
** name.  An expr/name combination can be used in several ways, such
** as the list of "expr AS ID" fields following a "SELECT" or in the
** list of "ID = expr" items in an UPDATE.  A list of expressions can
** also be used as the argument to a function, in which case the a.zName
** field is not used.
*/
struct ExprList {
  int nExpr;             /* Number of expressions on the list */
  int nAlloc;            /* Number of entries allocated below */
  int iECursor;          /* VDBE Cursor associated with this ExprList */
  struct ExprList_item {
    Expr *pExpr;           /* The list of expressions */
    char *zName;           /* Token associated with this expression */
    u8 sortOrder;          /* 1 for DESC or 0 for ASC */
    u8 isAgg;              /* True if this is an aggregate like count(*) */
    u8 done;               /* A flag to indicate when processing is finished */
  } *a;                  /* One entry for each expression */
};

/*
** An instance of this structure can hold a simple list of identifiers,
** such as the list "a,b,c" in the following statements:
**
**      INSERT INTO t(a,b,c) VALUES ...;
**      CREATE INDEX idx ON t(a,b,c);
**      CREATE TRIGGER trig BEFORE UPDATE ON t(a,b,c) ...;
**
** The IdList.a.idx field is used when the IdList represents the list of
** column names after a table name in an INSERT statement.  In the statement
**
**     INSERT INTO t(a,b,c) ...
**
** If "a" is the k-th column of table "t", then IdList.a[0].idx==k.
*/
struct IdList {
  struct IdList_item {
    char *zName;      /* Name of the identifier */
    int idx;          /* Index in some Table.aCol[] of a column named zName */
  } *a;
  int nId;         /* Number of identifiers on the list */
  int nAlloc;      /* Number of entries allocated for a[] below */
};

/*
** The bitmask datatype defined below is used for various optimizations.
*/
typedef unsigned int Bitmask;

/*
** The following structure describes the FROM clause of a SELECT statement.
** Each table or subquery in the FROM clause is a separate element of
** the SrcList.a[] array.
**
** With the addition of multiple database support, the following structure
** can also be used to describe a particular table such as the table that
** is modified by an INSERT, DELETE, or UPDATE statement.  In standard SQL,
** such a table must be a simple name: ID.  But in SQLite, the table can
** now be identified by a database name, a dot, then the table name: ID.ID.
*/
struct SrcList {
  i16 nSrc;        /* Number of tables or subqueries in the FROM clause */
  i16 nAlloc;      /* Number of entries allocated in a[] below */
  struct SrcList_item {
    char *zDatabase;  /* Name of database holding this table */
    char *zName;      /* Name of the table */
    char *zAlias;     /* The "B" part of a "A AS B" phrase.  zName is the "A" */
    Table *pTab;      /* An SQL table corresponding to zName */
    Select *pSelect;  /* A SELECT statement used in place of a table name */
    u8 isPopulated;   /* Temporary table associated with SELECT is populated */
    u8 jointype;      /* Type of join between this table and the next */
    i16 iCursor;      /* The VDBE cursor number used to access this table */
    Expr *pOn;        /* The ON clause of a join */
    IdList *pUsing;   /* The USING clause of a join */
    Bitmask colUsed;  /* Bit N (1<<N) set if column N or pTab is used */
  } a[1];             /* One entry for each identifier on the list */
};

/*
** Permitted values of the SrcList.a.jointype field
*/
#define JT_INNER     0x0001    /* Any kind of inner or cross join */
#define JT_CROSS     0x0002    /* Explicit use of the CROSS keyword */
#define JT_NATURAL   0x0004    /* True for a "natural" join */
#define JT_LEFT      0x0008    /* Left outer join */
#define JT_RIGHT     0x0010    /* Right outer join */
#define JT_OUTER     0x0020    /* The "OUTER" keyword is present */
#define JT_ERROR     0x0040    /* unknown or unsupported join type */

/*
** For each nested loop in a WHERE clause implementation, the WhereInfo
** structure contains a single instance of this structure.  This structure
** is intended to be private the the where.c module and should not be
** access or modified by other modules.
**
** The pIdxInfo and pBestIdx fields are used to help pick the best
** index on a virtual table.  The pIdxInfo pointer contains indexing
** information for the i-th table in the FROM clause before reordering.
** All the pIdxInfo pointers are freed by whereInfoFree() in where.c.
** The pBestIdx pointer is a copy of pIdxInfo for the i-th table after
** FROM clause ordering.  This is a little confusing so I will repeat
** it in different words.  WhereInfo.a[i].pIdxInfo is index information 
** for WhereInfo.pTabList.a[i].  WhereInfo.a[i].pBestInfo is the
** index information for the i-th loop of the join.  pBestInfo is always
** either NULL or a copy of some pIdxInfo.  So for cleanup it is 
** sufficient to free all of the pIdxInfo pointers.
** 
*/
struct WhereLevel {
  int iFrom;            /* Which entry in the FROM clause */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产性天天综合网| 一区二区三区波多野结衣在线观看| 久久精品噜噜噜成人88aⅴ| 国产三级一区二区| 国产一区在线精品| 午夜av电影一区| 日本一区二区三区高清不卡| 在线亚洲人成电影网站色www| 日日骚欧美日韩| 正在播放亚洲一区| 日本一道高清亚洲日美韩| 欧美精品色综合| 国产美女精品人人做人人爽| 香港成人在线视频| 亚洲第一成人在线| 99精品视频一区| 欧美三级日韩三级国产三级| 在线不卡免费av| 色综合天天综合色综合av| 粉嫩在线一区二区三区视频| 精品伊人久久久久7777人| 亚洲成人动漫av| 中文字幕人成不卡一区| 久久人人超碰精品| 久久久国产精品不卡| 欧美一区二区网站| 欧美日本在线视频| 884aa四虎影成人精品一区| 色婷婷综合久久久久中文| 91美女在线看| 欧美午夜精品免费| 在线国产亚洲欧美| 色噜噜偷拍精品综合在线| 色综合夜色一区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 精品处破学生在线二十三| 成人a区在线观看| 久久久精品蜜桃| 91精品国产91久久综合桃花| 日韩欧美中文字幕精品| 久久久久久久久久久99999| 91精品国产91热久久久做人人| 日韩三级高清在线| 欧美激情在线一区二区三区| 亚洲高清中文字幕| 91精品国产综合久久久久久漫画| 国产专区欧美精品| 天天综合网天天综合色| 成人黄色小视频| 国产精品乱人伦| 懂色av一区二区夜夜嗨| 亚洲国产精品成人综合色在线婷婷 | 正在播放一区二区| 欧美aaaaa成人免费观看视频| 欧美日韩免费电影| 日本亚洲天堂网| 欧美男男青年gay1069videost| 精品久久久久99| 五月天久久比比资源色| 国产 欧美在线| 欧美丰满嫩嫩电影| 激情久久久久久久久久久久久久久久| 91精品国产乱| 欧美日韩大陆在线| 国产精品欧美极品| 蜜桃视频在线一区| 91香蕉视频在线| 久久久影视传媒| 国产一区二区三区视频在线播放| av亚洲精华国产精华| 精品欧美黑人一区二区三区| 一区二区三区欧美久久| 成人精品视频一区| 日韩你懂的在线观看| 亚洲你懂的在线视频| 成人综合婷婷国产精品久久蜜臀 | 久色婷婷小香蕉久久| 欧美性受极品xxxx喷水| 中文字幕一区二区在线观看| 韩国一区二区三区| 日韩欧美一级片| 婷婷综合在线观看| 欧美撒尿777hd撒尿| 亚洲老妇xxxxxx| 99综合电影在线视频| 国产精品三级av| 国产精品99久久久久久宅男| 欧美大片日本大片免费观看| 热久久免费视频| 在线观看91精品国产麻豆| 亚洲一区欧美一区| 91国产精品成人| 亚洲美女淫视频| 91美女片黄在线观看91美女| 国产精品色一区二区三区| 成人免费看黄yyy456| 欧美激情中文字幕| 成人免费视频视频| 国产精品伦理一区二区| 高清不卡在线观看av| 欧美国产精品中文字幕| 成人黄色av电影| 最新日韩在线视频| 91视频com| 亚洲精品伦理在线| 欧美丝袜丝nylons| 亚洲1区2区3区视频| 欧美疯狂性受xxxxx喷水图片| 性做久久久久久久久| 欧美日韩国产综合草草| 日韩av不卡一区二区| 欧美tickle裸体挠脚心vk| 国内精品写真在线观看| 26uuu久久综合| 国产精品1024| 国产精品另类一区| 色婷婷综合久久久久中文一区二区| 一区二区三区在线观看动漫 | 1000部国产精品成人观看| 91网页版在线| 亚洲午夜免费视频| 日韩一二三四区| 国产精品影视天天线| 国产精品色哟哟网站| 91黄色在线观看| 婷婷综合久久一区二区三区| 精品欧美黑人一区二区三区| 丰满亚洲少妇av| 自拍偷自拍亚洲精品播放| 欧美日韩亚洲综合在线| 久久99久久精品| 中文幕一区二区三区久久蜜桃| 99久久精品免费| 三级一区在线视频先锋 | 国产精品色呦呦| 日本中文字幕一区| 国产精品欧美极品| 在线观看欧美黄色| 日韩极品在线观看| 久久久久国产精品麻豆ai换脸 | 欧美日韩和欧美的一区二区| 久久99久国产精品黄毛片色诱| 国产亚洲人成网站| 一本到不卡精品视频在线观看| 欧美一区二区三区四区久久| 91黄色小视频| 666欧美在线视频| 欧美日韩中文字幕一区二区| 欧美人狂配大交3d怪物一区| 欧美一级视频精品观看| 亚洲精品欧美综合四区| www国产精品av| 成人精品视频网站| 亚洲综合成人在线视频| 99国产精品久久| 久久免费国产精品| 国产欧美一区二区精品性色超碰| 日本在线观看不卡视频| 色婷婷国产精品| 一区二区三区小说| 91麻豆精品91久久久久同性| 午夜精品久久久久久久久久久| 亚洲成在人线在线播放| 精品写真视频在线观看| 日本黄色一区二区| 国产精品久久毛片| 同产精品九九九| 国产精品正在播放| 欧美一区二区国产| 亚洲欧美日韩电影| 蜜桃视频在线观看一区| 色婷婷综合激情| 久久精品欧美一区二区三区麻豆| 日韩av网站免费在线| 91丨九色丨国产丨porny| 国产欧美精品国产国产专区| 国产一区 二区 三区一级| 自拍偷拍欧美精品| 91影院在线免费观看| 日韩欧美黄色影院| 亚洲香肠在线观看| 一本大道av伊人久久综合| 国产亚洲综合在线| 日韩av中文字幕一区二区| 国产成人精品在线看| 久久综合999| 国产精品亚洲午夜一区二区三区| 欧美日韩大陆一区二区| 亚洲一区二区三区不卡国产欧美| 一本色道a无线码一区v| 国产人成一区二区三区影院| 蜜桃视频一区二区三区在线观看| 制服丝袜成人动漫| 亚洲无人区一区| 色域天天综合网| 亚洲一区免费视频| 欧美成人精精品一区二区频| 亚洲高清免费一级二级三级| 在线免费一区三区| 亚洲一区二区视频在线观看|