88 *
99 *
1010 * IDENTIFICATION
11- * $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.281 2009/12/15 17:57:47 tgl Exp $
11+ * $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.282 2010/01/01 23:03:10 tgl Exp $
1212 *
1313 * HISTORY
1414 * AUTHOR DATE MAJOR EVENT
@@ -1295,7 +1295,7 @@ find_nonnullable_rels_walker(Node *node, bool top_level)
12951295 /* IS NOT NULL can be considered strict, but only at top level */
12961296 NullTest * expr = (NullTest * ) node ;
12971297
1298- if (top_level && expr -> nulltesttype == IS_NOT_NULL )
1298+ if (top_level && expr -> nulltesttype == IS_NOT_NULL && ! expr -> argisrow )
12991299 result = find_nonnullable_rels_walker ((Node * ) expr -> arg , false);
13001300 }
13011301 else if (IsA (node , BooleanTest ))
@@ -1497,7 +1497,7 @@ find_nonnullable_vars_walker(Node *node, bool top_level)
14971497 /* IS NOT NULL can be considered strict, but only at top level */
14981498 NullTest * expr = (NullTest * ) node ;
14991499
1500- if (top_level && expr -> nulltesttype == IS_NOT_NULL )
1500+ if (top_level && expr -> nulltesttype == IS_NOT_NULL && ! expr -> argisrow )
15011501 result = find_nonnullable_vars_walker ((Node * ) expr -> arg , false);
15021502 }
15031503 else if (IsA (node , BooleanTest ))
@@ -1601,7 +1601,7 @@ find_forced_null_var(Node *node)
16011601 /* check for var IS NULL */
16021602 NullTest * expr = (NullTest * ) node ;
16031603
1604- if (expr -> nulltesttype == IS_NULL )
1604+ if (expr -> nulltesttype == IS_NULL && ! expr -> argisrow )
16051605 {
16061606 Var * var = (Var * ) expr -> arg ;
16071607
@@ -2856,6 +2856,7 @@ eval_const_expressions_mutator(Node *node,
28562856 newntest = makeNode (NullTest );
28572857 newntest -> arg = (Expr * ) relem ;
28582858 newntest -> nulltesttype = ntest -> nulltesttype ;
2859+ newntest -> argisrow = ntest -> argisrow ;
28592860 newargs = lappend (newargs , newntest );
28602861 }
28612862 /* If all the inputs were constants, result is TRUE */
@@ -2867,7 +2868,7 @@ eval_const_expressions_mutator(Node *node,
28672868 /* Else we need an AND node */
28682869 return (Node * ) make_andclause (newargs );
28692870 }
2870- if (arg && IsA (arg , Const ))
2871+ if (! ntest -> argisrow && arg && IsA (arg , Const ))
28712872 {
28722873 Const * carg = (Const * ) arg ;
28732874 bool result ;
@@ -2893,6 +2894,7 @@ eval_const_expressions_mutator(Node *node,
28932894 newntest = makeNode (NullTest );
28942895 newntest -> arg = (Expr * ) arg ;
28952896 newntest -> nulltesttype = ntest -> nulltesttype ;
2897+ newntest -> argisrow = ntest -> argisrow ;
28962898 return (Node * ) newntest ;
28972899 }
28982900 if (IsA (node , BooleanTest ))
0 commit comments