This mapping is unfinished: 114996 of 115042 nodes are still unmarked.

Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

1/*
2** 2001 September 15
3**
4** The author disclaims copyright to this source code. In place of
5** a legal notice, here is a blessing:
6**
7** May you do good and not evil.
…lines 8–5584 unchanged (5577 lines)
5585** The value returned is a tuning parameter. Currently the value is:
5586**
5587** 18 for star queries
5588** 12 otherwise
5589**
5590** For the purposes of this heuristic, a star-query is defined as a query
5591** with a large central table that is joined using an INNER JOIN,
5592** not CROSS or OUTER JOINs, against four or more smaller tables.
5593** The central table is called the "fact" table. The smaller tables
5594** that get joined are "dimension tables". Also, any table that is
5595** self-joined cannot be a dimension table; we assume that dimension
5596** tables may only be joined against fact tables.
5597**
5598** SIDE EFFECT: (and really the whole point of this subroutine)
5599**
5600** If pWInfo describes a star-query, then the cost for SCANs of dimension
5601** WhereLoops is increased to be slightly larger than the cost of a SCAN
5602** in the fact table. Only SCAN costs are increased. SEARCH costs are
…lines 5603–5642 unchanged (40 lines)
5643 for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){
5644 assert( pWLoop->maskSelf==MASKBIT(pWLoop->iTab) );
5645 assert( pWLoop->pNextLoop==0 || pWLoop->iTab<=pWLoop->pNextLoop->iTab );
5646 }
5647#endif /* SQLITE_DEBUG */
5648
5649 if( nLoop>=5
5650 && !pWInfo->bStarDone
5651 && OptimizationEnabled(pWInfo->pParse->db, SQLITE_StarQuery)
5652 ){
5653 SrcItem *aFromTabs; /* All terms of the FROM clause */
5654 int iFromIdx; /* Term of FROM clause is the candidate fact-table */
5655 Bitmask m; /* Bitmask for candidate fact-table */
5656 Bitmask mSelfJoin = 0; /* Tables that cannot be dimension tables */
5657 WhereLoop *pStart; /* Where to start searching for dimension-tables */
5658
5659 pWInfo->bStarDone = 1; /* Only do this computation once */
5660
5661 /* Look for fact tables with four or more dimensions where the
5662 ** dimension tables are not separately from the fact tables by an outer
5663 ** or cross join. Adjust cost weights if found.
5664 */
5665 assert( !pWInfo->bStarUsed );
5666 aFromTabs = pWInfo->pTabList->a;
5667 pStart = pWInfo->pLoops;
…lines 5668–5672 unchanged (5 lines)
5673
5674 pFactTab = aFromTabs + iFromIdx;
5675 if( (pFactTab->fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){
5676 /* If the candidate fact-table is the right table of an outer join
5677 ** restrict the search for dimension-tables to be tables to the right
5678 ** of the fact-table. */
5679 if( iFromIdx+4 > nLoop ) break; /* Impossible to reach nDep>=4 */
5680 while( pStart && pStart->iTab<=iFromIdx ){
5681 pStart = pStart->pNextLoop;
5682 }
5683 }
5684 for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){
5685 if( (aFromTabs[pWLoop->iTab].fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){
5686 /* Fact-tables and dimension-tables cannot be separated by an
5687 ** outer join (at least for the definition of fact- and dimension-
5688 ** used by this heuristic). */
5689 break;
5690 }
5691 if( (pWLoop->prereq & m)!=0 /* pWInfo depends on iFromIdx */
5692 && (pWLoop->maskSelf & mSeen)==0 /* pWInfo not already a dependency */
5693 && (pWLoop->maskSelf & mSelfJoin)==0 /* Not a self-join */
5694 ){
5695 if( aFromTabs[pWLoop->iTab].pSTab==pFactTab->pSTab ){
5696 mSelfJoin |= m;
5697 }else{
5698 nDep++;
5699 mSeen |= pWLoop->maskSelf;
5700 }
5701 }
5702 }
5703 if( nDep<=3 ) continue;
5704
5705 /* If we reach this point, it means that pFactTab is a fact table
5706 ** with four or more dimensions connected by inner joins. Proceed
5707 ** to make cost adjustments. */
5708
5709#ifdef WHERETRACE_ENABLED
…lines 5710–5732 unchanged (23 lines)
5733 if( pWLoop->nLTerm ) continue;
5734 if( pWLoop->rRun<mxRun ){
5735#ifdef WHERETRACE_ENABLED /* 0x80000 */
5736 if( sqlite3WhereTrace & 0x80000 ){
5737 SrcItem *pDim = aFromTabs + pWLoop->iTab;
5738 sqlite3DebugPrintf(
5739 "Increase SCAN cost of dimension %s(%d) of fact %s(%d) to %d\n",
5740 pDim->zAlias ? pDim->zAlias: pDim->pSTab->zName, pWLoop->iTab,
5741 pFactTab->zAlias ? pFactTab->zAlias : pFactTab->pSTab->zName,
5742 iFromIdx, mxRun
5743 );
5744 }
5745 pWLoop->rStarDelta = mxRun - pWLoop->rRun;
5746#endif /* WHERETRACE_ENABLED */
5747 pWLoop->rRun = mxRun;
5748 }
…lines 5749–7859 unchanged (2111 lines)

After

1/*
2** 2001 September 15
3**
4** The author disclaims copyright to this source code. In place of
5** a legal notice, here is a blessing:
6**
7** May you do good and not evil.
…lines 8–5584 unchanged (5577 lines)
5585** The value returned is a tuning parameter. Currently the value is:
5586**
5587** 18 for star queries
5588** 12 otherwise
5589**
5590** For the purposes of this heuristic, a star-query is defined as a query
5591** with a central "fact" table that is joined against multiple
5592** "dimension" tables, subject to the following constraints:
5593**
5594** (aa) Only a five-way or larger join is considered for this
5595** optimization. If there are fewer than four terms in the FROM
5596** clause, this heuristic does not apply.
5597**
5598** (bb) The join between the fact table and the dimension tables must
5599** be an INNER join. CROSS and OUTER JOINs do not qualify.
5600**
5601** (cc) A table must have 3 or more dimension tables in order to be
5602** considered a fact table. (Was 4 prior to 2026-02-10.)
5603**
5604** (dd) A table that is a self-join cannot be a dimension table.
5605** Dimension tables are joined against fact tables.
5606**
5607** SIDE EFFECT: (and really the whole point of this subroutine)
5608**
5609** If pWInfo describes a star-query, then the cost for SCANs of dimension
5610** WhereLoops is increased to be slightly larger than the cost of a SCAN
5611** in the fact table. Only SCAN costs are increased. SEARCH costs are
…lines 5612–5651 unchanged (40 lines)
5652 for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){
5653 assert( pWLoop->maskSelf==MASKBIT(pWLoop->iTab) );
5654 assert( pWLoop->pNextLoop==0 || pWLoop->iTab<=pWLoop->pNextLoop->iTab );
5655 }
5656#endif /* SQLITE_DEBUG */
5657
5658 if( nLoop>=4 /* Constraint (aa) */
5659 && !pWInfo->bStarDone
5660 && OptimizationEnabled(pWInfo->pParse->db, SQLITE_StarQuery)
5661 ){
5662 SrcItem *aFromTabs; /* All terms of the FROM clause */
5663 int iFromIdx; /* Term of FROM clause is the candidate fact-table */
5664 Bitmask m; /* Bitmask for candidate fact-table */
5665 Bitmask mSelfJoin = 0; /* Tables that cannot be dimension tables */
5666 WhereLoop *pStart; /* Where to start searching for dimension-tables */
5667
5668 pWInfo->bStarDone = 1; /* Only do this computation once */
5669
5670 /* Look for fact tables with three or more dimensions where the
5671 ** dimension tables are not separately from the fact tables by an outer
5672 ** or cross join. Adjust cost weights if found.
5673 */
5674 assert( !pWInfo->bStarUsed );
5675 aFromTabs = pWInfo->pTabList->a;
5676 pStart = pWInfo->pLoops;
…lines 5677–5680 unchanged (4 lines)
5681 SrcItem *pFactTab; /* The candidate fact table */
5682
5683 pFactTab = aFromTabs + iFromIdx;
5684 if( (pFactTab->fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){
5685 /* If the candidate fact-table is the right table of an outer join
5686 ** restrict the search for dimension-tables to be tables to the right
5687 ** of the fact-table. Constraint (bb) */
5688 if( iFromIdx+3 > nLoop ){
5689 break; /* ^-- Impossible to reach nDep>=2 - Constraint (cc) */
5690 }
5691 while( pStart && pStart->iTab<=iFromIdx ){
5692 pStart = pStart->pNextLoop;
5693 }
5694 }
5695 for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){
5696 if( (aFromTabs[pWLoop->iTab].fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){
5697 break; /* Constraint (bb) */
5698 }
5699 if( (pWLoop->prereq & m)!=0 /* pWInfo depends on iFromIdx */
5700 && (pWLoop->maskSelf & mSeen)==0 /* pWInfo not already a dependency */
5701 && (pWLoop->maskSelf & mSelfJoin)==0 /* Not a self-join */
5702 ){
5703 if( aFromTabs[pWLoop->iTab].pSTab==pFactTab->pSTab ){
5704 mSelfJoin |= m;
5705 }else{
5706 nDep++;
5707 mSeen |= pWLoop->maskSelf;
5708 }
5709 }
5710 }
5711 if( nDep<=2 ){
5712 continue; /* Constraint (cc) */
5713 }
5714
5715 /* If we reach this point, it means that pFactTab is a fact table
5716 ** with four or more dimensions connected by inner joins. Proceed
5717 ** to make cost adjustments. */
5718
5719#ifdef WHERETRACE_ENABLED
5720 /* Make sure rStarDelta values are initialized */
5721 if( !pWInfo->bStarUsed ){
5722 for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){
5723 pWLoop->rStarDelta = 0;
5724 }
5725 }
5726#endif
5727#ifdef WHERETRACE_ENABLED /* 0x80000 */
5728 if( sqlite3WhereTrace & 0x80000 ){
5729 Bitmask mShow = mSeen;
5730 sqlite3DebugPrintf("Fact table %s(%d), dimensions:",
5731 pFactTab->zAlias ? pFactTab->zAlias : pFactTab->pSTab->zName,
5732 iFromIdx);
5733 for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){
5734 if( mShow & pWLoop->maskSelf ){
5735 SrcItem *pDim = aFromTabs + pWLoop->iTab;
5736 mShow &= ~pWLoop->maskSelf;
5737 sqlite3DebugPrintf(" %s(%d)",
5738 pDim->zAlias ? pDim->zAlias: pDim->pSTab->zName, pWLoop->iTab);
5739 }
5740 }
5741 sqlite3DebugPrintf("\n");
5742 }
5743#endif
5744 pWInfo->bStarUsed = 1;
5745
5746 /* Compute the maximum cost of any WhereLoop for the
5747 ** fact table plus one epsilon */
5748 mxRun = LOGEST_MIN;
5749 for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){
…lines 5750–5759 unchanged (10 lines)
5760 if( pWLoop->nLTerm ) continue;
5761 if( pWLoop->rRun<mxRun ){
5762#ifdef WHERETRACE_ENABLED /* 0x80000 */
5763 if( sqlite3WhereTrace & 0x80000 ){
5764 SrcItem *pDim = aFromTabs + pWLoop->iTab;
5765 sqlite3DebugPrintf(
5766 "Increase SCAN cost of %s to %d\n",
5767 pDim->zAlias ? pDim->zAlias: pDim->pSTab->zName, mxRun
5768 );
5769 }
5770 pWLoop->rStarDelta = mxRun - pWLoop->rRun;
5771#endif /* WHERETRACE_ENABLED */
5772 pWLoop->rRun = mxRun;
5773 }
…lines 5774–7884 unchanged (2111 lines)

Before

translation_unit
comment "/*\n** 2001 September 15\n**\n** The author disclaims copyright"...
preproc_include
#include "#include"
string_literal
" "\""
string_content "sqliteInt.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "whereInt.h"
" "\""
comment "/*\n** Extra information appended to the end of sqlite3_index"...
type_definition
typedef "typedef"
struct_specifier
struct "struct"
type_identifier "HiddenIndexInfo"
type_identifier "HiddenIndexInfo"
; ";"
struct_specifier (+46 nodes collapsed)
; ";"
comment "/* Size (in bytes) of a HiddenIndeInfo object sufficient to "...
preproc_function_def
#define "#define"
identifier "SZ_HIDDENINDEXINFO"
preproc_params
( "("
identifier "N"
) ")"
preproc_arg "(offsetof(HiddenIndexInfo,aRhs) + (N)*sizeof(sqlite3_value*)"...
comment "/* Forward declaration of methods */"
declaration (+22 nodes collapsed)
comment "/*\n** Return the estimated number of output rows from a WHER"...
function_definition (+22 nodes collapsed)
comment "/*\n** Return one of the WHERE_DISTINCT_xxxxx values to indic"...
function_definition (+22 nodes collapsed)
comment "/*\n** Return the number of ORDER BY terms that are satisfied"...
function_definition (+33 nodes collapsed)
comment "/*\n** In the ORDER BY LIMIT optimization, if the inner-most "...
function_definition (+96 nodes collapsed)
comment "/*\n** While generating code for the min/max optimization, af"...
function_definition (+154 nodes collapsed)
comment "/*\n** Return the VDBE address or label to jump to in order t"...
function_definition (+36 nodes collapsed)
comment "/*\n** Return the VDBE address or label to jump to in order t"...
function_definition (+22 nodes collapsed)
comment "/*\n** Return ONEPASS_OFF (0) if an UPDATE or DELETE statemen"...
function_definition (+116 nodes collapsed)
comment "/*\n** Return TRUE if the WHERE loop uses the OP_DeferredSeek"...
function_definition (+22 nodes collapsed)
comment "/*\n** Move the content of pSrc into pDest\n*/"
function_definition (+71 nodes collapsed)
comment "/*\n** Try to insert a new prerequisite/cost entry into the W"...
function_definition (+328 nodes collapsed)
comment "/*\n** Return the bitmask for the given cursor number. Retur"...
function_definition (+166 nodes collapsed)
comment "/* Allocate memory that is automatically freed when pWInfo i"...
function_definition (+111 nodes collapsed)
function_definition (+109 nodes collapsed)
comment "/*\n** Create a new mask for cursor iCursor.\n**\n** There is o"...
function_definition (+61 nodes collapsed)
comment "/*\n** If the right-hand branch of the expression is a TK_COL"...
function_definition (+79 nodes collapsed)
comment "/*\n** Term pTerm is guaranteed to be a WO_IN term. It may be"...
function_definition (+242 nodes collapsed)
comment "/*\n** Advance to the next WhereTerm that matches according t"...
function_definition (+1064 nodes collapsed)
comment "/*\n** This is whereScanInit() for the case of an index on an"...
function_definition (+47 nodes collapsed)
comment "/*\n** Initialize a WHERE clause scanner object. Return a po"...
function_definition (+362 nodes collapsed)
comment "/*\n** Search for a term in the WHERE clause that is of the f"...
function_definition (+206 nodes collapsed)
comment "/*\n** This function searches pList for an entry that matches"...
function_definition (+230 nodes collapsed)
comment "/*\n** Return TRUE if the iCol-th column of index pIdx is NOT"...
function_definition (+143 nodes collapsed)
comment "/*\n** Return true if the DISTINCT expression-list passed as "...
function_definition (+400 nodes collapsed)
comment "/*\n** Estimate the logarithm of the input value to base 2.\n*"...
function_definition (+35 nodes collapsed)
comment "/*\n** Convert OP_Column opcodes to OP_Copy in previously gen"...
function_definition (+380 nodes collapsed)
comment "/*\n** Two routines for printing the content of an sqlite3_in"...
preproc_if (+467 nodes collapsed)
comment "/*\n** We know that pSrc is an operand of an outer join. Ret"...
function_definition (+264 nodes collapsed)
preproc_ifdef (+160 nodes collapsed)
comment "/* SQLITE_OMIT_AUTOMATIC_INDEX */"
preproc_ifdef (+317 nodes collapsed)
preproc_ifdef (+2952 nodes collapsed)
comment "/* SQLITE_OMIT_AUTOMATIC_INDEX */"
comment "/*\n** Generate bytecode that will initialize a Bloom filter "...
function_definition (+1093 nodes collapsed)
preproc_ifdef (+2794 nodes collapsed)
comment "/* !defined(SQLITE_OMIT_VIRTUALTABLE) */"
preproc_ifdef (+1165 nodes collapsed)
comment "/* SQLITE_ENABLE_STAT4 */"
comment "/*\n** If it is not NULL, pTerm is a term that provides an up"...
function_definition (+110 nodes collapsed)
preproc_ifdef (+113 nodes collapsed)
preproc_ifdef (+646 nodes collapsed)
comment "/* SQLITE_ENABLE_STAT4 */"
comment "/*\n** This function is used to estimate the number of rows t"...
function_definition (+1313 nodes collapsed)
preproc_ifdef (+381 nodes collapsed)
comment "/* SQLITE_ENABLE_STAT4 */"
preproc_ifdef (+290 nodes collapsed)
comment "/* SQLITE_ENABLE_STAT4 */"
preproc_if (+618 nodes collapsed)
preproc_ifdef (+66 nodes collapsed)
preproc_ifdef (+884 nodes collapsed)
comment "/*\n** Convert bulk memory into a valid WhereLoop that can be"...
function_definition (+64 nodes collapsed)
comment "/*\n** Clear the WhereLoop.u union. Leave WhereLoop.pLTerm i"...
function_definition (+218 nodes collapsed)
comment "/*\n** Deallocate internal memory used by a WhereLoop object."...
function_definition (+111 nodes collapsed)
comment "/*\n** Increase the memory allocation for pLoop->aLTerm[] to "...
function_definition (+192 nodes collapsed)
comment "/*\n** Transfer content from the second pLoop into the first."...
function_definition (+208 nodes collapsed)
comment "/*\n** Delete a WhereLoop object\n*/"
function_definition (+54 nodes collapsed)
comment "/*\n** Free a WhereInfo structure\n*/"
function_definition (+163 nodes collapsed)
comment "/*\n** Return TRUE if X is a proper subset of Y but is of equ"...
function_definition (+399 nodes collapsed)
comment "/*\n** Try to adjust the cost and number of output rows of Wh"...
function_definition (+360 nodes collapsed)
comment "/*\n** Search the list of WhereLoops in *ppPrev looking for o"...
function_definition (+403 nodes collapsed)
comment "/*\n** Insert or replace a WhereLoop entry using the template"...
function_definition (+769 nodes collapsed)
comment "/*\n** Callback for estLikePatternLength().\n**\n** If this nod"...
function_definition (+281 nodes collapsed)
comment "/*\n** Return the length of the longest string literal in the"...
function_definition (+99 nodes collapsed)
comment "/*\n** Adjust the WhereLoop.nOut value downward to account fo"...
function_definition (+829 nodes collapsed)
comment "/*\n** Term pTerm is a vector range comparison operation. The"...
function_definition (+455 nodes collapsed)
comment "/*\n** Adjust the cost C by the costMult factor T. This only"...
preproc_ifdef (+25 nodes collapsed)
comment "/*\n** We have so far matched pBuilder->pNew->u.btree.nEq ter"...
function_definition (+3718 nodes collapsed)
comment "/*\n** Return True if it is possible that pIndex might be use"...
function_definition (+349 nodes collapsed)
comment "/* Check to see if a partial index with pPartIndexWhere can "...
function_definition (+289 nodes collapsed)
comment "/*\n** pIdx is an index containing expressions. Check it see"...
function_definition (+115 nodes collapsed)
comment "/*\n** Structure passed to the whereIsCoveringIndex Walker ca"...
type_definition
typedef "typedef"
struct_specifier
struct "struct"
type_identifier "CoveringIndexCheck"
type_identifier "CoveringIndexCheck"
; ";"
struct_specifier (+28 nodes collapsed)
; ";"
comment "/*\n** Information passed in is pWalk->u.pCovIdxCk. Call it "...
function_definition (+264 nodes collapsed)
comment "/*\n** pIdx is an index that covers all of the low-number col"...
function_definition (+303 nodes collapsed)
comment "/*\n** This is an sqlite3ParserAddCleanup() callback that is "...
function_definition (+102 nodes collapsed)
comment "/*\n** This function is called for a partial index - one with"...
function_definition (+593 nodes collapsed)
comment "/*\n** Add all WhereLoop objects for a single table of the jo"...
function_definition (+2466 nodes collapsed)
preproc_ifdef (+3662 nodes collapsed)
comment "/* SQLITE_OMIT_VIRTUALTABLE */"
comment "/*\n** Add WhereLoop entries to handle OR terms. This works "...
function_definition (+1153 nodes collapsed)
comment "/*\n** Add all WhereLoop objects for all tables\n*/"
function_definition (+821 nodes collapsed)
comment "/* Implementation of the order-by-subquery optimization:\n**\n"...
function_definition (+536 nodes collapsed)
comment "/*\n** Examine a WherePath (with the addition of the extra Wh"...
function_definition (+2644 nodes collapsed)
comment "/*\n** If the WHERE_GROUPBY flag is set in the mask passed to"...
function_definition (+56 nodes collapsed)
preproc_ifdef (+125 nodes collapsed)
comment "/*\n** Return the cost of sorting nRow rows, assuming that th"...
function_definition (+291 nodes collapsed)
comment "/*\n** Compute the maximum number of paths in the solver algo"...
function_definition
storage_class_specifier
static "static"
primitive_type "int"
function_declarator
identifier "computeMxChoice"
parameter_list
( "("
parameter_declaration
type_identifier "WhereInfo"
pointer_declarator
* "*"
identifier "pWInfo"
) ")"
compound_statement
{ "{"
declaration
primitive_type "int"
init_declarator
identifier "nLoop"
= "="
field_expression
identifier "pWInfo"
-> "->"
field_identifier "nLevel"
; ";"
comment "/* Number of terms in the join */"
declaration
type_identifier "WhereLoop"
pointer_declarator
* "*"
identifier "pWLoop"
; ";"
comment "/* For looping over WhereLoops */"
preproc_ifdef (+80 nodes collapsed)
comment "/* SQLITE_DEBUG */"
if_statement
if "if"
parenthesized_expression (+31 nodes collapsed)
compound_statement
{ "{"
declaration
type_identifier "SrcItem"
pointer_declarator
* "*"
identifier "aFromTabs"
; ";"
comment "/* All terms of the FROM clause */"
declaration
primitive_type "int"
identifier "iFromIdx"
; ";"
comment "/* Term of FROM clause is the candidate fact-table */"
declaration
type_identifier "Bitmask"
identifier "m"
; ";"
comment "/* Bitmask for candidate fact-table */"
declaration
type_identifier "Bitmask"
init_declarator
identifier "mSelfJoin"
= "="
number_literal "0"
; ";"
comment "/* Tables that cannot be dimension tables */"
declaration
type_identifier "WhereLoop"
pointer_declarator
* "*"
identifier "pStart"
; ";"
comment "/* Where to start searching for dimension-tables */"
expression_statement
assignment_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarDone"
= "="
number_literal "1"
; ";"
comment "/* Only do this computation once */"
comment "/* Look for fact tables with four or more dimensions where t"...
expression_statement
call_expression
identifier "assert"
argument_list
( "("
unary_expression
! "!"
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarUsed"
) ")"
; ";"
expression_statement
assignment_expression
identifier "aFromTabs"
= "="
field_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "pTabList"
-> "->"
field_identifier "a"
; ";"
expression_statement
assignment_expression
identifier "pStart"
= "="
field_expression
identifier "pWInfo"
-> "->"
field_identifier "pLoops"
; ";"
for_statement
for "for"
( "("
comma_expression
assignment_expression
identifier "iFromIdx"
= "="
number_literal "0"
, ","
assignment_expression
identifier "m"
= "="
number_literal "1"
; ";"
binary_expression
identifier "iFromIdx"
< "<"
identifier "nLoop"
; ";"
comma_expression
update_expression
identifier "iFromIdx"
++ "++"
, ","
assignment_expression
identifier "m"
<<= "<<="
number_literal "1"
) ")"
compound_statement
{ "{"
declaration
primitive_type "int"
init_declarator
identifier "nDep"
= "="
number_literal "0"
; ";"
comment "/* Number of dimension tables */"
declaration
type_identifier "LogEst"
identifier "mxRun"
; ";"
comment "/* Maximum SCAN cost of a fact table */"
declaration
type_identifier "Bitmask"
init_declarator
identifier "mSeen"
= "="
number_literal "0"
; ";"
comment "/* Mask of dimension tables */"
declaration
type_identifier "SrcItem"
pointer_declarator
* "*"
identifier "pFactTab"
; ";"
comment "/* The candidate fact table */"
expression_statement
assignment_expression
identifier "pFactTab"
= "="
binary_expression
identifier "aFromTabs"
+ "+"
identifier "iFromIdx"
; ";"
if_statement
if "if"
parenthesized_expression (+25 nodes collapsed)
compound_statement
{ "{"
comment "/* If the candidate fact-table is the right table of an oute"...
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
binary_expression
identifier "iFromIdx"
+ "+"
number_literal "4"
> ">"
identifier "nLoop"
) ")"
break_statement
break "break"
; ";"
comment "/* Impossible to reach nDep>=4 */"
while_statement (+27 nodes collapsed)
} "}"
for_statement
for "for"
( "("
assignment_expression
identifier "pWLoop"
= "="
identifier "pStart"
; ";"
identifier "pWLoop"
; ";"
assignment_expression
identifier "pWLoop"
= "="
field_expression
identifier "pWLoop"
-> "->"
field_identifier "pNextLoop"
) ")"
compound_statement
{ "{"
if_statement
if "if"
parenthesized_expression (+32 nodes collapsed)
compound_statement
{ "{"
comment "/* Fact-tables and dimension-tables cannot be separated by a"...
break_statement
break "break"
; ";"
} "}"
if_statement (+104 nodes collapsed)
} "}"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
identifier "nDep"
<= "<="
number_literal "3"
) ")"
continue_statement
continue "continue"
; ";"
comment "/* If we reach this point, it means that pFactTab is a fact "...
preproc_ifdef (+52 nodes collapsed)
expression_statement
assignment_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarUsed"
= "="
number_literal "1"
; ";"
comment "/* Compute the maximum cost of any WhereLoop for the\n *"...
expression_statement
assignment_expression
identifier "mxRun"
= "="
identifier "LOGEST_MIN"
; ";"
for_statement (+72 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
call_expression
identifier "ALWAYS"
argument_list
( "("
binary_expression
identifier "mxRun"
< "<"
identifier "LOGEST_MAX"
) ")"
) ")"
expression_statement
update_expression
identifier "mxRun"
++ "++"
; ";"
comment "/* Increase the cost of table scans for dimension tables to "...
for_statement (+185 nodes collapsed)
} "}"
preproc_ifdef (+92 nodes collapsed)
} "}"
return_statement
return "return"
conditional_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarUsed"
? "?"
number_literal "18"
: ":"
number_literal "12"
; ";"
} "}"
comment "/*\n** Two WhereLoop objects, pCandidate and pBaseline, are k"...
function_definition (+114 nodes collapsed)
comment "/*\n** Given the list of WhereLoop objects at pWInfo->pLoops,"...
function_definition (+3437 nodes collapsed)
comment "/*\n** This routine implements a heuristic designed to improv"...
function_definition (+309 nodes collapsed)
comment "/*\n** Most queries use only a single table (they are not joi"...
function_definition (+964 nodes collapsed)
comment "/*\n** Helper function for exprIsDeterministic().\n*/"
function_definition (+68 nodes collapsed)
comment "/*\n** Return true if the expression contains no non-determin"...
function_definition (+86 nodes collapsed)
preproc_ifdef (+163 nodes collapsed)
comment "/* Attempt to omit tables from a join that do not affect the"...
function_definition (+830 nodes collapsed)
comment "/*\n** Check to see if there are any SEARCH loops that might "...
function_definition (+370 nodes collapsed)
comment "/*\n** The index pIdx is used by a query and contains one or "...
function_definition (+517 nodes collapsed)
comment "/*\n** Set the reverse-scan order mask to one for all tables "...
function_definition (+151 nodes collapsed)
comment "/*\n** Generate the beginning of the loop used for WHERE clau"...
function_definition (+5441 nodes collapsed)
comment "/*\n** Part of sqlite3WhereEnd() will rewrite opcodes to refe"...
preproc_ifdef (+99 nodes collapsed)
comment "/*\n** Generate the end of the WHERE loop. See comments on\n*"...
function_definition (+3371 nodes collapsed)

