Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix problems in the constant propagation optimization that were introduced by check-in [1c3e5c20a9e6f501]. Fix for ticket [1dcb4d44964846ad] |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
c9a8defcef35a1fee6bcbb88252a2d00 |
User & Date: | drh 2020-02-13 22:12:35.586 |
Context
2020-02-16
| ||
17:40 | Avoid an infinite recursion on an illegal recursive definition of an fts5vocab table. (check-in: 109ee07433 user: drh tags: trunk) | |
2020-02-13
| ||
22:12 | Fix problems in the constant propagation optimization that were introduced by check-in [1c3e5c20a9e6f501]. Fix for ticket [1dcb4d44964846ad] (check-in: c9a8defcef user: drh tags: trunk) | |
14:51 | Disallow the skip-scan optimization in the absence of sqlite_stat1 data. (check-in: e0c6b8bdb7 user: drh tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
4162 4163 4164 4165 4166 4167 4168 | Expr *pValue, /* The VALUE part of the constraint */ Expr *pExpr /* Overall expression: COLUMN=VALUE or VALUE=COLUMN */ ){ int i; assert( pColumn->op==TK_COLUMN ); assert( sqlite3ExprIsConstant(pValue) ); | | | < | 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 | Expr *pValue, /* The VALUE part of the constraint */ Expr *pExpr /* Overall expression: COLUMN=VALUE or VALUE=COLUMN */ ){ int i; assert( pColumn->op==TK_COLUMN ); assert( sqlite3ExprIsConstant(pValue) ); if( ExprHasProperty(pColumn, EP_FixedCol) ) return; if( sqlite3ExprAffinity(pValue)!=0 ) return; if( !sqlite3IsBinary(sqlite3ExprCompareCollSeq(pConst->pParse,pExpr)) ){ return; } /* 2018-10-25 ticket [cf5ed20f] ** Make sure the same pColumn is not inserted more than once */ for(i=0; i<pConst->nConst; i++){ |
︙ | ︙ | |||
4187 4188 4189 4190 4191 4192 4193 | pConst->nConst++; pConst->apExpr = sqlite3DbReallocOrFree(pConst->pParse->db, pConst->apExpr, pConst->nConst*2*sizeof(Expr*)); if( pConst->apExpr==0 ){ pConst->nConst = 0; }else{ | < < < | 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 | pConst->nConst++; pConst->apExpr = sqlite3DbReallocOrFree(pConst->pParse->db, pConst->apExpr, pConst->nConst*2*sizeof(Expr*)); if( pConst->apExpr==0 ){ pConst->nConst = 0; }else{ pConst->apExpr[pConst->nConst*2-2] = pColumn; pConst->apExpr[pConst->nConst*2-1] = pValue; } } /* ** Find all terms of COLUMN=VALUE or VALUE=COLUMN in pExpr where VALUE |
︙ | ︙ |
Changes to test/whereL.test.
︙ | ︙ | |||
140 141 142 143 144 145 146 147 148 | do_execsql_test 520 { SELECT 200, * FROM t0, v0 WHERE 0 = t0.c0 AND v0.c0 = t0.c0; } {} do_execsql_test 530 { SELECT 200, * FROM t0, v0 WHERE t0.c0 = 0 AND v0.c0 = t0.c0; } {} finish_test | > > > > > > > > > > > > | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | do_execsql_test 520 { SELECT 200, * FROM t0, v0 WHERE 0 = t0.c0 AND v0.c0 = t0.c0; } {} do_execsql_test 530 { SELECT 200, * FROM t0, v0 WHERE t0.c0 = 0 AND v0.c0 = t0.c0; } {} # 2020-02-13: ticket 1dcb4d44964846ad # A problem introduced while making optimizations on the fixes above. # reset_db do_execsql_test 600 { CREATE TABLE t1(x TEXT); CREATE TABLE t2(y TEXT); INSERT INTO t1 VALUES('good'),('bad'); INSERT INTO t2 VALUES('good'),('bad'); SELECT * FROM t1 JOIN t2 ON x=y WHERE x='good' AND y='good'; } {good good} finish_test |