Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix an assertion failure triggered by a SELECT with a compound sub-query that contains an incorrectly placed ORDER BY clause. This problem is just an assert() failure - non-DEBUG builds are not affected. Problem found by OSSFuzz. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
823779d31eb09cda5effe747d9adb35e |
User & Date: | dan 2018-03-31 16:31:51 |
Context
2018-03-31
| ||
23:28 | Fix a logic error discovered by OSSFuzz that can cause an assert() fault if a LIKE operator is used on an INTEGER PRIMARY KEY. (check-in: fc06ddd4 user: drh tags: trunk) | |
16:31 | Fix an assertion failure triggered by a SELECT with a compound sub-query that contains an incorrectly placed ORDER BY clause. This problem is just an assert() failure - non-DEBUG builds are not affected. Problem found by OSSFuzz. (check-in: 823779d3 user: dan tags: trunk) | |
2018-03-30
| ||
16:34 | Fix a bug in the spellfix extension causing it to compute suboptimal answers. The problem was introduced by check-in [afd6fbc01052ccfc9]. (check-in: 3bf28fd9 user: drh tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
3769 3770 3771 3772 3773 3774 3775 | ** (the only way this can happen is if the compound sub-query is ** currently part of pSub->pSrc). See ticket [d11a6e908f]. */ ExprList *pOrderBy = pSub->pOrderBy; for(i=0; i<pOrderBy->nExpr; i++){ pOrderBy->a[i].u.x.iOrderByCol = 0; } assert( pParent->pOrderBy==0 ); | < | 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 | ** (the only way this can happen is if the compound sub-query is ** currently part of pSub->pSrc). See ticket [d11a6e908f]. */ ExprList *pOrderBy = pSub->pOrderBy; for(i=0; i<pOrderBy->nExpr; i++){ pOrderBy->a[i].u.x.iOrderByCol = 0; } assert( pParent->pOrderBy==0 ); pParent->pOrderBy = pOrderBy; pSub->pOrderBy = 0; } pWhere = sqlite3ExprDup(db, pSub->pWhere, 0); if( isLeftJoin>0 ){ setJoinExpr(pWhere, iNewParent); } |
︙ | ︙ |
Changes to test/subquery2.test.
︙ | ︙ | |||
143 144 145 146 147 148 149 150 151 152 | SELECT data, id FROM ( SELECT id, data FROM ( SELECT * FROM t3 UNION ALL SELECT * FROM t4 ) ORDER BY data ); } {a 4 b 3 c 2 d 1} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | SELECT data, id FROM ( SELECT id, data FROM ( SELECT * FROM t3 UNION ALL SELECT * FROM t4 ) ORDER BY data ); } {a 4 b 3 c 2 d 1} #------------------------------------------------------------------------- do_execsql_test 4.0 { CREATE TABLE t6(x); } foreach {tn sql} { 1 { SELECT 'abc' FROM ( SELECT x FROM t6 ORDER BY 1 UNION ALL SELECT x FROM t6 ) } 2 { SELECT 'abc' FROM ( SELECT x FROM t6 UNION ALL SELECT x FROM t6 ORDER BY 1 UNION ALL SELECT x FROM t6 ) } 3 { SELECT 'abc' FROM ( SELECT x FROM t6 ORDER BY 1 UNION ALL SELECT x FROM t6 ORDER BY 1 UNION ALL SELECT x FROM t6 ) } 4 { SELECT 'abc' FROM ( SELECT x FROM t6 UNION ALL SELECT x FROM t6 ORDER BY 1 UNION ALL SELECT x FROM t6 ORDER BY 1 UNION ALL SELECT x FROM t6 ) } } { do_catchsql_test 4.$tn $sql [list {*}{ 1 {ORDER BY clause should come after UNION ALL not before} }] } finish_test |