Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a bad assert() in window.c. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
fe8aaf0c806413965f50a03e34b5fdfa |
User & Date: | dan 2018-07-09 06:51:36.138 |
Context
2018-07-09
| ||
13:31 | Throw an error if the second argument passed to nth_value() is not a positive integer. (check-in: 1a06e57a0b user: dan tags: trunk) | |
06:51 | Fix a bad assert() in window.c. (check-in: fe8aaf0c80 user: dan tags: trunk) | |
02:37 | Simplification to the logic that detects misuse of the application-defined function creation interfaces. (check-in: 8f21d77845 user: drh tags: trunk) | |
Changes
Changes to src/window.c.
︙ | ︙ | |||
1113 1114 1115 1116 1117 1118 1119 | || pWin->pFunc->zName==lagName ){ /* no-op */ }else{ int addrIf = 0; if( pWin->pFilter ){ int regTmp; | | > > | 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 | || pWin->pFunc->zName==lagName ){ /* no-op */ }else{ int addrIf = 0; if( pWin->pFilter ){ int regTmp; assert( nArg==0 || nArg==pWin->pOwner->x.pList->nExpr ); assert( nArg || pWin->pOwner->x.pList==0 ); if( csr>0 ){ regTmp = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp); }else{ regTmp = regArg + nArg; } addrIf = sqlite3VdbeAddOp3(v, OP_IfNot, regTmp, 0, 1); VdbeCoverage(v); if( csr>0 ){ sqlite3ReleaseTempReg(pParse, regTmp); } } if( pWin->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ CollSeq *pColl; assert( nArg>0 ); pColl = sqlite3ExprNNCollSeq(pParse, pWin->pOwner->x.pList->a[0].pExpr); sqlite3VdbeAddOp4(v, OP_CollSeq, 0,0,0, (const char*)pColl, P4_COLLSEQ); } sqlite3VdbeAddOp3(v, bInverse? OP_AggInverse : OP_AggStep, bInverse, regArg, pWin->regAccum); sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF); sqlite3VdbeChangeP5(v, (u8)nArg); |
︙ | ︙ |
Changes to test/window6.test.
︙ | ︙ | |||
272 273 274 275 276 277 278 279 280 | do_catchsql_test 9.8.2 { WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) SELECT count() OVER ( ORDER BY x ROWS BETWEEN 2 PRECEDING AND a FOLLOWING ) FROM c; } {1 {frame ending offset must be a non-negative integer}} finish_test | > > > > > > | 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | do_catchsql_test 9.8.2 { WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<5) SELECT count() OVER ( ORDER BY x ROWS BETWEEN 2 PRECEDING AND a FOLLOWING ) FROM c; } {1 {frame ending offset must be a non-negative integer}} do_execsql_test 10.0 { WITH t1(a,b) AS (VALUES(1,2)) SELECT count() FILTER (where b<>5) OVER w1 FROM t1 WINDOW w1 AS (ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING); } {1} finish_test |