Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a problem with using multiple SQLITE_SUBTYPE function as window functions in a single query. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
9430ead7ba433cbfce99f4f364a0c084 |
User & Date: | dan 2022-04-20 16:42:57.645 |
Context
2022-04-25
| ||
21:31 | Fix a problem with using multiple SQLITE_SUBTYPE function as window functions in a single query. (check-in: 9caca6cb3e user: drh tags: branch-3.38) | |
2022-04-20
| ||
22:41 | For CLI, fix how columnar mode fills in empty portions of wrapped row outputs. (check-in: 77aed89192 user: larrybr tags: trunk) | |
16:54 | Merge window function fix from trunk. (check-in: b6b9e185f8 user: drh tags: right-join) | |
16:42 | Fix a problem with using multiple SQLITE_SUBTYPE function as window functions in a single query. (check-in: 9430ead7ba user: dan tags: trunk) | |
2022-04-19
| ||
20:47 | Fix a problem in ALTER TABLE with handling "table.*" expressions within SELECT statements in triggers. (check-in: 24755fd065 user: dan tags: trunk) | |
Changes
Changes to src/window.c.
︙ | ︙ | |||
1725 1726 1727 1728 1729 1730 1731 | assert( ExprUseXList(pWin->pOwner) ); nArg = pWin->pOwner->x.pList->nExpr; regArg = sqlite3GetTempRange(pParse, nArg); sqlite3ExprCodeExprList(pParse, pWin->pOwner->x.pList, regArg, 0, 0); for(iEnd=sqlite3VdbeCurrentAddr(v); iOp<iEnd; iOp++){ VdbeOp *pOp = sqlite3VdbeGetOp(v, iOp); | | | 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 | assert( ExprUseXList(pWin->pOwner) ); nArg = pWin->pOwner->x.pList->nExpr; regArg = sqlite3GetTempRange(pParse, nArg); sqlite3ExprCodeExprList(pParse, pWin->pOwner->x.pList, regArg, 0, 0); for(iEnd=sqlite3VdbeCurrentAddr(v); iOp<iEnd; iOp++){ VdbeOp *pOp = sqlite3VdbeGetOp(v, iOp); if( pOp->opcode==OP_Column && pOp->p1==pMWin->iEphCsr ){ pOp->p1 = csr; } } } if( pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ CollSeq *pColl; assert( nArg>0 ); |
︙ | ︙ |
Changes to test/windowB.test.
︙ | ︙ | |||
360 361 362 363 364 365 366 367 368 | do_execsql_test 9.0 { CREATE TABLE seps(x); INSERT INTO seps(x) VALUES ('1'), ('22'), ('333'), ('4444'); SELECT group_concat('-', x) OVER ( ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM seps; } {-22- -22-333- -333-4444- -4444-} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 | do_execsql_test 9.0 { CREATE TABLE seps(x); INSERT INTO seps(x) VALUES ('1'), ('22'), ('333'), ('4444'); SELECT group_concat('-', x) OVER ( ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) FROM seps; } {-22- -22-333- -333-4444- -4444-} #------------------------------------------------------------------------- reset_db do_execsql_test 10.1 { CREATE TABLE t1(i INTEGER PRIMARY KEY, v); INSERT INTO t1 VALUES( 1, 'one' ); INSERT INTO t1 VALUES( 2, 'two' ); } do_execsql_test 10.2 { SELECT json_group_array( v ) OVER w, json_group_array( v ) OVER w FROM t1 window w as ( range between unbounded preceding and unbounded following ) } { {["one","two"]} {["one","two"]} {["one","two"]} {["one","two"]} } do_execsql_test 10.3 { SELECT group_concat( v ) OVER w, json_group_array( v ) OVER w, json_group_array( v ) OVER w, group_concat( v ) OVER w FROM t1 window w as ( range between unbounded preceding and unbounded following ) } { one,two {["one","two"]} {["one","two"]} one,two one,two {["one","two"]} {["one","two"]} one,two } finish_test |