aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2019-04-01 19:42:42 +0000
committerdrh <drh@noemail.net>2019-04-01 19:42:42 +0000
commitd6db6598ca53771904d616054add0eaae3528b56 (patch)
treede205526e275533d0bf6f889cb1de4ff3cd01b8e /src/expr.c
parentafb3f3c72c6cfaca39d4ef45b3ebcf319a2787a7 (diff)
downloadsqlite-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.c11
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;