Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix typos in comments in where.c. (CVS 5180) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
7cadb223cb79387a7def7762dc9e4202 |
User & Date: | drh 2008-05-30 14:58:37.000 |
Context
2008-05-30
| ||
15:35 | Fix typos in comments in sqlite.h.in. (CVS 5181) (check-in: 47956f8ee9 user: shane tags: trunk) | |
14:58 | Fix typos in comments in where.c. (CVS 5180) (check-in: 7cadb223cb user: drh tags: trunk) | |
2008-05-29
| ||
20:22 | Consolidated inline assembly versions of "hwtime()" into hwtime.h. Provided MSVC version. Modified code for consistent use of hwtime(). Changed implementation to use sqlite_uint64 and sqlite_int64 instead of unsigned long long int and long long int for MSVC compiler support. (CVS 5179) (check-in: 19f5f571dd user: shane tags: trunk) | |
Changes
Changes to src/where.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* ** 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 module contains C code that generates VDBE code used to process | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /* ** 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 module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. This module is responsible for ** generating the code that loops through a table looking for applicable ** rows. Indices are selected and used to speed the search when doing ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". ** ** $Id: where.c,v 1.307 2008/05/30 14:58:37 drh Exp $ */ #include "sqliteInt.h" /* ** The number of bits in a Bitmask. "BMS" means "BitMask Size". */ #define BMS (sizeof(Bitmask)*8) |
︙ | ︙ | |||
215 216 217 218 219 220 221 | ** Add a new entries to the WhereClause structure. Increase the allocated ** space as necessary. ** ** If the flags argument includes TERM_DYNAMIC, then responsibility ** for freeing the expression p is assumed by the WhereClause object. ** ** WARNING: This routine might reallocate the space used to store | | | 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | ** Add a new entries to the WhereClause structure. Increase the allocated ** space as necessary. ** ** If the flags argument includes TERM_DYNAMIC, then responsibility ** for freeing the expression p is assumed by the WhereClause object. ** ** WARNING: This routine might reallocate the space used to store ** WhereTerms. All pointers to WhereTerms should be invalidated after ** calling this routine. Such pointers may be reinitialized by referencing ** the pWC->a[] array. */ static int whereClauseInsert(WhereClause *pWC, Expr *p, int flags){ WhereTerm *pTerm; int idx; if( pWC->nTerm>=pWC->nSlot ){ |
︙ | ︙ | |||
378 379 380 381 382 383 384 | /* ** Swap two objects of type T. */ #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} /* | | | 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | /* ** Swap two objects of type T. */ #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} /* ** Commute a comparison operator. Expressions of the form "X op Y" ** are converted into "Y op X". ** ** If a collation sequence is associated with either the left or right ** side of the comparison, it remains associated with the same side after ** the commutation. So "Y collate NOCASE op X" becomes ** "X collate NOCASE op Y". This is because any collation sequence on ** the left hand side of a comparison overrides any collation sequence |
︙ | ︙ | |||
617 618 619 620 621 622 623 | ** ** The context is that we have multiple OR-connected equality terms ** like this: ** ** a=<expr1> OR a=<expr2> OR b=<expr3> OR ... ** ** The pOrTerm input to this routine corresponds to a single term of | | | 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 | ** ** The context is that we have multiple OR-connected equality terms ** like this: ** ** a=<expr1> OR a=<expr2> OR b=<expr3> OR ... ** ** The pOrTerm input to this routine corresponds to a single term of ** this OR clause. In order for the term to be a candidate for ** conversion to an IN operator, the following must be true: ** ** * The left-hand side of the term must be the column which ** is identified by iCursor and iColumn. ** ** * If the right-hand side is also a column, then the affinities ** of both right and left sides must be such that no type |
︙ | ︙ | |||
672 673 674 675 676 677 678 | ** ** Since the last two terms are duplicates, only one of them ** has to qualify in order for the whole phrase to qualify. When ** this routine is called, we know that pOrTerm did not qualify. ** This routine merely checks to see if pOrTerm has a duplicate that ** might qualify. If there is a duplicate that has not yet been ** disqualified, then return true. If there are no duplicates, or | | | 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 | ** ** Since the last two terms are duplicates, only one of them ** has to qualify in order for the whole phrase to qualify. When ** this routine is called, we know that pOrTerm did not qualify. ** This routine merely checks to see if pOrTerm has a duplicate that ** might qualify. If there is a duplicate that has not yet been ** disqualified, then return true. If there are no duplicates, or ** the duplicate has also been disqualified, return false. */ static int orTermHasOkDuplicate(WhereClause *pOr, WhereTerm *pOrTerm){ if( pOrTerm->flags & TERM_COPIED ){ /* This is the original term. The duplicate is to the left had ** has not yet been analyzed and thus has not yet been disqualified. */ return 1; } |
︙ | ︙ | |||
1162 1163 1164 1165 1166 1167 1168 | } return 0; } /* ** Prepare a crude estimate of the logarithm of the input value. ** The results need not be exact. This is only used for estimating | | | 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 | } return 0; } /* ** Prepare a crude estimate of the logarithm of the input value. ** The results need not be exact. This is only used for estimating ** the total cost of performing operations with O(logN) or O(NlogN) ** complexity. Because N is just a guess, it is no great tragedy if ** logN is a little off. */ static double estLog(double N){ double logN = 1; double x = 10; while( N>x ){ |
︙ | ︙ |