Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | In the WHERE-constraint propagation optimization, if there are duplicate constraint, make sure only one of them propagates. Proposed fix for ticket [cf5ed20fc8621b165]. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
5d5b596f152bb2781011a05f75f9e200 |
User & Date: | drh 2018-10-25 14:15:37 |
Context
2018-10-26
| ||
15:36 | Prevent an == constraint specified using the table-valued-function argument syntax from being used to optimize any scan not related to the virtual table for which it was specified as an argument. (check-in: 4d46685f user: dan tags: trunk) | |
2018-10-25
| ||
16:58 | Merge bug fixes from trunk. (check-in: 1e973f65 user: drh tags: apple-osx) | |
15:25 | In the WHERE-constraint propagation optimization, if there are duplicate constraint, make sure only one of them propagates. Proposed fix for ticket [cf5ed20fc8621b165]. (check-in: caebf879 user: drh tags: branch-3.25) | |
14:15 | In the WHERE-constraint propagation optimization, if there are duplicate constraint, make sure only one of them propagates. Proposed fix for ticket [cf5ed20fc8621b165]. (check-in: 5d5b596f user: drh tags: trunk) | |
2018-10-24
| ||
23:55 | Add the ENABLE_GEOPOLY case to the compile_options pragma. (check-in: de940296 user: drh tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
4070 4071 4072 4073 4074 4075 4076 | #endif return 1; } #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ /* | | | > | | | > > > > > > > > > > > > > > | 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 | #endif return 1; } #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ /* ** A structure to keep track of all of the column values that are fixed to ** a known value due to WHERE clause constraints of the form COLUMN=VALUE. */ typedef struct WhereConst WhereConst; struct WhereConst { Parse *pParse; /* Parsing context */ int nConst; /* Number for COLUMN=CONSTANT terms */ int nChng; /* Number of times a constant is propagated */ Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */ }; /* ** Add a new entry to the pConst object. Except, do not add duplicate ** pColumn entires. */ static void constInsert( WhereConst *pConst, /* The WhereConst into which we are inserting */ Expr *pColumn, /* The COLUMN part of the constraint */ Expr *pValue /* The VALUE part of the constraint */ ){ int i; assert( pColumn->op==TK_COLUMN ); /* 2018-10-25 ticket [cf5ed20f] ** Make sure the same pColumn is not inserted more than once */ for(i=0; i<pConst->nConst; i++){ const Expr *pExpr = pConst->apExpr[i*2]; assert( pExpr->op==TK_COLUMN ); if( pExpr->iTable==pColumn->iTable && pExpr->iColumn==pColumn->iColumn ){ return; /* Already present. Return without doing anything. */ } } pConst->nConst++; pConst->apExpr = sqlite3DbReallocOrFree(pConst->pParse->db, pConst->apExpr, pConst->nConst*2*sizeof(Expr*)); if( pConst->apExpr==0 ){ pConst->nConst = 0; }else{ |
︙ | ︙ |
Changes to test/whereL.test.
︙ | ︙ | |||
106 107 108 109 110 111 112 113 114 | FROM A, (SELECT id,yy,zz FROM C) subq, B WHERE A.id='1' AND A.id=subq.yy AND B.id=subq.zz; } {1} finish_test | > > > > > > > > > > > | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | FROM A, (SELECT id,yy,zz FROM C) subq, B WHERE A.id='1' AND A.id=subq.yy AND B.id=subq.zz; } {1} # 2018-10-25: Ticket [cf5ed20f] # Incorrect join result with duplicate WHERE clause constraint. # do_execsql_test 400 { CREATE TABLE x(a, b, c); CREATE TABLE y(a, b); INSERT INTO x VALUES (1, 0, 1); INSERT INTO y VALUES (1, 2); SELECT x.a FROM x JOIN y ON x.c = y.a WHERE x.b = 1 AND x.b = 1; } {} finish_test |