Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Avoid a stack overflow that could be caused by a recursively defined WINDOW() with a strategically embedded error. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | branch-3.46 |
Files: | files | file ages | folders |
SHA3-256: |
074002718b2ecb9faa99e4509ee26aaf |
User & Date: | drh 2024-08-24 17:37:14.317 |
Context
2024-08-26
| ||
16:15 | Bind the new debug parameters in fuzzinvariants.c. (check-in: 29e9bcfa2e user: drh tags: branch-3.46) | |
2024-08-24
| ||
17:37 | Avoid a stack overflow that could be caused by a recursively defined WINDOW() with a strategically embedded error. (check-in: 074002718b user: drh tags: branch-3.46) | |
15:54 | Avoid a stack overflow that could be caused by a recursively defined WINDOW() with a strategically embedded error. (check-in: bada54bd6b user: dan tags: trunk) | |
2024-08-20
| ||
14:16 | When the database encoding is UTF-16LE and the GLOB optimization is used, it is ok to use the range search over an index, but it is not ok to disable the actual GLOB function call. (check-in: db917d50fd user: drh tags: branch-3.46) | |
Changes
Changes to src/resolve.c.
︙ | ︙ | |||
1292 1293 1294 1295 1296 1297 1298 | if( is_agg ){ if( pExpr->pLeft ){ assert( pExpr->pLeft->op==TK_ORDER ); assert( ExprUseXList(pExpr->pLeft) ); sqlite3WalkExprList(pWalker, pExpr->pLeft->x.pList); } #ifndef SQLITE_OMIT_WINDOWFUNC | | | 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 | if( is_agg ){ if( pExpr->pLeft ){ assert( pExpr->pLeft->op==TK_ORDER ); assert( ExprUseXList(pExpr->pLeft) ); sqlite3WalkExprList(pWalker, pExpr->pLeft->x.pList); } #ifndef SQLITE_OMIT_WINDOWFUNC if( pWin && pParse->nErr==0 ){ Select *pSel = pNC->pWinSelect; assert( pWin==0 || (ExprUseYWin(pExpr) && pWin==pExpr->y.pWin) ); if( IN_RENAME_OBJECT==0 ){ sqlite3WindowUpdate(pParse, pSel ? pSel->pWinDefn : 0, pWin, pDef); if( pParse->db->mallocFailed ) break; } sqlite3WalkExprList(pWalker, pWin->pPartition); |
︙ | ︙ |
Changes to test/windowE.test.
︙ | ︙ | |||
49 50 51 52 53 54 55 56 57 58 | SELECT group_concat(a,',') OVER win FROM t1 WINDOW win AS ( ORDER BY b RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ) } { 5 5,4 5,4,1 5,4,1,6 5,4,1,6,3 5,4,1,6,3,2 } finish_test | > > > > > > > > > > > > > > > > > > > > | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | SELECT group_concat(a,',') OVER win FROM t1 WINDOW win AS ( ORDER BY b RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING ) } { 5 5,4 5,4,1 5,4,1,6 5,4,1,6,3 5,4,1,6,3,2 } #------------------------------------------------------------------------- reset_db do_execsql_test 2.0 { CREATE TABLE t1(x); } sqlite3_create_aggregate db breakpoint do_catchsql_test 2.1 { SELECT min(x) OVER w1 FROM t1 WINDOW w1 AS (PARTITION BY x_count(x) OVER w1); } {1 {x_count() may not be used as a window function}} do_catchsql_test 2.2 { SELECT min(x) FILTER (WHERE x_count(x) OVER w1) OVER w1 FROM t1 WINDOW w1 AS (PARTITION BY x OVER w1); } {1 {near "OVER": syntax error}} finish_test |