// File: /workspace/github_c_makefile_star2_O3/jkbenaim[P]psfrag/sqlite3.c
// Function: impliesNotNullRow
static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){
  testcase( pExpr->op==TK_AGG_COLUMN );
  testcase( pExpr->op==TK_AGG_FUNCTION );
  if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune;
  switch( pExpr->op ){
    case TK_ISNOT:
    case TK_ISNULL:
    case TK_NOTNULL:
    case TK_IS:
    case TK_OR:
    case TK_CASE:
    case TK_IN:
    case TK_FUNCTION:
    case TK_TRUTH:
      testcase( pExpr->op==TK_ISNOT );
      testcase( pExpr->op==TK_ISNULL );
      testcase( pExpr->op==TK_NOTNULL );
      testcase( pExpr->op==TK_IS );
      testcase( pExpr->op==TK_OR );
      testcase( pExpr->op==TK_CASE );
      testcase( pExpr->op==TK_IN );
      testcase( pExpr->op==TK_FUNCTION );
      testcase( pExpr->op==TK_TRUTH );
      return WRC_Prune;
    case TK_COLUMN:
      if( pWalker->u.iCur==pExpr->iTable ){
        pWalker->eCode = 1;
        return WRC_Abort;
      }
      return WRC_Prune;

    case TK_AND:
      if( sqlite3ExprImpliesNonNullRow(pExpr->pLeft, pWalker->u.iCur)
       && sqlite3ExprImpliesNonNullRow(pExpr->pRight, pWalker->u.iCur)
      ){
        pWalker->eCode = 1;
      }
      return WRC_Prune;

    case TK_BETWEEN:
      sqlite3WalkExpr(pWalker, pExpr->pLeft);
      return WRC_Prune;

    /* Virtual tables are allowed to use constraints like x=NULL.  So
    ** a term of the form x=y does not prove that y is not null if x
    ** is the column of a virtual table */
    case TK_EQ:
    case TK_NE:
    case TK_LT:
    case TK_LE:
    case TK_GT:
    case TK_GE:
      testcase( pExpr->op==TK_EQ );
      testcase( pExpr->op==TK_NE );
      testcase( pExpr->op==TK_LT );
      testcase( pExpr->op==TK_LE );
      testcase( pExpr->op==TK_GT );
      testcase( pExpr->op==TK_GE );
      if( (pExpr->pLeft->op==TK_COLUMN && IsVirtual(pExpr->pLeft->y.pTab))
       || (pExpr->pRight->op==TK_COLUMN && IsVirtual(pExpr->pRight->y.pTab))
      ){
       return WRC_Prune;
      }

    default:
      return WRC_Continue;
  }
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movl $0x1, %ebx
testb $0x1, 0x4(%rsi)
jne 0x68eda
movq %rsi, %r15
movq %rdi, %r14
movzbl (%rsi), %eax
leal -0x2b(%rax), %ecx
cmpl $0xe, %ecx
ja 0x68ea9
leaq 0x1edd0(%rip), %rax     # 0x87c48
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x10(%r15), %rax
cmpb $-0x5e, (%rax)
jne 0x68e94
movq 0x40(%rax), %rax
cmpl $0x0, 0x54(%rax)
jne 0x68eda
movq 0x18(%r15), %rax
cmpb $-0x5e, (%rax)
jne 0x68ed8
movq 0x40(%rax), %rax
cmpl $0x0, 0x54(%rax)
jne 0x68eda
jmp 0x68ed8
addl $0xffffff68, %eax       # imm = 0xFFFFFF68
cmpl $0x12, %eax
ja 0x68ed8
movl $0x4c001, %ecx          # imm = 0x4C001
btl %eax, %ecx
jb 0x68eda
cmpl $0xa, %eax
jne 0x68ed8
movl 0x28(%r14), %eax
cmpl 0x2c(%r15), %eax
jne 0x68eda
movb $0x1, 0x24(%r14)
movl $0x2, %ebx
jmp 0x68eda
xorl %ebx, %ebx
movl %ebx, %eax
popq %rbx
popq %r14
popq %r15
retq
movq 0x10(%r15), %rsi
testq %rsi, %rsi
je 0x68eda
movq %r14, %rdi
callq 0x585aa
jmp 0x68eda
movq 0x10(%r15), %rdi
movl 0x28(%r14), %esi
callq 0x62185
testl %eax, %eax
je 0x68eda
movq 0x18(%r15), %rdi
movl 0x28(%r14), %esi
callq 0x62185
testl %eax, %eax
je 0x68eda
movb $0x1, 0x24(%r14)
jmp 0x68eda