SQLite

Check-in [946b87a528]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Improved comments on one routine in the query planner. Improved diagnostic output for ".wheretrace". No production code changes.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 946b87a5282f00d8c532a51f4390e6de781b9a0d6626cb3c077c5622895dc540
User & Date: drh 2017-05-19 20:55:04.375
Context
2017-05-19
22:51
Prevent a possible NULL pointer dereference in the OP_Found opcode that can follow an OOM error. Problem found by OSS-Fuzz. (check-in: c2de178fe7 user: drh tags: trunk)
20:55
Improved comments on one routine in the query planner. Improved diagnostic output for ".wheretrace". No production code changes. (check-in: 946b87a528 user: drh tags: trunk)
20:47
Fix a documentation typo. No changes to code. (check-in: 68942a4fee user: drh tags: trunk)
Changes
Side-by-Side Diff Ignore Whitespace Patch
Changes to src/where.c.
1941
1942
1943
1944
1945
1946
1947
1948

1949
1950
1951


1952
1953

1954
1955
1956
1957



1958
1959
1960
1961
1962
1963
1964
1941
1942
1943
1944
1945
1946
1947

1948
1949


1950
1951
1952

1953
1954
1955


1956
1957
1958
1959
1960
1961
1962
1963
1964
1965







-
+

-
-
+
+

-
+


-
-
+
+
+







      pTemplate->nOut = p->nOut + 1;
    }
  }
}

/*
** Search the list of WhereLoops in *ppPrev looking for one that can be
** supplanted by pTemplate.
** replaced by pTemplate.
**
** Return NULL if the WhereLoop list contains an entry that can supplant
** pTemplate, in other words if pTemplate does not belong on the list.
** Return NULL if pTemplate does not belong on the WhereLoop list.
** In other words if pTemplate ought to be dropped from further consideration.
**
** If pX is a WhereLoop that pTemplate can supplant, then return the
** If pX is a WhereLoop that pTemplate can replace, then return the
** link that points to pX.
**
** If pTemplate cannot supplant any existing element of the list but needs
** to be added to the list, then return a pointer to the tail of the list.
** If pTemplate cannot replace any existing element of the list but needs
** to be added to the list as a new entry, then return a pointer to the
** tail of the list.
*/
static WhereLoop **whereLoopFindLesser(
  WhereLoop **ppPrev,
  const WhereLoop *pTemplate
){
  WhereLoop *p;
  for(p=(*ppPrev); p; ppPrev=&p->pNextLoop, p=*ppPrev){
2095
2096
2097
2098
2099
2100
2101

2102
2103



2104
2105
2106
2107
2108
2109
2110
2096
2097
2098
2099
2100
2101
2102
2103


2104
2105
2106
2107
2108
2109
2110
2111
2112
2113







+
-
-
+
+
+







  ** WhereLoop and insert it.
  */
#if WHERETRACE_ENABLED /* 0x8 */
  if( sqlite3WhereTrace & 0x8 ){
    if( p!=0 ){
      sqlite3DebugPrintf("replace: ");
      whereLoopPrint(p, pBuilder->pWC);
      sqlite3DebugPrintf("   with: ");
    }
    sqlite3DebugPrintf("    add: ");
    }else{
      sqlite3DebugPrintf("    add: ");
    }
    whereLoopPrint(pTemplate, pBuilder->pWC);
  }
#endif
  if( p==0 ){
    /* Allocate a new WhereLoop to add to the end of the list */
    *ppPrev = p = sqlite3DbMallocRawNN(db, sizeof(WhereLoop));
    if( p==0 ) return SQLITE_NOMEM_BKPT;