8
8
*
9
9
*
10
10
* 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 $
12
12
*
13
13
* HISTORY
14
14
* AUTHOR DATE MAJOR EVENT
@@ -1295,7 +1295,7 @@ find_nonnullable_rels_walker(Node *node, bool top_level)
1295
1295
/* IS NOT NULL can be considered strict, but only at top level */
1296
1296
NullTest * expr = (NullTest * ) node ;
1297
1297
1298
- if (top_level && expr -> nulltesttype == IS_NOT_NULL )
1298
+ if (top_level && expr -> nulltesttype == IS_NOT_NULL && ! expr -> argisrow )
1299
1299
result = find_nonnullable_rels_walker ((Node * ) expr -> arg , false);
1300
1300
}
1301
1301
else if (IsA (node , BooleanTest ))
@@ -1497,7 +1497,7 @@ find_nonnullable_vars_walker(Node *node, bool top_level)
1497
1497
/* IS NOT NULL can be considered strict, but only at top level */
1498
1498
NullTest * expr = (NullTest * ) node ;
1499
1499
1500
- if (top_level && expr -> nulltesttype == IS_NOT_NULL )
1500
+ if (top_level && expr -> nulltesttype == IS_NOT_NULL && ! expr -> argisrow )
1501
1501
result = find_nonnullable_vars_walker ((Node * ) expr -> arg , false);
1502
1502
}
1503
1503
else if (IsA (node , BooleanTest ))
@@ -1601,7 +1601,7 @@ find_forced_null_var(Node *node)
1601
1601
/* check for var IS NULL */
1602
1602
NullTest * expr = (NullTest * ) node ;
1603
1603
1604
- if (expr -> nulltesttype == IS_NULL )
1604
+ if (expr -> nulltesttype == IS_NULL && ! expr -> argisrow )
1605
1605
{
1606
1606
Var * var = (Var * ) expr -> arg ;
1607
1607
@@ -2856,6 +2856,7 @@ eval_const_expressions_mutator(Node *node,
2856
2856
newntest = makeNode (NullTest );
2857
2857
newntest -> arg = (Expr * ) relem ;
2858
2858
newntest -> nulltesttype = ntest -> nulltesttype ;
2859
+ newntest -> argisrow = ntest -> argisrow ;
2859
2860
newargs = lappend (newargs , newntest );
2860
2861
}
2861
2862
/* If all the inputs were constants, result is TRUE */
@@ -2867,7 +2868,7 @@ eval_const_expressions_mutator(Node *node,
2867
2868
/* Else we need an AND node */
2868
2869
return (Node * ) make_andclause (newargs );
2869
2870
}
2870
- if (arg && IsA (arg , Const ))
2871
+ if (! ntest -> argisrow && arg && IsA (arg , Const ))
2871
2872
{
2872
2873
Const * carg = (Const * ) arg ;
2873
2874
bool result ;
@@ -2893,6 +2894,7 @@ eval_const_expressions_mutator(Node *node,
2893
2894
newntest = makeNode (NullTest );
2894
2895
newntest -> arg = (Expr * ) arg ;
2895
2896
newntest -> nulltesttype = ntest -> nulltesttype ;
2897
+ newntest -> argisrow = ntest -> argisrow ;
2896
2898
return (Node * ) newntest ;
2897
2899
}
2898
2900
if (IsA (node , BooleanTest ))
0 commit comments