aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2019-04-01 14:30:30 +0000
committerdrh <drh@noemail.net>2019-04-01 14:30:30 +0000
commit21826f44bfe1551240713c0332f3db92de3fd80f (patch)
treebc0204ad939fde9617409f35f24863edac6220ac /src
parentc90653365027c505e13d45f2c8bc986306b24744 (diff)
downloadsqlite-21826f44bfe1551240713c0332f3db92de3fd80f.tar.gz
sqlite-21826f44bfe1551240713c0332f3db92de3fd80f.zip
Improved VDBE branch coverage in the run-time frame-spec error detection
logic of window functions. FossilOrigin-Name: f56d305a7bad6608d51d8c8cef417ddb66cff50f0a75d28554ea669e47f3d90d
Diffstat (limited to 'src')
-rw-r--r--src/window.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/window.c b/src/window.c
index b766956f9..87dfac747 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1309,7 +1309,7 @@ static void windowCheckValue(Parse *pParse, int reg, int eCond){
int regString = sqlite3GetTempReg(pParse);
sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC);
sqlite3VdbeAddOp3(v, OP_Ge, regString, sqlite3VdbeCurrentAddr(v)+2, reg);
- sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC);
+ sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC|SQLITE_JUMPIFNULL);
VdbeCoverage(v);
assert( eCond==3 || eCond==4 );
VdbeCoverageIf(v, eCond==3);
@@ -1323,11 +1323,11 @@ static void windowCheckValue(Parse *pParse, int reg, int eCond){
VdbeCoverageIf(v, eCond==2);
}
sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg);
- VdbeCoverageIf(v, eCond==0);
- VdbeCoverageIf(v, eCond==1);
- VdbeCoverageIf(v, eCond==2);
- VdbeCoverageIf(v, eCond==3);
- VdbeCoverageIf(v, eCond==4);
+ VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */
+ VdbeCoverageNeverNullIf(v, eCond==1); /* the OP_MustBeInt */
+ VdbeCoverageNeverNullIf(v, eCond==2);
+ VdbeCoverageNeverNullIf(v, eCond==3); /* NULL case caught by */
+ VdbeCoverageNeverNullIf(v, eCond==4); /* the OP_Ge */
sqlite3MayAbort(pParse);
sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_ERROR, OE_Abort);
sqlite3VdbeAppendP4(v, (void*)azErr[eCond], P4_STATIC);