After

translation_unit
comment "/*\n** 2001 September 15\n**\n** The author disclaims copyright"...
preproc_include
#include "#include"
string_literal
" "\""
string_content "sqliteInt.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "whereInt.h"
" "\""
comment "/*\n** Extra information appended to the end of sqlite3_index"...
type_definition
typedef "typedef"
struct_specifier
struct "struct"
type_identifier "HiddenIndexInfo"
type_identifier "HiddenIndexInfo"
; ";"
struct_specifier (+46 nodes collapsed)
; ";"
comment "/* Size (in bytes) of a HiddenIndeInfo object sufficient to "...
preproc_function_def
#define "#define"
identifier "SZ_HIDDENINDEXINFO"
preproc_params
( "("
identifier "N"
) ")"
preproc_arg "(offsetof(HiddenIndexInfo,aRhs) + (N)*sizeof(sqlite3_value*)"...
comment "/* Forward declaration of methods */"
declaration (+22 nodes collapsed)
comment "/*\n** Return the estimated number of output rows from a WHER"...
function_definition (+22 nodes collapsed)
comment "/*\n** Return one of the WHERE_DISTINCT_xxxxx values to indic"...
function_definition (+22 nodes collapsed)
comment "/*\n** Return the number of ORDER BY terms that are satisfied"...
function_definition (+33 nodes collapsed)
comment "/*\n** In the ORDER BY LIMIT optimization, if the inner-most "...
function_definition (+96 nodes collapsed)
comment "/*\n** While generating code for the min/max optimization, af"...
function_definition (+154 nodes collapsed)
comment "/*\n** Return the VDBE address or label to jump to in order t"...
function_definition (+36 nodes collapsed)
comment "/*\n** Return the VDBE address or label to jump to in order t"...
function_definition (+22 nodes collapsed)
comment "/*\n** Return ONEPASS_OFF (0) if an UPDATE or DELETE statemen"...
function_definition (+116 nodes collapsed)
comment "/*\n** Return TRUE if the WHERE loop uses the OP_DeferredSeek"...
function_definition (+22 nodes collapsed)
comment "/*\n** Move the content of pSrc into pDest\n*/"
function_definition (+71 nodes collapsed)
comment "/*\n** Try to insert a new prerequisite/cost entry into the W"...
function_definition (+328 nodes collapsed)
comment "/*\n** Return the bitmask for the given cursor number. Retur"...
function_definition (+166 nodes collapsed)
comment "/* Allocate memory that is automatically freed when pWInfo i"...
function_definition (+111 nodes collapsed)
function_definition (+109 nodes collapsed)
comment "/*\n** Create a new mask for cursor iCursor.\n**\n** There is o"...
function_definition (+61 nodes collapsed)
comment "/*\n** If the right-hand branch of the expression is a TK_COL"...
function_definition (+79 nodes collapsed)
comment "/*\n** Term pTerm is guaranteed to be a WO_IN term. It may be"...
function_definition (+242 nodes collapsed)
comment "/*\n** Advance to the next WhereTerm that matches according t"...
function_definition (+1064 nodes collapsed)
comment "/*\n** This is whereScanInit() for the case of an index on an"...
function_definition (+47 nodes collapsed)
comment "/*\n** Initialize a WHERE clause scanner object. Return a po"...
function_definition (+362 nodes collapsed)
comment "/*\n** Search for a term in the WHERE clause that is of the f"...
function_definition (+206 nodes collapsed)
comment "/*\n** This function searches pList for an entry that matches"...
function_definition (+230 nodes collapsed)
comment "/*\n** Return TRUE if the iCol-th column of index pIdx is NOT"...
function_definition (+143 nodes collapsed)
comment "/*\n** Return true if the DISTINCT expression-list passed as "...
function_definition (+400 nodes collapsed)
comment "/*\n** Estimate the logarithm of the input value to base 2.\n*"...
function_definition (+35 nodes collapsed)
comment "/*\n** Convert OP_Column opcodes to OP_Copy in previously gen"...
function_definition (+380 nodes collapsed)
comment "/*\n** Two routines for printing the content of an sqlite3_in"...
preproc_if (+467 nodes collapsed)
comment "/*\n** We know that pSrc is an operand of an outer join. Ret"...
function_definition (+264 nodes collapsed)
preproc_ifdef (+160 nodes collapsed)
comment "/* SQLITE_OMIT_AUTOMATIC_INDEX */"
preproc_ifdef (+317 nodes collapsed)
preproc_ifdef (+2952 nodes collapsed)
comment "/* SQLITE_OMIT_AUTOMATIC_INDEX */"
comment "/*\n** Generate bytecode that will initialize a Bloom filter "...
function_definition (+1093 nodes collapsed)
preproc_ifdef (+2794 nodes collapsed)
comment "/* !defined(SQLITE_OMIT_VIRTUALTABLE) */"
preproc_ifdef (+1165 nodes collapsed)
comment "/* SQLITE_ENABLE_STAT4 */"
comment "/*\n** If it is not NULL, pTerm is a term that provides an up"...
function_definition (+110 nodes collapsed)
preproc_ifdef (+113 nodes collapsed)
preproc_ifdef (+646 nodes collapsed)
comment "/* SQLITE_ENABLE_STAT4 */"
comment "/*\n** This function is used to estimate the number of rows t"...
function_definition (+1313 nodes collapsed)
preproc_ifdef (+381 nodes collapsed)
comment "/* SQLITE_ENABLE_STAT4 */"
preproc_ifdef (+290 nodes collapsed)
comment "/* SQLITE_ENABLE_STAT4 */"
preproc_if (+618 nodes collapsed)
preproc_ifdef (+66 nodes collapsed)
preproc_ifdef (+884 nodes collapsed)
comment "/*\n** Convert bulk memory into a valid WhereLoop that can be"...
function_definition (+64 nodes collapsed)
comment "/*\n** Clear the WhereLoop.u union. Leave WhereLoop.pLTerm i"...
function_definition (+218 nodes collapsed)
comment "/*\n** Deallocate internal memory used by a WhereLoop object."...
function_definition (+111 nodes collapsed)
comment "/*\n** Increase the memory allocation for pLoop->aLTerm[] to "...
function_definition (+192 nodes collapsed)
comment "/*\n** Transfer content from the second pLoop into the first."...
function_definition (+208 nodes collapsed)
comment "/*\n** Delete a WhereLoop object\n*/"
function_definition (+54 nodes collapsed)
comment "/*\n** Free a WhereInfo structure\n*/"
function_definition (+163 nodes collapsed)
comment "/*\n** Return TRUE if X is a proper subset of Y but is of equ"...
function_definition (+399 nodes collapsed)
comment "/*\n** Try to adjust the cost and number of output rows of Wh"...
function_definition (+360 nodes collapsed)
comment "/*\n** Search the list of WhereLoops in *ppPrev looking for o"...
function_definition (+403 nodes collapsed)
comment "/*\n** Insert or replace a WhereLoop entry using the template"...
function_definition (+769 nodes collapsed)
comment "/*\n** Callback for estLikePatternLength().\n**\n** If this nod"...
function_definition (+281 nodes collapsed)
comment "/*\n** Return the length of the longest string literal in the"...
function_definition (+99 nodes collapsed)
comment "/*\n** Adjust the WhereLoop.nOut value downward to account fo"...
function_definition (+829 nodes collapsed)
comment "/*\n** Term pTerm is a vector range comparison operation. The"...
function_definition (+455 nodes collapsed)
comment "/*\n** Adjust the cost C by the costMult factor T. This only"...
preproc_ifdef (+25 nodes collapsed)
comment "/*\n** We have so far matched pBuilder->pNew->u.btree.nEq ter"...
function_definition (+3718 nodes collapsed)
comment "/*\n** Return True if it is possible that pIndex might be use"...
function_definition (+349 nodes collapsed)
comment "/* Check to see if a partial index with pPartIndexWhere can "...
function_definition (+289 nodes collapsed)
comment "/*\n** pIdx is an index containing expressions. Check it see"...
function_definition (+115 nodes collapsed)
comment "/*\n** Structure passed to the whereIsCoveringIndex Walker ca"...
type_definition
typedef "typedef"
struct_specifier
struct "struct"
type_identifier "CoveringIndexCheck"
type_identifier "CoveringIndexCheck"
; ";"
struct_specifier (+28 nodes collapsed)
; ";"
comment "/*\n** Information passed in is pWalk->u.pCovIdxCk. Call it "...
function_definition (+264 nodes collapsed)
comment "/*\n** pIdx is an index that covers all of the low-number col"...
function_definition (+303 nodes collapsed)
comment "/*\n** This is an sqlite3ParserAddCleanup() callback that is "...
function_definition (+102 nodes collapsed)
comment "/*\n** This function is called for a partial index - one with"...
function_definition (+593 nodes collapsed)
comment "/*\n** Add all WhereLoop objects for a single table of the jo"...
function_definition (+2466 nodes collapsed)
preproc_ifdef (+3662 nodes collapsed)
comment "/* SQLITE_OMIT_VIRTUALTABLE */"
comment "/*\n** Add WhereLoop entries to handle OR terms. This works "...
function_definition (+1153 nodes collapsed)
comment "/*\n** Add all WhereLoop objects for all tables\n*/"
function_definition (+821 nodes collapsed)
comment "/* Implementation of the order-by-subquery optimization:\n**\n"...
function_definition (+536 nodes collapsed)
comment "/*\n** Examine a WherePath (with the addition of the extra Wh"...
function_definition (+2644 nodes collapsed)
comment "/*\n** If the WHERE_GROUPBY flag is set in the mask passed to"...
function_definition (+56 nodes collapsed)
preproc_ifdef (+125 nodes collapsed)
comment "/*\n** Return the cost of sorting nRow rows, assuming that th"...
function_definition (+291 nodes collapsed)
comment "/*\n** Compute the maximum number of paths in the solver algo"...
function_definition
storage_class_specifier
static "static"
primitive_type "int"
function_declarator
identifier "computeMxChoice"
parameter_list
( "("
parameter_declaration
type_identifier "WhereInfo"
pointer_declarator
* "*"
identifier "pWInfo"
) ")"
compound_statement
{ "{"
declaration
primitive_type "int"
init_declarator
identifier "nLoop"
= "="
field_expression
identifier "pWInfo"
-> "->"
field_identifier "nLevel"
; ";"
comment "/* Number of terms in the join */"
declaration
type_identifier "WhereLoop"
pointer_declarator
* "*"
identifier "pWLoop"
; ";"
comment "/* For looping over WhereLoops */"
preproc_ifdef (+80 nodes collapsed)
comment "/* SQLITE_DEBUG */"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
binary_expression
binary_expression
identifier "nLoop"
>= ">="
number_literal "4"
comment "/* Constraint (aa) */"
&& "&&"
unary_expression
! "!"
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarDone"
&& "&&"
call_expression
identifier "OptimizationEnabled"
argument_list
( "("
field_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "pParse"
-> "->"
field_identifier "db"
, ","
identifier "SQLITE_StarQuery"
) ")"
) ")"
compound_statement
{ "{"
declaration
type_identifier "SrcItem"
pointer_declarator
* "*"
identifier "aFromTabs"
; ";"
comment "/* All terms of the FROM clause */"
declaration
primitive_type "int"
identifier "iFromIdx"
; ";"
comment "/* Term of FROM clause is the candidate fact-table */"
declaration
type_identifier "Bitmask"
identifier "m"
; ";"
comment "/* Bitmask for candidate fact-table */"
declaration
type_identifier "Bitmask"
init_declarator
identifier "mSelfJoin"
= "="
number_literal "0"
; ";"
comment "/* Tables that cannot be dimension tables */"
declaration
type_identifier "WhereLoop"
pointer_declarator
* "*"
identifier "pStart"
; ";"
comment "/* Where to start searching for dimension-tables */"
expression_statement
assignment_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarDone"
= "="
number_literal "1"
; ";"
comment "/* Only do this computation once */"
comment "/* Look for fact tables with three or more dimensions where "...
expression_statement
call_expression
identifier "assert"
argument_list
( "("
unary_expression
! "!"
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarUsed"
) ")"
; ";"
expression_statement
assignment_expression
identifier "aFromTabs"
= "="
field_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "pTabList"
-> "->"
field_identifier "a"
; ";"
expression_statement
assignment_expression
identifier "pStart"
= "="
field_expression
identifier "pWInfo"
-> "->"
field_identifier "pLoops"
; ";"
for_statement
for "for"
( "("
comma_expression
assignment_expression
identifier "iFromIdx"
= "="
number_literal "0"
, ","
assignment_expression
identifier "m"
= "="
number_literal "1"
; ";"
binary_expression
identifier "iFromIdx"
< "<"
identifier "nLoop"
; ";"
comma_expression
update_expression
identifier "iFromIdx"
++ "++"
, ","
assignment_expression
identifier "m"
<<= "<<="
number_literal "1"
) ")"
compound_statement
{ "{"
declaration
primitive_type "int"
init_declarator
identifier "nDep"
= "="
number_literal "0"
; ";"
comment "/* Number of dimension tables */"
declaration
type_identifier "LogEst"
identifier "mxRun"
; ";"
comment "/* Maximum SCAN cost of a fact table */"
declaration
type_identifier "Bitmask"
init_declarator
identifier "mSeen"
= "="
number_literal "0"
; ";"
comment "/* Mask of dimension tables */"
declaration
type_identifier "SrcItem"
pointer_declarator
* "*"
identifier "pFactTab"
; ";"
comment "/* The candidate fact table */"
expression_statement
assignment_expression
identifier "pFactTab"
= "="
binary_expression
identifier "aFromTabs"
+ "+"
identifier "iFromIdx"
; ";"
if_statement
if "if"
parenthesized_expression (+25 nodes collapsed)
compound_statement
{ "{"
comment "/* If the candidate fact-table is the right table of an oute"...
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
binary_expression
identifier "iFromIdx"
+ "+"
number_literal "3"
> ">"
identifier "nLoop"
) ")"
compound_statement
{ "{"
break_statement
break "break"
; ";"
comment "/* ^-- Impossible to reach nDep>=2 - Constraint (cc) */"
} "}"
while_statement (+27 nodes collapsed)
} "}"
for_statement
for "for"
( "("
assignment_expression
identifier "pWLoop"
= "="
identifier "pStart"
; ";"
identifier "pWLoop"
; ";"
assignment_expression
identifier "pWLoop"
= "="
field_expression
identifier "pWLoop"
-> "->"
field_identifier "pNextLoop"
) ")"
compound_statement
{ "{"
if_statement
if "if"
parenthesized_expression (+32 nodes collapsed)
compound_statement
{ "{"
break_statement
break "break"
; ";"
comment "/* Constraint (bb) */"
} "}"
if_statement (+104 nodes collapsed)
} "}"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
identifier "nDep"
<= "<="
number_literal "2"
) ")"
compound_statement
{ "{"
continue_statement
continue "continue"
; ";"
comment "/* Constraint (cc) */"
} "}"
comment "/* If we reach this point, it means that pFactTab is a fact "...
preproc_ifdef (+52 nodes collapsed)
preproc_ifdef
#ifdef "#ifdef"
identifier "WHERETRACE_ENABLED"
comment "/* 0x80000 */"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
identifier "sqlite3WhereTrace"
& "&"
number_literal "0x80000"
) ")"
compound_statement
{ "{"
declaration
type_identifier "Bitmask"
init_declarator
identifier "mShow"
= "="
identifier "mSeen"
; ";"
expression_statement
call_expression
identifier "sqlite3DebugPrintf"
argument_list
( "("
string_literal
" "\""
string_content "Fact table %s(%d), dimensions:"
" "\""
, ","
conditional_expression
field_expression
identifier "pFactTab"
-> "->"
field_identifier "zAlias"
? "?"
field_expression
identifier "pFactTab"
-> "->"
field_identifier "zAlias"
: ":"
field_expression
field_expression
identifier "pFactTab"
-> "->"
field_identifier "pSTab"
-> "->"
field_identifier "zName"
, ","
identifier "iFromIdx"
) ")"
; ";"
for_statement (+97 nodes collapsed)
expression_statement
call_expression
identifier "sqlite3DebugPrintf"
argument_list
( "("
string_literal
" "\""
escape_sequence "\\n"
" "\""
) ")"
; ";"
} "}"
#endif "#endif"
expression_statement
assignment_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarUsed"
= "="
number_literal "1"
; ";"
comment "/* Compute the maximum cost of any WhereLoop for the\n *"...
expression_statement
assignment_expression
identifier "mxRun"
= "="
identifier "LOGEST_MIN"
; ";"
for_statement (+72 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
call_expression
identifier "ALWAYS"
argument_list
( "("
binary_expression
identifier "mxRun"
< "<"
identifier "LOGEST_MAX"
) ")"
) ")"
expression_statement
update_expression
identifier "mxRun"
++ "++"
; ";"
comment "/* Increase the cost of table scans for dimension tables to "...
for_statement (+159 nodes collapsed)
} "}"
preproc_ifdef (+92 nodes collapsed)
} "}"
return_statement
return "return"
conditional_expression
field_expression
identifier "pWInfo"
-> "->"
field_identifier "bStarUsed"
? "?"
number_literal "18"
: ":"
number_literal "12"
; ";"
} "}"
comment "/*\n** Two WhereLoop objects, pCandidate and pBaseline, are k"...
function_definition (+114 nodes collapsed)
comment "/*\n** Given the list of WhereLoop objects at pWInfo->pLoops,"...
function_definition (+3437 nodes collapsed)
comment "/*\n** This routine implements a heuristic designed to improv"...
function_definition (+309 nodes collapsed)
comment "/*\n** Most queries use only a single table (they are not joi"...
function_definition (+964 nodes collapsed)
comment "/*\n** Helper function for exprIsDeterministic().\n*/"
function_definition (+68 nodes collapsed)
comment "/*\n** Return true if the expression contains no non-determin"...
function_definition (+86 nodes collapsed)
preproc_ifdef (+163 nodes collapsed)
comment "/* Attempt to omit tables from a join that do not affect the"...
function_definition (+830 nodes collapsed)
comment "/*\n** Check to see if there are any SEARCH loops that might "...
function_definition (+370 nodes collapsed)
comment "/*\n** The index pIdx is used by a query and contains one or "...
function_definition (+517 nodes collapsed)
comment "/*\n** Set the reverse-scan order mask to one for all tables "...
function_definition (+151 nodes collapsed)
comment "/*\n** Generate the beginning of the loop used for WHERE clau"...
function_definition (+5441 nodes collapsed)
comment "/*\n** Part of sqlite3WhereEnd() will rewrite opcodes to refe"...
preproc_ifdef (+99 nodes collapsed)
comment "/*\n** Generate the end of the WHERE loop. See comments on\n*"...
function_definition (+3371 nodes collapsed)