diff options
author | drh <drh@noemail.net> | 2019-04-01 19:42:42 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2019-04-01 19:42:42 +0000 |
commit | d6db6598ca53771904d616054add0eaae3528b56 (patch) | |
tree | de205526e275533d0bf6f889cb1de4ff3cd01b8e /src/expr.c | |
parent | afb3f3c72c6cfaca39d4ef45b3ebcf319a2787a7 (diff) | |
download | sqlite-d6db6598ca53771904d616054add0eaae3528b56.tar.gz sqlite-d6db6598ca53771904d616054add0eaae3528b56.zip |
Improvements to the sqlite3ExprImpliesNonNullRow() theorem prover.
FossilOrigin-Name: 3fde627616030ca0de87169467e2e453fdc91154942e3a3a92a221df5923b2d2
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/expr.c b/src/expr.c index e39b6408c..526b0f836 100644 --- a/src/expr.c +++ b/src/expr.c @@ -5032,6 +5032,17 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ */ int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab){ Walker w; + p = sqlite3ExprSkipCollate(p); + while( p ){ + if( p->op==TK_NOTNULL ){ + p = p->pLeft; + }else if( p->op==TK_AND ){ + if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab) ) return 1; + p = p->pRight; + }else{ + break; + } + } w.xExprCallback = impliesNotNullRow; w.xSelectCallback = 0; w.xSelectCallback2 = 0; |