* trees in which each level of assignment has its own CaseTestExpr, and the
* recursive structure appears within the newvals or refassgnexpr field.
* There is an exception, though: if the array is an array-of-domain, we will
- * have a CoerceToDomain as the refassgnexpr, and we need to be able to look
- * through that.
+ * have a CoerceToDomain or RelabelType as the refassgnexpr, and we need to
+ * be able to look through that.
*/
static bool
isAssignmentIndirectionExpr(Expr *expr)
return isAssignmentIndirectionExpr(cd->arg);
}
+ else if (IsA(expr, RelabelType))
+ {
+ RelabelType *r = (RelabelType *) expr;
+
+ return isAssignmentIndirectionExpr(r->arg);
+ }
return false;
}
{"(1,5)"}
(1 row)
+-- if there's no constraints, a different code path is taken:
+alter domain dcomptype drop constraint dcomptype_check;
+update dcomptable set f1[1].cf1 = -1; -- now ok
+table dcomptable;
+ f1
+------------
+ {"(-1,5)"}
+(1 row)
+
drop table dcomptable;
drop type comptype cascade;
NOTICE: drop cascades to type dcomptype
update dcomptable set f1[1].cf1 = -1; -- fail
update dcomptable set f1[1].cf1 = 1;
table dcomptable;
+-- if there's no constraints, a different code path is taken:
+alter domain dcomptype drop constraint dcomptype_check;
+update dcomptable set f1[1].cf1 = -1; -- now ok
+table dcomptable;
drop table dcomptable;
drop type comptype cascade;