On Tue, Apr 3, 2018 at 10:48 AM, Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> wrote: >> >> Why is this done appropriately at ExecInitExpr() time, rather than at >> plan time? Seems like eval_const_expressions() would be a bit more >> appropriate (being badly named aside...)? > > That seems to be a better idea. Here's patch. >
Previous patch didn't try to fold the ConvertRowtypeExpr::arg into a Const.
postgres=# create table t1 (a int, b int, c int) partition by range(a); postgres=# create table t1p1 partition of t1 for values from (0) to (100) partition by range(b); postgres=# create table t1p1p1 partition of t1p1 for values from (0) to (50); postgres=# explain verbose select (1, 2, 3)::t1p1p1::t1p1::t1; -- notice Rowexpression here. QUERY PLAN ------------------------------------------- Result (cost=0.00..0.01 rows=1 width=32) Output: (ROW(1, 2, 3)::t1p1p1)::t1 (2 rows)
Here's patch fixing that. With this patch postgres=# explain verbose select (1, 2, 3)::t1p1p1::t1p1::t1; QUERY PLAN ------------------------------------------- Result (cost=0.00..0.01 rows=1 width=32) Output: '(1,2,3)'::t1 (2 rows)
+1
Pavel
-- Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company