| Index: third_party/sqlite/src/src/whereInt.h
|
| diff --git a/third_party/sqlite/src/src/whereInt.h b/third_party/sqlite/src/src/whereInt.h
|
| index 1a189980ef52ecc72a97c9f349739a10776dab58..fd6ebe77b4a23e53a4f5f55ad8a798981d636644 100644
|
| --- a/third_party/sqlite/src/src/whereInt.h
|
| +++ b/third_party/sqlite/src/src/whereInt.h
|
| @@ -70,7 +70,7 @@ struct WhereLevel {
|
| int addrFirst; /* First instruction of interior of the loop */
|
| int addrBody; /* Beginning of the body of this loop */
|
| #ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS
|
| - int iLikeRepCntr; /* LIKE range processing counter register */
|
| + u32 iLikeRepCntr; /* LIKE range processing counter register (times 2) */
|
| int addrLikeRep; /* LIKE range processing address */
|
| #endif
|
| u8 iFrom; /* Which entry in the FROM clause */
|
| @@ -122,6 +122,8 @@ struct WhereLoop {
|
| union {
|
| struct { /* Information for internal btree tables */
|
| u16 nEq; /* Number of equality constraints */
|
| + u16 nBtm; /* Size of BTM vector */
|
| + u16 nTop; /* Size of TOP vector */
|
| Index *pIndex; /* Index used, or NULL */
|
| } btree;
|
| struct { /* Information for virtual tables */
|
| @@ -244,19 +246,20 @@ struct WherePath {
|
| */
|
| struct WhereTerm {
|
| Expr *pExpr; /* Pointer to the subexpression that is this term */
|
| + WhereClause *pWC; /* The clause this term is part of */
|
| + LogEst truthProb; /* Probability of truth for this expression */
|
| + u16 wtFlags; /* TERM_xxx bit flags. See below */
|
| + u16 eOperator; /* A WO_xx value describing <op> */
|
| + u8 nChild; /* Number of children that must disable us */
|
| + u8 eMatchOp; /* Op for vtab MATCH/LIKE/GLOB/REGEXP terms */
|
| int iParent; /* Disable pWC->a[iParent] when this term disabled */
|
| int leftCursor; /* Cursor number of X in "X <op> <expr>" */
|
| + int iField; /* Field in (?,?,?) IN (SELECT...) vector */
|
| union {
|
| int leftColumn; /* Column number of X in "X <op> <expr>" */
|
| WhereOrInfo *pOrInfo; /* Extra information if (eOperator & WO_OR)!=0 */
|
| WhereAndInfo *pAndInfo; /* Extra information if (eOperator& WO_AND)!=0 */
|
| } u;
|
| - LogEst truthProb; /* Probability of truth for this expression */
|
| - u16 eOperator; /* A WO_xx value describing <op> */
|
| - u16 wtFlags; /* TERM_xxx bit flags. See below */
|
| - u8 nChild; /* Number of children that must disable us */
|
| - u8 eMatchOp; /* Op for vtab MATCH/LIKE/GLOB/REGEXP terms */
|
| - WhereClause *pWC; /* The clause this term is part of */
|
| Bitmask prereqRight; /* Bitmask of tables used by pExpr->pRight */
|
| Bitmask prereqAll; /* Bitmask of tables referenced by pExpr */
|
| };
|
| @@ -408,24 +411,26 @@ struct WhereInfo {
|
| Parse *pParse; /* Parsing and code generating context */
|
| SrcList *pTabList; /* List of tables in the join */
|
| ExprList *pOrderBy; /* The ORDER BY clause or NULL */
|
| - ExprList *pResultSet; /* Result set. DISTINCT operates on these */
|
| - WhereLoop *pLoops; /* List of all WhereLoop objects */
|
| - Bitmask revMask; /* Mask of ORDER BY terms that need reversing */
|
| - LogEst nRowOut; /* Estimated number of output rows */
|
| + ExprList *pDistinctSet; /* DISTINCT over all these values */
|
| + LogEst iLimit; /* LIMIT if wctrlFlags has WHERE_USE_LIMIT */
|
| + int aiCurOnePass[2]; /* OP_OpenWrite cursors for the ONEPASS opt */
|
| + int iContinue; /* Jump here to continue with next record */
|
| + int iBreak; /* Jump here to break out of the loop */
|
| + int savedNQueryLoop; /* pParse->nQueryLoop outside the WHERE loop */
|
| u16 wctrlFlags; /* Flags originally passed to sqlite3WhereBegin() */
|
| + u8 nLevel; /* Number of nested loop */
|
| i8 nOBSat; /* Number of ORDER BY terms satisfied by indices */
|
| u8 sorted; /* True if really sorted (not just grouped) */
|
| u8 eOnePass; /* ONEPASS_OFF, or _SINGLE, or _MULTI */
|
| u8 untestedTerms; /* Not all WHERE terms resolved by outer loop */
|
| - u8 eDistinct; /* One of the WHERE_DISTINCT_* values below */
|
| - u8 nLevel; /* Number of nested loop */
|
| + u8 eDistinct; /* One of the WHERE_DISTINCT_* values */
|
| + u8 bOrderedInnerLoop; /* True if only the inner-most loop is ordered */
|
| int iTop; /* The very beginning of the WHERE loop */
|
| - int iContinue; /* Jump here to continue with next record */
|
| - int iBreak; /* Jump here to break out of the loop */
|
| - int savedNQueryLoop; /* pParse->nQueryLoop outside the WHERE loop */
|
| - int aiCurOnePass[2]; /* OP_OpenWrite cursors for the ONEPASS opt */
|
| - WhereMaskSet sMaskSet; /* Map cursor numbers to bitmasks */
|
| + WhereLoop *pLoops; /* List of all WhereLoop objects */
|
| + Bitmask revMask; /* Mask of ORDER BY terms that need reversing */
|
| + LogEst nRowOut; /* Estimated number of output rows */
|
| WhereClause sWC; /* Decomposition of the WHERE clause */
|
| + WhereMaskSet sMaskSet; /* Map cursor numbers to bitmasks */
|
| WhereLevel a[1]; /* Information about each nest loop in WHERE */
|
| };
|
|
|
| @@ -435,6 +440,9 @@ struct WhereInfo {
|
| ** where.c:
|
| */
|
| Bitmask sqlite3WhereGetMask(WhereMaskSet*,int);
|
| +#ifdef WHERETRACE_ENABLED
|
| +void sqlite3WhereClausePrint(WhereClause *pWC);
|
| +#endif
|
| WhereTerm *sqlite3WhereFindTerm(
|
| WhereClause *pWC, /* The WHERE clause to be searched */
|
| int iCur, /* Cursor number of LHS */
|
| @@ -491,6 +499,14 @@ void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereClause*);
|
| ** operators that are of interest to the query planner. An
|
| ** OR-ed combination of these values can be used when searching for
|
| ** particular WhereTerms within a WhereClause.
|
| +**
|
| +** Value constraints:
|
| +** WO_EQ == SQLITE_INDEX_CONSTRAINT_EQ
|
| +** WO_LT == SQLITE_INDEX_CONSTRAINT_LT
|
| +** WO_LE == SQLITE_INDEX_CONSTRAINT_LE
|
| +** WO_GT == SQLITE_INDEX_CONSTRAINT_GT
|
| +** WO_GE == SQLITE_INDEX_CONSTRAINT_GE
|
| +** WO_MATCH == SQLITE_INDEX_CONSTRAINT_MATCH
|
| */
|
| #define WO_IN 0x0001
|
| #define WO_EQ 0x0002
|
|
|