From 41c9dcd691b0b13b1d5b78aacf50c2bdfc64794a Mon Sep 17 00:00:00 2001 From: Dan Kennedy Date: Fri, 15 Jun 2018 20:46:12 +0000 Subject: [PATCH] Add extra OOM test. --- src/window.c | 12 ++++-------- test/window1.test | 4 ++++ test/windowfault.test | 12 ++++++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/window.c b/src/window.c index 845d67907a..00f3f44c8b 100644 --- a/src/window.c +++ b/src/window.c @@ -627,7 +627,7 @@ static int selectWindowRewriteSelectCb(Walker *pWalker, Select *pSelect){ ** pWin->iEphCsr, where N is the number of elements in (*ppSub) after ** appending the new one. */ -static int selectWindowRewriteEList( +static void selectWindowRewriteEList( Parse *pParse, Window *pWin, ExprList *pEList, /* Rewrite expressions in this list */ @@ -635,7 +635,6 @@ static int selectWindowRewriteEList( ){ Walker sWalker; WindowRewrite sRewrite; - int rc; memset(&sWalker, 0, sizeof(Walker)); memset(&sRewrite, 0, sizeof(WindowRewrite)); @@ -648,10 +647,9 @@ static int selectWindowRewriteEList( sWalker.xSelectCallback = selectWindowRewriteSelectCb; sWalker.u.pRewrite = &sRewrite; - rc = sqlite3WalkExprList(&sWalker, pEList); + (void)sqlite3WalkExprList(&sWalker, pEList); *ppSub = sRewrite.pSub; - return rc; } /* @@ -709,10 +707,8 @@ int sqlite3WindowRewrite(Parse *pParse, Select *p){ ** many columns the table will have. */ pMWin->iEphCsr = pParse->nTab++; - rc = selectWindowRewriteEList(pParse, pMWin, p->pEList, &pSublist); - if( rc ) return rc; - rc = selectWindowRewriteEList(pParse, pMWin, p->pOrderBy, &pSublist); - if( rc ) return rc; + selectWindowRewriteEList(pParse, pMWin, p->pEList, &pSublist); + selectWindowRewriteEList(pParse, pMWin, p->pOrderBy, &pSublist); pMWin->nBufferCol = (pSublist ? pSublist->nExpr : 0); /* Create the ORDER BY clause for the sub-select. This is the concatenation diff --git a/test/window1.test b/test/window1.test index 2c99aa132b..9c2a0a5583 100644 --- a/test/window1.test +++ b/test/window1.test @@ -265,6 +265,10 @@ do_execsql_test 7.2 { 4 6 8 6 8 10 8 10 default 10 {} default {} {} default } +do_execsql_test 7.3 { + SELECT row_number() OVER (ORDER BY x) FROM t1 +} {1 2 3 4 5} + finish_test diff --git a/test/windowfault.test b/test/windowfault.test index 5df9dd8c27..d185e9f913 100644 --- a/test/windowfault.test +++ b/test/windowfault.test @@ -46,6 +46,18 @@ do_faultsim_test 1 -start 1 -faults oom-* -prep { faultsim_test_result {0 {1 1 1 1 4 4 {} 8 {} 4 4 2 2 2 1 4 8 8 12 4 8 4 3 3 3 2 4 12 8 {} 8 12 4}} } +do_faultsim_test 2 -faults oom-* -prep { + faultsim_restore_and_reopen +} -body { + execsql { + SELECT min(d) OVER win, max(d) OVER win + FROM t1 + WINDOW win AS (ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) + } +} -test { + faultsim_test_result {0 {4 12 8 12 12 12}} +} + finish_test -- 2.11.4.GIT