Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a faulty assert() in walker.c that could fail when processing an ALTER TABLE statement on a schema containing invalid table references that are part of a WINDOW definition. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
ee076c28d8ee0f5b099cdef83ae6cea6 |
User & Date: | dan 2019-07-19 10:31:29.400 |
Context
2019-07-19
| ||
11:20 | Fix a problem with renaming tables when the schema contains WINDOW definitions with (illegal) non-numeric expressions as part of a PRECEDING or FOLLOWING clause. (check-in: 348e7f193a user: dan tags: trunk) | |
10:31 | Fix a faulty assert() in walker.c that could fail when processing an ALTER TABLE statement on a schema containing invalid table references that are part of a WINDOW definition. (check-in: ee076c28d8 user: dan tags: trunk) | |
01:11 | Fix a new problem in the BETWEEN operator when applied to a window function. The problem was introduced yesterday by check-in [7ef7b23cbb1b9ace]. (check-in: 47e23064ba user: drh tags: trunk) | |
Changes
Changes to src/walker.c.
︙ | ︙ | |||
116 117 118 119 120 121 122 123 | if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort; if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort; if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort; #if !defined(SQLITE_OMIT_WINDOWFUNC) && !defined(SQLITE_OMIT_ALTERTABLE) { Parse *pParse = pWalker->pParse; if( pParse && IN_RENAME_OBJECT ){ int rc = walkWindowList(pWalker, p->pWinDefn); | > > < | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort; if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort; if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort; #if !defined(SQLITE_OMIT_WINDOWFUNC) && !defined(SQLITE_OMIT_ALTERTABLE) { Parse *pParse = pWalker->pParse; if( pParse && IN_RENAME_OBJECT ){ /* The following may return WRC_Abort if there are unresolvable ** symbols (e.g. a table that does not exist) in a window definition. */ int rc = walkWindowList(pWalker, p->pWinDefn); return rc; } } #endif return WRC_Continue; } |
︙ | ︙ |
Changes to test/altertab3.test.
︙ | ︙ | |||
233 234 235 236 237 238 239 240 241 | SELECT sql FROM sqlite_master WHERE name='v1'; } { {CREATE VIEW v1 AS SELECT * FROM t1 WHERE ( SELECT t1.a FROM t1, t2 ) IN () OR t1.a=5} } finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | SELECT sql FROM sqlite_master WHERE name='v1'; } { {CREATE VIEW v1 AS SELECT * FROM t1 WHERE ( SELECT t1.a FROM t1, t2 ) IN () OR t1.a=5} } #------------------------------------------------------------------------- reset_db do_execsql_test 11.1 { CREATE TABLE t1( a,b,c,d,e,f,g,h,j,jj,jjb,k,aa,bb,cc,dd,ee DEFAULT 3.14, ff DEFAULT('hiccup'),Wg NOD NULL DEFAULT(false) ); CREATE TRIGGER b AFTER INSERT ON t1 WHEN new.a BEGIN SELECT a, sum() w3 FROM t1 WINDOW b AS (ORDER BY NOT EXISTS(SELECT 1 FROM abc)); END; } do_catchsql_test 11.2 { ALTER TABLE t1 RENAME TO t1x; } {1 {error in trigger b: no such table: abc}} do_execsql_test 11.3 { DROP TRIGGER b; CREATE TRIGGER b AFTER INSERT ON t1 WHEN new.a BEGIN SELECT a, sum() w3 FROM t1 WINDOW b AS (ORDER BY NOT EXISTS(SELECT 1 FROM t1)); END; } {} do_execsql_test 11.4 { ALTER TABLE t1 RENAME TO t1x; SELECT sql FROM sqlite_master WHERE name = 'b'; } { {CREATE TRIGGER b AFTER INSERT ON "t1x" WHEN new.a BEGIN SELECT a, sum() w3 FROM "t1x" WINDOW b AS (ORDER BY NOT EXISTS(SELECT 1 FROM "t1x")); END} } finish_test |