diff --git a/contrib/pax_storage/src/test/regress/expected/bfv_partition.out b/contrib/pax_storage/src/test/regress/expected/bfv_partition.out
index ec180b9855f..c0fb8100292 100644
--- a/contrib/pax_storage/src/test/regress/expected/bfv_partition.out
+++ b/contrib/pax_storage/src/test/regress/expected/bfv_partition.out
@@ -2240,9 +2240,9 @@ ERROR: syntax error at or near "`"
LINE 1: ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (`);
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 216}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 252}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName europe :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "europe" :location 291}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 216})) :location 208} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 191} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 252})) :location 244} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 226} {GPPARTDEFELEM :partName europe :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "europe" :location 291})) :location 283} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 263}) :encClauses <> :isTemplate true :fromCatalog false :location 189}
(1 row)
set client_min_messages='warning';
@@ -2277,9 +2277,9 @@ select relid::regclass, level, template from gp_partition_template where relid =
ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE
( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia') );
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76})) :location 68} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110})) :location 102} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 84}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
-- Invalid subpartition
@@ -2294,9 +2294,9 @@ ERROR: invalid boundary specification for LIST partition
LINE 2: ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END...
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76})) :location 68} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110})) :location 102} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 84}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
-- Mix and Match RANGE/LIST . Expect to Error
@@ -2308,9 +2308,9 @@ ERROR: invalid boundary specification for LIST partition
LINE 4: SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END...
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76})) :location 68} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110})) :location 102} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 84}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
-- Mix and Match RANGE/LIST . Expect to Error
@@ -2322,9 +2322,9 @@ ERROR: invalid boundary specification for LIST partition
LINE 3: SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END...
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76})) :location 68} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110})) :location 102} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 84}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
drop table qa147sales;
@@ -2352,17 +2352,17 @@ select relid::regclass, level, template from gp_partition_template where relid =
ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE
( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2008-02-01') EXCLUSIVE );
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-02-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery <>} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1 :location 70} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-02-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2 :location 106} :partEvery <> :location 70} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE
( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month') );
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1 :location 70} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2 :location 106} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1}) :location 70} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
-- Invalid subpartition template
@@ -2372,9 +2372,9 @@ ERROR: invalid boundary specification for RANGE partition
LINE 2: ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ...
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1 :location 70} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2 :location 106} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1}) :location 70} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
-- Mix and Match RANGE/LIST . Expect to Error
@@ -2386,9 +2386,9 @@ ERROR: invalid boundary specification for RANGE partition
LINE 3: SUBPARTITION usa1 VALUES('usa'),
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1 :location 70} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2 :location 106} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1}) :location 70} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
-- Mix and Match RANGE/LIST . Expect to Error
@@ -2400,9 +2400,9 @@ ERROR: invalid boundary specification for RANGE partition
LINE 4: SUBPARTITION usa1 VALUES('usa'));
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass;
- relid | level | template
-------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1 :location 70} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2 :location 106} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1}) :location 70} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 51}) :encClauses <> :isTemplate true :fromCatalog false :location 49}
(1 row)
drop table qa147sales;
@@ -2437,9 +2437,9 @@ select relid::regclass, level, template from gp_partition_template where relid =
ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE
( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia') );
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77})) :location 69} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111})) :location 103} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 85}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
-- Invalid subpartition
@@ -2454,9 +2454,9 @@ ERROR: invalid boundary specification for LIST partition
LINE 2: ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END...
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77})) :location 69} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111})) :location 103} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 85}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
-- Mix and Match RANGE/LIST . Expect to Error
@@ -2468,9 +2468,9 @@ ERROR: invalid boundary specification for LIST partition
LINE 4: SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END...
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77})) :location 69} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111})) :location 103} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 85}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
-- Mix and Match RANGE/LIST . Expect to Error
@@ -2482,9 +2482,9 @@ ERROR: invalid boundary specification for LIST partition
LINE 3: SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END...
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77})) :location 69} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111})) :location 103} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 85}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
DROP SCHEMA qa147 cascade;
@@ -2519,17 +2519,17 @@ select relid::regclass, level, template from gp_partition_template where relid =
ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE
( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2008-02-01') EXCLUSIVE );
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-02-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery <>} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1 :location 71} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-02-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2 :location 107} :partEvery <> :location 71} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE
( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month') );
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1 :location 71} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2 :location 107} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1}) :location 71} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
-- Invalid subpartition template
@@ -2539,9 +2539,9 @@ ERROR: invalid boundary specification for RANGE partition
LINE 2: ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ...
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1 :location 71} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2 :location 107} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1}) :location 71} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
-- Mix and Match RANGE/LIST . Expect to Error
@@ -2553,9 +2553,9 @@ ERROR: invalid boundary specification for RANGE partition
LINE 3: SUBPARTITION usa1 VALUES('usa'),
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1 :location 71} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2 :location 107} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1}) :location 71} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
-- Mix and Match RANGE/LIST . Expect to Error
@@ -2567,9 +2567,9 @@ ERROR: invalid boundary specification for RANGE partition
LINE 4: SUBPARTITION usa1 VALUES('usa'));
^
select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass;
- relid | level | template
--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+-------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1 :location 71} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2 :location 107} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1}) :location 71} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
drop schema qa147 cascade;
@@ -2702,9 +2702,9 @@ alter table partsupp_def set subpartition template( subpartition aaa start(400)
-- Note 2: We do not support this function yet, but if we are able to split default partition with default subpartition, would we
-- be using the subpartition template to definte the "new" partition or the existing one.
select relid::regclass, level, template from gp_partition_template where relid = 'partsupp_def'::regclass;
- relid | level | template
---------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- partsupp_def | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName aaa :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 400 :location 75}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 600 :location 85}) :edge 2} :partEvery ({A_CONST :val 100 :location 96})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ partsupp_def | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName aaa :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 400 :location 75}) :edge 1 :location 69} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 600 :location 85}) :edge 2 :location 80} :partEvery ({A_CONST :val 100 :location 96}) :location 69} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 50}
(1 row)
alter table partsup_def add partition f1 start(0) end (300) every(100);
@@ -2728,9 +2728,9 @@ HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sur
alter table partsupp_def2 set subpartition template();
alter table partsupp_def2 set subpartition template( subpartition aaa start(400) end (600) every(100) );
select relid::regclass, level, template from gp_partition_template where relid = 'partsupp_def2'::regclass;
- relid | level | template
----------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- partsupp_def2 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName aaa :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 400 :location 76}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 600 :location 86}) :edge 2} :partEvery ({A_CONST :val 100 :location 97})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ partsupp_def2 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName aaa :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 400 :location 76}) :edge 1 :location 70} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 600 :location 86}) :edge 2 :location 81} :partEvery ({A_CONST :val 100 :location 97}) :location 70} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 53}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
drop table partsupp_def;
diff --git a/contrib/pax_storage/src/test/regress/expected/expressions.out b/contrib/pax_storage/src/test/regress/expected/expressions.out
index 2bb3fbf11c1..667c54833bb 100644
--- a/contrib/pax_storage/src/test/regress/expected/expressions.out
+++ b/contrib/pax_storage/src/test/regress/expected/expressions.out
@@ -509,14 +509,12 @@ select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6
select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null);
a
---
-
-(1 row)
+(0 rows)
select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null);
a
---
-
-(1 row)
+(0 rows)
-- ensure the result matched with the non-hashed version. We simply remove
-- some array elements so that we don't reach the hashing threshold.
diff --git a/contrib/pax_storage/src/test/regress/expected/partition.out b/contrib/pax_storage/src/test/regress/expected/partition.out
index 08551c49313..dde313f6ce0 100755
--- a/contrib/pax_storage/src/test/regress/expected/partition.out
+++ b/contrib/pax_storage/src/test/regress/expected/partition.out
@@ -2526,17 +2526,17 @@ select relid::regclass, level from gp_partition_template where relid = 'rank_set
alter table rank_settemp set subpartition template (default subpartition def2);
-- def2 is there
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
alter table rank_settemp set subpartition template (default subpartition def2);
-- Should still be there
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
alter table rank_settemp set subpartition template (start (date '2006-01-01') with (appendonly=true));
@@ -2544,9 +2544,9 @@ alter table rank_settemp add partition f1 values ('N');
alter table rank_settemp set subpartition template (start (date '2007-01-01') with (appendonly=true, compresslevel=5));
alter table rank_settemp add partition f2 values ('C');
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1} :partEnd <> :partEvery <>} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1 :location 52} :partEnd <> :partEvery <> :location 52} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
drop table rank_settemp;
@@ -3682,11 +3682,11 @@ alter table mpp5992
set subpartition template (subpartition l1 values (1,2,3),
subpartition l2 values (4,5,6), subpartition l3 values (7,8,9,10));
select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass;
- relid | level | template
----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133})) :location 125} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 107} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165})) :location 157} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 139}) :encClauses <> :isTemplate true :fromCatalog false :location 105}
+ mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108})) :location 100} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 83} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149})) :location 141} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 124}) :encClauses <> :isTemplate true :fromCatalog false :location 81}
+ mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76})) :location 64} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 48} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109})) :location 97} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 81} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143})) :location 129} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 113}) :encClauses <> :isTemplate true :fromCatalog false :location 47}
(3 rows)
-- Now we can add a new partition
@@ -3936,11 +3936,11 @@ select relname, relam, pg_get_expr(relpartbound, oid) from pg_class where relnam
(112 rows)
select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass;
- relid | level | template
----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133})) :location 125} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 107} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165})) :location 157} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 139}) :encClauses <> :isTemplate true :fromCatalog false :location 105}
+ mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108})) :location 100} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 83} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149})) :location 141} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 124}) :encClauses <> :isTemplate true :fromCatalog false :location 81}
+ mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76})) :location 64} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 48} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109})) :location 97} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 81} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143})) :location 129} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 113}) :encClauses <> :isTemplate true :fromCatalog false :location 47}
(3 rows)
-- MPP-10223: split subpartitions
@@ -4140,9 +4140,9 @@ subpartition template (start (1) end (10) every (1))
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
select relid::regclass, level, template from gp_partition_template where relid = 'MPP10480'::regclass;
- relid | level | template
-----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2} :partEvery ({A_CONST :val 1 :location 141})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1 :location 115} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2 :location 125} :partEvery ({A_CONST :val 1 :location 141}) :location 115} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 115}) :encClauses <> :isTemplate true :fromCatalog false :location 114}
(1 row)
-- MPP-10421: fix SPLIT of partitions with PRIMARY KEY constraint/indexes
diff --git a/contrib/pax_storage/src/test/regress/expected/partition_optimizer.out b/contrib/pax_storage/src/test/regress/expected/partition_optimizer.out
index ba5d6f5123f..f3b642974f9 100755
--- a/contrib/pax_storage/src/test/regress/expected/partition_optimizer.out
+++ b/contrib/pax_storage/src/test/regress/expected/partition_optimizer.out
@@ -2527,17 +2527,17 @@ select relid::regclass, level from gp_partition_template where relid = 'rank_set
alter table rank_settemp set subpartition template (default subpartition def2);
-- def2 is there
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
alter table rank_settemp set subpartition template (default subpartition def2);
-- Should still be there
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
alter table rank_settemp set subpartition template (start (date '2006-01-01') with (appendonly=true));
@@ -2545,9 +2545,9 @@ alter table rank_settemp add partition f1 values ('N');
alter table rank_settemp set subpartition template (start (date '2007-01-01') with (appendonly=true, compresslevel=5));
alter table rank_settemp add partition f2 values ('C');
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1} :partEnd <> :partEvery <>} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1 :location 52} :partEnd <> :partEvery <> :location 52} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
drop table rank_settemp;
@@ -3683,11 +3683,11 @@ alter table mpp5992
set subpartition template (subpartition l1 values (1,2,3),
subpartition l2 values (4,5,6), subpartition l3 values (7,8,9,10));
select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass;
- relid | level | template
----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133})) :location 125} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 107} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165})) :location 157} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 139}) :encClauses <> :isTemplate true :fromCatalog false :location 105}
+ mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108})) :location 100} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 83} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149})) :location 141} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 124}) :encClauses <> :isTemplate true :fromCatalog false :location 81}
+ mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76})) :location 64} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 48} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109})) :location 97} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 81} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143})) :location 129} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 113}) :encClauses <> :isTemplate true :fromCatalog false :location 47}
(3 rows)
-- Now we can add a new partition
@@ -3937,11 +3937,11 @@ select relname, relam, pg_get_expr(relpartbound, oid) from pg_class where relnam
(112 rows)
select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass;
- relid | level | template
----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133})) :location 125} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 107} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165})) :location 157} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 139}) :encClauses <> :isTemplate true :fromCatalog false :location 105}
+ mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108})) :location 100} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 83} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149})) :location 141} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 124}) :encClauses <> :isTemplate true :fromCatalog false :location 81}
+ mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76})) :location 64} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 48} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109})) :location 97} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 81} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143})) :location 129} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 113}) :encClauses <> :isTemplate true :fromCatalog false :location 47}
(3 rows)
-- MPP-10223: split subpartitions
@@ -4141,9 +4141,9 @@ subpartition template (start (1) end (10) every (1))
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
select relid::regclass, level, template from gp_partition_template where relid = 'MPP10480'::regclass;
- relid | level | template
-----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2} :partEvery ({A_CONST :val 1 :location 141})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1 :location 115} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2 :location 125} :partEvery ({A_CONST :val 1 :location 141}) :location 115} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 115}) :encClauses <> :isTemplate true :fromCatalog false :location 114}
(1 row)
-- MPP-10421: fix SPLIT of partitions with PRIMARY KEY constraint/indexes
diff --git a/contrib/pax_storage/src/test/regress/expected/xml.out b/contrib/pax_storage/src/test/regress/expected/xml.out
index 658b8fcbf24..8eb4294d264 100644
--- a/contrib/pax_storage/src/test/regress/expected/xml.out
+++ b/contrib/pax_storage/src/test/regress/expected/xml.out
@@ -829,7 +829,7 @@ SELECT table_name, view_definition FROM information_schema.views
table_name | view_definition
------------+---------------------------------------------------------------------------------------------------------------------------------------
xmlview1 | SELECT xmlcomment('test'::text) AS xmlcomment;
- xmlview10 | SELECT XMLSERIALIZE(DOCUMENT '42'::xml AS text NO INDENT) AS "xmlserialize";
+ xmlview10 | SELECT XMLSERIALIZE(DOCUMENT '42'::xml AS text INDENT) AS "xmlserialize";
xmlview11 | SELECT (XMLSERIALIZE(DOCUMENT '42'::xml AS character varying NO INDENT))::character varying AS "xmlserialize";
xmlview2 | SELECT XMLCONCAT('hello'::xml, 'you'::xml) AS "xmlconcat";
xmlview3 | SELECT XMLELEMENT(NAME element, XMLATTRIBUTES(1 AS ":one:", 'deuce' AS two), 'content&') AS "xmlelement";
diff --git a/src/backend/Makefile b/src/backend/Makefile
index 675d97a6617..600560df631 100644
--- a/src/backend/Makefile
+++ b/src/backend/Makefile
@@ -210,8 +210,8 @@ submake-catalog-headers:
$(MAKE) -C catalog distprep generated-header-symlinks
# run this unconditionally to avoid needing to know its dependencies here:
-#submake-nodes-headers:
-# $(MAKE) -C nodes distprep generated-header-symlinks
+submake-nodes-headers:
+ $(MAKE) -C nodes distprep generated-header-symlinks
# run this unconditionally to avoid needing to know its dependencies here:
submake-utils-headers:
diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c
index b7d09e6bd79..63b4c323a61 100644
--- a/src/backend/access/transam/xlogrecovery.c
+++ b/src/backend/access/transam/xlogrecovery.c
@@ -2215,7 +2215,7 @@ CheckTablespaceDirectory(void)
snprintf(path, sizeof(path), "pg_tblspc/%s", de->d_name);
if (get_dirent_type(path, de, false, ERROR) != PGFILETYPE_LNK)
- ereport(allow_in_place_tablespaces ? WARNING : PANIC,
+ ereport(allow_in_place_tablespaces ? WARNING : WARNING,
(errcode(ERRCODE_DATA_CORRUPTED),
errmsg("unexpected directory entry \"%s\" found in %s",
de->d_name, "pg_tblspc/"),
diff --git a/src/backend/commands/explain_gp.c b/src/backend/commands/explain_gp.c
index 27580fbd5fa..5e9ff3376bd 100644
--- a/src/backend/commands/explain_gp.c
+++ b/src/backend/commands/explain_gp.c
@@ -28,6 +28,7 @@
#include "cdb/cdbvars.h" /* GpIdentity.segindex */
#include "cdb/cdbendpoint.h"
#include "cdb/memquota.h"
+#include "commands/explain_gp.h"
#include "libpq/pqformat.h" /* pq_beginmessage() etc. */
#include "miscadmin.h"
#include "utils/resscheduler.h"
@@ -40,74 +41,6 @@
/* Convert bytes into kilobytes */
#define kb(x) (floor((x + 1023.0) / 1024.0))
-/* EXPLAIN ANALYZE statistics for one plan node of a slice */
-typedef struct CdbExplain_StatInst
-{
- NodeTag pstype; /* PlanState node type */
-
- /* fields from Instrumentation struct */
- instr_time starttime; /* Start time of current iteration of node */
- instr_time counter; /* Accumulated runtime for this node */
- double firsttuple; /* Time for first tuple of this cycle */
- double startup; /* Total startup time (in seconds) */
- double total; /* Total total time (in seconds) */
- double ntuples; /* Total tuples produced */
- double ntuples2;
- double nloops; /* # of run cycles for this node */
- double nfiltered1;
- double nfiltered2;
- bool prf_work;
- double nfilteredPRF;
- double execmemused; /* executor memory used (bytes) */
- double workmemused; /* work_mem actually used (bytes) */
- double workmemwanted; /* work_mem to avoid workfile i/o (bytes) */
- bool workfileCreated; /* workfile created in this node */
- instr_time firststart; /* Start time of first iteration of node */
- int numPartScanned; /* Number of part tables scanned */
-
- TuplesortInstrumentation sortstats; /* Sort stats, if this is a Sort node */
- HashInstrumentation hashstats; /* Hash stats, if this is a Hash node */
- IncrementalSortGroupInfo fullsortGroupInfo; /* Full sort group info for Incremental Sort node */
- IncrementalSortGroupInfo prefixsortGroupInfo; /* Prefix sort group info for Incremental Sort node */
- int bnotes; /* Offset to beginning of node's extra text */
- int enotes; /* Offset to end of node's extra text */
- int nworkers_launched; /* Number of workers launched for this node */
- WalUsage walusage; /* add WAL usage */
-} CdbExplain_StatInst;
-
-
-/* EXPLAIN ANALYZE statistics for one process working on one slice */
-typedef struct CdbExplain_SliceWorker
-{
- double peakmemused; /* bytes alloc in per-query mem context tree */
- double vmem_reserved; /* vmem reserved by a QE */
- int nworkers_launched; /* Number of workers launched for this slice */
-} CdbExplain_SliceWorker;
-
-
-/* Header of EXPLAIN ANALYZE statistics message sent from qExec to qDisp */
-typedef struct CdbExplain_StatHdr
-{
- NodeTag type; /* T_CdbExplain_StatHdr */
- int segindex; /* segment id */
- int nInst; /* num of StatInst entries following StatHdr */
- int bnotes; /* offset to extra text area */
- int enotes; /* offset to end of extra text area */
-
- CdbExplain_SliceWorker worker; /* qExec's overall stats for slice */
-
- /*
- * During serialization, we use this as a temporary StatInst and save
- * "one-at-a-time" StatInst into this variable. We then write this
- * variable into buffer (serialize it) and then "recycle" the same inst
- * for next plan node's StatInst. During deserialization, an Array
- * [0..nInst-1] of StatInst entries is appended starting here.
- */
- CdbExplain_StatInst inst[1];
-
- /* extra text is appended after that */
-} CdbExplain_StatHdr;
-
/* Dispatch status summarized over workers in a slice */
typedef struct CdbExplain_DispatchSummary
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index ff3f535bcea..d495e4d4c83 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -672,6 +672,13 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt,
opts.synchronous_commit = "off";
conninfo = stmt->conninfo;
+ /*
+ * conninfo can be an empty string, but the serialization
+ * doesn't distinguish an empty string from NULL. The
+ * code that executes the command in't prepared for a NULL.
+ */
+ if (conninfo == NULL)
+ conninfo = pstrdup("");
publications = stmt->publication;
/* Load the library providing us libpq calls. */
diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c
index ac2c65f6b02..6ede39dbcbb 100644
--- a/src/backend/executor/execAmi.c
+++ b/src/backend/executor/execAmi.c
@@ -226,7 +226,6 @@ ExecReScan(PlanState *node)
break;
case T_DynamicIndexScanState:
- case T_DynamicIndexOnlyScanState:
ExecReScanDynamicIndex((DynamicIndexScanState *) node);
break;
@@ -821,7 +820,6 @@ ExecSquelchNode(PlanState *node, bool force)
case T_IndexScanState:
case T_DynamicSeqScanState:
case T_DynamicIndexScanState:
- case T_DynamicIndexOnlyScanState:
case T_IndexOnlyScanState:
case T_DynamicBitmapIndexScanState:
case T_BitmapIndexScanState:
diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c
index 3f98f99f267..cc5c7fc2b3e 100644
--- a/src/backend/executor/execProcnode.c
+++ b/src/backend/executor/execProcnode.c
@@ -893,7 +893,6 @@ ExecEndNode(PlanState *node)
break;
case T_DynamicIndexScanState:
- case T_DynamicIndexOnlyScanState:
ExecEndDynamicIndexScan((DynamicIndexScanState *) node);
break;
diff --git a/src/backend/nodes/.gitignore b/src/backend/nodes/.gitignore
index b9f480cb3ee..cf464e13a83 100644
--- a/src/backend/nodes/.gitignore
+++ b/src/backend/nodes/.gitignore
@@ -1 +1,6 @@
/node-support-stamp
+/nodetags.h
+/*funcs.funcs.c
+/*funcs.switch.c
+/*fast.funcs.c
+/*fast.switch.c
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 6111b2855cf..8bb3bff46ca 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -12,6 +12,8 @@ subdir = src/backend/nodes
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
+override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS)
+
OBJS = \
bitmapset.o \
copyfuncs.o \
@@ -22,18 +24,94 @@ OBJS = \
multibitmapset.o \
nodeFuncs.o \
nodes.o \
- outfast.o \
outfuncs.o \
+ outfast.o \
params.o \
print.o \
read.o \
- readfast.o \
readfuncs.o \
+ readfast.o \
tidbitmap.o \
value.o
-# readfast.c #includes readfuncs.c. Same with outfast.c and outfast.c
-readfast.o: readfuncs.c readfast.c readfuncs_common.c
-outfast.o: outfuncs.c outfast.c outfuncs_common.c
-
include $(top_srcdir)/src/backend/common.mk
+
+# The principal node-defining headers are listed in their inclusion order,
+# to ensure cross-file subtyping works correctly. The rest can just be
+# listed alphabetically.
+# Caution: re-ordering this list risks ABI breakage!
+node_headers = \
+ nodes/nodes.h \
+ nodes/primnodes.h \
+ nodes/parsenodes.h \
+ nodes/pathnodes.h \
+ nodes/plannodes.h \
+ nodes/execnodes.h \
+ access/amapi.h \
+ access/extprotocol.h \
+ access/formatter.h \
+ access/sdir.h \
+ access/tableam.h \
+ access/tsmapi.h \
+ access/tupdesc.h \
+ catalog/heap.h \
+ cdb/cdbgang.h \
+ commands/event_trigger.h \
+ commands/explain_gp.h \
+ commands/trigger.h \
+ executor/execdesc.h \
+ executor/tuptable.h \
+ foreign/fdwapi.h \
+ nodes/altertablenodes.h \
+ nodes/bitmapset.h \
+ nodes/extensible.h \
+ nodes/lockoptions.h \
+ nodes/miscnodes.h \
+ nodes/replnodes.h \
+ nodes/supportnodes.h \
+ nodes/tidbitmap.h \
+ nodes/value.h \
+ utils/queryenvironment.h \
+ utils/rel.h \
+ catalog/gp_distribution_policy.h \
+ cdb/cdbpathlocus.h
+
+# see also catalog/Makefile for an explanation of these make rules
+
+all: distprep generated-header-symlinks
+
+distprep: node-support-stamp
+
+.PHONY: generated-header-symlinks
+
+generated-header-symlinks: $(top_builddir)/src/include/nodes/header-stamp
+
+# node-support-stamp records the last time we ran gen_node_support.pl.
+# We don't rely on the timestamps of the individual output files,
+# because the Perl script won't update them if they didn't change (to
+# avoid unnecessary recompiles).
+node-support-stamp: gen_node_support.pl $(addprefix $(top_srcdir)/src/include/,$(node_headers))
+ $(PERL) $^
+ touch $@
+
+# These generated headers must be symlinked into builddir/src/include/,
+# using absolute links for the reasons explained in src/backend/Makefile.
+# We use header-stamp to record that we've done this because the symlinks
+# themselves may appear older than node-support-stamp.
+$(top_builddir)/src/include/nodes/header-stamp: node-support-stamp
+ prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
+ cd '$(dir $@)' && for file in nodetags.h; do \
+ rm -f $$file && $(LN_S) "$$prereqdir/$$file" . ; \
+ done
+ touch $@
+
+copyfuncs.o: copyfuncs.c copyfuncs.funcs.c copyfuncs.switch.c | node-support-stamp
+equalfuncs.o: equalfuncs.c equalfuncs.funcs.c equalfuncs.switch.c | node-support-stamp
+outfuncs.o: outfuncs.c outfuncs.funcs.c outfuncs.switch.c | node-support-stamp
+outfast.o: outfast.c outfast.funcs.c outfast.switch.c | node-support-stamp
+queryjumblefuncs.o: queryjumblefuncs.c queryjumblefuncs.funcs.c queryjumblefuncs.switch.c | node-support-stamp
+readfuncs.o: readfuncs.c readfuncs.funcs.c readfuncs.switch.c | node-support-stamp
+readfast.o: readfast.c readfast.funcs.c readfast.switch.c | node-support-stamp
+
+maintainer-clean: clean
+ rm -f node-support-stamp $(addsuffix funcs.funcs.c,copy equal out queryjumble read) $(addsuffix funcs.switch.c,copy equal out queryjumble read) $(addsuffix fast.funcs.c, out read) $(addsuffix fast.switch.c, out read) nodetags.h
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index e2e61f521fb..9838bce045b 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -64,7 +64,7 @@
#define COPY_POINTER_FIELD(fldname, sz) \
do { \
Size _size = (sz); \
- if (_size > 0) \
+ if (_size > 0 && from->fldname) \
{ \
newnode->fldname = palloc(_size); \
memcpy(newnode->fldname, from->fldname, _size); \
@@ -197,6 +197,212 @@ _copyBitmapset(const Bitmapset *from)
}
+static ColumnDef *
+_copyColumnDef(const ColumnDef *from)
+{
+ ColumnDef *newnode = makeNode(ColumnDef);
+
+ COPY_STRING_FIELD(colname);
+ COPY_NODE_FIELD(typeName);
+ COPY_STRING_FIELD(compression);
+ COPY_SCALAR_FIELD(inhcount);
+ COPY_SCALAR_FIELD(is_local);
+ COPY_SCALAR_FIELD(is_not_null);
+ COPY_SCALAR_FIELD(is_from_type);
+ COPY_SCALAR_FIELD(attnum);
+ COPY_SCALAR_FIELD(storage);
+ COPY_STRING_FIELD(storage_name);
+ COPY_NODE_FIELD(raw_default);
+ COPY_NODE_FIELD(cooked_default);
+ COPY_SCALAR_FIELD(hasCookedMissingVal);
+ COPY_SCALAR_FIELD(missingIsNull);
+ if (from->hasCookedMissingVal && !from->missingIsNull)
+ newnode->missingVal = datumCopy(from->missingVal, false, -1);
+ COPY_SCALAR_FIELD(identity);
+ COPY_NODE_FIELD(identitySequence);
+ COPY_SCALAR_FIELD(generated);
+ COPY_NODE_FIELD(collClause);
+ COPY_SCALAR_FIELD(collOid);
+ COPY_NODE_FIELD(constraints);
+ COPY_NODE_FIELD(encoding);
+ COPY_NODE_FIELD(fdwoptions);
+ COPY_LOCATION_FIELD(location);
+
+ return newnode;
+}
+
+static SliceTable *
+_copySliceTable(const SliceTable *from)
+{
+ SliceTable *newnode = makeNode(SliceTable);
+
+ COPY_SCALAR_FIELD(localSlice);
+ COPY_SCALAR_FIELD(numSlices);
+
+ newnode->slices = palloc0(from->numSlices * sizeof(ExecSlice));
+ for (int i = 0; i < from->numSlices; i++)
+ {
+ COPY_SCALAR_FIELD(slices[i].sliceIndex);
+ COPY_SCALAR_FIELD(slices[i].rootIndex);
+ COPY_SCALAR_FIELD(slices[i].planNumSegments);
+ COPY_SCALAR_FIELD(slices[i].gangType);
+ COPY_NODE_FIELD(slices[i].segments);
+ COPY_SCALAR_FIELD(slices[i].useMppParallelMode);
+ COPY_SCALAR_FIELD(slices[i].parallel_workers);
+
+ newnode->slices[i].primaryGang = from->slices[i].primaryGang;
+ COPY_SCALAR_FIELD(slices[i].parentIndex);
+ COPY_NODE_FIELD(slices[i].children);
+ COPY_NODE_FIELD(slices[i].primaryProcesses);
+ COPY_BITMAPSET_FIELD(slices[i].processesMap);
+ }
+
+ COPY_SCALAR_FIELD(instrument_options);
+ COPY_SCALAR_FIELD(ic_instance_id);
+
+ return newnode;
+}
+
+static AlteredTableInfo *
+_copyAlteredTableInfo(const AlteredTableInfo *from)
+{
+ int i;
+
+ AlteredTableInfo *newnode = makeNode(AlteredTableInfo);
+
+ COPY_SCALAR_FIELD(relid);
+ COPY_SCALAR_FIELD(relkind);
+ newnode->oldDesc = CreateTupleDescCopyConstr(from->oldDesc);
+
+ for (i = 0; i < AT_NUM_PASSES; i++)
+ COPY_NODE_FIELD(subcmds[i]);
+
+ COPY_NODE_FIELD(constraints);
+ COPY_NODE_FIELD(newvals);
+ COPY_NODE_FIELD(afterStmts);
+ COPY_SCALAR_FIELD(verify_new_notnull);
+ COPY_SCALAR_FIELD(rewrite);
+ COPY_SCALAR_FIELD(dist_opfamily_changed);
+ COPY_SCALAR_FIELD(new_opclass);
+ COPY_SCALAR_FIELD(newTableSpace);
+ COPY_SCALAR_FIELD(chgPersistence);
+ COPY_SCALAR_FIELD(newrelpersistence);
+ COPY_NODE_FIELD(partition_constraint);
+ COPY_SCALAR_FIELD(validate_default);
+ COPY_NODE_FIELD(changedConstraintOids);
+ COPY_NODE_FIELD(changedConstraintDefs);
+ COPY_NODE_FIELD(changedIndexOids);
+ COPY_NODE_FIELD(changedIndexDefs);
+ COPY_STRING_FIELD(replicaIdentityIndex);
+ COPY_STRING_FIELD(clusterOnIndex);
+ COPY_NODE_FIELD(beforeStmtLists);
+ COPY_NODE_FIELD(constraintLists);
+
+ return newnode;
+}
+
+static PlannedStmt *
+_copyPlannedStmt(const PlannedStmt *from)
+{
+ PlannedStmt *newnode = makeNode(PlannedStmt);
+
+ COPY_SCALAR_FIELD(commandType);
+ COPY_SCALAR_FIELD(planGen);
+ COPY_SCALAR_FIELD(queryId);
+ COPY_SCALAR_FIELD(hasReturning);
+ COPY_SCALAR_FIELD(hasModifyingCTE);
+ COPY_SCALAR_FIELD(canSetTag);
+ COPY_SCALAR_FIELD(transientPlan);
+ COPY_SCALAR_FIELD(oneoffPlan);
+ COPY_SCALAR_FIELD(simplyUpdatableRel);
+ COPY_SCALAR_FIELD(dependsOnRole);
+ COPY_SCALAR_FIELD(parallelModeNeeded);
+ COPY_SCALAR_FIELD(jitFlags);
+ COPY_NODE_FIELD(planTree);
+ COPY_SCALAR_FIELD(numSlices);
+ newnode->slices = palloc(from->numSlices * sizeof(PlanSlice));
+ for (int i = 0; i < from->numSlices; i++)
+ {
+ COPY_SCALAR_FIELD(slices[i].sliceIndex);
+ COPY_SCALAR_FIELD(slices[i].parentIndex);
+ COPY_SCALAR_FIELD(slices[i].gangType);
+ COPY_SCALAR_FIELD(slices[i].numsegments);
+ COPY_SCALAR_FIELD(slices[i].parallel_workers);
+ COPY_SCALAR_FIELD(slices[i].segindex);
+ COPY_SCALAR_FIELD(slices[i].directDispatch.isDirectDispatch);
+ COPY_NODE_FIELD(slices[i].directDispatch.contentIds);
+ }
+ COPY_NODE_FIELD(rtable);
+ COPY_NODE_FIELD(permInfos);
+ COPY_NODE_FIELD(resultRelations);
+ COPY_NODE_FIELD(appendRelations);
+ COPY_NODE_FIELD(subplans);
+ COPY_POINTER_FIELD(subplan_sliceIds, list_length(from->subplans) * sizeof(int));
+ COPY_BITMAPSET_FIELD(rewindPlanIDs);
+ COPY_NODE_FIELD(rowMarks);
+ COPY_NODE_FIELD(relationOids);
+ COPY_NODE_FIELD(invalItems);
+ COPY_NODE_FIELD(paramExecTypes);
+ COPY_NODE_FIELD(utilityStmt);
+ COPY_LOCATION_FIELD(stmt_location);
+ COPY_SCALAR_FIELD(stmt_len);
+ COPY_NODE_FIELD(intoPolicy);
+ COPY_SCALAR_FIELD(query_mem);
+ COPY_NODE_FIELD(intoClause);
+ COPY_NODE_FIELD(copyIntoClause);
+ COPY_NODE_FIELD(refreshClause);
+ COPY_SCALAR_FIELD(metricsQueryType);
+ COPY_NODE_FIELD(extensionContext);
+
+ return newnode;
+}
+
+static Motion *
+_copyMotion(const Motion *from)
+{
+ Motion *newnode = makeNode(Motion);
+
+ COPY_SCALAR_FIELD(plan.startup_cost);
+ COPY_SCALAR_FIELD(plan.total_cost);
+ COPY_SCALAR_FIELD(plan.plan_rows);
+ COPY_SCALAR_FIELD(plan.plan_width);
+ COPY_SCALAR_FIELD(plan.parallel_aware);
+ COPY_SCALAR_FIELD(plan.parallel_safe);
+ COPY_SCALAR_FIELD(plan.async_capable);
+ COPY_SCALAR_FIELD(plan.plan_node_id);
+ COPY_NODE_FIELD(plan.targetlist);
+ COPY_NODE_FIELD(plan.qual);
+ COPY_NODE_FIELD(plan.lefttree);
+ COPY_NODE_FIELD(plan.righttree);
+ COPY_NODE_FIELD(plan.initPlan);
+ COPY_BITMAPSET_FIELD(plan.extParam);
+ COPY_BITMAPSET_FIELD(plan.allParam);
+ COPY_NODE_FIELD(plan.flow);
+ COPY_SCALAR_FIELD(plan.locustype);
+ COPY_SCALAR_FIELD(plan.parallel);
+ COPY_SCALAR_FIELD(plan.operatorMemKB);
+ COPY_SCALAR_FIELD(motionType);
+ COPY_SCALAR_FIELD(sendSorted);
+ COPY_SCALAR_FIELD(motionID);
+ COPY_NODE_FIELD(hashExprs);
+ COPY_POINTER_FIELD(hashFuncs, list_length(from->hashExprs) * sizeof(Oid));
+ COPY_SCALAR_FIELD(numHashSegments);
+ COPY_SCALAR_FIELD(segidColIdx);
+ COPY_SCALAR_FIELD(numSortCols);
+ COPY_POINTER_FIELD(sortColIdx, from->numSortCols * sizeof(AttrNumber));
+ COPY_POINTER_FIELD(sortOperators, from->numSortCols * sizeof(Oid));
+ COPY_POINTER_FIELD(collations, from->numSortCols * sizeof(Oid));
+ COPY_POINTER_FIELD(nullsFirst, from->numSortCols * sizeof(bool));
+
+ if (from->senderSliceInfo)
+ {
+ newnode->senderSliceInfo = palloc(sizeof(PlanSlice));
+ memcpy(newnode->senderSliceInfo, from->senderSliceInfo, sizeof(PlanSlice));
+ }
+
+ return newnode;
+}
+
/*
* copyObjectImpl -- implementation of copyObject(); see nodes/nodes.h
*
diff --git a/src/backend/nodes/copyfuncs.funcs.c b/src/backend/nodes/copyfuncs.funcs.c
deleted file mode 100644
index 6f312d17574..00000000000
--- a/src/backend/nodes/copyfuncs.funcs.c
+++ /dev/null
@@ -1,6910 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * copyfuncs.funcs.c
- * Generated node infrastructure code
- *
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * NOTES
- * ******************************
- * *** DO NOT EDIT THIS FILE! ***
- * ******************************
- *
- * It has been GENERATED by src/backend/nodes/gen_node_support.pl
- *
- *-------------------------------------------------------------------------
- */
-#include "access/amapi.h"
-#include "access/sdir.h"
-#include "access/tableam.h"
-#include "access/tsmapi.h"
-#include "catalog/gp_distribution_policy.h"
-#include "commands/event_trigger.h"
-#include "commands/trigger.h"
-#include "executor/tuptable.h"
-#include "foreign/fdwapi.h"
-#include "nodes/bitmapset.h"
-#include "nodes/execnodes.h"
-#include "nodes/extensible.h"
-#include "nodes/lockoptions.h"
-#include "nodes/miscnodes.h"
-#include "nodes/nodes.h"
-#include "nodes/parsenodes.h"
-#include "nodes/pathnodes.h"
-#include "nodes/plannodes.h"
-#include "nodes/primnodes.h"
-#include "nodes/replnodes.h"
-#include "nodes/supportnodes.h"
-#include "nodes/value.h"
-#include "utils/rel.h"
-
-static GpPolicy *
-_copyGpPolicy(const GpPolicy *from)
-{
- GpPolicy *newnode = makeNode(GpPolicy);
-
- COPY_SCALAR_FIELD(ptype);
- COPY_SCALAR_FIELD(numsegments);
- COPY_SCALAR_FIELD(nattrs);
- COPY_POINTER_FIELD(attrs, from->nattrs * sizeof(AttrNumber));
- COPY_POINTER_FIELD(opclasses, from->nattrs * sizeof(Oid));
-
- return newnode;
-}
-
-static Alias *
-_copyAlias(const Alias *from)
-{
- Alias *newnode = makeNode(Alias);
-
- COPY_STRING_FIELD(aliasname);
- COPY_NODE_FIELD(colnames);
-
- return newnode;
-}
-
-static RangeVar *
-_copyRangeVar(const RangeVar *from)
-{
- RangeVar *newnode = makeNode(RangeVar);
-
- COPY_STRING_FIELD(catalogname);
- COPY_STRING_FIELD(schemaname);
- COPY_STRING_FIELD(relname);
- COPY_SCALAR_FIELD(inh);
- COPY_SCALAR_FIELD(relpersistence);
- COPY_NODE_FIELD(alias);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static TableFunc *
-_copyTableFunc(const TableFunc *from)
-{
- TableFunc *newnode = makeNode(TableFunc);
-
- COPY_NODE_FIELD(ns_uris);
- COPY_NODE_FIELD(ns_names);
- COPY_NODE_FIELD(docexpr);
- COPY_NODE_FIELD(rowexpr);
- COPY_NODE_FIELD(colnames);
- COPY_NODE_FIELD(coltypes);
- COPY_NODE_FIELD(coltypmods);
- COPY_NODE_FIELD(colcollations);
- COPY_NODE_FIELD(colexprs);
- COPY_NODE_FIELD(coldefexprs);
- COPY_BITMAPSET_FIELD(notnulls);
- COPY_SCALAR_FIELD(ordinalitycol);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static IntoClause *
-_copyIntoClause(const IntoClause *from)
-{
- IntoClause *newnode = makeNode(IntoClause);
-
- COPY_NODE_FIELD(rel);
- COPY_NODE_FIELD(colNames);
- COPY_STRING_FIELD(accessMethod);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(onCommit);
- COPY_STRING_FIELD(tableSpaceName);
- COPY_NODE_FIELD(viewQuery);
- COPY_SCALAR_FIELD(skipData);
- COPY_NODE_FIELD(distributedBy);
- COPY_SCALAR_FIELD(ivm);
- COPY_SCALAR_FIELD(matviewOid);
- COPY_STRING_FIELD(enrname);
- COPY_SCALAR_FIELD(dynamicTbl);
- COPY_STRING_FIELD(schedule);
-
- return newnode;
-}
-
-static CopyIntoClause *
-_copyCopyIntoClause(const CopyIntoClause *from)
-{
- CopyIntoClause *newnode = makeNode(CopyIntoClause);
-
- COPY_NODE_FIELD(attlist);
- COPY_SCALAR_FIELD(is_program);
- COPY_STRING_FIELD(filename);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static RefreshClause *
-_copyRefreshClause(const RefreshClause *from)
-{
- RefreshClause *newnode = makeNode(RefreshClause);
-
- COPY_SCALAR_FIELD(concurrent);
- COPY_SCALAR_FIELD(skipData);
- COPY_NODE_FIELD(relation);
-
- return newnode;
-}
-
-static Var *
-_copyVar(const Var *from)
-{
- Var *newnode = makeNode(Var);
-
- COPY_SCALAR_FIELD(varno);
- COPY_SCALAR_FIELD(varattno);
- COPY_SCALAR_FIELD(vartype);
- COPY_SCALAR_FIELD(vartypmod);
- COPY_SCALAR_FIELD(varcollid);
- COPY_BITMAPSET_FIELD(varnullingrels);
- COPY_SCALAR_FIELD(varlevelsup);
- COPY_SCALAR_FIELD(varnosyn);
- COPY_SCALAR_FIELD(varattnosyn);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static Param *
-_copyParam(const Param *from)
-{
- Param *newnode = makeNode(Param);
-
- COPY_SCALAR_FIELD(paramkind);
- COPY_SCALAR_FIELD(paramid);
- COPY_SCALAR_FIELD(paramtype);
- COPY_SCALAR_FIELD(paramtypmod);
- COPY_SCALAR_FIELD(paramcollid);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static Aggref *
-_copyAggref(const Aggref *from)
-{
- Aggref *newnode = makeNode(Aggref);
-
- COPY_SCALAR_FIELD(aggfnoid);
- COPY_SCALAR_FIELD(aggtype);
- COPY_SCALAR_FIELD(aggcollid);
- COPY_SCALAR_FIELD(inputcollid);
- COPY_SCALAR_FIELD(aggtranstype);
- COPY_NODE_FIELD(aggargtypes);
- COPY_NODE_FIELD(aggdirectargs);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(aggorder);
- COPY_NODE_FIELD(aggdistinct);
- COPY_NODE_FIELD(aggfilter);
- COPY_SCALAR_FIELD(aggstar);
- COPY_SCALAR_FIELD(aggvariadic);
- COPY_SCALAR_FIELD(aggkind);
- COPY_SCALAR_FIELD(aggpresorted);
- COPY_SCALAR_FIELD(agglevelsup);
- COPY_SCALAR_FIELD(aggsplit);
- COPY_SCALAR_FIELD(aggno);
- COPY_SCALAR_FIELD(aggtransno);
- COPY_LOCATION_FIELD(location);
- COPY_SCALAR_FIELD(agg_expr_id);
-
- return newnode;
-}
-
-static GroupId *
-_copyGroupId(const GroupId *from)
-{
- GroupId *newnode = makeNode(GroupId);
-
- COPY_SCALAR_FIELD(agglevelsup);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static GroupingSetId *
-_copyGroupingSetId(const GroupingSetId *from)
-{
- GroupingSetId *newnode = makeNode(GroupingSetId);
-
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static AggExprId *
-_copyAggExprId(const AggExprId *from)
-{
- AggExprId *newnode = makeNode(AggExprId);
-
-
- return newnode;
-}
-
-static RowIdExpr *
-_copyRowIdExpr(const RowIdExpr *from)
-{
- RowIdExpr *newnode = makeNode(RowIdExpr);
-
- COPY_SCALAR_FIELD(rowidexpr_id);
-
- return newnode;
-}
-
-static GroupingFunc *
-_copyGroupingFunc(const GroupingFunc *from)
-{
- GroupingFunc *newnode = makeNode(GroupingFunc);
-
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(refs);
- COPY_NODE_FIELD(cols);
- COPY_SCALAR_FIELD(agglevelsup);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static WindowFunc *
-_copyWindowFunc(const WindowFunc *from)
-{
- WindowFunc *newnode = makeNode(WindowFunc);
-
- COPY_SCALAR_FIELD(winfnoid);
- COPY_SCALAR_FIELD(wintype);
- COPY_SCALAR_FIELD(wincollid);
- COPY_SCALAR_FIELD(inputcollid);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(aggfilter);
- COPY_SCALAR_FIELD(winref);
- COPY_SCALAR_FIELD(winstar);
- COPY_SCALAR_FIELD(winagg);
- COPY_LOCATION_FIELD(location);
- COPY_SCALAR_FIELD(windistinct);
-
- return newnode;
-}
-
-static SubscriptingRef *
-_copySubscriptingRef(const SubscriptingRef *from)
-{
- SubscriptingRef *newnode = makeNode(SubscriptingRef);
-
- COPY_SCALAR_FIELD(refcontainertype);
- COPY_SCALAR_FIELD(refelemtype);
- COPY_SCALAR_FIELD(refrestype);
- COPY_SCALAR_FIELD(reftypmod);
- COPY_SCALAR_FIELD(refcollid);
- COPY_NODE_FIELD(refupperindexpr);
- COPY_NODE_FIELD(reflowerindexpr);
- COPY_NODE_FIELD(refexpr);
- COPY_NODE_FIELD(refassgnexpr);
-
- return newnode;
-}
-
-static FuncExpr *
-_copyFuncExpr(const FuncExpr *from)
-{
- FuncExpr *newnode = makeNode(FuncExpr);
-
- COPY_SCALAR_FIELD(funcid);
- COPY_SCALAR_FIELD(funcresulttype);
- COPY_SCALAR_FIELD(funcretset);
- COPY_SCALAR_FIELD(funcvariadic);
- COPY_SCALAR_FIELD(funcformat);
- COPY_SCALAR_FIELD(funccollid);
- COPY_SCALAR_FIELD(inputcollid);
- COPY_NODE_FIELD(args);
- COPY_LOCATION_FIELD(location);
- COPY_SCALAR_FIELD(is_tablefunc);
-
- return newnode;
-}
-
-static NamedArgExpr *
-_copyNamedArgExpr(const NamedArgExpr *from)
-{
- NamedArgExpr *newnode = makeNode(NamedArgExpr);
-
- COPY_NODE_FIELD(arg);
- COPY_STRING_FIELD(name);
- COPY_SCALAR_FIELD(argnumber);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static OpExpr *
-_copyOpExpr(const OpExpr *from)
-{
- OpExpr *newnode = makeNode(OpExpr);
-
- COPY_SCALAR_FIELD(opno);
- COPY_SCALAR_FIELD(opfuncid);
- COPY_SCALAR_FIELD(opresulttype);
- COPY_SCALAR_FIELD(opretset);
- COPY_SCALAR_FIELD(opcollid);
- COPY_SCALAR_FIELD(inputcollid);
- COPY_NODE_FIELD(args);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static DistinctExpr *
-_copyDistinctExpr(const DistinctExpr *from)
-{
- DistinctExpr *newnode = makeNode(DistinctExpr);
-
- COPY_SCALAR_FIELD(opno);
- COPY_SCALAR_FIELD(opfuncid);
- COPY_SCALAR_FIELD(opresulttype);
- COPY_SCALAR_FIELD(opretset);
- COPY_SCALAR_FIELD(opcollid);
- COPY_SCALAR_FIELD(inputcollid);
- COPY_NODE_FIELD(args);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static NullIfExpr *
-_copyNullIfExpr(const NullIfExpr *from)
-{
- NullIfExpr *newnode = makeNode(NullIfExpr);
-
- COPY_SCALAR_FIELD(opno);
- COPY_SCALAR_FIELD(opfuncid);
- COPY_SCALAR_FIELD(opresulttype);
- COPY_SCALAR_FIELD(opretset);
- COPY_SCALAR_FIELD(opcollid);
- COPY_SCALAR_FIELD(inputcollid);
- COPY_NODE_FIELD(args);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static ScalarArrayOpExpr *
-_copyScalarArrayOpExpr(const ScalarArrayOpExpr *from)
-{
- ScalarArrayOpExpr *newnode = makeNode(ScalarArrayOpExpr);
-
- COPY_SCALAR_FIELD(opno);
- COPY_SCALAR_FIELD(opfuncid);
- COPY_SCALAR_FIELD(hashfuncid);
- COPY_SCALAR_FIELD(negfuncid);
- COPY_SCALAR_FIELD(useOr);
- COPY_SCALAR_FIELD(inputcollid);
- COPY_NODE_FIELD(args);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static BoolExpr *
-_copyBoolExpr(const BoolExpr *from)
-{
- BoolExpr *newnode = makeNode(BoolExpr);
-
- COPY_SCALAR_FIELD(boolop);
- COPY_NODE_FIELD(args);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static TableValueExpr *
-_copyTableValueExpr(const TableValueExpr *from)
-{
- TableValueExpr *newnode = makeNode(TableValueExpr);
-
- COPY_NODE_FIELD(subquery);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static SubLink *
-_copySubLink(const SubLink *from)
-{
- SubLink *newnode = makeNode(SubLink);
-
- COPY_SCALAR_FIELD(subLinkType);
- COPY_SCALAR_FIELD(subLinkId);
- COPY_NODE_FIELD(testexpr);
- COPY_NODE_FIELD(operName);
- COPY_NODE_FIELD(subselect);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static SubPlan *
-_copySubPlan(const SubPlan *from)
-{
- SubPlan *newnode = makeNode(SubPlan);
-
- COPY_SCALAR_FIELD(subLinkType);
- COPY_NODE_FIELD(testexpr);
- COPY_NODE_FIELD(paramIds);
- COPY_SCALAR_FIELD(plan_id);
- COPY_STRING_FIELD(plan_name);
- COPY_SCALAR_FIELD(firstColType);
- COPY_SCALAR_FIELD(firstColTypmod);
- COPY_SCALAR_FIELD(firstColCollation);
- COPY_SCALAR_FIELD(useHashTable);
- COPY_SCALAR_FIELD(unknownEqFalse);
- COPY_SCALAR_FIELD(parallel_safe);
- COPY_SCALAR_FIELD(is_initplan);
- COPY_SCALAR_FIELD(is_multirow);
- COPY_NODE_FIELD(setParam);
- COPY_NODE_FIELD(parParam);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(extParam);
- COPY_SCALAR_FIELD(startup_cost);
- COPY_SCALAR_FIELD(per_call_cost);
-
- return newnode;
-}
-
-static AlternativeSubPlan *
-_copyAlternativeSubPlan(const AlternativeSubPlan *from)
-{
- AlternativeSubPlan *newnode = makeNode(AlternativeSubPlan);
-
- COPY_NODE_FIELD(subplans);
-
- return newnode;
-}
-
-static FieldSelect *
-_copyFieldSelect(const FieldSelect *from)
-{
- FieldSelect *newnode = makeNode(FieldSelect);
-
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(fieldnum);
- COPY_SCALAR_FIELD(resulttype);
- COPY_SCALAR_FIELD(resulttypmod);
- COPY_SCALAR_FIELD(resultcollid);
-
- return newnode;
-}
-
-static FieldStore *
-_copyFieldStore(const FieldStore *from)
-{
- FieldStore *newnode = makeNode(FieldStore);
-
- COPY_NODE_FIELD(arg);
- COPY_NODE_FIELD(newvals);
- COPY_NODE_FIELD(fieldnums);
- COPY_SCALAR_FIELD(resulttype);
-
- return newnode;
-}
-
-static RelabelType *
-_copyRelabelType(const RelabelType *from)
-{
- RelabelType *newnode = makeNode(RelabelType);
-
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(resulttype);
- COPY_SCALAR_FIELD(resulttypmod);
- COPY_SCALAR_FIELD(resultcollid);
- COPY_SCALAR_FIELD(relabelformat);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CoerceViaIO *
-_copyCoerceViaIO(const CoerceViaIO *from)
-{
- CoerceViaIO *newnode = makeNode(CoerceViaIO);
-
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(resulttype);
- COPY_SCALAR_FIELD(resultcollid);
- COPY_SCALAR_FIELD(coerceformat);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static ArrayCoerceExpr *
-_copyArrayCoerceExpr(const ArrayCoerceExpr *from)
-{
- ArrayCoerceExpr *newnode = makeNode(ArrayCoerceExpr);
-
- COPY_NODE_FIELD(arg);
- COPY_NODE_FIELD(elemexpr);
- COPY_SCALAR_FIELD(resulttype);
- COPY_SCALAR_FIELD(resulttypmod);
- COPY_SCALAR_FIELD(resultcollid);
- COPY_SCALAR_FIELD(coerceformat);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static ConvertRowtypeExpr *
-_copyConvertRowtypeExpr(const ConvertRowtypeExpr *from)
-{
- ConvertRowtypeExpr *newnode = makeNode(ConvertRowtypeExpr);
-
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(resulttype);
- COPY_SCALAR_FIELD(convertformat);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CollateExpr *
-_copyCollateExpr(const CollateExpr *from)
-{
- CollateExpr *newnode = makeNode(CollateExpr);
-
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(collOid);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CaseExpr *
-_copyCaseExpr(const CaseExpr *from)
-{
- CaseExpr *newnode = makeNode(CaseExpr);
-
- COPY_SCALAR_FIELD(casetype);
- COPY_SCALAR_FIELD(casecollid);
- COPY_NODE_FIELD(arg);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(defresult);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CaseWhen *
-_copyCaseWhen(const CaseWhen *from)
-{
- CaseWhen *newnode = makeNode(CaseWhen);
-
- COPY_NODE_FIELD(expr);
- COPY_NODE_FIELD(result);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CaseTestExpr *
-_copyCaseTestExpr(const CaseTestExpr *from)
-{
- CaseTestExpr *newnode = makeNode(CaseTestExpr);
-
- COPY_SCALAR_FIELD(typeId);
- COPY_SCALAR_FIELD(typeMod);
- COPY_SCALAR_FIELD(collation);
-
- return newnode;
-}
-
-static ArrayExpr *
-_copyArrayExpr(const ArrayExpr *from)
-{
- ArrayExpr *newnode = makeNode(ArrayExpr);
-
- COPY_SCALAR_FIELD(array_typeid);
- COPY_SCALAR_FIELD(array_collid);
- COPY_SCALAR_FIELD(element_typeid);
- COPY_NODE_FIELD(elements);
- COPY_SCALAR_FIELD(multidims);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static RowExpr *
-_copyRowExpr(const RowExpr *from)
-{
- RowExpr *newnode = makeNode(RowExpr);
-
- COPY_NODE_FIELD(args);
- COPY_SCALAR_FIELD(row_typeid);
- COPY_SCALAR_FIELD(row_format);
- COPY_NODE_FIELD(colnames);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static RowCompareExpr *
-_copyRowCompareExpr(const RowCompareExpr *from)
-{
- RowCompareExpr *newnode = makeNode(RowCompareExpr);
-
- COPY_SCALAR_FIELD(rctype);
- COPY_NODE_FIELD(opnos);
- COPY_NODE_FIELD(opfamilies);
- COPY_NODE_FIELD(inputcollids);
- COPY_NODE_FIELD(largs);
- COPY_NODE_FIELD(rargs);
-
- return newnode;
-}
-
-static CoalesceExpr *
-_copyCoalesceExpr(const CoalesceExpr *from)
-{
- CoalesceExpr *newnode = makeNode(CoalesceExpr);
-
- COPY_SCALAR_FIELD(coalescetype);
- COPY_SCALAR_FIELD(coalescecollid);
- COPY_NODE_FIELD(args);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static MinMaxExpr *
-_copyMinMaxExpr(const MinMaxExpr *from)
-{
- MinMaxExpr *newnode = makeNode(MinMaxExpr);
-
- COPY_SCALAR_FIELD(minmaxtype);
- COPY_SCALAR_FIELD(minmaxcollid);
- COPY_SCALAR_FIELD(inputcollid);
- COPY_SCALAR_FIELD(op);
- COPY_NODE_FIELD(args);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static SQLValueFunction *
-_copySQLValueFunction(const SQLValueFunction *from)
-{
- SQLValueFunction *newnode = makeNode(SQLValueFunction);
-
- COPY_SCALAR_FIELD(op);
- COPY_SCALAR_FIELD(type);
- COPY_SCALAR_FIELD(typmod);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static XmlExpr *
-_copyXmlExpr(const XmlExpr *from)
-{
- XmlExpr *newnode = makeNode(XmlExpr);
-
- COPY_SCALAR_FIELD(op);
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(named_args);
- COPY_NODE_FIELD(arg_names);
- COPY_NODE_FIELD(args);
- COPY_SCALAR_FIELD(xmloption);
- COPY_SCALAR_FIELD(indent);
- COPY_SCALAR_FIELD(type);
- COPY_SCALAR_FIELD(typmod);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static JsonFormat *
-_copyJsonFormat(const JsonFormat *from)
-{
- JsonFormat *newnode = makeNode(JsonFormat);
-
- COPY_SCALAR_FIELD(format_type);
- COPY_SCALAR_FIELD(encoding);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static JsonReturning *
-_copyJsonReturning(const JsonReturning *from)
-{
- JsonReturning *newnode = makeNode(JsonReturning);
-
- COPY_NODE_FIELD(format);
- COPY_SCALAR_FIELD(typid);
- COPY_SCALAR_FIELD(typmod);
-
- return newnode;
-}
-
-static JsonValueExpr *
-_copyJsonValueExpr(const JsonValueExpr *from)
-{
- JsonValueExpr *newnode = makeNode(JsonValueExpr);
-
- COPY_NODE_FIELD(raw_expr);
- COPY_NODE_FIELD(formatted_expr);
- COPY_NODE_FIELD(format);
-
- return newnode;
-}
-
-static JsonConstructorExpr *
-_copyJsonConstructorExpr(const JsonConstructorExpr *from)
-{
- JsonConstructorExpr *newnode = makeNode(JsonConstructorExpr);
-
- COPY_SCALAR_FIELD(type);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(func);
- COPY_NODE_FIELD(coercion);
- COPY_NODE_FIELD(returning);
- COPY_SCALAR_FIELD(absent_on_null);
- COPY_SCALAR_FIELD(unique);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static JsonIsPredicate *
-_copyJsonIsPredicate(const JsonIsPredicate *from)
-{
- JsonIsPredicate *newnode = makeNode(JsonIsPredicate);
-
- COPY_NODE_FIELD(expr);
- COPY_NODE_FIELD(format);
- COPY_SCALAR_FIELD(item_type);
- COPY_SCALAR_FIELD(unique_keys);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static NullTest *
-_copyNullTest(const NullTest *from)
-{
- NullTest *newnode = makeNode(NullTest);
-
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(nulltesttype);
- COPY_SCALAR_FIELD(argisrow);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static BooleanTest *
-_copyBooleanTest(const BooleanTest *from)
-{
- BooleanTest *newnode = makeNode(BooleanTest);
-
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(booltesttype);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CoerceToDomain *
-_copyCoerceToDomain(const CoerceToDomain *from)
-{
- CoerceToDomain *newnode = makeNode(CoerceToDomain);
-
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(resulttype);
- COPY_SCALAR_FIELD(resulttypmod);
- COPY_SCALAR_FIELD(resultcollid);
- COPY_SCALAR_FIELD(coercionformat);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CoerceToDomainValue *
-_copyCoerceToDomainValue(const CoerceToDomainValue *from)
-{
- CoerceToDomainValue *newnode = makeNode(CoerceToDomainValue);
-
- COPY_SCALAR_FIELD(typeId);
- COPY_SCALAR_FIELD(typeMod);
- COPY_SCALAR_FIELD(collation);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static SetToDefault *
-_copySetToDefault(const SetToDefault *from)
-{
- SetToDefault *newnode = makeNode(SetToDefault);
-
- COPY_SCALAR_FIELD(typeId);
- COPY_SCALAR_FIELD(typeMod);
- COPY_SCALAR_FIELD(collation);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CurrentOfExpr *
-_copyCurrentOfExpr(const CurrentOfExpr *from)
-{
- CurrentOfExpr *newnode = makeNode(CurrentOfExpr);
-
- COPY_STRING_FIELD(cursor_name);
- COPY_SCALAR_FIELD(cursor_param);
- COPY_SCALAR_FIELD(cvarno);
- COPY_SCALAR_FIELD(target_relid);
-
- return newnode;
-}
-
-static NextValueExpr *
-_copyNextValueExpr(const NextValueExpr *from)
-{
- NextValueExpr *newnode = makeNode(NextValueExpr);
-
- COPY_SCALAR_FIELD(seqid);
- COPY_SCALAR_FIELD(typeId);
-
- return newnode;
-}
-
-static InferenceElem *
-_copyInferenceElem(const InferenceElem *from)
-{
- InferenceElem *newnode = makeNode(InferenceElem);
-
- COPY_NODE_FIELD(expr);
- COPY_SCALAR_FIELD(infercollid);
- COPY_SCALAR_FIELD(inferopclass);
-
- return newnode;
-}
-
-static TargetEntry *
-_copyTargetEntry(const TargetEntry *from)
-{
- TargetEntry *newnode = makeNode(TargetEntry);
-
- COPY_NODE_FIELD(expr);
- COPY_SCALAR_FIELD(resno);
- COPY_STRING_FIELD(resname);
- COPY_SCALAR_FIELD(ressortgroupref);
- COPY_SCALAR_FIELD(resorigtbl);
- COPY_SCALAR_FIELD(resorigcol);
- COPY_SCALAR_FIELD(resjunk);
-
- return newnode;
-}
-
-static RangeTblRef *
-_copyRangeTblRef(const RangeTblRef *from)
-{
- RangeTblRef *newnode = makeNode(RangeTblRef);
-
- COPY_SCALAR_FIELD(rtindex);
-
- return newnode;
-}
-
-static JoinExpr *
-_copyJoinExpr(const JoinExpr *from)
-{
- JoinExpr *newnode = makeNode(JoinExpr);
-
- COPY_SCALAR_FIELD(jointype);
- COPY_SCALAR_FIELD(isNatural);
- COPY_NODE_FIELD(larg);
- COPY_NODE_FIELD(rarg);
- COPY_NODE_FIELD(usingClause);
- COPY_NODE_FIELD(join_using_alias);
- COPY_NODE_FIELD(quals);
- COPY_NODE_FIELD(alias);
- COPY_SCALAR_FIELD(rtindex);
-
- return newnode;
-}
-
-static FromExpr *
-_copyFromExpr(const FromExpr *from)
-{
- FromExpr *newnode = makeNode(FromExpr);
-
- COPY_NODE_FIELD(fromlist);
- COPY_NODE_FIELD(quals);
-
- return newnode;
-}
-
-static OnConflictExpr *
-_copyOnConflictExpr(const OnConflictExpr *from)
-{
- OnConflictExpr *newnode = makeNode(OnConflictExpr);
-
- COPY_SCALAR_FIELD(action);
- COPY_NODE_FIELD(arbiterElems);
- COPY_NODE_FIELD(arbiterWhere);
- COPY_SCALAR_FIELD(constraint);
- COPY_NODE_FIELD(onConflictSet);
- COPY_NODE_FIELD(onConflictWhere);
- COPY_SCALAR_FIELD(exclRelIndex);
- COPY_NODE_FIELD(exclRelTlist);
-
- return newnode;
-}
-
-static DMLActionExpr *
-_copyDMLActionExpr(const DMLActionExpr *from)
-{
- DMLActionExpr *newnode = makeNode(DMLActionExpr);
-
-
- return newnode;
-}
-
-static Query *
-_copyQuery(const Query *from)
-{
- Query *newnode = makeNode(Query);
-
- COPY_SCALAR_FIELD(commandType);
- COPY_SCALAR_FIELD(querySource);
- COPY_SCALAR_FIELD(queryId);
- COPY_SCALAR_FIELD(canSetTag);
- COPY_NODE_FIELD(utilityStmt);
- COPY_SCALAR_FIELD(resultRelation);
- COPY_SCALAR_FIELD(hasAggs);
- COPY_SCALAR_FIELD(hasWindowFuncs);
- COPY_SCALAR_FIELD(hasTargetSRFs);
- COPY_SCALAR_FIELD(hasSubLinks);
- COPY_SCALAR_FIELD(hasDistinctOn);
- COPY_SCALAR_FIELD(hasRecursive);
- COPY_SCALAR_FIELD(hasModifyingCTE);
- COPY_SCALAR_FIELD(hasForUpdate);
- COPY_SCALAR_FIELD(hasRowSecurity);
- COPY_SCALAR_FIELD(isReturn);
- COPY_SCALAR_FIELD(hasDynamicFunctions);
- COPY_SCALAR_FIELD(hasFuncsWithExecRestrictions);
- COPY_SCALAR_FIELD(canOptSelectLockingClause);
- COPY_NODE_FIELD(cteList);
- COPY_NODE_FIELD(rtable);
- COPY_NODE_FIELD(rteperminfos);
- COPY_NODE_FIELD(jointree);
- COPY_NODE_FIELD(mergeActionList);
- COPY_SCALAR_FIELD(mergeUseOuterJoin);
- COPY_NODE_FIELD(targetList);
- COPY_SCALAR_FIELD(override);
- COPY_NODE_FIELD(onConflict);
- COPY_NODE_FIELD(returningList);
- COPY_NODE_FIELD(groupClause);
- COPY_SCALAR_FIELD(groupDistinct);
- COPY_NODE_FIELD(groupingSets);
- COPY_NODE_FIELD(havingQual);
- COPY_NODE_FIELD(windowClause);
- COPY_NODE_FIELD(distinctClause);
- COPY_NODE_FIELD(sortClause);
- COPY_NODE_FIELD(scatterClause);
- COPY_SCALAR_FIELD(isTableValueSelect);
- COPY_NODE_FIELD(limitOffset);
- COPY_NODE_FIELD(limitCount);
- COPY_SCALAR_FIELD(limitOption);
- COPY_NODE_FIELD(rowMarks);
- COPY_NODE_FIELD(setOperations);
- COPY_NODE_FIELD(constraintDeps);
- COPY_NODE_FIELD(withCheckOptions);
- COPY_NODE_FIELD(intoPolicy);
- COPY_SCALAR_FIELD(parentStmtType);
- COPY_LOCATION_FIELD(stmt_location);
- COPY_SCALAR_FIELD(stmt_len);
- COPY_SCALAR_FIELD(expandMatViews);
-
- return newnode;
-}
-
-static TypeName *
-_copyTypeName(const TypeName *from)
-{
- TypeName *newnode = makeNode(TypeName);
-
- COPY_NODE_FIELD(names);
- COPY_SCALAR_FIELD(typeOid);
- COPY_SCALAR_FIELD(setof);
- COPY_SCALAR_FIELD(pct_type);
- COPY_NODE_FIELD(typmods);
- COPY_SCALAR_FIELD(typemod);
- COPY_NODE_FIELD(arrayBounds);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static ColumnRef *
-_copyColumnRef(const ColumnRef *from)
-{
- ColumnRef *newnode = makeNode(ColumnRef);
-
- COPY_NODE_FIELD(fields);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static ParamRef *
-_copyParamRef(const ParamRef *from)
-{
- ParamRef *newnode = makeNode(ParamRef);
-
- COPY_SCALAR_FIELD(number);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static A_Expr *
-_copyA_Expr(const A_Expr *from)
-{
- A_Expr *newnode = makeNode(A_Expr);
-
- COPY_SCALAR_FIELD(kind);
- COPY_NODE_FIELD(name);
- COPY_NODE_FIELD(lexpr);
- COPY_NODE_FIELD(rexpr);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static TypeCast *
-_copyTypeCast(const TypeCast *from)
-{
- TypeCast *newnode = makeNode(TypeCast);
-
- COPY_NODE_FIELD(arg);
- COPY_NODE_FIELD(typeName);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CollateClause *
-_copyCollateClause(const CollateClause *from)
-{
- CollateClause *newnode = makeNode(CollateClause);
-
- COPY_NODE_FIELD(arg);
- COPY_NODE_FIELD(collname);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static RoleSpec *
-_copyRoleSpec(const RoleSpec *from)
-{
- RoleSpec *newnode = makeNode(RoleSpec);
-
- COPY_SCALAR_FIELD(roletype);
- COPY_STRING_FIELD(rolename);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static FuncCall *
-_copyFuncCall(const FuncCall *from)
-{
- FuncCall *newnode = makeNode(FuncCall);
-
- COPY_NODE_FIELD(funcname);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(agg_order);
- COPY_NODE_FIELD(agg_filter);
- COPY_NODE_FIELD(over);
- COPY_SCALAR_FIELD(agg_within_group);
- COPY_SCALAR_FIELD(agg_star);
- COPY_SCALAR_FIELD(agg_distinct);
- COPY_SCALAR_FIELD(func_variadic);
- COPY_SCALAR_FIELD(funcformat);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static A_Star *
-_copyA_Star(const A_Star *from)
-{
- A_Star *newnode = makeNode(A_Star);
-
-
- return newnode;
-}
-
-static A_Indices *
-_copyA_Indices(const A_Indices *from)
-{
- A_Indices *newnode = makeNode(A_Indices);
-
- COPY_SCALAR_FIELD(is_slice);
- COPY_NODE_FIELD(lidx);
- COPY_NODE_FIELD(uidx);
-
- return newnode;
-}
-
-static A_Indirection *
-_copyA_Indirection(const A_Indirection *from)
-{
- A_Indirection *newnode = makeNode(A_Indirection);
-
- COPY_NODE_FIELD(arg);
- COPY_NODE_FIELD(indirection);
-
- return newnode;
-}
-
-static A_ArrayExpr *
-_copyA_ArrayExpr(const A_ArrayExpr *from)
-{
- A_ArrayExpr *newnode = makeNode(A_ArrayExpr);
-
- COPY_NODE_FIELD(elements);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static ResTarget *
-_copyResTarget(const ResTarget *from)
-{
- ResTarget *newnode = makeNode(ResTarget);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(indirection);
- COPY_NODE_FIELD(val);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static MultiAssignRef *
-_copyMultiAssignRef(const MultiAssignRef *from)
-{
- MultiAssignRef *newnode = makeNode(MultiAssignRef);
-
- COPY_NODE_FIELD(source);
- COPY_SCALAR_FIELD(colno);
- COPY_SCALAR_FIELD(ncolumns);
-
- return newnode;
-}
-
-static SortBy *
-_copySortBy(const SortBy *from)
-{
- SortBy *newnode = makeNode(SortBy);
-
- COPY_NODE_FIELD(node);
- COPY_SCALAR_FIELD(sortby_dir);
- COPY_SCALAR_FIELD(sortby_nulls);
- COPY_NODE_FIELD(useOp);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static WindowDef *
-_copyWindowDef(const WindowDef *from)
-{
- WindowDef *newnode = makeNode(WindowDef);
-
- COPY_STRING_FIELD(name);
- COPY_STRING_FIELD(refname);
- COPY_NODE_FIELD(partitionClause);
- COPY_NODE_FIELD(orderClause);
- COPY_SCALAR_FIELD(frameOptions);
- COPY_NODE_FIELD(startOffset);
- COPY_NODE_FIELD(endOffset);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static RangeSubselect *
-_copyRangeSubselect(const RangeSubselect *from)
-{
- RangeSubselect *newnode = makeNode(RangeSubselect);
-
- COPY_SCALAR_FIELD(lateral);
- COPY_NODE_FIELD(subquery);
- COPY_NODE_FIELD(alias);
-
- return newnode;
-}
-
-static RangeFunction *
-_copyRangeFunction(const RangeFunction *from)
-{
- RangeFunction *newnode = makeNode(RangeFunction);
-
- COPY_SCALAR_FIELD(lateral);
- COPY_SCALAR_FIELD(ordinality);
- COPY_SCALAR_FIELD(is_rowsfrom);
- COPY_NODE_FIELD(functions);
- COPY_NODE_FIELD(alias);
- COPY_NODE_FIELD(coldeflist);
-
- return newnode;
-}
-
-static RangeTableFunc *
-_copyRangeTableFunc(const RangeTableFunc *from)
-{
- RangeTableFunc *newnode = makeNode(RangeTableFunc);
-
- COPY_SCALAR_FIELD(lateral);
- COPY_NODE_FIELD(docexpr);
- COPY_NODE_FIELD(rowexpr);
- COPY_NODE_FIELD(namespaces);
- COPY_NODE_FIELD(columns);
- COPY_NODE_FIELD(alias);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static RangeTableFuncCol *
-_copyRangeTableFuncCol(const RangeTableFuncCol *from)
-{
- RangeTableFuncCol *newnode = makeNode(RangeTableFuncCol);
-
- COPY_STRING_FIELD(colname);
- COPY_NODE_FIELD(typeName);
- COPY_SCALAR_FIELD(for_ordinality);
- COPY_SCALAR_FIELD(is_not_null);
- COPY_NODE_FIELD(colexpr);
- COPY_NODE_FIELD(coldefexpr);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static RangeTableSample *
-_copyRangeTableSample(const RangeTableSample *from)
-{
- RangeTableSample *newnode = makeNode(RangeTableSample);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(method);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(repeatable);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static ColumnDef *
-_copyColumnDef(const ColumnDef *from)
-{
- ColumnDef *newnode = makeNode(ColumnDef);
-
- COPY_STRING_FIELD(colname);
- COPY_NODE_FIELD(typeName);
- COPY_STRING_FIELD(compression);
- COPY_SCALAR_FIELD(inhcount);
- COPY_SCALAR_FIELD(is_local);
- COPY_SCALAR_FIELD(is_not_null);
- COPY_SCALAR_FIELD(is_from_type);
- COPY_SCALAR_FIELD(attnum);
- COPY_SCALAR_FIELD(storage);
- COPY_STRING_FIELD(storage_name);
- COPY_NODE_FIELD(raw_default);
- COPY_NODE_FIELD(cooked_default);
- COPY_SCALAR_FIELD(hasCookedMissingVal);
- COPY_SCALAR_FIELD(missingIsNull);
- if (from->hasCookedMissingVal && !from->missingIsNull)
- newnode->missingVal = datumCopy(from->missingVal, false, -1);
- COPY_SCALAR_FIELD(identity);
- COPY_NODE_FIELD(identitySequence);
- COPY_SCALAR_FIELD(generated);
- COPY_NODE_FIELD(collClause);
- COPY_SCALAR_FIELD(collOid);
- COPY_NODE_FIELD(constraints);
- COPY_NODE_FIELD(encoding);
- COPY_NODE_FIELD(fdwoptions);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static TableLikeClause *
-_copyTableLikeClause(const TableLikeClause *from)
-{
- TableLikeClause *newnode = makeNode(TableLikeClause);
-
- COPY_NODE_FIELD(relation);
- COPY_SCALAR_FIELD(options);
- COPY_SCALAR_FIELD(relationOid);
-
- return newnode;
-}
-
-static IndexElem *
-_copyIndexElem(const IndexElem *from)
-{
- IndexElem *newnode = makeNode(IndexElem);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(expr);
- COPY_STRING_FIELD(indexcolname);
- COPY_NODE_FIELD(collation);
- COPY_NODE_FIELD(opclass);
- COPY_NODE_FIELD(opclassopts);
- COPY_SCALAR_FIELD(ordering);
- COPY_SCALAR_FIELD(nulls_ordering);
-
- return newnode;
-}
-
-static ColumnReferenceStorageDirective *
-_copyColumnReferenceStorageDirective(const ColumnReferenceStorageDirective *from)
-{
- ColumnReferenceStorageDirective *newnode = makeNode(ColumnReferenceStorageDirective);
-
- COPY_STRING_FIELD(column);
- COPY_SCALAR_FIELD(deflt);
- COPY_NODE_FIELD(encoding);
-
- return newnode;
-}
-
-static DefElem *
-_copyDefElem(const DefElem *from)
-{
- DefElem *newnode = makeNode(DefElem);
-
- COPY_STRING_FIELD(defnamespace);
- COPY_STRING_FIELD(defname);
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(defaction);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static LockingClause *
-_copyLockingClause(const LockingClause *from)
-{
- LockingClause *newnode = makeNode(LockingClause);
-
- COPY_NODE_FIELD(lockedRels);
- COPY_SCALAR_FIELD(strength);
- COPY_SCALAR_FIELD(waitPolicy);
-
- return newnode;
-}
-
-static XmlSerialize *
-_copyXmlSerialize(const XmlSerialize *from)
-{
- XmlSerialize *newnode = makeNode(XmlSerialize);
-
- COPY_SCALAR_FIELD(xmloption);
- COPY_NODE_FIELD(expr);
- COPY_NODE_FIELD(typeName);
- COPY_SCALAR_FIELD(indent);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static DistributionKeyElem *
-_copyDistributionKeyElem(const DistributionKeyElem *from)
-{
- DistributionKeyElem *newnode = makeNode(DistributionKeyElem);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(opclass);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static PartitionElem *
-_copyPartitionElem(const PartitionElem *from)
-{
- PartitionElem *newnode = makeNode(PartitionElem);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(expr);
- COPY_NODE_FIELD(collation);
- COPY_NODE_FIELD(opclass);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static PartitionSpec *
-_copyPartitionSpec(const PartitionSpec *from)
-{
- PartitionSpec *newnode = makeNode(PartitionSpec);
-
- COPY_SCALAR_FIELD(strategy);
- COPY_NODE_FIELD(partParams);
- COPY_NODE_FIELD(gpPartDef);
- COPY_NODE_FIELD(subPartSpec);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static PartitionBoundSpec *
-_copyPartitionBoundSpec(const PartitionBoundSpec *from)
-{
- PartitionBoundSpec *newnode = makeNode(PartitionBoundSpec);
-
- COPY_SCALAR_FIELD(strategy);
- COPY_SCALAR_FIELD(is_default);
- COPY_SCALAR_FIELD(modulus);
- COPY_SCALAR_FIELD(remainder);
- COPY_NODE_FIELD(listdatums);
- COPY_NODE_FIELD(lowerdatums);
- COPY_NODE_FIELD(upperdatums);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static PartitionRangeDatum *
-_copyPartitionRangeDatum(const PartitionRangeDatum *from)
-{
- PartitionRangeDatum *newnode = makeNode(PartitionRangeDatum);
-
- COPY_SCALAR_FIELD(kind);
- COPY_NODE_FIELD(value);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static PartitionCmd *
-_copyPartitionCmd(const PartitionCmd *from)
-{
- PartitionCmd *newnode = makeNode(PartitionCmd);
-
- COPY_NODE_FIELD(name);
- COPY_NODE_FIELD(bound);
- COPY_SCALAR_FIELD(concurrent);
-
- return newnode;
-}
-
-static RangeTblEntry *
-_copyRangeTblEntry(const RangeTblEntry *from)
-{
- RangeTblEntry *newnode = makeNode(RangeTblEntry);
-
- COPY_SCALAR_FIELD(rtekind);
- COPY_SCALAR_FIELD(relid);
- COPY_SCALAR_FIELD(relkind);
- COPY_SCALAR_FIELD(rellockmode);
- COPY_NODE_FIELD(tablesample);
- COPY_SCALAR_FIELD(relisivm);
- COPY_SCALAR_FIELD(perminfoindex);
- COPY_NODE_FIELD(subquery);
- COPY_SCALAR_FIELD(security_barrier);
- COPY_NODE_FIELD(subquery_rtable);
- COPY_NODE_FIELD(subquery_pathkeys);
- COPY_SCALAR_FIELD(jointype);
- COPY_SCALAR_FIELD(joinmergedcols);
- COPY_NODE_FIELD(joinaliasvars);
- COPY_NODE_FIELD(joinleftcols);
- COPY_NODE_FIELD(joinrightcols);
- COPY_NODE_FIELD(join_using_alias);
- COPY_NODE_FIELD(functions);
- COPY_SCALAR_FIELD(funcordinality);
- COPY_NODE_FIELD(tablefunc);
- COPY_NODE_FIELD(values_lists);
- COPY_STRING_FIELD(ctename);
- COPY_SCALAR_FIELD(ctelevelsup);
- COPY_SCALAR_FIELD(self_reference);
- COPY_NODE_FIELD(coltypes);
- COPY_NODE_FIELD(coltypmods);
- COPY_NODE_FIELD(colcollations);
- COPY_STRING_FIELD(enrname);
- COPY_SCALAR_FIELD(enrtuples);
- COPY_SCALAR_FIELD(forceDistRandom);
- COPY_NODE_FIELD(alias);
- COPY_NODE_FIELD(eref);
- COPY_SCALAR_FIELD(lateral);
- COPY_SCALAR_FIELD(inh);
- COPY_SCALAR_FIELD(inFromCl);
- COPY_NODE_FIELD(securityQuals);
-
- return newnode;
-}
-
-static RTEPermissionInfo *
-_copyRTEPermissionInfo(const RTEPermissionInfo *from)
-{
- RTEPermissionInfo *newnode = makeNode(RTEPermissionInfo);
-
- COPY_SCALAR_FIELD(relid);
- COPY_SCALAR_FIELD(inh);
- COPY_SCALAR_FIELD(requiredPerms);
- COPY_SCALAR_FIELD(checkAsUser);
- COPY_BITMAPSET_FIELD(selectedCols);
- COPY_BITMAPSET_FIELD(insertedCols);
- COPY_BITMAPSET_FIELD(updatedCols);
-
- return newnode;
-}
-
-static RangeTblFunction *
-_copyRangeTblFunction(const RangeTblFunction *from)
-{
- RangeTblFunction *newnode = makeNode(RangeTblFunction);
-
- COPY_NODE_FIELD(funcexpr);
- COPY_SCALAR_FIELD(funccolcount);
- COPY_NODE_FIELD(funccolnames);
- COPY_NODE_FIELD(funccoltypes);
- COPY_NODE_FIELD(funccoltypmods);
- COPY_NODE_FIELD(funccolcollations);
- COPY_VARLENA_FIELD(funcuserdata, -1);
- COPY_BITMAPSET_FIELD(funcparams);
-
- return newnode;
-}
-
-static TableSampleClause *
-_copyTableSampleClause(const TableSampleClause *from)
-{
- TableSampleClause *newnode = makeNode(TableSampleClause);
-
- COPY_SCALAR_FIELD(tsmhandler);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(repeatable);
-
- return newnode;
-}
-
-static WithCheckOption *
-_copyWithCheckOption(const WithCheckOption *from)
-{
- WithCheckOption *newnode = makeNode(WithCheckOption);
-
- COPY_SCALAR_FIELD(kind);
- COPY_STRING_FIELD(relname);
- COPY_STRING_FIELD(polname);
- COPY_NODE_FIELD(qual);
- COPY_SCALAR_FIELD(cascaded);
-
- return newnode;
-}
-
-static SortGroupClause *
-_copySortGroupClause(const SortGroupClause *from)
-{
- SortGroupClause *newnode = makeNode(SortGroupClause);
-
- COPY_SCALAR_FIELD(tleSortGroupRef);
- COPY_SCALAR_FIELD(eqop);
- COPY_SCALAR_FIELD(sortop);
- COPY_SCALAR_FIELD(nulls_first);
- COPY_SCALAR_FIELD(hashable);
-
- return newnode;
-}
-
-static GroupingSet *
-_copyGroupingSet(const GroupingSet *from)
-{
- GroupingSet *newnode = makeNode(GroupingSet);
-
- COPY_SCALAR_FIELD(kind);
- COPY_NODE_FIELD(content);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static WindowClause *
-_copyWindowClause(const WindowClause *from)
-{
- WindowClause *newnode = makeNode(WindowClause);
-
- COPY_STRING_FIELD(name);
- COPY_STRING_FIELD(refname);
- COPY_NODE_FIELD(partitionClause);
- COPY_NODE_FIELD(orderClause);
- COPY_SCALAR_FIELD(frameOptions);
- COPY_NODE_FIELD(startOffset);
- COPY_NODE_FIELD(endOffset);
- COPY_NODE_FIELD(runCondition);
- COPY_SCALAR_FIELD(startInRangeFunc);
- COPY_SCALAR_FIELD(endInRangeFunc);
- COPY_SCALAR_FIELD(inRangeColl);
- COPY_SCALAR_FIELD(inRangeAsc);
- COPY_SCALAR_FIELD(inRangeNullsFirst);
- COPY_SCALAR_FIELD(winref);
- COPY_SCALAR_FIELD(copiedOrder);
-
- return newnode;
-}
-
-static RowMarkClause *
-_copyRowMarkClause(const RowMarkClause *from)
-{
- RowMarkClause *newnode = makeNode(RowMarkClause);
-
- COPY_SCALAR_FIELD(rti);
- COPY_SCALAR_FIELD(strength);
- COPY_SCALAR_FIELD(waitPolicy);
- COPY_SCALAR_FIELD(pushedDown);
-
- return newnode;
-}
-
-static WithClause *
-_copyWithClause(const WithClause *from)
-{
- WithClause *newnode = makeNode(WithClause);
-
- COPY_NODE_FIELD(ctes);
- COPY_SCALAR_FIELD(recursive);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static InferClause *
-_copyInferClause(const InferClause *from)
-{
- InferClause *newnode = makeNode(InferClause);
-
- COPY_NODE_FIELD(indexElems);
- COPY_NODE_FIELD(whereClause);
- COPY_STRING_FIELD(conname);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static OnConflictClause *
-_copyOnConflictClause(const OnConflictClause *from)
-{
- OnConflictClause *newnode = makeNode(OnConflictClause);
-
- COPY_SCALAR_FIELD(action);
- COPY_NODE_FIELD(infer);
- COPY_NODE_FIELD(targetList);
- COPY_NODE_FIELD(whereClause);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CTESearchClause *
-_copyCTESearchClause(const CTESearchClause *from)
-{
- CTESearchClause *newnode = makeNode(CTESearchClause);
-
- COPY_NODE_FIELD(search_col_list);
- COPY_SCALAR_FIELD(search_breadth_first);
- COPY_STRING_FIELD(search_seq_column);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CTECycleClause *
-_copyCTECycleClause(const CTECycleClause *from)
-{
- CTECycleClause *newnode = makeNode(CTECycleClause);
-
- COPY_NODE_FIELD(cycle_col_list);
- COPY_STRING_FIELD(cycle_mark_column);
- COPY_NODE_FIELD(cycle_mark_value);
- COPY_NODE_FIELD(cycle_mark_default);
- COPY_STRING_FIELD(cycle_path_column);
- COPY_LOCATION_FIELD(location);
- COPY_SCALAR_FIELD(cycle_mark_type);
- COPY_SCALAR_FIELD(cycle_mark_typmod);
- COPY_SCALAR_FIELD(cycle_mark_collation);
- COPY_SCALAR_FIELD(cycle_mark_neop);
-
- return newnode;
-}
-
-static CommonTableExpr *
-_copyCommonTableExpr(const CommonTableExpr *from)
-{
- CommonTableExpr *newnode = makeNode(CommonTableExpr);
-
- COPY_STRING_FIELD(ctename);
- COPY_NODE_FIELD(aliascolnames);
- COPY_SCALAR_FIELD(ctematerialized);
- COPY_NODE_FIELD(ctequery);
- COPY_NODE_FIELD(search_clause);
- COPY_NODE_FIELD(cycle_clause);
- COPY_LOCATION_FIELD(location);
- COPY_SCALAR_FIELD(cterecursive);
- COPY_SCALAR_FIELD(cterefcount);
- COPY_NODE_FIELD(ctecolnames);
- COPY_NODE_FIELD(ctecoltypes);
- COPY_NODE_FIELD(ctecoltypmods);
- COPY_NODE_FIELD(ctecolcollations);
-
- return newnode;
-}
-
-static MergeWhenClause *
-_copyMergeWhenClause(const MergeWhenClause *from)
-{
- MergeWhenClause *newnode = makeNode(MergeWhenClause);
-
- COPY_SCALAR_FIELD(matched);
- COPY_SCALAR_FIELD(commandType);
- COPY_SCALAR_FIELD(override);
- COPY_NODE_FIELD(condition);
- COPY_NODE_FIELD(targetList);
- COPY_NODE_FIELD(values);
-
- return newnode;
-}
-
-static MergeAction *
-_copyMergeAction(const MergeAction *from)
-{
- MergeAction *newnode = makeNode(MergeAction);
-
- COPY_SCALAR_FIELD(matched);
- COPY_SCALAR_FIELD(commandType);
- COPY_SCALAR_FIELD(override);
- COPY_NODE_FIELD(qual);
- COPY_NODE_FIELD(targetList);
- COPY_NODE_FIELD(updateColnos);
-
- return newnode;
-}
-
-static TriggerTransition *
-_copyTriggerTransition(const TriggerTransition *from)
-{
- TriggerTransition *newnode = makeNode(TriggerTransition);
-
- COPY_STRING_FIELD(name);
- COPY_SCALAR_FIELD(isNew);
- COPY_SCALAR_FIELD(isTable);
-
- return newnode;
-}
-
-static JsonOutput *
-_copyJsonOutput(const JsonOutput *from)
-{
- JsonOutput *newnode = makeNode(JsonOutput);
-
- COPY_NODE_FIELD(typeName);
- COPY_NODE_FIELD(returning);
-
- return newnode;
-}
-
-static JsonKeyValue *
-_copyJsonKeyValue(const JsonKeyValue *from)
-{
- JsonKeyValue *newnode = makeNode(JsonKeyValue);
-
- COPY_NODE_FIELD(key);
- COPY_NODE_FIELD(value);
-
- return newnode;
-}
-
-static JsonObjectConstructor *
-_copyJsonObjectConstructor(const JsonObjectConstructor *from)
-{
- JsonObjectConstructor *newnode = makeNode(JsonObjectConstructor);
-
- COPY_NODE_FIELD(exprs);
- COPY_NODE_FIELD(output);
- COPY_SCALAR_FIELD(absent_on_null);
- COPY_SCALAR_FIELD(unique);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static JsonArrayConstructor *
-_copyJsonArrayConstructor(const JsonArrayConstructor *from)
-{
- JsonArrayConstructor *newnode = makeNode(JsonArrayConstructor);
-
- COPY_NODE_FIELD(exprs);
- COPY_NODE_FIELD(output);
- COPY_SCALAR_FIELD(absent_on_null);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static JsonArrayQueryConstructor *
-_copyJsonArrayQueryConstructor(const JsonArrayQueryConstructor *from)
-{
- JsonArrayQueryConstructor *newnode = makeNode(JsonArrayQueryConstructor);
-
- COPY_NODE_FIELD(query);
- COPY_NODE_FIELD(output);
- COPY_NODE_FIELD(format);
- COPY_SCALAR_FIELD(absent_on_null);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static JsonAggConstructor *
-_copyJsonAggConstructor(const JsonAggConstructor *from)
-{
- JsonAggConstructor *newnode = makeNode(JsonAggConstructor);
-
- COPY_NODE_FIELD(output);
- COPY_NODE_FIELD(agg_filter);
- COPY_NODE_FIELD(agg_order);
- COPY_NODE_FIELD(over);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static JsonObjectAgg *
-_copyJsonObjectAgg(const JsonObjectAgg *from)
-{
- JsonObjectAgg *newnode = makeNode(JsonObjectAgg);
-
- COPY_NODE_FIELD(constructor);
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(absent_on_null);
- COPY_SCALAR_FIELD(unique);
-
- return newnode;
-}
-
-static JsonArrayAgg *
-_copyJsonArrayAgg(const JsonArrayAgg *from)
-{
- JsonArrayAgg *newnode = makeNode(JsonArrayAgg);
-
- COPY_NODE_FIELD(constructor);
- COPY_NODE_FIELD(arg);
- COPY_SCALAR_FIELD(absent_on_null);
-
- return newnode;
-}
-
-static RawStmt *
-_copyRawStmt(const RawStmt *from)
-{
- RawStmt *newnode = makeNode(RawStmt);
-
- COPY_NODE_FIELD(stmt);
- COPY_LOCATION_FIELD(stmt_location);
- COPY_SCALAR_FIELD(stmt_len);
-
- return newnode;
-}
-
-static InsertStmt *
-_copyInsertStmt(const InsertStmt *from)
-{
- InsertStmt *newnode = makeNode(InsertStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(cols);
- COPY_NODE_FIELD(selectStmt);
- COPY_NODE_FIELD(onConflictClause);
- COPY_NODE_FIELD(returningList);
- COPY_NODE_FIELD(withClause);
- COPY_SCALAR_FIELD(override);
-
- return newnode;
-}
-
-static DeleteStmt *
-_copyDeleteStmt(const DeleteStmt *from)
-{
- DeleteStmt *newnode = makeNode(DeleteStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(usingClause);
- COPY_NODE_FIELD(whereClause);
- COPY_NODE_FIELD(returningList);
- COPY_NODE_FIELD(withClause);
-
- return newnode;
-}
-
-static UpdateStmt *
-_copyUpdateStmt(const UpdateStmt *from)
-{
- UpdateStmt *newnode = makeNode(UpdateStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(targetList);
- COPY_NODE_FIELD(whereClause);
- COPY_NODE_FIELD(fromClause);
- COPY_NODE_FIELD(returningList);
- COPY_NODE_FIELD(withClause);
-
- return newnode;
-}
-
-static MergeStmt *
-_copyMergeStmt(const MergeStmt *from)
-{
- MergeStmt *newnode = makeNode(MergeStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(sourceRelation);
- COPY_NODE_FIELD(joinCondition);
- COPY_NODE_FIELD(mergeWhenClauses);
- COPY_NODE_FIELD(withClause);
-
- return newnode;
-}
-
-static DistributedBy *
-_copyDistributedBy(const DistributedBy *from)
-{
- DistributedBy *newnode = makeNode(DistributedBy);
-
- COPY_SCALAR_FIELD(ptype);
- COPY_SCALAR_FIELD(numsegments);
- COPY_NODE_FIELD(keyCols);
-
- return newnode;
-}
-
-static SelectStmt *
-_copySelectStmt(const SelectStmt *from)
-{
- SelectStmt *newnode = makeNode(SelectStmt);
-
- COPY_NODE_FIELD(distinctClause);
- COPY_NODE_FIELD(intoClause);
- COPY_NODE_FIELD(targetList);
- COPY_NODE_FIELD(fromClause);
- COPY_NODE_FIELD(whereClause);
- COPY_NODE_FIELD(groupClause);
- COPY_SCALAR_FIELD(groupDistinct);
- COPY_NODE_FIELD(havingClause);
- COPY_NODE_FIELD(windowClause);
- COPY_NODE_FIELD(scatterClause);
- COPY_NODE_FIELD(valuesLists);
- COPY_NODE_FIELD(sortClause);
- COPY_NODE_FIELD(limitOffset);
- COPY_NODE_FIELD(limitCount);
- COPY_SCALAR_FIELD(limitOption);
- COPY_NODE_FIELD(lockingClause);
- COPY_NODE_FIELD(withClause);
- COPY_SCALAR_FIELD(op);
- COPY_SCALAR_FIELD(all);
- COPY_NODE_FIELD(larg);
- COPY_NODE_FIELD(rarg);
- COPY_SCALAR_FIELD(disableLockingOptimization);
-
- return newnode;
-}
-
-static SetOperationStmt *
-_copySetOperationStmt(const SetOperationStmt *from)
-{
- SetOperationStmt *newnode = makeNode(SetOperationStmt);
-
- COPY_SCALAR_FIELD(op);
- COPY_SCALAR_FIELD(all);
- COPY_NODE_FIELD(larg);
- COPY_NODE_FIELD(rarg);
- COPY_NODE_FIELD(colTypes);
- COPY_NODE_FIELD(colTypmods);
- COPY_NODE_FIELD(colCollations);
- COPY_NODE_FIELD(groupClauses);
-
- return newnode;
-}
-
-static ReturnStmt *
-_copyReturnStmt(const ReturnStmt *from)
-{
- ReturnStmt *newnode = makeNode(ReturnStmt);
-
- COPY_NODE_FIELD(returnval);
-
- return newnode;
-}
-
-static PLAssignStmt *
-_copyPLAssignStmt(const PLAssignStmt *from)
-{
- PLAssignStmt *newnode = makeNode(PLAssignStmt);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(indirection);
- COPY_SCALAR_FIELD(nnames);
- COPY_NODE_FIELD(val);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CreateSchemaStmt *
-_copyCreateSchemaStmt(const CreateSchemaStmt *from)
-{
- CreateSchemaStmt *newnode = makeNode(CreateSchemaStmt);
-
- COPY_STRING_FIELD(schemaname);
- COPY_NODE_FIELD(authrole);
- COPY_NODE_FIELD(schemaElts);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_SCALAR_FIELD(istemp);
- COPY_SCALAR_FIELD(pop_search_path);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static AlterSchemaStmt *
-_copyAlterSchemaStmt(const AlterSchemaStmt *from)
-{
- AlterSchemaStmt *newnode = makeNode(AlterSchemaStmt);
-
- COPY_STRING_FIELD(schemaname);
- COPY_NODE_FIELD(tags);
- COPY_SCALAR_FIELD(unsettag);
-
- return newnode;
-}
-
-static CreateTagStmt *
-_copyCreateTagStmt(const CreateTagStmt *from)
-{
- CreateTagStmt *newnode = makeNode(CreateTagStmt);
-
- COPY_STRING_FIELD(tag_name);
- COPY_SCALAR_FIELD(missing_ok);
- COPY_NODE_FIELD(allowed_values);
-
- return newnode;
-}
-
-static CompoundUtilityStmt *
-_copyCompoundUtilityStmt(const CompoundUtilityStmt *from)
-{
- CompoundUtilityStmt *newnode = makeNode(CompoundUtilityStmt);
-
- COPY_NODE_FIELD(schemaElts);
-
- return newnode;
-}
-
-static AlterTableStmt *
-_copyAlterTableStmt(const AlterTableStmt *from)
-{
- AlterTableStmt *newnode = makeNode(AlterTableStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(cmds);
- COPY_SCALAR_FIELD(objtype);
- COPY_SCALAR_FIELD(missing_ok);
- COPY_SCALAR_FIELD(lockmode);
- COPY_NODE_FIELD(wqueue);
- COPY_SCALAR_FIELD(is_internal);
-
- return newnode;
-}
-
-static AlterTagStmt *
-_copyAlterTagStmt(const AlterTagStmt *from)
-{
- AlterTagStmt *newnode = makeNode(AlterTagStmt);
-
- COPY_STRING_FIELD(tag_name);
- COPY_SCALAR_FIELD(action);
- COPY_NODE_FIELD(tag_values);
- COPY_SCALAR_FIELD(missing_ok);
- COPY_SCALAR_FIELD(unset);
-
- return newnode;
-}
-
-static ReplicaIdentityStmt *
-_copyReplicaIdentityStmt(const ReplicaIdentityStmt *from)
-{
- ReplicaIdentityStmt *newnode = makeNode(ReplicaIdentityStmt);
-
- COPY_SCALAR_FIELD(identity_type);
- COPY_STRING_FIELD(name);
-
- return newnode;
-}
-
-static AlterTableCmd *
-_copyAlterTableCmd(const AlterTableCmd *from)
-{
- AlterTableCmd *newnode = makeNode(AlterTableCmd);
-
- COPY_SCALAR_FIELD(subtype);
- COPY_STRING_FIELD(name);
- COPY_SCALAR_FIELD(num);
- COPY_NODE_FIELD(newowner);
- COPY_NODE_FIELD(def);
- COPY_NODE_FIELD(transform);
- COPY_SCALAR_FIELD(behavior);
- COPY_SCALAR_FIELD(missing_ok);
- COPY_SCALAR_FIELD(recurse);
- COPY_SCALAR_FIELD(backendId);
- COPY_STRING_FIELD(queryString);
- COPY_NODE_FIELD(policy);
- COPY_NODE_FIELD(tags);
- COPY_SCALAR_FIELD(unsettag);
-
- return newnode;
-}
-
-static GpAlterPartitionId *
-_copyGpAlterPartitionId(const GpAlterPartitionId *from)
-{
- GpAlterPartitionId *newnode = makeNode(GpAlterPartitionId);
-
- COPY_SCALAR_FIELD(idtype);
- COPY_NODE_FIELD(partiddef);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static GpDropPartitionCmd *
-_copyGpDropPartitionCmd(const GpDropPartitionCmd *from)
-{
- GpDropPartitionCmd *newnode = makeNode(GpDropPartitionCmd);
-
- COPY_NODE_FIELD(partid);
- COPY_SCALAR_FIELD(behavior);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static GpAlterPartitionCmd *
-_copyGpAlterPartitionCmd(const GpAlterPartitionCmd *from)
-{
- GpAlterPartitionCmd *newnode = makeNode(GpAlterPartitionCmd);
-
- COPY_NODE_FIELD(partid);
- COPY_NODE_FIELD(arg);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static GpPartitionRangeItem *
-_copyGpPartitionRangeItem(const GpPartitionRangeItem *from)
-{
- GpPartitionRangeItem *newnode = makeNode(GpPartitionRangeItem);
-
- COPY_NODE_FIELD(val);
- COPY_SCALAR_FIELD(edge);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static GpSplitPartitionCmd *
-_copyGpSplitPartitionCmd(const GpSplitPartitionCmd *from)
-{
- GpSplitPartitionCmd *newnode = makeNode(GpSplitPartitionCmd);
-
- COPY_NODE_FIELD(partid);
- COPY_NODE_FIELD(start);
- COPY_NODE_FIELD(end);
- COPY_NODE_FIELD(at);
- COPY_NODE_FIELD(arg2);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static AlterCollationStmt *
-_copyAlterCollationStmt(const AlterCollationStmt *from)
-{
- AlterCollationStmt *newnode = makeNode(AlterCollationStmt);
-
- COPY_NODE_FIELD(collname);
-
- return newnode;
-}
-
-static AlterDomainStmt *
-_copyAlterDomainStmt(const AlterDomainStmt *from)
-{
- AlterDomainStmt *newnode = makeNode(AlterDomainStmt);
-
- COPY_SCALAR_FIELD(subtype);
- COPY_NODE_FIELD(typeName);
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(def);
- COPY_SCALAR_FIELD(behavior);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static GrantStmt *
-_copyGrantStmt(const GrantStmt *from)
-{
- GrantStmt *newnode = makeNode(GrantStmt);
-
- COPY_SCALAR_FIELD(is_grant);
- COPY_SCALAR_FIELD(targtype);
- COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(objects);
- COPY_NODE_FIELD(privileges);
- COPY_NODE_FIELD(grantees);
- COPY_SCALAR_FIELD(grant_option);
- COPY_NODE_FIELD(grantor);
- COPY_SCALAR_FIELD(behavior);
-
- return newnode;
-}
-
-static ObjectWithArgs *
-_copyObjectWithArgs(const ObjectWithArgs *from)
-{
- ObjectWithArgs *newnode = makeNode(ObjectWithArgs);
-
- COPY_NODE_FIELD(objname);
- COPY_NODE_FIELD(objargs);
- COPY_NODE_FIELD(objfuncargs);
- COPY_SCALAR_FIELD(args_unspecified);
-
- return newnode;
-}
-
-static AccessPriv *
-_copyAccessPriv(const AccessPriv *from)
-{
- AccessPriv *newnode = makeNode(AccessPriv);
-
- COPY_STRING_FIELD(priv_name);
- COPY_NODE_FIELD(cols);
-
- return newnode;
-}
-
-static GrantRoleStmt *
-_copyGrantRoleStmt(const GrantRoleStmt *from)
-{
- GrantRoleStmt *newnode = makeNode(GrantRoleStmt);
-
- COPY_NODE_FIELD(granted_roles);
- COPY_NODE_FIELD(grantee_roles);
- COPY_SCALAR_FIELD(is_grant);
- COPY_NODE_FIELD(opt);
- COPY_NODE_FIELD(grantor);
- COPY_SCALAR_FIELD(behavior);
-
- return newnode;
-}
-
-static SingleRowErrorDesc *
-_copySingleRowErrorDesc(const SingleRowErrorDesc *from)
-{
- SingleRowErrorDesc *newnode = makeNode(SingleRowErrorDesc);
-
- COPY_SCALAR_FIELD(rejectlimit);
- COPY_SCALAR_FIELD(is_limit_in_rows);
- COPY_SCALAR_FIELD(log_error_type);
-
- return newnode;
-}
-
-static AlterDefaultPrivilegesStmt *
-_copyAlterDefaultPrivilegesStmt(const AlterDefaultPrivilegesStmt *from)
-{
- AlterDefaultPrivilegesStmt *newnode = makeNode(AlterDefaultPrivilegesStmt);
-
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(action);
-
- return newnode;
-}
-
-static CopyStmt *
-_copyCopyStmt(const CopyStmt *from)
-{
- CopyStmt *newnode = makeNode(CopyStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(query);
- COPY_NODE_FIELD(attlist);
- COPY_SCALAR_FIELD(is_from);
- COPY_SCALAR_FIELD(is_program);
- COPY_STRING_FIELD(filename);
- COPY_STRING_FIELD(dirfilename);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(whereClause);
- COPY_NODE_FIELD(sreh);
-
- return newnode;
-}
-
-static VariableSetStmt *
-_copyVariableSetStmt(const VariableSetStmt *from)
-{
- VariableSetStmt *newnode = makeNode(VariableSetStmt);
-
- COPY_SCALAR_FIELD(kind);
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(args);
- COPY_SCALAR_FIELD(is_local);
-
- return newnode;
-}
-
-static VariableShowStmt *
-_copyVariableShowStmt(const VariableShowStmt *from)
-{
- VariableShowStmt *newnode = makeNode(VariableShowStmt);
-
- COPY_STRING_FIELD(name);
-
- return newnode;
-}
-
-static CreateStmt *
-_copyCreateStmt(const CreateStmt *from)
-{
- CreateStmt *newnode = makeNode(CreateStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(tableElts);
- COPY_NODE_FIELD(inhRelations);
- COPY_NODE_FIELD(partbound);
- COPY_NODE_FIELD(partspec);
- COPY_NODE_FIELD(ofTypename);
- COPY_NODE_FIELD(constraints);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(oncommit);
- COPY_STRING_FIELD(tablespacename);
- COPY_STRING_FIELD(accessMethod);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_SCALAR_FIELD(gp_style_alter_part);
- COPY_NODE_FIELD(distributedBy);
- COPY_NODE_FIELD(partitionBy);
- COPY_SCALAR_FIELD(relKind);
- COPY_SCALAR_FIELD(ownerid);
- COPY_SCALAR_FIELD(buildAoBlkdir);
- COPY_NODE_FIELD(attr_encodings);
- COPY_SCALAR_FIELD(isCtas);
- COPY_NODE_FIELD(intoQuery);
- COPY_NODE_FIELD(intoPolicy);
- COPY_NODE_FIELD(part_idx_oids);
- COPY_NODE_FIELD(part_idx_names);
- COPY_NODE_FIELD(tags);
- COPY_SCALAR_FIELD(origin);
-
- return newnode;
-}
-
-
-static ExtTableTypeDesc *
-_copyExtTableTypeDesc(const ExtTableTypeDesc *from)
-{
- ExtTableTypeDesc *newnode = makeNode(ExtTableTypeDesc);
-
- COPY_SCALAR_FIELD(exttabletype);
- COPY_NODE_FIELD(location_list);
- COPY_NODE_FIELD(on_clause);
- COPY_STRING_FIELD(command_string);
-
- return newnode;
-}
-
-static CreateExternalStmt *
-_copyCreateExternalStmt(const CreateExternalStmt *from)
-{
- CreateExternalStmt *newnode = makeNode(CreateExternalStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(tableElts);
- COPY_NODE_FIELD(exttypedesc);
- COPY_STRING_FIELD(format);
- COPY_NODE_FIELD(formatOpts);
- COPY_SCALAR_FIELD(isweb);
- COPY_SCALAR_FIELD(iswritable);
- COPY_NODE_FIELD(sreh);
- COPY_NODE_FIELD(extOptions);
- COPY_NODE_FIELD(encoding);
- COPY_NODE_FIELD(distributedBy);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static CreateForeignStmt *
-_copyCreateForeignStmt(const CreateForeignStmt *from)
-{
- CreateForeignStmt *newnode = makeNode(CreateForeignStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(tableElts);
- COPY_STRING_FIELD(srvname);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static Constraint *
-_copyConstraint(const Constraint *from)
-{
- Constraint *newnode = makeNode(Constraint);
-
- COPY_SCALAR_FIELD(contype);
- COPY_STRING_FIELD(conname);
- COPY_SCALAR_FIELD(deferrable);
- COPY_SCALAR_FIELD(initdeferred);
- COPY_LOCATION_FIELD(location);
- COPY_SCALAR_FIELD(is_no_inherit);
- COPY_NODE_FIELD(raw_expr);
- COPY_STRING_FIELD(cooked_expr);
- COPY_SCALAR_FIELD(generated_when);
- COPY_SCALAR_FIELD(nulls_not_distinct);
- COPY_NODE_FIELD(keys);
- COPY_NODE_FIELD(including);
- COPY_NODE_FIELD(exclusions);
- COPY_NODE_FIELD(options);
- COPY_STRING_FIELD(indexname);
- COPY_STRING_FIELD(indexspace);
- COPY_SCALAR_FIELD(reset_default_tblspc);
- COPY_STRING_FIELD(access_method);
- COPY_NODE_FIELD(where_clause);
- COPY_NODE_FIELD(pktable);
- COPY_NODE_FIELD(fk_attrs);
- COPY_NODE_FIELD(pk_attrs);
- COPY_SCALAR_FIELD(fk_matchtype);
- COPY_SCALAR_FIELD(fk_upd_action);
- COPY_SCALAR_FIELD(fk_del_action);
- COPY_NODE_FIELD(fk_del_set_cols);
- COPY_NODE_FIELD(old_conpfeqop);
- COPY_SCALAR_FIELD(old_pktable_oid);
- COPY_SCALAR_FIELD(skip_validation);
- COPY_SCALAR_FIELD(initially_valid);
-
- return newnode;
-}
-
-static GpPartDefElem *
-_copyGpPartDefElem(const GpPartDefElem *from)
-{
- GpPartDefElem *newnode = makeNode(GpPartDefElem);
-
- COPY_STRING_FIELD(partName);
- COPY_NODE_FIELD(boundSpec);
- COPY_NODE_FIELD(subSpec);
- COPY_SCALAR_FIELD(isDefault);
- COPY_NODE_FIELD(options);
- COPY_STRING_FIELD(accessMethod);
- COPY_STRING_FIELD(tablespacename);
- COPY_NODE_FIELD(colencs);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static GpPartitionRangeSpec *
-_copyGpPartitionRangeSpec(const GpPartitionRangeSpec *from)
-{
- GpPartitionRangeSpec *newnode = makeNode(GpPartitionRangeSpec);
-
- COPY_NODE_FIELD(partStart);
- COPY_NODE_FIELD(partEnd);
- COPY_NODE_FIELD(partEvery);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static GpPartitionListSpec *
-_copyGpPartitionListSpec(const GpPartitionListSpec *from)
-{
- GpPartitionListSpec *newnode = makeNode(GpPartitionListSpec);
-
- COPY_NODE_FIELD(partValues);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static GpPartitionDefinition *
-_copyGpPartitionDefinition(const GpPartitionDefinition *from)
-{
- GpPartitionDefinition *newnode = makeNode(GpPartitionDefinition);
-
- COPY_NODE_FIELD(partDefElems);
- COPY_NODE_FIELD(encClauses);
- COPY_SCALAR_FIELD(isTemplate);
- COPY_SCALAR_FIELD(fromCatalog);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CreateTableSpaceStmt *
-_copyCreateTableSpaceStmt(const CreateTableSpaceStmt *from)
-{
- CreateTableSpaceStmt *newnode = makeNode(CreateTableSpaceStmt);
-
- COPY_STRING_FIELD(tablespacename);
- COPY_NODE_FIELD(owner);
- COPY_STRING_FIELD(location);
- COPY_NODE_FIELD(options);
- COPY_STRING_FIELD(filehandler);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static DropTableSpaceStmt *
-_copyDropTableSpaceStmt(const DropTableSpaceStmt *from)
-{
- DropTableSpaceStmt *newnode = makeNode(DropTableSpaceStmt);
-
- COPY_STRING_FIELD(tablespacename);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static AlterTableSpaceOptionsStmt *
-_copyAlterTableSpaceOptionsStmt(const AlterTableSpaceOptionsStmt *from)
-{
- AlterTableSpaceOptionsStmt *newnode = makeNode(AlterTableSpaceOptionsStmt);
-
- COPY_STRING_FIELD(tablespacename);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(isReset);
- COPY_NODE_FIELD(tags);
- COPY_SCALAR_FIELD(unsettag);
-
- return newnode;
-}
-
-static AlterTableMoveAllStmt *
-_copyAlterTableMoveAllStmt(const AlterTableMoveAllStmt *from)
-{
- AlterTableMoveAllStmt *newnode = makeNode(AlterTableMoveAllStmt);
-
- COPY_STRING_FIELD(orig_tablespacename);
- COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(roles);
- COPY_STRING_FIELD(new_tablespacename);
- COPY_SCALAR_FIELD(nowait);
-
- return newnode;
-}
-
-static DropTagStmt *
-_copyDropTagStmt(const DropTagStmt *from)
-{
- DropTagStmt *newnode = makeNode(DropTagStmt);
-
- COPY_NODE_FIELD(tags);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static CreateTaskStmt *
-_copyCreateTaskStmt(const CreateTaskStmt *from)
-{
- CreateTaskStmt *newnode = makeNode(CreateTaskStmt);
-
- COPY_STRING_FIELD(taskname);
- COPY_STRING_FIELD(schedule);
- COPY_STRING_FIELD(sql);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(if_not_exists);
-
- return newnode;
-}
-
-static AlterTaskStmt *
-_copyAlterTaskStmt(const AlterTaskStmt *from)
-{
- AlterTaskStmt *newnode = makeNode(AlterTaskStmt);
-
- COPY_STRING_FIELD(taskname);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static DropTaskStmt *
-_copyDropTaskStmt(const DropTaskStmt *from)
-{
- DropTaskStmt *newnode = makeNode(DropTaskStmt);
-
- COPY_STRING_FIELD(taskname);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static CreateExtensionStmt *
-_copyCreateExtensionStmt(const CreateExtensionStmt *from)
-{
- CreateExtensionStmt *newnode = makeNode(CreateExtensionStmt);
-
- COPY_STRING_FIELD(extname);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(create_ext_state);
-
- return newnode;
-}
-
-static AlterExtensionStmt *
-_copyAlterExtensionStmt(const AlterExtensionStmt *from)
-{
- AlterExtensionStmt *newnode = makeNode(AlterExtensionStmt);
-
- COPY_STRING_FIELD(extname);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(update_ext_state);
-
- return newnode;
-}
-
-static AlterExtensionContentsStmt *
-_copyAlterExtensionContentsStmt(const AlterExtensionContentsStmt *from)
-{
- AlterExtensionContentsStmt *newnode = makeNode(AlterExtensionContentsStmt);
-
- COPY_STRING_FIELD(extname);
- COPY_SCALAR_FIELD(action);
- COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(object);
-
- return newnode;
-}
-
-static CreateFdwStmt *
-_copyCreateFdwStmt(const CreateFdwStmt *from)
-{
- CreateFdwStmt *newnode = makeNode(CreateFdwStmt);
-
- COPY_STRING_FIELD(fdwname);
- COPY_NODE_FIELD(func_options);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterFdwStmt *
-_copyAlterFdwStmt(const AlterFdwStmt *from)
-{
- AlterFdwStmt *newnode = makeNode(AlterFdwStmt);
-
- COPY_STRING_FIELD(fdwname);
- COPY_NODE_FIELD(func_options);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static CreateForeignServerStmt *
-_copyCreateForeignServerStmt(const CreateForeignServerStmt *from)
-{
- CreateForeignServerStmt *newnode = makeNode(CreateForeignServerStmt);
-
- COPY_STRING_FIELD(servername);
- COPY_STRING_FIELD(servertype);
- COPY_STRING_FIELD(version);
- COPY_STRING_FIELD(fdwname);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterForeignServerStmt *
-_copyAlterForeignServerStmt(const AlterForeignServerStmt *from)
-{
- AlterForeignServerStmt *newnode = makeNode(AlterForeignServerStmt);
-
- COPY_STRING_FIELD(servername);
- COPY_STRING_FIELD(version);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(has_version);
-
- return newnode;
-}
-
-static CreateStorageServerStmt *
-_copyCreateStorageServerStmt(const CreateStorageServerStmt *from)
-{
- CreateStorageServerStmt *newnode = makeNode(CreateStorageServerStmt);
-
- COPY_STRING_FIELD(servername);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterStorageServerStmt *
-_copyAlterStorageServerStmt(const AlterStorageServerStmt *from)
-{
- AlterStorageServerStmt *newnode = makeNode(AlterStorageServerStmt);
-
- COPY_STRING_FIELD(servername);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static DropStorageServerStmt *
-_copyDropStorageServerStmt(const DropStorageServerStmt *from)
-{
- DropStorageServerStmt *newnode = makeNode(DropStorageServerStmt);
-
- COPY_STRING_FIELD(servername);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static CreateForeignTableStmt *
-_copyCreateForeignTableStmt(const CreateForeignTableStmt *from)
-{
- CreateForeignTableStmt *newnode = makeNode(CreateForeignTableStmt);
-
- COPY_NODE_FIELD(base.relation);
- COPY_NODE_FIELD(base.tableElts);
- COPY_NODE_FIELD(base.inhRelations);
- COPY_NODE_FIELD(base.partbound);
- COPY_NODE_FIELD(base.partspec);
- COPY_NODE_FIELD(base.ofTypename);
- COPY_NODE_FIELD(base.constraints);
- COPY_NODE_FIELD(base.options);
- COPY_SCALAR_FIELD(base.oncommit);
- COPY_STRING_FIELD(base.tablespacename);
- COPY_STRING_FIELD(base.accessMethod);
- COPY_SCALAR_FIELD(base.if_not_exists);
- COPY_SCALAR_FIELD(base.gp_style_alter_part);
- COPY_NODE_FIELD(base.distributedBy);
- COPY_NODE_FIELD(base.partitionBy);
- COPY_SCALAR_FIELD(base.relKind);
- COPY_SCALAR_FIELD(base.ownerid);
- COPY_SCALAR_FIELD(base.buildAoBlkdir);
- COPY_NODE_FIELD(base.attr_encodings);
- COPY_SCALAR_FIELD(base.isCtas);
- COPY_NODE_FIELD(base.intoQuery);
- COPY_NODE_FIELD(base.intoPolicy);
- COPY_NODE_FIELD(base.part_idx_oids);
- COPY_NODE_FIELD(base.part_idx_names);
- COPY_NODE_FIELD(base.tags);
- COPY_SCALAR_FIELD(base.origin);
- COPY_STRING_FIELD(servername);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(distributedBy);
-
- return newnode;
-}
-
-static CreateUserMappingStmt *
-_copyCreateUserMappingStmt(const CreateUserMappingStmt *from)
-{
- CreateUserMappingStmt *newnode = makeNode(CreateUserMappingStmt);
-
- COPY_NODE_FIELD(user);
- COPY_STRING_FIELD(servername);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterUserMappingStmt *
-_copyAlterUserMappingStmt(const AlterUserMappingStmt *from)
-{
- AlterUserMappingStmt *newnode = makeNode(AlterUserMappingStmt);
-
- COPY_NODE_FIELD(user);
- COPY_STRING_FIELD(servername);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static DropUserMappingStmt *
-_copyDropUserMappingStmt(const DropUserMappingStmt *from)
-{
- DropUserMappingStmt *newnode = makeNode(DropUserMappingStmt);
-
- COPY_NODE_FIELD(user);
- COPY_STRING_FIELD(servername);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static CreateStorageUserMappingStmt *
-_copyCreateStorageUserMappingStmt(const CreateStorageUserMappingStmt *from)
-{
- CreateStorageUserMappingStmt *newnode = makeNode(CreateStorageUserMappingStmt);
-
- COPY_NODE_FIELD(user);
- COPY_STRING_FIELD(servername);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterStorageUserMappingStmt *
-_copyAlterStorageUserMappingStmt(const AlterStorageUserMappingStmt *from)
-{
- AlterStorageUserMappingStmt *newnode = makeNode(AlterStorageUserMappingStmt);
-
- COPY_NODE_FIELD(user);
- COPY_STRING_FIELD(servername);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static DropStorageUserMappingStmt *
-_copyDropStorageUserMappingStmt(const DropStorageUserMappingStmt *from)
-{
- DropStorageUserMappingStmt *newnode = makeNode(DropStorageUserMappingStmt);
-
- COPY_NODE_FIELD(user);
- COPY_STRING_FIELD(servername);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static ImportForeignSchemaStmt *
-_copyImportForeignSchemaStmt(const ImportForeignSchemaStmt *from)
-{
- ImportForeignSchemaStmt *newnode = makeNode(ImportForeignSchemaStmt);
-
- COPY_STRING_FIELD(server_name);
- COPY_STRING_FIELD(remote_schema);
- COPY_STRING_FIELD(local_schema);
- COPY_SCALAR_FIELD(list_type);
- COPY_NODE_FIELD(table_list);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AddForeignSegStmt *
-_copyAddForeignSegStmt(const AddForeignSegStmt *from)
-{
- AddForeignSegStmt *newnode = makeNode(AddForeignSegStmt);
-
- COPY_STRING_FIELD(servername);
- COPY_STRING_FIELD(tablename);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static CreatePolicyStmt *
-_copyCreatePolicyStmt(const CreatePolicyStmt *from)
-{
- CreatePolicyStmt *newnode = makeNode(CreatePolicyStmt);
-
- COPY_STRING_FIELD(policy_name);
- COPY_NODE_FIELD(table);
- COPY_STRING_FIELD(cmd_name);
- COPY_SCALAR_FIELD(permissive);
- COPY_NODE_FIELD(roles);
- COPY_NODE_FIELD(qual);
- COPY_NODE_FIELD(with_check);
-
- return newnode;
-}
-
-static AlterPolicyStmt *
-_copyAlterPolicyStmt(const AlterPolicyStmt *from)
-{
- AlterPolicyStmt *newnode = makeNode(AlterPolicyStmt);
-
- COPY_STRING_FIELD(policy_name);
- COPY_NODE_FIELD(table);
- COPY_NODE_FIELD(roles);
- COPY_NODE_FIELD(qual);
- COPY_NODE_FIELD(with_check);
-
- return newnode;
-}
-
-static CreateAmStmt *
-_copyCreateAmStmt(const CreateAmStmt *from)
-{
- CreateAmStmt *newnode = makeNode(CreateAmStmt);
-
- COPY_STRING_FIELD(amname);
- COPY_NODE_FIELD(handler_name);
- COPY_SCALAR_FIELD(amtype);
-
- return newnode;
-}
-
-static CreateTrigStmt *
-_copyCreateTrigStmt(const CreateTrigStmt *from)
-{
- CreateTrigStmt *newnode = makeNode(CreateTrigStmt);
-
- COPY_SCALAR_FIELD(replace);
- COPY_SCALAR_FIELD(isconstraint);
- COPY_STRING_FIELD(trigname);
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(funcname);
- COPY_NODE_FIELD(args);
- COPY_SCALAR_FIELD(row);
- COPY_SCALAR_FIELD(timing);
- COPY_SCALAR_FIELD(events);
- COPY_NODE_FIELD(columns);
- COPY_NODE_FIELD(whenClause);
- COPY_NODE_FIELD(transitionRels);
- COPY_SCALAR_FIELD(deferrable);
- COPY_SCALAR_FIELD(initdeferred);
- COPY_NODE_FIELD(constrrel);
- COPY_SCALAR_FIELD(matviewId);
-
- return newnode;
-}
-
-static CreateEventTrigStmt *
-_copyCreateEventTrigStmt(const CreateEventTrigStmt *from)
-{
- CreateEventTrigStmt *newnode = makeNode(CreateEventTrigStmt);
-
- COPY_STRING_FIELD(trigname);
- COPY_STRING_FIELD(eventname);
- COPY_NODE_FIELD(whenclause);
- COPY_NODE_FIELD(funcname);
-
- return newnode;
-}
-
-static AlterEventTrigStmt *
-_copyAlterEventTrigStmt(const AlterEventTrigStmt *from)
-{
- AlterEventTrigStmt *newnode = makeNode(AlterEventTrigStmt);
-
- COPY_STRING_FIELD(trigname);
- COPY_SCALAR_FIELD(tgenabled);
-
- return newnode;
-}
-
-static CreatePLangStmt *
-_copyCreatePLangStmt(const CreatePLangStmt *from)
-{
- CreatePLangStmt *newnode = makeNode(CreatePLangStmt);
-
- COPY_SCALAR_FIELD(replace);
- COPY_STRING_FIELD(plname);
- COPY_NODE_FIELD(plhandler);
- COPY_NODE_FIELD(plinline);
- COPY_NODE_FIELD(plvalidator);
- COPY_SCALAR_FIELD(pltrusted);
-
- return newnode;
-}
-
-static CreateQueueStmt *
-_copyCreateQueueStmt(const CreateQueueStmt *from)
-{
- CreateQueueStmt *newnode = makeNode(CreateQueueStmt);
-
- COPY_STRING_FIELD(queue);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterQueueStmt *
-_copyAlterQueueStmt(const AlterQueueStmt *from)
-{
- AlterQueueStmt *newnode = makeNode(AlterQueueStmt);
-
- COPY_STRING_FIELD(queue);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static DropQueueStmt *
-_copyDropQueueStmt(const DropQueueStmt *from)
-{
- DropQueueStmt *newnode = makeNode(DropQueueStmt);
-
- COPY_STRING_FIELD(queue);
-
- return newnode;
-}
-
-static CreateResourceGroupStmt *
-_copyCreateResourceGroupStmt(const CreateResourceGroupStmt *from)
-{
- CreateResourceGroupStmt *newnode = makeNode(CreateResourceGroupStmt);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static DropResourceGroupStmt *
-_copyDropResourceGroupStmt(const DropResourceGroupStmt *from)
-{
- DropResourceGroupStmt *newnode = makeNode(DropResourceGroupStmt);
-
- COPY_STRING_FIELD(name);
-
- return newnode;
-}
-
-static AlterResourceGroupStmt *
-_copyAlterResourceGroupStmt(const AlterResourceGroupStmt *from)
-{
- AlterResourceGroupStmt *newnode = makeNode(AlterResourceGroupStmt);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static CreateRoleStmt *
-_copyCreateRoleStmt(const CreateRoleStmt *from)
-{
- CreateRoleStmt *newnode = makeNode(CreateRoleStmt);
-
- COPY_SCALAR_FIELD(stmt_type);
- COPY_STRING_FIELD(role);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static AlterRoleStmt *
-_copyAlterRoleStmt(const AlterRoleStmt *from)
-{
- AlterRoleStmt *newnode = makeNode(AlterRoleStmt);
-
- COPY_NODE_FIELD(role);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(action);
- COPY_NODE_FIELD(tags);
- COPY_SCALAR_FIELD(unsettag);
-
- return newnode;
-}
-
-static AlterRoleSetStmt *
-_copyAlterRoleSetStmt(const AlterRoleSetStmt *from)
-{
- AlterRoleSetStmt *newnode = makeNode(AlterRoleSetStmt);
-
- COPY_NODE_FIELD(role);
- COPY_STRING_FIELD(database);
- COPY_NODE_FIELD(setstmt);
-
- return newnode;
-}
-
-static DropRoleStmt *
-_copyDropRoleStmt(const DropRoleStmt *from)
-{
- DropRoleStmt *newnode = makeNode(DropRoleStmt);
-
- COPY_NODE_FIELD(roles);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static CreateProfileStmt *
-_copyCreateProfileStmt(const CreateProfileStmt *from)
-{
- CreateProfileStmt *newnode = makeNode(CreateProfileStmt);
-
- COPY_STRING_FIELD(profile_name);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterProfileStmt *
-_copyAlterProfileStmt(const AlterProfileStmt *from)
-{
- AlterProfileStmt *newnode = makeNode(AlterProfileStmt);
-
- COPY_STRING_FIELD(profile_name);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static DropProfileStmt *
-_copyDropProfileStmt(const DropProfileStmt *from)
-{
- DropProfileStmt *newnode = makeNode(DropProfileStmt);
-
- COPY_NODE_FIELD(profiles);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static DenyLoginPoint *
-_copyDenyLoginPoint(const DenyLoginPoint *from)
-{
- DenyLoginPoint *newnode = makeNode(DenyLoginPoint);
-
- COPY_NODE_FIELD(day);
- COPY_NODE_FIELD(time);
-
- return newnode;
-}
-
-static DenyLoginInterval *
-_copyDenyLoginInterval(const DenyLoginInterval *from)
-{
- DenyLoginInterval *newnode = makeNode(DenyLoginInterval);
-
- COPY_NODE_FIELD(start);
- COPY_NODE_FIELD(end);
-
- return newnode;
-}
-
-static CreateSeqStmt *
-_copyCreateSeqStmt(const CreateSeqStmt *from)
-{
- CreateSeqStmt *newnode = makeNode(CreateSeqStmt);
-
- COPY_NODE_FIELD(sequence);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(ownerId);
- COPY_SCALAR_FIELD(for_identity);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static AlterSeqStmt *
-_copyAlterSeqStmt(const AlterSeqStmt *from)
-{
- AlterSeqStmt *newnode = makeNode(AlterSeqStmt);
-
- COPY_NODE_FIELD(sequence);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(for_identity);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static DefineStmt *
-_copyDefineStmt(const DefineStmt *from)
-{
- DefineStmt *newnode = makeNode(DefineStmt);
-
- COPY_SCALAR_FIELD(kind);
- COPY_SCALAR_FIELD(oldstyle);
- COPY_NODE_FIELD(defnames);
- COPY_NODE_FIELD(args);
- COPY_NODE_FIELD(definition);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_SCALAR_FIELD(replace);
- COPY_SCALAR_FIELD(trusted);
-
- return newnode;
-}
-
-static CreateDomainStmt *
-_copyCreateDomainStmt(const CreateDomainStmt *from)
-{
- CreateDomainStmt *newnode = makeNode(CreateDomainStmt);
-
- COPY_NODE_FIELD(domainname);
- COPY_NODE_FIELD(typeName);
- COPY_NODE_FIELD(collClause);
- COPY_NODE_FIELD(constraints);
-
- return newnode;
-}
-
-static CreateOpClassStmt *
-_copyCreateOpClassStmt(const CreateOpClassStmt *from)
-{
- CreateOpClassStmt *newnode = makeNode(CreateOpClassStmt);
-
- COPY_NODE_FIELD(opclassname);
- COPY_NODE_FIELD(opfamilyname);
- COPY_STRING_FIELD(amname);
- COPY_NODE_FIELD(datatype);
- COPY_NODE_FIELD(items);
- COPY_SCALAR_FIELD(isDefault);
-
- return newnode;
-}
-
-static CreateOpClassItem *
-_copyCreateOpClassItem(const CreateOpClassItem *from)
-{
- CreateOpClassItem *newnode = makeNode(CreateOpClassItem);
-
- COPY_SCALAR_FIELD(itemtype);
- COPY_NODE_FIELD(name);
- COPY_SCALAR_FIELD(number);
- COPY_NODE_FIELD(order_family);
- COPY_NODE_FIELD(class_args);
- COPY_NODE_FIELD(storedtype);
-
- return newnode;
-}
-
-static CreateOpFamilyStmt *
-_copyCreateOpFamilyStmt(const CreateOpFamilyStmt *from)
-{
- CreateOpFamilyStmt *newnode = makeNode(CreateOpFamilyStmt);
-
- COPY_NODE_FIELD(opfamilyname);
- COPY_STRING_FIELD(amname);
-
- return newnode;
-}
-
-static AlterOpFamilyStmt *
-_copyAlterOpFamilyStmt(const AlterOpFamilyStmt *from)
-{
- AlterOpFamilyStmt *newnode = makeNode(AlterOpFamilyStmt);
-
- COPY_NODE_FIELD(opfamilyname);
- COPY_STRING_FIELD(amname);
- COPY_SCALAR_FIELD(isDrop);
- COPY_NODE_FIELD(items);
-
- return newnode;
-}
-
-static CreateDirectoryTableStmt *
-_copyCreateDirectoryTableStmt(const CreateDirectoryTableStmt *from)
-{
- CreateDirectoryTableStmt *newnode = makeNode(CreateDirectoryTableStmt);
-
- COPY_NODE_FIELD(base.relation);
- COPY_NODE_FIELD(base.tableElts);
- COPY_NODE_FIELD(base.inhRelations);
- COPY_NODE_FIELD(base.partbound);
- COPY_NODE_FIELD(base.partspec);
- COPY_NODE_FIELD(base.ofTypename);
- COPY_NODE_FIELD(base.constraints);
- COPY_NODE_FIELD(base.options);
- COPY_SCALAR_FIELD(base.oncommit);
- COPY_STRING_FIELD(base.tablespacename);
- COPY_STRING_FIELD(base.accessMethod);
- COPY_SCALAR_FIELD(base.if_not_exists);
- COPY_SCALAR_FIELD(base.gp_style_alter_part);
- COPY_NODE_FIELD(base.distributedBy);
- COPY_NODE_FIELD(base.partitionBy);
- COPY_SCALAR_FIELD(base.relKind);
- COPY_SCALAR_FIELD(base.ownerid);
- COPY_SCALAR_FIELD(base.buildAoBlkdir);
- COPY_NODE_FIELD(base.attr_encodings);
- COPY_SCALAR_FIELD(base.isCtas);
- COPY_NODE_FIELD(base.intoQuery);
- COPY_NODE_FIELD(base.intoPolicy);
- COPY_NODE_FIELD(base.part_idx_oids);
- COPY_NODE_FIELD(base.part_idx_names);
- COPY_NODE_FIELD(base.tags);
- COPY_SCALAR_FIELD(base.origin);
- COPY_STRING_FIELD(tablespacename);
- COPY_STRING_FIELD(location);
-
- return newnode;
-}
-
-static AlterDirectoryTableStmt *
-_copyAlterDirectoryTableStmt(const AlterDirectoryTableStmt *from)
-{
- AlterDirectoryTableStmt *newnode = makeNode(AlterDirectoryTableStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(tags);
- COPY_SCALAR_FIELD(unsettag);
-
- return newnode;
-}
-
-static DropStmt *
-_copyDropStmt(const DropStmt *from)
-{
- DropStmt *newnode = makeNode(DropStmt);
-
- COPY_NODE_FIELD(objects);
- COPY_SCALAR_FIELD(removeType);
- COPY_SCALAR_FIELD(behavior);
- COPY_SCALAR_FIELD(missing_ok);
- COPY_SCALAR_FIELD(concurrent);
- COPY_SCALAR_FIELD(isdynamic);
-
- return newnode;
-}
-
-static DropDirectoryTableStmt *
-_copyDropDirectoryTableStmt(const DropDirectoryTableStmt *from)
-{
- DropDirectoryTableStmt *newnode = makeNode(DropDirectoryTableStmt);
-
- COPY_NODE_FIELD(base.objects);
- COPY_SCALAR_FIELD(base.removeType);
- COPY_SCALAR_FIELD(base.behavior);
- COPY_SCALAR_FIELD(base.missing_ok);
- COPY_SCALAR_FIELD(base.concurrent);
- COPY_SCALAR_FIELD(base.isdynamic);
- COPY_SCALAR_FIELD(with_content);
-
- return newnode;
-}
-
-static TruncateStmt *
-_copyTruncateStmt(const TruncateStmt *from)
-{
- TruncateStmt *newnode = makeNode(TruncateStmt);
-
- COPY_NODE_FIELD(relations);
- COPY_SCALAR_FIELD(restart_seqs);
- COPY_SCALAR_FIELD(behavior);
-
- return newnode;
-}
-
-static CommentStmt *
-_copyCommentStmt(const CommentStmt *from)
-{
- CommentStmt *newnode = makeNode(CommentStmt);
-
- COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(object);
- COPY_STRING_FIELD(comment);
-
- return newnode;
-}
-
-static SecLabelStmt *
-_copySecLabelStmt(const SecLabelStmt *from)
-{
- SecLabelStmt *newnode = makeNode(SecLabelStmt);
-
- COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(object);
- COPY_STRING_FIELD(provider);
- COPY_STRING_FIELD(label);
-
- return newnode;
-}
-
-static DeclareCursorStmt *
-_copyDeclareCursorStmt(const DeclareCursorStmt *from)
-{
- DeclareCursorStmt *newnode = makeNode(DeclareCursorStmt);
-
- COPY_STRING_FIELD(portalname);
- COPY_SCALAR_FIELD(options);
- COPY_NODE_FIELD(query);
-
- return newnode;
-}
-
-static ClosePortalStmt *
-_copyClosePortalStmt(const ClosePortalStmt *from)
-{
- ClosePortalStmt *newnode = makeNode(ClosePortalStmt);
-
- COPY_STRING_FIELD(portalname);
-
- return newnode;
-}
-
-static FetchStmt *
-_copyFetchStmt(const FetchStmt *from)
-{
- FetchStmt *newnode = makeNode(FetchStmt);
-
- COPY_SCALAR_FIELD(direction);
- COPY_SCALAR_FIELD(howMany);
- COPY_STRING_FIELD(portalname);
- COPY_SCALAR_FIELD(ismove);
-
- return newnode;
-}
-
-static IndexStmt *
-_copyIndexStmt(const IndexStmt *from)
-{
- IndexStmt *newnode = makeNode(IndexStmt);
-
- COPY_STRING_FIELD(idxname);
- COPY_NODE_FIELD(relation);
- COPY_SCALAR_FIELD(relationOid);
- COPY_STRING_FIELD(accessMethod);
- COPY_STRING_FIELD(tableSpace);
- COPY_NODE_FIELD(indexParams);
- COPY_NODE_FIELD(indexIncludingParams);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(whereClause);
- COPY_NODE_FIELD(excludeOpNames);
- COPY_STRING_FIELD(idxcomment);
- COPY_SCALAR_FIELD(indexOid);
- COPY_SCALAR_FIELD(oldNumber);
- COPY_SCALAR_FIELD(oldCreateSubid);
- COPY_SCALAR_FIELD(oldFirstRelfilelocatorSubid);
- COPY_SCALAR_FIELD(unique);
- COPY_SCALAR_FIELD(nulls_not_distinct);
- COPY_SCALAR_FIELD(primary);
- COPY_SCALAR_FIELD(isconstraint);
- COPY_SCALAR_FIELD(deferrable);
- COPY_SCALAR_FIELD(initdeferred);
- COPY_SCALAR_FIELD(transformed);
- COPY_SCALAR_FIELD(concurrent);
- COPY_SCALAR_FIELD(if_not_exists);
- COPY_SCALAR_FIELD(reset_default_tblspc);
- COPY_SCALAR_FIELD(concurrentlyPhase);
- COPY_SCALAR_FIELD(indexRelationOid);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static CreateStatsStmt *
-_copyCreateStatsStmt(const CreateStatsStmt *from)
-{
- CreateStatsStmt *newnode = makeNode(CreateStatsStmt);
-
- COPY_NODE_FIELD(defnames);
- COPY_NODE_FIELD(stat_types);
- COPY_NODE_FIELD(exprs);
- COPY_NODE_FIELD(relations);
- COPY_STRING_FIELD(stxcomment);
- COPY_SCALAR_FIELD(transformed);
- COPY_SCALAR_FIELD(if_not_exists);
-
- return newnode;
-}
-
-static StatsElem *
-_copyStatsElem(const StatsElem *from)
-{
- StatsElem *newnode = makeNode(StatsElem);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(expr);
-
- return newnode;
-}
-
-static AlterStatsStmt *
-_copyAlterStatsStmt(const AlterStatsStmt *from)
-{
- AlterStatsStmt *newnode = makeNode(AlterStatsStmt);
-
- COPY_NODE_FIELD(defnames);
- COPY_SCALAR_FIELD(stxstattarget);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static CreateFunctionStmt *
-_copyCreateFunctionStmt(const CreateFunctionStmt *from)
-{
- CreateFunctionStmt *newnode = makeNode(CreateFunctionStmt);
-
- COPY_SCALAR_FIELD(is_procedure);
- COPY_SCALAR_FIELD(replace);
- COPY_NODE_FIELD(funcname);
- COPY_NODE_FIELD(parameters);
- COPY_NODE_FIELD(returnType);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(sql_body);
-
- return newnode;
-}
-
-static FunctionParameter *
-_copyFunctionParameter(const FunctionParameter *from)
-{
- FunctionParameter *newnode = makeNode(FunctionParameter);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(argType);
- COPY_SCALAR_FIELD(mode);
- COPY_NODE_FIELD(defexpr);
-
- return newnode;
-}
-
-static AlterFunctionStmt *
-_copyAlterFunctionStmt(const AlterFunctionStmt *from)
-{
- AlterFunctionStmt *newnode = makeNode(AlterFunctionStmt);
-
- COPY_SCALAR_FIELD(objtype);
- COPY_NODE_FIELD(func);
- COPY_NODE_FIELD(actions);
-
- return newnode;
-}
-
-static DoStmt *
-_copyDoStmt(const DoStmt *from)
-{
- DoStmt *newnode = makeNode(DoStmt);
-
- COPY_NODE_FIELD(args);
-
- return newnode;
-}
-
-static CallStmt *
-_copyCallStmt(const CallStmt *from)
-{
- CallStmt *newnode = makeNode(CallStmt);
-
- COPY_NODE_FIELD(funccall);
- COPY_NODE_FIELD(funcexpr);
- COPY_NODE_FIELD(outargs);
-
- return newnode;
-}
-
-static RenameStmt *
-_copyRenameStmt(const RenameStmt *from)
-{
- RenameStmt *newnode = makeNode(RenameStmt);
-
- COPY_SCALAR_FIELD(renameType);
- COPY_SCALAR_FIELD(relationType);
- COPY_NODE_FIELD(relation);
- COPY_SCALAR_FIELD(objid);
- COPY_NODE_FIELD(object);
- COPY_STRING_FIELD(subname);
- COPY_STRING_FIELD(newname);
- COPY_SCALAR_FIELD(behavior);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static AlterObjectDependsStmt *
-_copyAlterObjectDependsStmt(const AlterObjectDependsStmt *from)
-{
- AlterObjectDependsStmt *newnode = makeNode(AlterObjectDependsStmt);
-
- COPY_SCALAR_FIELD(objectType);
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(object);
- COPY_NODE_FIELD(extname);
- COPY_SCALAR_FIELD(remove);
-
- return newnode;
-}
-
-static AlterObjectSchemaStmt *
-_copyAlterObjectSchemaStmt(const AlterObjectSchemaStmt *from)
-{
- AlterObjectSchemaStmt *newnode = makeNode(AlterObjectSchemaStmt);
-
- COPY_SCALAR_FIELD(objectType);
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(object);
- COPY_STRING_FIELD(newschema);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static AlterOwnerStmt *
-_copyAlterOwnerStmt(const AlterOwnerStmt *from)
-{
- AlterOwnerStmt *newnode = makeNode(AlterOwnerStmt);
-
- COPY_SCALAR_FIELD(objectType);
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(object);
- COPY_NODE_FIELD(newowner);
-
- return newnode;
-}
-
-static AlterOperatorStmt *
-_copyAlterOperatorStmt(const AlterOperatorStmt *from)
-{
- AlterOperatorStmt *newnode = makeNode(AlterOperatorStmt);
-
- COPY_NODE_FIELD(opername);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterTypeStmt *
-_copyAlterTypeStmt(const AlterTypeStmt *from)
-{
- AlterTypeStmt *newnode = makeNode(AlterTypeStmt);
-
- COPY_NODE_FIELD(typeName);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static RuleStmt *
-_copyRuleStmt(const RuleStmt *from)
-{
- RuleStmt *newnode = makeNode(RuleStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_STRING_FIELD(rulename);
- COPY_NODE_FIELD(whereClause);
- COPY_SCALAR_FIELD(event);
- COPY_SCALAR_FIELD(instead);
- COPY_NODE_FIELD(actions);
- COPY_SCALAR_FIELD(replace);
-
- return newnode;
-}
-
-static NotifyStmt *
-_copyNotifyStmt(const NotifyStmt *from)
-{
- NotifyStmt *newnode = makeNode(NotifyStmt);
-
- COPY_STRING_FIELD(conditionname);
- COPY_STRING_FIELD(payload);
-
- return newnode;
-}
-
-static ListenStmt *
-_copyListenStmt(const ListenStmt *from)
-{
- ListenStmt *newnode = makeNode(ListenStmt);
-
- COPY_STRING_FIELD(conditionname);
-
- return newnode;
-}
-
-static UnlistenStmt *
-_copyUnlistenStmt(const UnlistenStmt *from)
-{
- UnlistenStmt *newnode = makeNode(UnlistenStmt);
-
- COPY_STRING_FIELD(conditionname);
-
- return newnode;
-}
-
-static TransactionStmt *
-_copyTransactionStmt(const TransactionStmt *from)
-{
- TransactionStmt *newnode = makeNode(TransactionStmt);
-
- COPY_SCALAR_FIELD(kind);
- COPY_NODE_FIELD(options);
- COPY_STRING_FIELD(savepoint_name);
- COPY_STRING_FIELD(gid);
- COPY_SCALAR_FIELD(chain);
-
- return newnode;
-}
-
-static CompositeTypeStmt *
-_copyCompositeTypeStmt(const CompositeTypeStmt *from)
-{
- CompositeTypeStmt *newnode = makeNode(CompositeTypeStmt);
-
- COPY_NODE_FIELD(typevar);
- COPY_NODE_FIELD(coldeflist);
-
- return newnode;
-}
-
-static CreateEnumStmt *
-_copyCreateEnumStmt(const CreateEnumStmt *from)
-{
- CreateEnumStmt *newnode = makeNode(CreateEnumStmt);
-
- COPY_NODE_FIELD(typeName);
- COPY_NODE_FIELD(vals);
-
- return newnode;
-}
-
-static CreateRangeStmt *
-_copyCreateRangeStmt(const CreateRangeStmt *from)
-{
- CreateRangeStmt *newnode = makeNode(CreateRangeStmt);
-
- COPY_NODE_FIELD(typeName);
- COPY_NODE_FIELD(params);
-
- return newnode;
-}
-
-static AlterEnumStmt *
-_copyAlterEnumStmt(const AlterEnumStmt *from)
-{
- AlterEnumStmt *newnode = makeNode(AlterEnumStmt);
-
- COPY_NODE_FIELD(typeName);
- COPY_STRING_FIELD(oldVal);
- COPY_STRING_FIELD(newVal);
- COPY_STRING_FIELD(newValNeighbor);
- COPY_SCALAR_FIELD(newValIsAfter);
- COPY_SCALAR_FIELD(skipIfNewValExists);
-
- return newnode;
-}
-
-static ViewStmt *
-_copyViewStmt(const ViewStmt *from)
-{
- ViewStmt *newnode = makeNode(ViewStmt);
-
- COPY_NODE_FIELD(view);
- COPY_NODE_FIELD(aliases);
- COPY_NODE_FIELD(query);
- COPY_SCALAR_FIELD(replace);
- COPY_NODE_FIELD(options);
- COPY_SCALAR_FIELD(withCheckOption);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static LoadStmt *
-_copyLoadStmt(const LoadStmt *from)
-{
- LoadStmt *newnode = makeNode(LoadStmt);
-
- COPY_STRING_FIELD(filename);
-
- return newnode;
-}
-
-static CreatedbStmt *
-_copyCreatedbStmt(const CreatedbStmt *from)
-{
- CreatedbStmt *newnode = makeNode(CreatedbStmt);
-
- COPY_STRING_FIELD(dbname);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static AlterDatabaseStmt *
-_copyAlterDatabaseStmt(const AlterDatabaseStmt *from)
-{
- AlterDatabaseStmt *newnode = makeNode(AlterDatabaseStmt);
-
- COPY_STRING_FIELD(dbname);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(tags);
- COPY_SCALAR_FIELD(unsettag);
-
- return newnode;
-}
-
-static AlterDatabaseRefreshCollStmt *
-_copyAlterDatabaseRefreshCollStmt(const AlterDatabaseRefreshCollStmt *from)
-{
- AlterDatabaseRefreshCollStmt *newnode = makeNode(AlterDatabaseRefreshCollStmt);
-
- COPY_STRING_FIELD(dbname);
-
- return newnode;
-}
-
-static AlterDatabaseSetStmt *
-_copyAlterDatabaseSetStmt(const AlterDatabaseSetStmt *from)
-{
- AlterDatabaseSetStmt *newnode = makeNode(AlterDatabaseSetStmt);
-
- COPY_STRING_FIELD(dbname);
- COPY_NODE_FIELD(setstmt);
-
- return newnode;
-}
-
-static DropdbStmt *
-_copyDropdbStmt(const DropdbStmt *from)
-{
- DropdbStmt *newnode = makeNode(DropdbStmt);
-
- COPY_STRING_FIELD(dbname);
- COPY_SCALAR_FIELD(missing_ok);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterSystemStmt *
-_copyAlterSystemStmt(const AlterSystemStmt *from)
-{
- AlterSystemStmt *newnode = makeNode(AlterSystemStmt);
-
- COPY_NODE_FIELD(setstmt);
-
- return newnode;
-}
-
-static ClusterStmt *
-_copyClusterStmt(const ClusterStmt *from)
-{
- ClusterStmt *newnode = makeNode(ClusterStmt);
-
- COPY_NODE_FIELD(relation);
- COPY_STRING_FIELD(indexname);
- COPY_NODE_FIELD(params);
-
- return newnode;
-}
-
-static VacuumStmt *
-_copyVacuumStmt(const VacuumStmt *from)
-{
- VacuumStmt *newnode = makeNode(VacuumStmt);
-
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(rels);
- COPY_SCALAR_FIELD(is_vacuumcmd);
-
- return newnode;
-}
-
-static VacuumRelation *
-_copyVacuumRelation(const VacuumRelation *from)
-{
- VacuumRelation *newnode = makeNode(VacuumRelation);
-
- COPY_NODE_FIELD(relation);
- COPY_SCALAR_FIELD(oid);
- COPY_NODE_FIELD(va_cols);
-
- return newnode;
-}
-
-static ExplainStmt *
-_copyExplainStmt(const ExplainStmt *from)
-{
- ExplainStmt *newnode = makeNode(ExplainStmt);
-
- COPY_NODE_FIELD(query);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static CreateTableAsStmt *
-_copyCreateTableAsStmt(const CreateTableAsStmt *from)
-{
- CreateTableAsStmt *newnode = makeNode(CreateTableAsStmt);
-
- COPY_NODE_FIELD(query);
- COPY_NODE_FIELD(into);
- COPY_SCALAR_FIELD(objtype);
- COPY_SCALAR_FIELD(is_select_into);
- COPY_SCALAR_FIELD(if_not_exists);
-
- return newnode;
-}
-
-static RefreshMatViewStmt *
-_copyRefreshMatViewStmt(const RefreshMatViewStmt *from)
-{
- RefreshMatViewStmt *newnode = makeNode(RefreshMatViewStmt);
-
- COPY_SCALAR_FIELD(concurrent);
- COPY_SCALAR_FIELD(skipData);
- COPY_NODE_FIELD(relation);
- COPY_SCALAR_FIELD(isdynamic);
-
- return newnode;
-}
-
-static CheckPointStmt *
-_copyCheckPointStmt(const CheckPointStmt *from)
-{
- CheckPointStmt *newnode = makeNode(CheckPointStmt);
-
-
- return newnode;
-}
-
-static DiscardStmt *
-_copyDiscardStmt(const DiscardStmt *from)
-{
- DiscardStmt *newnode = makeNode(DiscardStmt);
-
- COPY_SCALAR_FIELD(target);
-
- return newnode;
-}
-
-static LockStmt *
-_copyLockStmt(const LockStmt *from)
-{
- LockStmt *newnode = makeNode(LockStmt);
-
- COPY_NODE_FIELD(relations);
- COPY_SCALAR_FIELD(mode);
- COPY_SCALAR_FIELD(nowait);
-
- return newnode;
-}
-
-static ConstraintsSetStmt *
-_copyConstraintsSetStmt(const ConstraintsSetStmt *from)
-{
- ConstraintsSetStmt *newnode = makeNode(ConstraintsSetStmt);
-
- COPY_NODE_FIELD(constraints);
- COPY_SCALAR_FIELD(deferred);
-
- return newnode;
-}
-
-static ReindexIndexInfo *
-_copyReindexIndexInfo(const ReindexIndexInfo *from)
-{
- ReindexIndexInfo *newnode = makeNode(ReindexIndexInfo);
-
- COPY_SCALAR_FIELD(indexId);
- COPY_SCALAR_FIELD(tableId);
- COPY_SCALAR_FIELD(amId);
- COPY_SCALAR_FIELD(safe);
- COPY_STRING_FIELD(ccNewName);
- COPY_STRING_FIELD(ccOldName);
-
- return newnode;
-}
-
-static ReindexStmt *
-_copyReindexStmt(const ReindexStmt *from)
-{
- ReindexStmt *newnode = makeNode(ReindexStmt);
-
- COPY_SCALAR_FIELD(kind);
- COPY_NODE_FIELD(relation);
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(params);
- COPY_SCALAR_FIELD(relid);
- COPY_SCALAR_FIELD(concurrentlyPhase);
- COPY_NODE_FIELD(newIndexInfo);
- COPY_NODE_FIELD(oldIndexInfo);
-
- return newnode;
-}
-
-static CreateConversionStmt *
-_copyCreateConversionStmt(const CreateConversionStmt *from)
-{
- CreateConversionStmt *newnode = makeNode(CreateConversionStmt);
-
- COPY_NODE_FIELD(conversion_name);
- COPY_STRING_FIELD(for_encoding_name);
- COPY_STRING_FIELD(to_encoding_name);
- COPY_NODE_FIELD(func_name);
- COPY_SCALAR_FIELD(def);
-
- return newnode;
-}
-
-static CreateCastStmt *
-_copyCreateCastStmt(const CreateCastStmt *from)
-{
- CreateCastStmt *newnode = makeNode(CreateCastStmt);
-
- COPY_NODE_FIELD(sourcetype);
- COPY_NODE_FIELD(targettype);
- COPY_NODE_FIELD(func);
- COPY_SCALAR_FIELD(context);
- COPY_SCALAR_FIELD(inout);
-
- return newnode;
-}
-
-static CreateTransformStmt *
-_copyCreateTransformStmt(const CreateTransformStmt *from)
-{
- CreateTransformStmt *newnode = makeNode(CreateTransformStmt);
-
- COPY_SCALAR_FIELD(replace);
- COPY_NODE_FIELD(type_name);
- COPY_STRING_FIELD(lang);
- COPY_NODE_FIELD(fromsql);
- COPY_NODE_FIELD(tosql);
-
- return newnode;
-}
-
-static PrepareStmt *
-_copyPrepareStmt(const PrepareStmt *from)
-{
- PrepareStmt *newnode = makeNode(PrepareStmt);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(argtypes);
- COPY_NODE_FIELD(query);
-
- return newnode;
-}
-
-static ExecuteStmt *
-_copyExecuteStmt(const ExecuteStmt *from)
-{
- ExecuteStmt *newnode = makeNode(ExecuteStmt);
-
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(params);
-
- return newnode;
-}
-
-static DeallocateStmt *
-_copyDeallocateStmt(const DeallocateStmt *from)
-{
- DeallocateStmt *newnode = makeNode(DeallocateStmt);
-
- COPY_STRING_FIELD(name);
-
- return newnode;
-}
-
-static DropOwnedStmt *
-_copyDropOwnedStmt(const DropOwnedStmt *from)
-{
- DropOwnedStmt *newnode = makeNode(DropOwnedStmt);
-
- COPY_NODE_FIELD(roles);
- COPY_SCALAR_FIELD(behavior);
-
- return newnode;
-}
-
-static ReassignOwnedStmt *
-_copyReassignOwnedStmt(const ReassignOwnedStmt *from)
-{
- ReassignOwnedStmt *newnode = makeNode(ReassignOwnedStmt);
-
- COPY_NODE_FIELD(roles);
- COPY_NODE_FIELD(newrole);
-
- return newnode;
-}
-
-static AlterTSDictionaryStmt *
-_copyAlterTSDictionaryStmt(const AlterTSDictionaryStmt *from)
-{
- AlterTSDictionaryStmt *newnode = makeNode(AlterTSDictionaryStmt);
-
- COPY_NODE_FIELD(dictname);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterTSConfigurationStmt *
-_copyAlterTSConfigurationStmt(const AlterTSConfigurationStmt *from)
-{
- AlterTSConfigurationStmt *newnode = makeNode(AlterTSConfigurationStmt);
-
- COPY_SCALAR_FIELD(kind);
- COPY_NODE_FIELD(cfgname);
- COPY_NODE_FIELD(tokentype);
- COPY_NODE_FIELD(dicts);
- COPY_SCALAR_FIELD(override);
- COPY_SCALAR_FIELD(replace);
- COPY_SCALAR_FIELD(missing_ok);
-
- return newnode;
-}
-
-static PublicationTable *
-_copyPublicationTable(const PublicationTable *from)
-{
- PublicationTable *newnode = makeNode(PublicationTable);
-
- COPY_NODE_FIELD(relation);
- COPY_NODE_FIELD(whereClause);
- COPY_NODE_FIELD(columns);
-
- return newnode;
-}
-
-static PublicationObjSpec *
-_copyPublicationObjSpec(const PublicationObjSpec *from)
-{
- PublicationObjSpec *newnode = makeNode(PublicationObjSpec);
-
- COPY_SCALAR_FIELD(pubobjtype);
- COPY_STRING_FIELD(name);
- COPY_NODE_FIELD(pubtable);
- COPY_LOCATION_FIELD(location);
-
- return newnode;
-}
-
-static CreatePublicationStmt *
-_copyCreatePublicationStmt(const CreatePublicationStmt *from)
-{
- CreatePublicationStmt *newnode = makeNode(CreatePublicationStmt);
-
- COPY_STRING_FIELD(pubname);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(pubobjects);
- COPY_SCALAR_FIELD(for_all_tables);
-
- return newnode;
-}
-
-static AlterPublicationStmt *
-_copyAlterPublicationStmt(const AlterPublicationStmt *from)
-{
- AlterPublicationStmt *newnode = makeNode(AlterPublicationStmt);
-
- COPY_STRING_FIELD(pubname);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(pubobjects);
- COPY_SCALAR_FIELD(for_all_tables);
- COPY_SCALAR_FIELD(action);
-
- return newnode;
-}
-
-static CreateSubscriptionStmt *
-_copyCreateSubscriptionStmt(const CreateSubscriptionStmt *from)
-{
- CreateSubscriptionStmt *newnode = makeNode(CreateSubscriptionStmt);
-
- COPY_STRING_FIELD(subname);
- COPY_STRING_FIELD(conninfo);
- COPY_NODE_FIELD(publication);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static AlterSubscriptionStmt *
-_copyAlterSubscriptionStmt(const AlterSubscriptionStmt *from)
-{
- AlterSubscriptionStmt *newnode = makeNode(AlterSubscriptionStmt);
-
- COPY_SCALAR_FIELD(kind);
- COPY_STRING_FIELD(subname);
- COPY_STRING_FIELD(conninfo);
- COPY_NODE_FIELD(publication);
- COPY_NODE_FIELD(options);
-
- return newnode;
-}
-
-static DropSubscriptionStmt *
-_copyDropSubscriptionStmt(const DropSubscriptionStmt *from)
-{
- DropSubscriptionStmt *newnode = makeNode(DropSubscriptionStmt);
-
- COPY_STRING_FIELD(subname);
- COPY_SCALAR_FIELD(missing_ok);
- COPY_SCALAR_FIELD(behavior);
-
- return newnode;
-}
-
-static RetrieveStmt *
-_copyRetrieveStmt(const RetrieveStmt *from)
-{
- RetrieveStmt *newnode = makeNode(RetrieveStmt);
-
- COPY_STRING_FIELD(endpoint_name);
- COPY_SCALAR_FIELD(count);
- COPY_SCALAR_FIELD(is_all);
-
- return newnode;
-}
-
-static CreateWarehouseStmt *
-_copyCreateWarehouseStmt(const CreateWarehouseStmt *from)
-{
- CreateWarehouseStmt *newnode = makeNode(CreateWarehouseStmt);
-
- COPY_STRING_FIELD(whname);
- COPY_NODE_FIELD(options);
- COPY_NODE_FIELD(tags);
-
- return newnode;
-}
-
-static DropWarehouseStmt *
-_copyDropWarehouseStmt(const DropWarehouseStmt *from)
-{
- DropWarehouseStmt *newnode = makeNode(DropWarehouseStmt);
-
- COPY_STRING_FIELD(whname);
-
- return newnode;
-}
-
-static PathKey *
-_copyPathKey(const PathKey *from)
-{
- PathKey *newnode = makeNode(PathKey);
-
- COPY_SCALAR_FIELD(pk_eclass);
- COPY_SCALAR_FIELD(pk_opfamily);
- COPY_SCALAR_FIELD(pk_strategy);
- COPY_SCALAR_FIELD(pk_nulls_first);
-
- return newnode;
-}
-
-static DistributionKey *
-_copyDistributionKey(const DistributionKey *from)
-{
- DistributionKey *newnode = makeNode(DistributionKey);
-
- COPY_NODE_FIELD(dk_eclasses);
- COPY_SCALAR_FIELD(dk_opfamily);
-
- return newnode;
-}
-
-static RestrictInfo *
-_copyRestrictInfo(const RestrictInfo *from)
-{
- RestrictInfo *newnode = makeNode(RestrictInfo);
-
- COPY_NODE_FIELD(clause);
- COPY_SCALAR_FIELD(is_pushed_down);
- COPY_SCALAR_FIELD(can_join);
- COPY_SCALAR_FIELD(pseudoconstant);
- COPY_SCALAR_FIELD(has_clone);
- COPY_SCALAR_FIELD(is_clone);
- COPY_SCALAR_FIELD(leakproof);
- COPY_SCALAR_FIELD(has_volatile);
- COPY_SCALAR_FIELD(security_level);
- COPY_SCALAR_FIELD(contain_outer_query_references);
- COPY_SCALAR_FIELD(num_base_rels);
- COPY_BITMAPSET_FIELD(clause_relids);
- COPY_BITMAPSET_FIELD(required_relids);
- COPY_BITMAPSET_FIELD(incompatible_relids);
- COPY_BITMAPSET_FIELD(outer_relids);
- COPY_BITMAPSET_FIELD(left_relids);
- COPY_BITMAPSET_FIELD(right_relids);
- COPY_NODE_FIELD(orclause);
- COPY_SCALAR_FIELD(rinfo_serial);
- COPY_SCALAR_FIELD(parent_ec);
- COPY_SCALAR_FIELD(eval_cost);
- COPY_SCALAR_FIELD(norm_selec);
- COPY_SCALAR_FIELD(outer_selec);
- COPY_NODE_FIELD(mergeopfamilies);
- COPY_SCALAR_FIELD(left_ec);
- COPY_SCALAR_FIELD(right_ec);
- COPY_SCALAR_FIELD(left_em);
- COPY_SCALAR_FIELD(right_em);
- COPY_SCALAR_FIELD(hasheqoperator);
- newnode->scansel_cache = NIL;
- COPY_SCALAR_FIELD(outer_is_left);
- COPY_SCALAR_FIELD(hashjoinoperator);
- COPY_SCALAR_FIELD(left_bucketsize);
- COPY_SCALAR_FIELD(right_bucketsize);
- COPY_SCALAR_FIELD(left_mcvfreq);
- COPY_SCALAR_FIELD(right_mcvfreq);
- COPY_SCALAR_FIELD(left_hasheqoperator);
- COPY_SCALAR_FIELD(right_hasheqoperator);
-
- return newnode;
-}
-
-static PlaceHolderVar *
-_copyPlaceHolderVar(const PlaceHolderVar *from)
-{
- PlaceHolderVar *newnode = makeNode(PlaceHolderVar);
-
- COPY_NODE_FIELD(phexpr);
- COPY_BITMAPSET_FIELD(phrels);
- COPY_BITMAPSET_FIELD(phnullingrels);
- COPY_SCALAR_FIELD(phid);
- COPY_SCALAR_FIELD(phlevelsup);
-
- return newnode;
-}
-
-static SpecialJoinInfo *
-_copySpecialJoinInfo(const SpecialJoinInfo *from)
-{
- SpecialJoinInfo *newnode = makeNode(SpecialJoinInfo);
-
- COPY_BITMAPSET_FIELD(min_lefthand);
- COPY_BITMAPSET_FIELD(min_righthand);
- COPY_BITMAPSET_FIELD(syn_lefthand);
- COPY_BITMAPSET_FIELD(syn_righthand);
- COPY_SCALAR_FIELD(jointype);
- COPY_SCALAR_FIELD(ojrelid);
- COPY_BITMAPSET_FIELD(commute_above_l);
- COPY_BITMAPSET_FIELD(commute_above_r);
- COPY_BITMAPSET_FIELD(commute_below_l);
- COPY_BITMAPSET_FIELD(commute_below_r);
- COPY_SCALAR_FIELD(lhs_strict);
- COPY_SCALAR_FIELD(semi_can_btree);
- COPY_SCALAR_FIELD(semi_can_hash);
- COPY_NODE_FIELD(semi_operators);
- COPY_NODE_FIELD(semi_rhs_exprs);
-
- return newnode;
-}
-
-static AppendRelInfo *
-_copyAppendRelInfo(const AppendRelInfo *from)
-{
- AppendRelInfo *newnode = makeNode(AppendRelInfo);
-
- COPY_SCALAR_FIELD(parent_relid);
- COPY_SCALAR_FIELD(child_relid);
- COPY_SCALAR_FIELD(parent_reltype);
- COPY_SCALAR_FIELD(child_reltype);
- COPY_NODE_FIELD(translated_vars);
- COPY_SCALAR_FIELD(num_child_cols);
- COPY_POINTER_FIELD(parent_colnos, from->num_child_cols * sizeof(AttrNumber));
- COPY_SCALAR_FIELD(parent_reloid);
-
- return newnode;
-}
-
-static PlaceHolderInfo *
-_copyPlaceHolderInfo(const PlaceHolderInfo *from)
-{
- PlaceHolderInfo *newnode = makeNode(PlaceHolderInfo);
-
- COPY_SCALAR_FIELD(phid);
- COPY_NODE_FIELD(ph_var);
- COPY_BITMAPSET_FIELD(ph_eval_at);
- COPY_BITMAPSET_FIELD(ph_lateral);
- COPY_BITMAPSET_FIELD(ph_needed);
- COPY_SCALAR_FIELD(ph_width);
-
- return newnode;
-}
-
-static GroupedVarInfo *
-_copyGroupedVarInfo(const GroupedVarInfo *from)
-{
- GroupedVarInfo *newnode = makeNode(GroupedVarInfo);
-
- COPY_NODE_FIELD(gvexpr);
- COPY_NODE_FIELD(agg_partial);
- COPY_SCALAR_FIELD(sortgroupref);
- COPY_BITMAPSET_FIELD(gv_eval_at);
-
- return newnode;
-}
-
-static SegfileMapNode *
-_copySegfileMapNode(const SegfileMapNode *from)
-{
- SegfileMapNode *newnode = makeNode(SegfileMapNode);
-
- COPY_SCALAR_FIELD(relid);
- COPY_SCALAR_FIELD(segno);
-
- return newnode;
-}
-
-static PlannedStmt *
-_copyPlannedStmt(const PlannedStmt *from)
-{
- PlannedStmt *newnode = makeNode(PlannedStmt);
-
- COPY_SCALAR_FIELD(commandType);
- COPY_SCALAR_FIELD(planGen);
- COPY_SCALAR_FIELD(queryId);
- COPY_SCALAR_FIELD(hasReturning);
- COPY_SCALAR_FIELD(hasModifyingCTE);
- COPY_SCALAR_FIELD(canSetTag);
- COPY_SCALAR_FIELD(transientPlan);
- COPY_SCALAR_FIELD(oneoffPlan);
- COPY_SCALAR_FIELD(simplyUpdatableRel);
- COPY_SCALAR_FIELD(dependsOnRole);
- COPY_SCALAR_FIELD(parallelModeNeeded);
- COPY_SCALAR_FIELD(jitFlags);
- COPY_NODE_FIELD(planTree);
- COPY_SCALAR_FIELD(numSlices);
- newnode->slices = palloc(from->numSlices * sizeof(PlanSlice));
- for (int i = 0; i < from->numSlices; i++)
- {
- COPY_SCALAR_FIELD(slices[i].sliceIndex);
- COPY_SCALAR_FIELD(slices[i].parentIndex);
- COPY_SCALAR_FIELD(slices[i].gangType);
- COPY_SCALAR_FIELD(slices[i].numsegments);
- COPY_SCALAR_FIELD(slices[i].parallel_workers);
- COPY_SCALAR_FIELD(slices[i].segindex);
- COPY_SCALAR_FIELD(slices[i].directDispatch.isDirectDispatch);
- COPY_NODE_FIELD(slices[i].directDispatch.contentIds);
- }
- COPY_NODE_FIELD(rtable);
- COPY_NODE_FIELD(permInfos);
- COPY_NODE_FIELD(resultRelations);
- COPY_NODE_FIELD(appendRelations);
- COPY_NODE_FIELD(subplans);
- COPY_POINTER_FIELD(subplan_sliceIds, list_length(from->subplans) * sizeof(int));
- COPY_BITMAPSET_FIELD(rewindPlanIDs);
- COPY_NODE_FIELD(rowMarks);
- COPY_NODE_FIELD(relationOids);
- COPY_NODE_FIELD(invalItems);
- COPY_NODE_FIELD(paramExecTypes);
- COPY_NODE_FIELD(utilityStmt);
- COPY_LOCATION_FIELD(stmt_location);
- COPY_SCALAR_FIELD(stmt_len);
- COPY_NODE_FIELD(intoPolicy);
- COPY_SCALAR_FIELD(query_mem);
- COPY_NODE_FIELD(intoClause);
- COPY_NODE_FIELD(copyIntoClause);
- COPY_NODE_FIELD(refreshClause);
- COPY_SCALAR_FIELD(metricsQueryType);
- COPY_NODE_FIELD(extensionContext);
-
- return newnode;
-}
-
-static Flow *
-_copyFlow(const Flow *from)
-{
- Flow *newnode = makeNode(Flow);
-
- COPY_SCALAR_FIELD(flotype);
- COPY_SCALAR_FIELD(locustype);
- COPY_SCALAR_FIELD(segindex);
- COPY_SCALAR_FIELD(numsegments);
-
- return newnode;
-}
-
-static Result *
-_copyResult(const Result *from)
-{
- Result *newnode = makeNode(Result);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_NODE_FIELD(resconstantqual);
- COPY_SCALAR_FIELD(numHashFilterCols);
- COPY_POINTER_FIELD(hashFilterColIdx, from->numHashFilterCols * sizeof(int16));
- COPY_POINTER_FIELD(hashFilterFuncs, from->numHashFilterCols * sizeof(Oid));
-
- return newnode;
-}
-
-static ProjectSet *
-_copyProjectSet(const ProjectSet *from)
-{
- ProjectSet *newnode = makeNode(ProjectSet);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
-
- return newnode;
-}
-
-static ModifyTable *
-_copyModifyTable(const ModifyTable *from)
-{
- ModifyTable *newnode = makeNode(ModifyTable);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(operation);
- COPY_SCALAR_FIELD(canSetTag);
- COPY_SCALAR_FIELD(nominalRelation);
- COPY_SCALAR_FIELD(rootRelation);
- COPY_SCALAR_FIELD(partColsUpdated);
- COPY_SCALAR_FIELD(splitUpdate);
- COPY_NODE_FIELD(resultRelations);
- COPY_NODE_FIELD(updateColnosLists);
- COPY_NODE_FIELD(withCheckOptionLists);
- COPY_NODE_FIELD(returningLists);
- COPY_NODE_FIELD(fdwPrivLists);
- COPY_BITMAPSET_FIELD(fdwDirectModifyPlans);
- COPY_NODE_FIELD(rowMarks);
- COPY_SCALAR_FIELD(epqParam);
- COPY_SCALAR_FIELD(onConflictAction);
- COPY_NODE_FIELD(arbiterIndexes);
- COPY_NODE_FIELD(onConflictSet);
- COPY_NODE_FIELD(onConflictCols);
- COPY_NODE_FIELD(onConflictWhere);
- COPY_SCALAR_FIELD(exclRelRTI);
- COPY_NODE_FIELD(exclRelTlist);
- COPY_SCALAR_FIELD(forceTupleRouting);
- COPY_NODE_FIELD(mergeActionLists);
-
- return newnode;
-}
-
-static Append *
-_copyAppend(const Append *from)
-{
- Append *newnode = makeNode(Append);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_BITMAPSET_FIELD(apprelids);
- COPY_NODE_FIELD(appendplans);
- COPY_SCALAR_FIELD(nasyncplans);
- COPY_SCALAR_FIELD(first_partial_plan);
- COPY_NODE_FIELD(part_prune_info);
- COPY_NODE_FIELD(join_prune_paramids);
-
- return newnode;
-}
-
-static MergeAppend *
-_copyMergeAppend(const MergeAppend *from)
-{
- MergeAppend *newnode = makeNode(MergeAppend);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_BITMAPSET_FIELD(apprelids);
- COPY_NODE_FIELD(mergeplans);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool));
- COPY_NODE_FIELD(part_prune_info);
- COPY_NODE_FIELD(join_prune_paramids);
-
- return newnode;
-}
-
-static Sequence *
-_copySequence(const Sequence *from)
-{
- Sequence *newnode = makeNode(Sequence);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_NODE_FIELD(subplans);
-
- return newnode;
-}
-
-static RecursiveUnion *
-_copyRecursiveUnion(const RecursiveUnion *from)
-{
- RecursiveUnion *newnode = makeNode(RecursiveUnion);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(wtParam);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid));
- COPY_SCALAR_FIELD(numGroups);
-
- return newnode;
-}
-
-static BitmapAnd *
-_copyBitmapAnd(const BitmapAnd *from)
-{
- BitmapAnd *newnode = makeNode(BitmapAnd);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_NODE_FIELD(bitmapplans);
-
- return newnode;
-}
-
-static BitmapOr *
-_copyBitmapOr(const BitmapOr *from)
-{
- BitmapOr *newnode = makeNode(BitmapOr);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(isshared);
- COPY_NODE_FIELD(bitmapplans);
-
- return newnode;
-}
-
-static SeqScan *
-_copySeqScan(const SeqScan *from)
-{
- SeqScan *newnode = makeNode(SeqScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
-
- return newnode;
-}
-
-static SampleScan *
-_copySampleScan(const SampleScan *from)
-{
- SampleScan *newnode = makeNode(SampleScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(tablesample);
-
- return newnode;
-}
-
-static IndexScan *
-_copyIndexScan(const IndexScan *from)
-{
- IndexScan *newnode = makeNode(IndexScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_SCALAR_FIELD(indexid);
- COPY_NODE_FIELD(indexqual);
- COPY_NODE_FIELD(indexqualorig);
- COPY_NODE_FIELD(indexorderby);
- COPY_NODE_FIELD(indexorderbyorig);
- COPY_NODE_FIELD(indexorderbyops);
- COPY_SCALAR_FIELD(indexorderdir);
-
- return newnode;
-}
-
-static DynamicIndexScan *
-_copyDynamicIndexScan(const DynamicIndexScan *from)
-{
- DynamicIndexScan *newnode = makeNode(DynamicIndexScan);
-
- COPY_SCALAR_FIELD(indexscan.scan.plan.startup_cost);
- COPY_SCALAR_FIELD(indexscan.scan.plan.total_cost);
- COPY_SCALAR_FIELD(indexscan.scan.plan.plan_rows);
- COPY_SCALAR_FIELD(indexscan.scan.plan.plan_width);
- COPY_SCALAR_FIELD(indexscan.scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(indexscan.scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(indexscan.scan.plan.async_capable);
- COPY_SCALAR_FIELD(indexscan.scan.plan.plan_node_id);
- COPY_NODE_FIELD(indexscan.scan.plan.targetlist);
- COPY_NODE_FIELD(indexscan.scan.plan.qual);
- COPY_NODE_FIELD(indexscan.scan.plan.lefttree);
- COPY_NODE_FIELD(indexscan.scan.plan.righttree);
- COPY_NODE_FIELD(indexscan.scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(indexscan.scan.plan.extParam);
- COPY_BITMAPSET_FIELD(indexscan.scan.plan.allParam);
- COPY_NODE_FIELD(indexscan.scan.plan.flow);
- COPY_SCALAR_FIELD(indexscan.scan.plan.locustype);
- COPY_SCALAR_FIELD(indexscan.scan.plan.parallel);
- COPY_SCALAR_FIELD(indexscan.scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(indexscan.scan.scanrelid);
- COPY_SCALAR_FIELD(indexscan.indexid);
- COPY_NODE_FIELD(indexscan.indexqual);
- COPY_NODE_FIELD(indexscan.indexqualorig);
- COPY_NODE_FIELD(indexscan.indexorderby);
- COPY_NODE_FIELD(indexscan.indexorderbyorig);
- COPY_NODE_FIELD(indexscan.indexorderbyops);
- COPY_SCALAR_FIELD(indexscan.indexorderdir);
- COPY_NODE_FIELD(partOids);
- COPY_NODE_FIELD(part_prune_info);
- COPY_NODE_FIELD(join_prune_paramids);
-
- return newnode;
-}
-
-static IndexOnlyScan *
-_copyIndexOnlyScan(const IndexOnlyScan *from)
-{
- IndexOnlyScan *newnode = makeNode(IndexOnlyScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_SCALAR_FIELD(indexid);
- COPY_NODE_FIELD(indexqual);
- COPY_NODE_FIELD(indexqualorig);
- COPY_NODE_FIELD(recheckqual);
- COPY_NODE_FIELD(indexorderby);
- COPY_NODE_FIELD(indextlist);
- COPY_SCALAR_FIELD(indexorderdir);
-
- return newnode;
-}
-
-static DynamicIndexOnlyScan *
-_copyDynamicIndexOnlyScan(const DynamicIndexOnlyScan *from)
-{
- DynamicIndexOnlyScan *newnode = makeNode(DynamicIndexOnlyScan);
-
- COPY_SCALAR_FIELD(indexscan.scan.plan.startup_cost);
- COPY_SCALAR_FIELD(indexscan.scan.plan.total_cost);
- COPY_SCALAR_FIELD(indexscan.scan.plan.plan_rows);
- COPY_SCALAR_FIELD(indexscan.scan.plan.plan_width);
- COPY_SCALAR_FIELD(indexscan.scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(indexscan.scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(indexscan.scan.plan.async_capable);
- COPY_SCALAR_FIELD(indexscan.scan.plan.plan_node_id);
- COPY_NODE_FIELD(indexscan.scan.plan.targetlist);
- COPY_NODE_FIELD(indexscan.scan.plan.qual);
- COPY_NODE_FIELD(indexscan.scan.plan.lefttree);
- COPY_NODE_FIELD(indexscan.scan.plan.righttree);
- COPY_NODE_FIELD(indexscan.scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(indexscan.scan.plan.extParam);
- COPY_BITMAPSET_FIELD(indexscan.scan.plan.allParam);
- COPY_NODE_FIELD(indexscan.scan.plan.flow);
- COPY_SCALAR_FIELD(indexscan.scan.plan.locustype);
- COPY_SCALAR_FIELD(indexscan.scan.plan.parallel);
- COPY_SCALAR_FIELD(indexscan.scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(indexscan.scan.scanrelid);
- COPY_SCALAR_FIELD(indexscan.indexid);
- COPY_NODE_FIELD(indexscan.indexqual);
- COPY_NODE_FIELD(indexscan.indexqualorig);
- COPY_NODE_FIELD(indexscan.recheckqual);
- COPY_NODE_FIELD(indexscan.indexorderby);
- COPY_NODE_FIELD(indexscan.indextlist);
- COPY_SCALAR_FIELD(indexscan.indexorderdir);
- COPY_NODE_FIELD(partOids);
- COPY_NODE_FIELD(part_prune_info);
- COPY_NODE_FIELD(join_prune_paramids);
-
- return newnode;
-}
-
-static BitmapIndexScan *
-_copyBitmapIndexScan(const BitmapIndexScan *from)
-{
- BitmapIndexScan *newnode = makeNode(BitmapIndexScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_SCALAR_FIELD(indexid);
- COPY_SCALAR_FIELD(isshared);
- COPY_NODE_FIELD(indexqual);
- COPY_NODE_FIELD(indexqualorig);
-
- return newnode;
-}
-
-static DynamicBitmapIndexScan *
-_copyDynamicBitmapIndexScan(const DynamicBitmapIndexScan *from)
-{
- DynamicBitmapIndexScan *newnode = makeNode(DynamicBitmapIndexScan);
-
- COPY_SCALAR_FIELD(biscan.scan.plan.startup_cost);
- COPY_SCALAR_FIELD(biscan.scan.plan.total_cost);
- COPY_SCALAR_FIELD(biscan.scan.plan.plan_rows);
- COPY_SCALAR_FIELD(biscan.scan.plan.plan_width);
- COPY_SCALAR_FIELD(biscan.scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(biscan.scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(biscan.scan.plan.async_capable);
- COPY_SCALAR_FIELD(biscan.scan.plan.plan_node_id);
- COPY_NODE_FIELD(biscan.scan.plan.targetlist);
- COPY_NODE_FIELD(biscan.scan.plan.qual);
- COPY_NODE_FIELD(biscan.scan.plan.lefttree);
- COPY_NODE_FIELD(biscan.scan.plan.righttree);
- COPY_NODE_FIELD(biscan.scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(biscan.scan.plan.extParam);
- COPY_BITMAPSET_FIELD(biscan.scan.plan.allParam);
- COPY_NODE_FIELD(biscan.scan.plan.flow);
- COPY_SCALAR_FIELD(biscan.scan.plan.locustype);
- COPY_SCALAR_FIELD(biscan.scan.plan.parallel);
- COPY_SCALAR_FIELD(biscan.scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(biscan.scan.scanrelid);
- COPY_SCALAR_FIELD(biscan.indexid);
- COPY_SCALAR_FIELD(biscan.isshared);
- COPY_NODE_FIELD(biscan.indexqual);
- COPY_NODE_FIELD(biscan.indexqualorig);
-
- return newnode;
-}
-
-static BitmapHeapScan *
-_copyBitmapHeapScan(const BitmapHeapScan *from)
-{
- BitmapHeapScan *newnode = makeNode(BitmapHeapScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(bitmapqualorig);
-
- return newnode;
-}
-
-static DynamicBitmapHeapScan *
-_copyDynamicBitmapHeapScan(const DynamicBitmapHeapScan *from)
-{
- DynamicBitmapHeapScan *newnode = makeNode(DynamicBitmapHeapScan);
-
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.startup_cost);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.total_cost);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.plan_rows);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.plan_width);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.async_capable);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.plan_node_id);
- COPY_NODE_FIELD(bitmapheapscan.scan.plan.targetlist);
- COPY_NODE_FIELD(bitmapheapscan.scan.plan.qual);
- COPY_NODE_FIELD(bitmapheapscan.scan.plan.lefttree);
- COPY_NODE_FIELD(bitmapheapscan.scan.plan.righttree);
- COPY_NODE_FIELD(bitmapheapscan.scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(bitmapheapscan.scan.plan.extParam);
- COPY_BITMAPSET_FIELD(bitmapheapscan.scan.plan.allParam);
- COPY_NODE_FIELD(bitmapheapscan.scan.plan.flow);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.locustype);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.parallel);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(bitmapheapscan.scan.scanrelid);
- COPY_NODE_FIELD(bitmapheapscan.bitmapqualorig);
- COPY_NODE_FIELD(partOids);
- COPY_NODE_FIELD(part_prune_info);
- COPY_NODE_FIELD(join_prune_paramids);
-
- return newnode;
-}
-
-static DynamicSeqScan *
-_copyDynamicSeqScan(const DynamicSeqScan *from)
-{
- DynamicSeqScan *newnode = makeNode(DynamicSeqScan);
-
- COPY_SCALAR_FIELD(seqscan.scan.plan.startup_cost);
- COPY_SCALAR_FIELD(seqscan.scan.plan.total_cost);
- COPY_SCALAR_FIELD(seqscan.scan.plan.plan_rows);
- COPY_SCALAR_FIELD(seqscan.scan.plan.plan_width);
- COPY_SCALAR_FIELD(seqscan.scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(seqscan.scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(seqscan.scan.plan.async_capable);
- COPY_SCALAR_FIELD(seqscan.scan.plan.plan_node_id);
- COPY_NODE_FIELD(seqscan.scan.plan.targetlist);
- COPY_NODE_FIELD(seqscan.scan.plan.qual);
- COPY_NODE_FIELD(seqscan.scan.plan.lefttree);
- COPY_NODE_FIELD(seqscan.scan.plan.righttree);
- COPY_NODE_FIELD(seqscan.scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(seqscan.scan.plan.extParam);
- COPY_BITMAPSET_FIELD(seqscan.scan.plan.allParam);
- COPY_NODE_FIELD(seqscan.scan.plan.flow);
- COPY_SCALAR_FIELD(seqscan.scan.plan.locustype);
- COPY_SCALAR_FIELD(seqscan.scan.plan.parallel);
- COPY_SCALAR_FIELD(seqscan.scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(seqscan.scan.scanrelid);
- COPY_NODE_FIELD(partOids);
- COPY_NODE_FIELD(part_prune_info);
- COPY_NODE_FIELD(join_prune_paramids);
-
- return newnode;
-}
-
-static TidScan *
-_copyTidScan(const TidScan *from)
-{
- TidScan *newnode = makeNode(TidScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(tidquals);
-
- return newnode;
-}
-
-static TidRangeScan *
-_copyTidRangeScan(const TidRangeScan *from)
-{
- TidRangeScan *newnode = makeNode(TidRangeScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(tidrangequals);
-
- return newnode;
-}
-
-static SubqueryScan *
-_copySubqueryScan(const SubqueryScan *from)
-{
- SubqueryScan *newnode = makeNode(SubqueryScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(subplan);
- COPY_SCALAR_FIELD(scanstatus);
-
- return newnode;
-}
-
-static FunctionScan *
-_copyFunctionScan(const FunctionScan *from)
-{
- FunctionScan *newnode = makeNode(FunctionScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(functions);
- COPY_SCALAR_FIELD(funcordinality);
- COPY_NODE_FIELD(param);
- COPY_SCALAR_FIELD(resultInTupleStore);
- COPY_SCALAR_FIELD(initplanId);
-
- return newnode;
-}
-
-static TableFunctionScan *
-_copyTableFunctionScan(const TableFunctionScan *from)
-{
- TableFunctionScan *newnode = makeNode(TableFunctionScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(function);
-
- return newnode;
-}
-
-static ValuesScan *
-_copyValuesScan(const ValuesScan *from)
-{
- ValuesScan *newnode = makeNode(ValuesScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(values_lists);
-
- return newnode;
-}
-
-static TableFuncScan *
-_copyTableFuncScan(const TableFuncScan *from)
-{
- TableFuncScan *newnode = makeNode(TableFuncScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_NODE_FIELD(tablefunc);
-
- return newnode;
-}
-
-static CteScan *
-_copyCteScan(const CteScan *from)
-{
- CteScan *newnode = makeNode(CteScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_SCALAR_FIELD(ctePlanId);
- COPY_SCALAR_FIELD(cteParam);
-
- return newnode;
-}
-
-static NamedTuplestoreScan *
-_copyNamedTuplestoreScan(const NamedTuplestoreScan *from)
-{
- NamedTuplestoreScan *newnode = makeNode(NamedTuplestoreScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_STRING_FIELD(enrname);
-
- return newnode;
-}
-
-static WorkTableScan *
-_copyWorkTableScan(const WorkTableScan *from)
-{
- WorkTableScan *newnode = makeNode(WorkTableScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_SCALAR_FIELD(wtParam);
-
- return newnode;
-}
-
-static ExternalScanInfo *
-_copyExternalScanInfo(const ExternalScanInfo *from)
-{
- ExternalScanInfo *newnode = makeNode(ExternalScanInfo);
-
- COPY_NODE_FIELD(uriList);
- COPY_SCALAR_FIELD(fmtType);
- COPY_SCALAR_FIELD(isMasterOnly);
- COPY_SCALAR_FIELD(rejLimit);
- COPY_SCALAR_FIELD(rejLimitInRows);
- COPY_SCALAR_FIELD(logErrors);
- COPY_SCALAR_FIELD(encoding);
- COPY_SCALAR_FIELD(scancounter);
- COPY_NODE_FIELD(extOptions);
-
- return newnode;
-}
-
-static ForeignScan *
-_copyForeignScan(const ForeignScan *from)
-{
- ForeignScan *newnode = makeNode(ForeignScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_SCALAR_FIELD(operation);
- COPY_SCALAR_FIELD(resultRelation);
- COPY_SCALAR_FIELD(checkAsUser);
- COPY_SCALAR_FIELD(fs_server);
- COPY_NODE_FIELD(fdw_exprs);
- COPY_NODE_FIELD(fdw_private);
- COPY_NODE_FIELD(fdw_scan_tlist);
- COPY_NODE_FIELD(fdw_recheck_quals);
- COPY_BITMAPSET_FIELD(fs_relids);
- COPY_BITMAPSET_FIELD(fs_base_relids);
- COPY_SCALAR_FIELD(fsSystemCol);
-
- return newnode;
-}
-
-static DynamicForeignScan *
-_copyDynamicForeignScan(const DynamicForeignScan *from)
-{
- DynamicForeignScan *newnode = makeNode(DynamicForeignScan);
-
- COPY_SCALAR_FIELD(foreignscan.scan.plan.startup_cost);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.total_cost);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.plan_rows);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.plan_width);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.async_capable);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.plan_node_id);
- COPY_NODE_FIELD(foreignscan.scan.plan.targetlist);
- COPY_NODE_FIELD(foreignscan.scan.plan.qual);
- COPY_NODE_FIELD(foreignscan.scan.plan.lefttree);
- COPY_NODE_FIELD(foreignscan.scan.plan.righttree);
- COPY_NODE_FIELD(foreignscan.scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(foreignscan.scan.plan.extParam);
- COPY_BITMAPSET_FIELD(foreignscan.scan.plan.allParam);
- COPY_NODE_FIELD(foreignscan.scan.plan.flow);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.locustype);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.parallel);
- COPY_SCALAR_FIELD(foreignscan.scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(foreignscan.scan.scanrelid);
- COPY_SCALAR_FIELD(foreignscan.operation);
- COPY_SCALAR_FIELD(foreignscan.resultRelation);
- COPY_SCALAR_FIELD(foreignscan.checkAsUser);
- COPY_SCALAR_FIELD(foreignscan.fs_server);
- COPY_NODE_FIELD(foreignscan.fdw_exprs);
- COPY_NODE_FIELD(foreignscan.fdw_private);
- COPY_NODE_FIELD(foreignscan.fdw_scan_tlist);
- COPY_NODE_FIELD(foreignscan.fdw_recheck_quals);
- COPY_BITMAPSET_FIELD(foreignscan.fs_relids);
- COPY_BITMAPSET_FIELD(foreignscan.fs_base_relids);
- COPY_SCALAR_FIELD(foreignscan.fsSystemCol);
- COPY_NODE_FIELD(partOids);
- COPY_NODE_FIELD(part_prune_info);
- COPY_NODE_FIELD(join_prune_paramids);
- COPY_NODE_FIELD(fdw_private_list);
-
- return newnode;
-}
-
-static CustomScan *
-_copyCustomScan(const CustomScan *from)
-{
- CustomScan *newnode = makeNode(CustomScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_SCALAR_FIELD(flags);
- COPY_NODE_FIELD(custom_plans);
- COPY_NODE_FIELD(custom_exprs);
- COPY_NODE_FIELD(custom_private);
- COPY_NODE_FIELD(custom_scan_tlist);
- COPY_BITMAPSET_FIELD(custom_relids);
- COPY_SCALAR_FIELD(methods);
-
- return newnode;
-}
-
-static NestLoop *
-_copyNestLoop(const NestLoop *from)
-{
- NestLoop *newnode = makeNode(NestLoop);
-
- COPY_SCALAR_FIELD(join.plan.startup_cost);
- COPY_SCALAR_FIELD(join.plan.total_cost);
- COPY_SCALAR_FIELD(join.plan.plan_rows);
- COPY_SCALAR_FIELD(join.plan.plan_width);
- COPY_SCALAR_FIELD(join.plan.parallel_aware);
- COPY_SCALAR_FIELD(join.plan.parallel_safe);
- COPY_SCALAR_FIELD(join.plan.async_capable);
- COPY_SCALAR_FIELD(join.plan.plan_node_id);
- COPY_NODE_FIELD(join.plan.targetlist);
- COPY_NODE_FIELD(join.plan.qual);
- COPY_NODE_FIELD(join.plan.lefttree);
- COPY_NODE_FIELD(join.plan.righttree);
- COPY_NODE_FIELD(join.plan.initPlan);
- COPY_BITMAPSET_FIELD(join.plan.extParam);
- COPY_BITMAPSET_FIELD(join.plan.allParam);
- COPY_NODE_FIELD(join.plan.flow);
- COPY_SCALAR_FIELD(join.plan.locustype);
- COPY_SCALAR_FIELD(join.plan.parallel);
- COPY_SCALAR_FIELD(join.plan.operatorMemKB);
- COPY_SCALAR_FIELD(join.jointype);
- COPY_SCALAR_FIELD(join.inner_unique);
- COPY_NODE_FIELD(join.joinqual);
- COPY_SCALAR_FIELD(join.prefetch_inner);
- COPY_SCALAR_FIELD(join.prefetch_joinqual);
- COPY_SCALAR_FIELD(join.prefetch_qual);
- COPY_NODE_FIELD(nestParams);
- COPY_SCALAR_FIELD(shared_outer);
- COPY_SCALAR_FIELD(singleton_outer);
-
- return newnode;
-}
-
-static NestLoopParam *
-_copyNestLoopParam(const NestLoopParam *from)
-{
- NestLoopParam *newnode = makeNode(NestLoopParam);
-
- COPY_SCALAR_FIELD(paramno);
- COPY_NODE_FIELD(paramval);
-
- return newnode;
-}
-
-static MergeJoin *
-_copyMergeJoin(const MergeJoin *from)
-{
- MergeJoin *newnode = makeNode(MergeJoin);
-
- COPY_SCALAR_FIELD(join.plan.startup_cost);
- COPY_SCALAR_FIELD(join.plan.total_cost);
- COPY_SCALAR_FIELD(join.plan.plan_rows);
- COPY_SCALAR_FIELD(join.plan.plan_width);
- COPY_SCALAR_FIELD(join.plan.parallel_aware);
- COPY_SCALAR_FIELD(join.plan.parallel_safe);
- COPY_SCALAR_FIELD(join.plan.async_capable);
- COPY_SCALAR_FIELD(join.plan.plan_node_id);
- COPY_NODE_FIELD(join.plan.targetlist);
- COPY_NODE_FIELD(join.plan.qual);
- COPY_NODE_FIELD(join.plan.lefttree);
- COPY_NODE_FIELD(join.plan.righttree);
- COPY_NODE_FIELD(join.plan.initPlan);
- COPY_BITMAPSET_FIELD(join.plan.extParam);
- COPY_BITMAPSET_FIELD(join.plan.allParam);
- COPY_NODE_FIELD(join.plan.flow);
- COPY_SCALAR_FIELD(join.plan.locustype);
- COPY_SCALAR_FIELD(join.plan.parallel);
- COPY_SCALAR_FIELD(join.plan.operatorMemKB);
- COPY_SCALAR_FIELD(join.jointype);
- COPY_SCALAR_FIELD(join.inner_unique);
- COPY_NODE_FIELD(join.joinqual);
- COPY_SCALAR_FIELD(join.prefetch_inner);
- COPY_SCALAR_FIELD(join.prefetch_joinqual);
- COPY_SCALAR_FIELD(join.prefetch_qual);
- COPY_SCALAR_FIELD(skip_mark_restore);
- COPY_NODE_FIELD(mergeclauses);
- COPY_POINTER_FIELD(mergeFamilies, list_length(from->mergeclauses) * sizeof(Oid));
- COPY_POINTER_FIELD(mergeCollations, list_length(from->mergeclauses) * sizeof(Oid));
- COPY_POINTER_FIELD(mergeStrategies, list_length(from->mergeclauses) * sizeof(int));
- COPY_POINTER_FIELD(mergeNullsFirst, list_length(from->mergeclauses) * sizeof(bool));
- COPY_SCALAR_FIELD(unique_outer);
-
- return newnode;
-}
-
-static HashJoin *
-_copyHashJoin(const HashJoin *from)
-{
- HashJoin *newnode = makeNode(HashJoin);
-
- COPY_SCALAR_FIELD(join.plan.startup_cost);
- COPY_SCALAR_FIELD(join.plan.total_cost);
- COPY_SCALAR_FIELD(join.plan.plan_rows);
- COPY_SCALAR_FIELD(join.plan.plan_width);
- COPY_SCALAR_FIELD(join.plan.parallel_aware);
- COPY_SCALAR_FIELD(join.plan.parallel_safe);
- COPY_SCALAR_FIELD(join.plan.async_capable);
- COPY_SCALAR_FIELD(join.plan.plan_node_id);
- COPY_NODE_FIELD(join.plan.targetlist);
- COPY_NODE_FIELD(join.plan.qual);
- COPY_NODE_FIELD(join.plan.lefttree);
- COPY_NODE_FIELD(join.plan.righttree);
- COPY_NODE_FIELD(join.plan.initPlan);
- COPY_BITMAPSET_FIELD(join.plan.extParam);
- COPY_BITMAPSET_FIELD(join.plan.allParam);
- COPY_NODE_FIELD(join.plan.flow);
- COPY_SCALAR_FIELD(join.plan.locustype);
- COPY_SCALAR_FIELD(join.plan.parallel);
- COPY_SCALAR_FIELD(join.plan.operatorMemKB);
- COPY_SCALAR_FIELD(join.jointype);
- COPY_SCALAR_FIELD(join.inner_unique);
- COPY_NODE_FIELD(join.joinqual);
- COPY_SCALAR_FIELD(join.prefetch_inner);
- COPY_SCALAR_FIELD(join.prefetch_joinqual);
- COPY_SCALAR_FIELD(join.prefetch_qual);
- COPY_NODE_FIELD(hashclauses);
- COPY_NODE_FIELD(hashoperators);
- COPY_NODE_FIELD(hashcollations);
- COPY_NODE_FIELD(hashkeys);
- COPY_NODE_FIELD(hashqualclauses);
- COPY_SCALAR_FIELD(batch0_barrier);
- COPY_SCALAR_FIELD(outer_motionhazard);
-
- return newnode;
-}
-
-static ShareInputScan *
-_copyShareInputScan(const ShareInputScan *from)
-{
- ShareInputScan *newnode = makeNode(ShareInputScan);
-
- COPY_SCALAR_FIELD(scan.plan.startup_cost);
- COPY_SCALAR_FIELD(scan.plan.total_cost);
- COPY_SCALAR_FIELD(scan.plan.plan_rows);
- COPY_SCALAR_FIELD(scan.plan.plan_width);
- COPY_SCALAR_FIELD(scan.plan.parallel_aware);
- COPY_SCALAR_FIELD(scan.plan.parallel_safe);
- COPY_SCALAR_FIELD(scan.plan.async_capable);
- COPY_SCALAR_FIELD(scan.plan.plan_node_id);
- COPY_NODE_FIELD(scan.plan.targetlist);
- COPY_NODE_FIELD(scan.plan.qual);
- COPY_NODE_FIELD(scan.plan.lefttree);
- COPY_NODE_FIELD(scan.plan.righttree);
- COPY_NODE_FIELD(scan.plan.initPlan);
- COPY_BITMAPSET_FIELD(scan.plan.extParam);
- COPY_BITMAPSET_FIELD(scan.plan.allParam);
- COPY_NODE_FIELD(scan.plan.flow);
- COPY_SCALAR_FIELD(scan.plan.locustype);
- COPY_SCALAR_FIELD(scan.plan.parallel);
- COPY_SCALAR_FIELD(scan.plan.operatorMemKB);
- COPY_SCALAR_FIELD(scan.scanrelid);
- COPY_SCALAR_FIELD(cross_slice);
- COPY_SCALAR_FIELD(share_id);
- COPY_SCALAR_FIELD(producer_slice_id);
- COPY_SCALAR_FIELD(this_slice_id);
- COPY_SCALAR_FIELD(nconsumers);
- COPY_SCALAR_FIELD(discard_output);
-
- return newnode;
-}
-
-static Material *
-_copyMaterial(const Material *from)
-{
- Material *newnode = makeNode(Material);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(cdb_strict);
- COPY_SCALAR_FIELD(cdb_shield_child_from_rescans);
-
- return newnode;
-}
-
-static Memoize *
-_copyMemoize(const Memoize *from)
-{
- Memoize *newnode = makeNode(Memoize);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(numKeys);
- COPY_POINTER_FIELD(hashOperators, from->numKeys * sizeof(Oid));
- COPY_POINTER_FIELD(collations, from->numKeys * sizeof(Oid));
- COPY_NODE_FIELD(param_exprs);
- COPY_SCALAR_FIELD(singlerow);
- COPY_SCALAR_FIELD(binary_mode);
- COPY_SCALAR_FIELD(est_entries);
- COPY_BITMAPSET_FIELD(keyparamids);
-
- return newnode;
-}
-
-static Sort *
-_copySort(const Sort *from)
-{
- Sort *newnode = makeNode(Sort);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool));
-
- return newnode;
-}
-
-static IncrementalSort *
-_copyIncrementalSort(const IncrementalSort *from)
-{
- IncrementalSort *newnode = makeNode(IncrementalSort);
-
- COPY_SCALAR_FIELD(sort.plan.startup_cost);
- COPY_SCALAR_FIELD(sort.plan.total_cost);
- COPY_SCALAR_FIELD(sort.plan.plan_rows);
- COPY_SCALAR_FIELD(sort.plan.plan_width);
- COPY_SCALAR_FIELD(sort.plan.parallel_aware);
- COPY_SCALAR_FIELD(sort.plan.parallel_safe);
- COPY_SCALAR_FIELD(sort.plan.async_capable);
- COPY_SCALAR_FIELD(sort.plan.plan_node_id);
- COPY_NODE_FIELD(sort.plan.targetlist);
- COPY_NODE_FIELD(sort.plan.qual);
- COPY_NODE_FIELD(sort.plan.lefttree);
- COPY_NODE_FIELD(sort.plan.righttree);
- COPY_NODE_FIELD(sort.plan.initPlan);
- COPY_BITMAPSET_FIELD(sort.plan.extParam);
- COPY_BITMAPSET_FIELD(sort.plan.allParam);
- COPY_NODE_FIELD(sort.plan.flow);
- COPY_SCALAR_FIELD(sort.plan.locustype);
- COPY_SCALAR_FIELD(sort.plan.parallel);
- COPY_SCALAR_FIELD(sort.plan.operatorMemKB);
- COPY_SCALAR_FIELD(sort.numCols);
- COPY_POINTER_FIELD(sort.sortColIdx, from->sort.numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(sort.sortOperators, from->sort.numCols * sizeof(Oid));
- COPY_POINTER_FIELD(sort.collations, from->sort.numCols * sizeof(Oid));
- COPY_POINTER_FIELD(sort.nullsFirst, from->sort.numCols * sizeof(bool));
- COPY_SCALAR_FIELD(nPresortedCols);
-
- return newnode;
-}
-
-static Group *
-_copyGroup(const Group *from)
-{
- Group *newnode = makeNode(Group);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid));
-
- return newnode;
-}
-
-static Agg *
-_copyAgg(const Agg *from)
-{
- Agg *newnode = makeNode(Agg);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(aggstrategy);
- COPY_SCALAR_FIELD(aggsplit);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(grpOperators, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(grpCollations, from->numCols * sizeof(Oid));
- COPY_SCALAR_FIELD(numGroups);
- COPY_SCALAR_FIELD(transitionSpace);
- COPY_BITMAPSET_FIELD(aggParams);
- COPY_NODE_FIELD(groupingSets);
- COPY_NODE_FIELD(chain);
- COPY_SCALAR_FIELD(streaming);
- COPY_SCALAR_FIELD(agg_expr_id);
-
- return newnode;
-}
-
-static TupleSplit *
-_copyTupleSplit(const TupleSplit *from)
-{
- TupleSplit *newnode = makeNode(TupleSplit);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(grpColIdx, from->numCols * sizeof(AttrNumber));
- COPY_NODE_FIELD(dqa_expr_lst);
-
- return newnode;
-}
-
-static WindowAgg *
-_copyWindowAgg(const WindowAgg *from)
-{
- WindowAgg *newnode = makeNode(WindowAgg);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(winref);
- COPY_SCALAR_FIELD(partNumCols);
- COPY_POINTER_FIELD(partColIdx, from->partNumCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(partOperators, from->partNumCols * sizeof(Oid));
- COPY_POINTER_FIELD(partCollations, from->partNumCols * sizeof(Oid));
- COPY_SCALAR_FIELD(ordNumCols);
- COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(ordOperators, from->ordNumCols * sizeof(Oid));
- COPY_POINTER_FIELD(ordCollations, from->ordNumCols * sizeof(Oid));
- COPY_SCALAR_FIELD(frameOptions);
- COPY_NODE_FIELD(startOffset);
- COPY_NODE_FIELD(endOffset);
- COPY_NODE_FIELD(runCondition);
- COPY_NODE_FIELD(runConditionOrig);
- COPY_SCALAR_FIELD(firstOrderCol);
- COPY_SCALAR_FIELD(firstOrderCmpOperator);
- COPY_SCALAR_FIELD(firstOrderNullsFirst);
- COPY_SCALAR_FIELD(startInRangeFunc);
- COPY_SCALAR_FIELD(endInRangeFunc);
- COPY_SCALAR_FIELD(inRangeColl);
- COPY_SCALAR_FIELD(inRangeAsc);
- COPY_SCALAR_FIELD(inRangeNullsFirst);
- COPY_SCALAR_FIELD(topWindow);
-
- return newnode;
-}
-
-static Unique *
-_copyUnique(const Unique *from)
-{
- Unique *newnode = makeNode(Unique);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(uniqColIdx, from->numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(uniqOperators, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(uniqCollations, from->numCols * sizeof(Oid));
-
- return newnode;
-}
-
-static Gather *
-_copyGather(const Gather *from)
-{
- Gather *newnode = makeNode(Gather);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(num_workers);
- COPY_SCALAR_FIELD(rescan_param);
- COPY_SCALAR_FIELD(single_copy);
- COPY_SCALAR_FIELD(invisible);
- COPY_BITMAPSET_FIELD(initParam);
-
- return newnode;
-}
-
-static GatherMerge *
-_copyGatherMerge(const GatherMerge *from)
-{
- GatherMerge *newnode = makeNode(GatherMerge);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(num_workers);
- COPY_SCALAR_FIELD(rescan_param);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(sortColIdx, from->numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(sortOperators, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(collations, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(nullsFirst, from->numCols * sizeof(bool));
- COPY_BITMAPSET_FIELD(initParam);
-
- return newnode;
-}
-
-static Hash *
-_copyHash(const Hash *from)
-{
- Hash *newnode = makeNode(Hash);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_NODE_FIELD(hashkeys);
- COPY_SCALAR_FIELD(skewTable);
- COPY_SCALAR_FIELD(skewColumn);
- COPY_SCALAR_FIELD(skewInherit);
- COPY_SCALAR_FIELD(rows_total);
- COPY_SCALAR_FIELD(rescannable);
- COPY_SCALAR_FIELD(sync_barrier);
-
- return newnode;
-}
-
-static RuntimeFilter *
-_copyRuntimeFilter(const RuntimeFilter *from)
-{
- RuntimeFilter *newnode = makeNode(RuntimeFilter);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
-
- return newnode;
-}
-
-static SetOp *
-_copySetOp(const SetOp *from)
-{
- SetOp *newnode = makeNode(SetOp);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(cmd);
- COPY_SCALAR_FIELD(strategy);
- COPY_SCALAR_FIELD(numCols);
- COPY_POINTER_FIELD(dupColIdx, from->numCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(dupOperators, from->numCols * sizeof(Oid));
- COPY_POINTER_FIELD(dupCollations, from->numCols * sizeof(Oid));
- COPY_SCALAR_FIELD(flagColIdx);
- COPY_SCALAR_FIELD(firstFlag);
- COPY_SCALAR_FIELD(numGroups);
-
- return newnode;
-}
-
-static LockRows *
-_copyLockRows(const LockRows *from)
-{
- LockRows *newnode = makeNode(LockRows);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_NODE_FIELD(rowMarks);
- COPY_SCALAR_FIELD(epqParam);
-
- return newnode;
-}
-
-static Limit *
-_copyLimit(const Limit *from)
-{
- Limit *newnode = makeNode(Limit);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_NODE_FIELD(limitOffset);
- COPY_NODE_FIELD(limitCount);
- COPY_SCALAR_FIELD(limitOption);
- COPY_SCALAR_FIELD(uniqNumCols);
- COPY_POINTER_FIELD(uniqColIdx, from->uniqNumCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(uniqOperators, from->uniqNumCols * sizeof(Oid));
- COPY_POINTER_FIELD(uniqCollations, from->uniqNumCols * sizeof(Oid));
-
- return newnode;
-}
-
-static Motion *
-_copyMotion(const Motion *from)
-{
- Motion *newnode = makeNode(Motion);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(motionType);
- COPY_SCALAR_FIELD(sendSorted);
- COPY_SCALAR_FIELD(motionID);
- COPY_NODE_FIELD(hashExprs);
- COPY_POINTER_FIELD(hashFuncs, list_length(from->hashExprs) * sizeof(Oid));
- COPY_SCALAR_FIELD(numHashSegments);
- COPY_SCALAR_FIELD(segidColIdx);
- COPY_SCALAR_FIELD(numSortCols);
- COPY_POINTER_FIELD(sortColIdx, from->numSortCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(sortOperators, from->numSortCols * sizeof(Oid));
- COPY_POINTER_FIELD(collations, from->numSortCols * sizeof(Oid));
- COPY_POINTER_FIELD(nullsFirst, from->numSortCols * sizeof(bool));
-
- if (from->senderSliceInfo)
- {
- newnode->senderSliceInfo = palloc(sizeof(PlanSlice));
- memcpy(newnode->senderSliceInfo, from->senderSliceInfo, sizeof(PlanSlice));
- }
-
- return newnode;
-}
-
-static SplitUpdate *
-_copySplitUpdate(const SplitUpdate *from)
-{
- SplitUpdate *newnode = makeNode(SplitUpdate);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(actionColIdx);
- COPY_NODE_FIELD(insertColIdx);
- COPY_NODE_FIELD(deleteColIdx);
- COPY_SCALAR_FIELD(numHashAttrs);
- COPY_POINTER_FIELD(hashAttnos, from->numHashAttrs * sizeof(AttrNumber));
- COPY_POINTER_FIELD(hashFuncs, from->numHashAttrs * sizeof(Oid));
- COPY_SCALAR_FIELD(numHashSegments);
-
- return newnode;
-}
-
-static SplitMerge *
-_copySplitMerge(const SplitMerge *from)
-{
- SplitMerge *newnode = makeNode(SplitMerge);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(numHashAttrs);
- COPY_POINTER_FIELD(hashAttnos, from->numHashAttrs * sizeof(AttrNumber));
- COPY_POINTER_FIELD(hashFuncs, from->numHashAttrs * sizeof(Oid));
- COPY_SCALAR_FIELD(numHashSegments);
- COPY_NODE_FIELD(resultRelations);
- COPY_NODE_FIELD(mergeActionLists);
- COPY_SCALAR_FIELD(hasSplitUpdate);
- COPY_SCALAR_FIELD(rootResultRelation);
-
- return newnode;
-}
-
-static AssertOp *
-_copyAssertOp(const AssertOp *from)
-{
- AssertOp *newnode = makeNode(AssertOp);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_SCALAR_FIELD(errcode);
- COPY_NODE_FIELD(errmessage);
-
- return newnode;
-}
-
-static PlanRowMark *
-_copyPlanRowMark(const PlanRowMark *from)
-{
- PlanRowMark *newnode = makeNode(PlanRowMark);
-
- COPY_SCALAR_FIELD(rti);
- COPY_SCALAR_FIELD(prti);
- COPY_SCALAR_FIELD(rowmarkId);
- COPY_SCALAR_FIELD(markType);
- COPY_SCALAR_FIELD(allMarkTypes);
- COPY_SCALAR_FIELD(strength);
- COPY_SCALAR_FIELD(waitPolicy);
- COPY_SCALAR_FIELD(isParent);
-
- return newnode;
-}
-
-static PartitionPruneInfo *
-_copyPartitionPruneInfo(const PartitionPruneInfo *from)
-{
- PartitionPruneInfo *newnode = makeNode(PartitionPruneInfo);
-
- COPY_NODE_FIELD(prune_infos);
- COPY_BITMAPSET_FIELD(other_subplans);
-
- return newnode;
-}
-
-static PartitionedRelPruneInfo *
-_copyPartitionedRelPruneInfo(const PartitionedRelPruneInfo *from)
-{
- PartitionedRelPruneInfo *newnode = makeNode(PartitionedRelPruneInfo);
-
- COPY_SCALAR_FIELD(rtindex);
- COPY_BITMAPSET_FIELD(present_parts);
- COPY_SCALAR_FIELD(nparts);
- COPY_POINTER_FIELD(subplan_map, from->nparts * sizeof(int));
- COPY_POINTER_FIELD(subpart_map, from->nparts * sizeof(int));
- COPY_POINTER_FIELD(relid_map, from->nparts * sizeof(Oid));
- COPY_NODE_FIELD(initial_pruning_steps);
- COPY_NODE_FIELD(exec_pruning_steps);
- COPY_BITMAPSET_FIELD(execparamids);
-
- return newnode;
-}
-
-static PartitionPruneStepOp *
-_copyPartitionPruneStepOp(const PartitionPruneStepOp *from)
-{
- PartitionPruneStepOp *newnode = makeNode(PartitionPruneStepOp);
-
- COPY_SCALAR_FIELD(step.step_id);
- COPY_SCALAR_FIELD(opstrategy);
- COPY_NODE_FIELD(exprs);
- COPY_NODE_FIELD(cmpfns);
- COPY_BITMAPSET_FIELD(nullkeys);
-
- return newnode;
-}
-
-static PartitionPruneStepCombine *
-_copyPartitionPruneStepCombine(const PartitionPruneStepCombine *from)
-{
- PartitionPruneStepCombine *newnode = makeNode(PartitionPruneStepCombine);
-
- COPY_SCALAR_FIELD(step.step_id);
- COPY_SCALAR_FIELD(combineOp);
- COPY_NODE_FIELD(source_stepids);
-
- return newnode;
-}
-
-static PlanInvalItem *
-_copyPlanInvalItem(const PlanInvalItem *from)
-{
- PlanInvalItem *newnode = makeNode(PlanInvalItem);
-
- COPY_SCALAR_FIELD(cacheId);
- COPY_SCALAR_FIELD(hashValue);
-
- return newnode;
-}
-
-static PartitionSelector *
-_copyPartitionSelector(const PartitionSelector *from)
-{
- PartitionSelector *newnode = makeNode(PartitionSelector);
-
- COPY_SCALAR_FIELD(plan.startup_cost);
- COPY_SCALAR_FIELD(plan.total_cost);
- COPY_SCALAR_FIELD(plan.plan_rows);
- COPY_SCALAR_FIELD(plan.plan_width);
- COPY_SCALAR_FIELD(plan.parallel_aware);
- COPY_SCALAR_FIELD(plan.parallel_safe);
- COPY_SCALAR_FIELD(plan.async_capable);
- COPY_SCALAR_FIELD(plan.plan_node_id);
- COPY_NODE_FIELD(plan.targetlist);
- COPY_NODE_FIELD(plan.qual);
- COPY_NODE_FIELD(plan.lefttree);
- COPY_NODE_FIELD(plan.righttree);
- COPY_NODE_FIELD(plan.initPlan);
- COPY_BITMAPSET_FIELD(plan.extParam);
- COPY_BITMAPSET_FIELD(plan.allParam);
- COPY_NODE_FIELD(plan.flow);
- COPY_SCALAR_FIELD(plan.locustype);
- COPY_SCALAR_FIELD(plan.parallel);
- COPY_SCALAR_FIELD(plan.operatorMemKB);
- COPY_NODE_FIELD(part_prune_info);
- COPY_SCALAR_FIELD(paramid);
-
- return newnode;
-}
-
-static Integer *
-_copyInteger(const Integer *from)
-{
- Integer *newnode = makeNode(Integer);
-
- COPY_SCALAR_FIELD(ival);
-
- return newnode;
-}
-
-static Float *
-_copyFloat(const Float *from)
-{
- Float *newnode = makeNode(Float);
-
- COPY_STRING_FIELD(fval);
-
- return newnode;
-}
-
-static Boolean *
-_copyBoolean(const Boolean *from)
-{
- Boolean *newnode = makeNode(Boolean);
-
- COPY_SCALAR_FIELD(boolval);
-
- return newnode;
-}
-
-static String *
-_copyString(const String *from)
-{
- String *newnode = makeNode(String);
-
- COPY_STRING_FIELD(sval);
-
- return newnode;
-}
-
-static BitString *
-_copyBitString(const BitString *from)
-{
- BitString *newnode = makeNode(BitString);
-
- COPY_STRING_FIELD(bsval);
-
- return newnode;
-}
-
-static ForeignKeyCacheInfo *
-_copyForeignKeyCacheInfo(const ForeignKeyCacheInfo *from)
-{
- ForeignKeyCacheInfo *newnode = makeNode(ForeignKeyCacheInfo);
-
- COPY_SCALAR_FIELD(conoid);
- COPY_SCALAR_FIELD(conrelid);
- COPY_SCALAR_FIELD(confrelid);
- COPY_SCALAR_FIELD(nkeys);
- COPY_ARRAY_FIELD(conkey);
- COPY_ARRAY_FIELD(confkey);
- COPY_ARRAY_FIELD(conpfeqop);
-
- return newnode;
-}
-
-static OidAssignment *
-_copyOidAssignment(const OidAssignment *from)
-{
- OidAssignment *newnode = makeNode(OidAssignment);
-
- COPY_SCALAR_FIELD(catalog);
- COPY_STRING_FIELD(objname);
- COPY_SCALAR_FIELD(namespaceOid);
- COPY_SCALAR_FIELD(keyOid1);
- COPY_SCALAR_FIELD(keyOid2);
- COPY_SCALAR_FIELD(oid);
-
- return newnode;
-}
-
-static SliceTable *
-_copySliceTable(const SliceTable *from)
-{
- SliceTable *newnode = makeNode(SliceTable);
-
- COPY_SCALAR_FIELD(localSlice);
- COPY_SCALAR_FIELD(numSlices);
-
- newnode->slices = palloc0(from->numSlices * sizeof(ExecSlice));
- for (int i = 0; i < from->numSlices; i++)
- {
- COPY_SCALAR_FIELD(slices[i].sliceIndex);
- COPY_SCALAR_FIELD(slices[i].rootIndex);
- COPY_SCALAR_FIELD(slices[i].planNumSegments);
- COPY_SCALAR_FIELD(slices[i].gangType);
- COPY_NODE_FIELD(slices[i].segments);
- COPY_SCALAR_FIELD(slices[i].useMppParallelMode);
- COPY_SCALAR_FIELD(slices[i].parallel_workers);
-
- newnode->slices[i].primaryGang = from->slices[i].primaryGang;
- COPY_SCALAR_FIELD(slices[i].parentIndex);
- COPY_NODE_FIELD(slices[i].children);
- COPY_NODE_FIELD(slices[i].primaryProcesses);
- COPY_BITMAPSET_FIELD(slices[i].processesMap);
- }
-
- COPY_SCALAR_FIELD(instrument_options);
- COPY_SCALAR_FIELD(ic_instance_id);
-
- return newnode;
-}
-
-static CdbProcess *
-_copyCdbProcess(const CdbProcess *from)
-{
- CdbProcess *newnode = makeNode(CdbProcess);
-
- COPY_STRING_FIELD(listenerAddr);
- COPY_SCALAR_FIELD(listenerPort);
- COPY_SCALAR_FIELD(pid);
- COPY_SCALAR_FIELD(contentid);
- COPY_SCALAR_FIELD(dbid);
-
- return newnode;
-}
-
-static CursorPosInfo *
-_copyCursorPosInfo(const CursorPosInfo *from)
-{
- CursorPosInfo *newnode = makeNode(CursorPosInfo);
-
- COPY_STRING_FIELD(cursor_name);
- COPY_SCALAR_FIELD(gp_segment_id);
- COPY_BINARY_FIELD(ctid, sizeof(ItemPointerData));
- COPY_SCALAR_FIELD(table_oid);
-
- return newnode;
-}
-
-/*
- * _copyPathTarget
- */
-static PathTarget *
-_copyPathTarget(const PathTarget *from)
-{
- PathTarget *newnode = makeNode(PathTarget);
-
- COPY_NODE_FIELD(exprs);
- if (from->sortgrouprefs)
- {
- int numCols = list_length(from->exprs);
- if (numCols > 0)
- COPY_POINTER_FIELD(sortgrouprefs, numCols * sizeof(Index));
- }
- COPY_SCALAR_FIELD(cost);
- COPY_SCALAR_FIELD(width);
-
- return newnode;
-}
-
-static AlteredTableInfo *
-_copyAlteredTableInfo(const AlteredTableInfo *from)
-{
- int i;
-
- AlteredTableInfo *newnode = makeNode(AlteredTableInfo);
-
- COPY_SCALAR_FIELD(relid);
- COPY_SCALAR_FIELD(relkind);
- newnode->oldDesc = CreateTupleDescCopyConstr(from->oldDesc);
-
- for (i = 0; i < AT_NUM_PASSES; i++)
- COPY_NODE_FIELD(subcmds[i]);
-
- COPY_NODE_FIELD(constraints);
- COPY_NODE_FIELD(newvals);
- COPY_NODE_FIELD(afterStmts);
- COPY_SCALAR_FIELD(verify_new_notnull);
- COPY_SCALAR_FIELD(rewrite);
- COPY_SCALAR_FIELD(dist_opfamily_changed);
- COPY_SCALAR_FIELD(new_opclass);
- COPY_SCALAR_FIELD(newTableSpace);
- COPY_SCALAR_FIELD(chgPersistence);
- COPY_SCALAR_FIELD(newrelpersistence);
- COPY_NODE_FIELD(partition_constraint);
- COPY_SCALAR_FIELD(validate_default);
- COPY_NODE_FIELD(changedConstraintOids);
- COPY_NODE_FIELD(changedConstraintDefs);
- COPY_NODE_FIELD(changedIndexOids);
- COPY_NODE_FIELD(changedIndexDefs);
- COPY_STRING_FIELD(replicaIdentityIndex);
- COPY_STRING_FIELD(clusterOnIndex);
- COPY_NODE_FIELD(beforeStmtLists);
- COPY_NODE_FIELD(constraintLists);
-
- return newnode;
-}
-
-static CookedConstraint *
-_copyCookedConstraint(const CookedConstraint *from)
-{
- CookedConstraint *newnode = makeNode(CookedConstraint);
-
- COPY_SCALAR_FIELD(contype);
- COPY_STRING_FIELD(name);
- COPY_SCALAR_FIELD(attnum);
- COPY_NODE_FIELD(expr);
- COPY_SCALAR_FIELD(is_local);
- COPY_SCALAR_FIELD(inhcount);
- COPY_SCALAR_FIELD(is_no_inherit);
-
- return newnode;
-}
-
-/*
- * CopyPlanFields
- *
- * This function copies the fields of the Plan node. It is used by
- * all the copy functions for classes which inherit from Plan.
- */
-static void
-CopyPlanFields(const Plan *from, Plan *newnode)
-{
- COPY_SCALAR_FIELD(plan_node_id);
-
- COPY_SCALAR_FIELD(startup_cost);
- COPY_SCALAR_FIELD(total_cost);
- COPY_SCALAR_FIELD(plan_rows);
- COPY_SCALAR_FIELD(plan_width);
- COPY_SCALAR_FIELD(parallel_aware);
- COPY_SCALAR_FIELD(parallel_safe);
- COPY_SCALAR_FIELD(async_capable);
- COPY_SCALAR_FIELD(plan_node_id);
- COPY_NODE_FIELD(targetlist);
- COPY_NODE_FIELD(qual);
- COPY_NODE_FIELD(lefttree);
- COPY_NODE_FIELD(righttree);
- COPY_NODE_FIELD(initPlan);
- COPY_BITMAPSET_FIELD(extParam);
- COPY_BITMAPSET_FIELD(allParam);
- COPY_NODE_FIELD(flow);
- COPY_SCALAR_FIELD(locustype);
- COPY_SCALAR_FIELD(parallel);
-
- COPY_SCALAR_FIELD(operatorMemKB);
-}
-
-/*
- * _copyWindowHashAgg
- */
-static WindowHashAgg *
-_copyWindowHashAgg(const WindowHashAgg *from)
-{
- WindowHashAgg *newnode = makeNode(WindowHashAgg);
-
- CopyPlanFields((const Plan *) from, (Plan *) newnode);
-
- COPY_SCALAR_FIELD(winref);
- COPY_SCALAR_FIELD(partNumCols);
- COPY_POINTER_FIELD(partColIdx, from->partNumCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(partOperators, from->partNumCols * sizeof(Oid));
- COPY_POINTER_FIELD(partCollations, from->partNumCols * sizeof(Oid));
- COPY_SCALAR_FIELD(ordNumCols);
-
- if (from->ordNumCols > 0)
- {
- COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber));
- COPY_POINTER_FIELD(ordOperators, from->ordNumCols * sizeof(Oid));
- COPY_POINTER_FIELD(ordCollations, from->ordNumCols * sizeof(Oid));
- COPY_POINTER_FIELD(ordNullsFirst, from->ordNumCols * sizeof(bool));
- }
-
- COPY_SCALAR_FIELD(frameOptions);
- COPY_NODE_FIELD(startOffset);
- COPY_NODE_FIELD(endOffset);
- COPY_SCALAR_FIELD(startInRangeFunc);
- COPY_SCALAR_FIELD(endInRangeFunc);
- COPY_SCALAR_FIELD(inRangeColl);
- COPY_SCALAR_FIELD(inRangeAsc);
- COPY_SCALAR_FIELD(inRangeNullsFirst);
-
- return newnode;
-}
diff --git a/src/backend/nodes/copyfuncs.switch.c b/src/backend/nodes/copyfuncs.switch.c
deleted file mode 100644
index 69dcef19150..00000000000
--- a/src/backend/nodes/copyfuncs.switch.c
+++ /dev/null
@@ -1,1201 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * copyfuncs.switch.c
- * Generated node infrastructure code
- *
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * NOTES
- * ******************************
- * *** DO NOT EDIT THIS FILE! ***
- * ******************************
- *
- * It has been GENERATED by src/backend/nodes/gen_node_support.pl
- *
- *-------------------------------------------------------------------------
- */
- case T_GpPolicy:
- retval = _copyGpPolicy(from);
- break;
- case T_Alias:
- retval = _copyAlias(from);
- break;
- case T_RangeVar:
- retval = _copyRangeVar(from);
- break;
- case T_TableFunc:
- retval = _copyTableFunc(from);
- break;
- case T_IntoClause:
- retval = _copyIntoClause(from);
- break;
- case T_CopyIntoClause:
- retval = _copyCopyIntoClause(from);
- break;
- case T_RefreshClause:
- retval = _copyRefreshClause(from);
- break;
- case T_Var:
- retval = _copyVar(from);
- break;
- case T_Const:
- retval = _copyConst(from);
- break;
- case T_Param:
- retval = _copyParam(from);
- break;
- case T_Aggref:
- retval = _copyAggref(from);
- break;
- case T_GroupId:
- retval = _copyGroupId(from);
- break;
- case T_GroupingSetId:
- retval = _copyGroupingSetId(from);
- break;
- case T_AggExprId:
- retval = _copyAggExprId(from);
- break;
- case T_RowIdExpr:
- retval = _copyRowIdExpr(from);
- break;
- case T_GroupingFunc:
- retval = _copyGroupingFunc(from);
- break;
- case T_WindowFunc:
- retval = _copyWindowFunc(from);
- break;
- case T_SubscriptingRef:
- retval = _copySubscriptingRef(from);
- break;
- case T_FuncExpr:
- retval = _copyFuncExpr(from);
- break;
- case T_NamedArgExpr:
- retval = _copyNamedArgExpr(from);
- break;
- case T_OpExpr:
- retval = _copyOpExpr(from);
- break;
- case T_DistinctExpr:
- retval = _copyDistinctExpr(from);
- break;
- case T_NullIfExpr:
- retval = _copyNullIfExpr(from);
- break;
- case T_ScalarArrayOpExpr:
- retval = _copyScalarArrayOpExpr(from);
- break;
- case T_BoolExpr:
- retval = _copyBoolExpr(from);
- break;
- case T_TableValueExpr:
- retval = _copyTableValueExpr(from);
- break;
- case T_SubLink:
- retval = _copySubLink(from);
- break;
- case T_SubPlan:
- retval = _copySubPlan(from);
- break;
- case T_AlternativeSubPlan:
- retval = _copyAlternativeSubPlan(from);
- break;
- case T_FieldSelect:
- retval = _copyFieldSelect(from);
- break;
- case T_FieldStore:
- retval = _copyFieldStore(from);
- break;
- case T_RelabelType:
- retval = _copyRelabelType(from);
- break;
- case T_CoerceViaIO:
- retval = _copyCoerceViaIO(from);
- break;
- case T_ArrayCoerceExpr:
- retval = _copyArrayCoerceExpr(from);
- break;
- case T_ConvertRowtypeExpr:
- retval = _copyConvertRowtypeExpr(from);
- break;
- case T_CollateExpr:
- retval = _copyCollateExpr(from);
- break;
- case T_CaseExpr:
- retval = _copyCaseExpr(from);
- break;
- case T_CaseWhen:
- retval = _copyCaseWhen(from);
- break;
- case T_CaseTestExpr:
- retval = _copyCaseTestExpr(from);
- break;
- case T_ArrayExpr:
- retval = _copyArrayExpr(from);
- break;
- case T_RowExpr:
- retval = _copyRowExpr(from);
- break;
- case T_RowCompareExpr:
- retval = _copyRowCompareExpr(from);
- break;
- case T_CoalesceExpr:
- retval = _copyCoalesceExpr(from);
- break;
- case T_MinMaxExpr:
- retval = _copyMinMaxExpr(from);
- break;
- case T_SQLValueFunction:
- retval = _copySQLValueFunction(from);
- break;
- case T_XmlExpr:
- retval = _copyXmlExpr(from);
- break;
- case T_JsonFormat:
- retval = _copyJsonFormat(from);
- break;
- case T_JsonReturning:
- retval = _copyJsonReturning(from);
- break;
- case T_JsonValueExpr:
- retval = _copyJsonValueExpr(from);
- break;
- case T_JsonConstructorExpr:
- retval = _copyJsonConstructorExpr(from);
- break;
- case T_JsonIsPredicate:
- retval = _copyJsonIsPredicate(from);
- break;
- case T_NullTest:
- retval = _copyNullTest(from);
- break;
- case T_BooleanTest:
- retval = _copyBooleanTest(from);
- break;
- case T_CoerceToDomain:
- retval = _copyCoerceToDomain(from);
- break;
- case T_CoerceToDomainValue:
- retval = _copyCoerceToDomainValue(from);
- break;
- case T_SetToDefault:
- retval = _copySetToDefault(from);
- break;
- case T_CurrentOfExpr:
- retval = _copyCurrentOfExpr(from);
- break;
- case T_NextValueExpr:
- retval = _copyNextValueExpr(from);
- break;
- case T_InferenceElem:
- retval = _copyInferenceElem(from);
- break;
- case T_TargetEntry:
- retval = _copyTargetEntry(from);
- break;
- case T_RangeTblRef:
- retval = _copyRangeTblRef(from);
- break;
- case T_JoinExpr:
- retval = _copyJoinExpr(from);
- break;
- case T_FromExpr:
- retval = _copyFromExpr(from);
- break;
- case T_OnConflictExpr:
- retval = _copyOnConflictExpr(from);
- break;
- case T_DMLActionExpr:
- retval = _copyDMLActionExpr(from);
- break;
- case T_Query:
- retval = _copyQuery(from);
- break;
- case T_TypeName:
- retval = _copyTypeName(from);
- break;
- case T_ColumnRef:
- retval = _copyColumnRef(from);
- break;
- case T_ParamRef:
- retval = _copyParamRef(from);
- break;
- case T_A_Expr:
- retval = _copyA_Expr(from);
- break;
- case T_A_Const:
- retval = _copyA_Const(from);
- break;
- case T_TypeCast:
- retval = _copyTypeCast(from);
- break;
- case T_CollateClause:
- retval = _copyCollateClause(from);
- break;
- case T_RoleSpec:
- retval = _copyRoleSpec(from);
- break;
- case T_FuncCall:
- retval = _copyFuncCall(from);
- break;
- case T_A_Star:
- retval = _copyA_Star(from);
- break;
- case T_A_Indices:
- retval = _copyA_Indices(from);
- break;
- case T_A_Indirection:
- retval = _copyA_Indirection(from);
- break;
- case T_A_ArrayExpr:
- retval = _copyA_ArrayExpr(from);
- break;
- case T_ResTarget:
- retval = _copyResTarget(from);
- break;
- case T_MultiAssignRef:
- retval = _copyMultiAssignRef(from);
- break;
- case T_SortBy:
- retval = _copySortBy(from);
- break;
- case T_WindowDef:
- retval = _copyWindowDef(from);
- break;
- case T_RangeSubselect:
- retval = _copyRangeSubselect(from);
- break;
- case T_RangeFunction:
- retval = _copyRangeFunction(from);
- break;
- case T_RangeTableFunc:
- retval = _copyRangeTableFunc(from);
- break;
- case T_RangeTableFuncCol:
- retval = _copyRangeTableFuncCol(from);
- break;
- case T_RangeTableSample:
- retval = _copyRangeTableSample(from);
- break;
- case T_ColumnDef:
- retval = _copyColumnDef(from);
- break;
- case T_TableLikeClause:
- retval = _copyTableLikeClause(from);
- break;
- case T_IndexElem:
- retval = _copyIndexElem(from);
- break;
- case T_ColumnReferenceStorageDirective:
- retval = _copyColumnReferenceStorageDirective(from);
- break;
- case T_DefElem:
- retval = _copyDefElem(from);
- break;
- case T_LockingClause:
- retval = _copyLockingClause(from);
- break;
- case T_XmlSerialize:
- retval = _copyXmlSerialize(from);
- break;
- case T_DistributionKeyElem:
- retval = _copyDistributionKeyElem(from);
- break;
- case T_PartitionElem:
- retval = _copyPartitionElem(from);
- break;
- case T_PartitionSpec:
- retval = _copyPartitionSpec(from);
- break;
- case T_PartitionBoundSpec:
- retval = _copyPartitionBoundSpec(from);
- break;
- case T_PartitionRangeDatum:
- retval = _copyPartitionRangeDatum(from);
- break;
- case T_PartitionCmd:
- retval = _copyPartitionCmd(from);
- break;
- case T_RangeTblEntry:
- retval = _copyRangeTblEntry(from);
- break;
- case T_RTEPermissionInfo:
- retval = _copyRTEPermissionInfo(from);
- break;
- case T_RangeTblFunction:
- retval = _copyRangeTblFunction(from);
- break;
- case T_TableSampleClause:
- retval = _copyTableSampleClause(from);
- break;
- case T_WithCheckOption:
- retval = _copyWithCheckOption(from);
- break;
- case T_SortGroupClause:
- retval = _copySortGroupClause(from);
- break;
- case T_GroupingSet:
- retval = _copyGroupingSet(from);
- break;
- case T_WindowClause:
- retval = _copyWindowClause(from);
- break;
- case T_RowMarkClause:
- retval = _copyRowMarkClause(from);
- break;
- case T_WithClause:
- retval = _copyWithClause(from);
- break;
- case T_InferClause:
- retval = _copyInferClause(from);
- break;
- case T_OnConflictClause:
- retval = _copyOnConflictClause(from);
- break;
- case T_CTESearchClause:
- retval = _copyCTESearchClause(from);
- break;
- case T_CTECycleClause:
- retval = _copyCTECycleClause(from);
- break;
- case T_CommonTableExpr:
- retval = _copyCommonTableExpr(from);
- break;
- case T_MergeWhenClause:
- retval = _copyMergeWhenClause(from);
- break;
- case T_MergeAction:
- retval = _copyMergeAction(from);
- break;
- case T_TriggerTransition:
- retval = _copyTriggerTransition(from);
- break;
- case T_JsonOutput:
- retval = _copyJsonOutput(from);
- break;
- case T_JsonKeyValue:
- retval = _copyJsonKeyValue(from);
- break;
- case T_JsonObjectConstructor:
- retval = _copyJsonObjectConstructor(from);
- break;
- case T_JsonArrayConstructor:
- retval = _copyJsonArrayConstructor(from);
- break;
- case T_JsonArrayQueryConstructor:
- retval = _copyJsonArrayQueryConstructor(from);
- break;
- case T_JsonAggConstructor:
- retval = _copyJsonAggConstructor(from);
- break;
- case T_JsonObjectAgg:
- retval = _copyJsonObjectAgg(from);
- break;
- case T_JsonArrayAgg:
- retval = _copyJsonArrayAgg(from);
- break;
- case T_RawStmt:
- retval = _copyRawStmt(from);
- break;
- case T_InsertStmt:
- retval = _copyInsertStmt(from);
- break;
- case T_DeleteStmt:
- retval = _copyDeleteStmt(from);
- break;
- case T_UpdateStmt:
- retval = _copyUpdateStmt(from);
- break;
- case T_MergeStmt:
- retval = _copyMergeStmt(from);
- break;
- case T_DistributedBy:
- retval = _copyDistributedBy(from);
- break;
- case T_SelectStmt:
- retval = _copySelectStmt(from);
- break;
- case T_SetOperationStmt:
- retval = _copySetOperationStmt(from);
- break;
- case T_ReturnStmt:
- retval = _copyReturnStmt(from);
- break;
- case T_PLAssignStmt:
- retval = _copyPLAssignStmt(from);
- break;
- case T_CreateSchemaStmt:
- retval = _copyCreateSchemaStmt(from);
- break;
- case T_AlterSchemaStmt:
- retval = _copyAlterSchemaStmt(from);
- break;
- case T_CreateTagStmt:
- retval = _copyCreateTagStmt(from);
- break;
- case T_CompoundUtilityStmt:
- retval = _copyCompoundUtilityStmt(from);
- break;
- case T_AlterTableStmt:
- retval = _copyAlterTableStmt(from);
- break;
- case T_AlterTagStmt:
- retval = _copyAlterTagStmt(from);
- break;
- case T_ReplicaIdentityStmt:
- retval = _copyReplicaIdentityStmt(from);
- break;
- case T_AlterTableCmd:
- retval = _copyAlterTableCmd(from);
- break;
- case T_GpAlterPartitionId:
- retval = _copyGpAlterPartitionId(from);
- break;
- case T_GpDropPartitionCmd:
- retval = _copyGpDropPartitionCmd(from);
- break;
- case T_GpAlterPartitionCmd:
- retval = _copyGpAlterPartitionCmd(from);
- break;
- case T_GpPartitionRangeItem:
- retval = _copyGpPartitionRangeItem(from);
- break;
- case T_GpSplitPartitionCmd:
- retval = _copyGpSplitPartitionCmd(from);
- break;
- case T_AlterCollationStmt:
- retval = _copyAlterCollationStmt(from);
- break;
- case T_AlterDomainStmt:
- retval = _copyAlterDomainStmt(from);
- break;
- case T_GrantStmt:
- retval = _copyGrantStmt(from);
- break;
- case T_ObjectWithArgs:
- retval = _copyObjectWithArgs(from);
- break;
- case T_AccessPriv:
- retval = _copyAccessPriv(from);
- break;
- case T_GrantRoleStmt:
- retval = _copyGrantRoleStmt(from);
- break;
- case T_SingleRowErrorDesc:
- retval = _copySingleRowErrorDesc(from);
- break;
- case T_AlterDefaultPrivilegesStmt:
- retval = _copyAlterDefaultPrivilegesStmt(from);
- break;
- case T_CopyStmt:
- retval = _copyCopyStmt(from);
- break;
- case T_VariableSetStmt:
- retval = _copyVariableSetStmt(from);
- break;
- case T_VariableShowStmt:
- retval = _copyVariableShowStmt(from);
- break;
- case T_CreateStmt:
- retval = _copyCreateStmt(from);
- break;
- case T_ExtTableTypeDesc:
- retval = _copyExtTableTypeDesc(from);
- break;
- case T_CreateExternalStmt:
- retval = _copyCreateExternalStmt(from);
- break;
- case T_CreateForeignStmt:
- retval = _copyCreateForeignStmt(from);
- break;
- case T_Constraint:
- retval = _copyConstraint(from);
- break;
- case T_GpPartDefElem:
- retval = _copyGpPartDefElem(from);
- break;
- case T_GpPartitionRangeSpec:
- retval = _copyGpPartitionRangeSpec(from);
- break;
- case T_GpPartitionListSpec:
- retval = _copyGpPartitionListSpec(from);
- break;
- case T_GpPartitionDefinition:
- retval = _copyGpPartitionDefinition(from);
- break;
- case T_CreateTableSpaceStmt:
- retval = _copyCreateTableSpaceStmt(from);
- break;
- case T_DropTableSpaceStmt:
- retval = _copyDropTableSpaceStmt(from);
- break;
- case T_AlterTableSpaceOptionsStmt:
- retval = _copyAlterTableSpaceOptionsStmt(from);
- break;
- case T_AlterTableMoveAllStmt:
- retval = _copyAlterTableMoveAllStmt(from);
- break;
- case T_DropTagStmt:
- retval = _copyDropTagStmt(from);
- break;
- case T_CreateTaskStmt:
- retval = _copyCreateTaskStmt(from);
- break;
- case T_AlterTaskStmt:
- retval = _copyAlterTaskStmt(from);
- break;
- case T_DropTaskStmt:
- retval = _copyDropTaskStmt(from);
- break;
- case T_CreateExtensionStmt:
- retval = _copyCreateExtensionStmt(from);
- break;
- case T_AlterExtensionStmt:
- retval = _copyAlterExtensionStmt(from);
- break;
- case T_AlterExtensionContentsStmt:
- retval = _copyAlterExtensionContentsStmt(from);
- break;
- case T_CreateFdwStmt:
- retval = _copyCreateFdwStmt(from);
- break;
- case T_AlterFdwStmt:
- retval = _copyAlterFdwStmt(from);
- break;
- case T_CreateForeignServerStmt:
- retval = _copyCreateForeignServerStmt(from);
- break;
- case T_AlterForeignServerStmt:
- retval = _copyAlterForeignServerStmt(from);
- break;
- case T_CreateStorageServerStmt:
- retval = _copyCreateStorageServerStmt(from);
- break;
- case T_AlterStorageServerStmt:
- retval = _copyAlterStorageServerStmt(from);
- break;
- case T_DropStorageServerStmt:
- retval = _copyDropStorageServerStmt(from);
- break;
- case T_CreateForeignTableStmt:
- retval = _copyCreateForeignTableStmt(from);
- break;
- case T_CreateUserMappingStmt:
- retval = _copyCreateUserMappingStmt(from);
- break;
- case T_AlterUserMappingStmt:
- retval = _copyAlterUserMappingStmt(from);
- break;
- case T_DropUserMappingStmt:
- retval = _copyDropUserMappingStmt(from);
- break;
- case T_CreateStorageUserMappingStmt:
- retval = _copyCreateStorageUserMappingStmt(from);
- break;
- case T_AlterStorageUserMappingStmt:
- retval = _copyAlterStorageUserMappingStmt(from);
- break;
- case T_DropStorageUserMappingStmt:
- retval = _copyDropStorageUserMappingStmt(from);
- break;
- case T_ImportForeignSchemaStmt:
- retval = _copyImportForeignSchemaStmt(from);
- break;
- case T_AddForeignSegStmt:
- retval = _copyAddForeignSegStmt(from);
- break;
- case T_CreatePolicyStmt:
- retval = _copyCreatePolicyStmt(from);
- break;
- case T_AlterPolicyStmt:
- retval = _copyAlterPolicyStmt(from);
- break;
- case T_CreateAmStmt:
- retval = _copyCreateAmStmt(from);
- break;
- case T_CreateTrigStmt:
- retval = _copyCreateTrigStmt(from);
- break;
- case T_CreateEventTrigStmt:
- retval = _copyCreateEventTrigStmt(from);
- break;
- case T_AlterEventTrigStmt:
- retval = _copyAlterEventTrigStmt(from);
- break;
- case T_CreatePLangStmt:
- retval = _copyCreatePLangStmt(from);
- break;
- case T_CreateQueueStmt:
- retval = _copyCreateQueueStmt(from);
- break;
- case T_AlterQueueStmt:
- retval = _copyAlterQueueStmt(from);
- break;
- case T_DropQueueStmt:
- retval = _copyDropQueueStmt(from);
- break;
- case T_CreateResourceGroupStmt:
- retval = _copyCreateResourceGroupStmt(from);
- break;
- case T_DropResourceGroupStmt:
- retval = _copyDropResourceGroupStmt(from);
- break;
- case T_AlterResourceGroupStmt:
- retval = _copyAlterResourceGroupStmt(from);
- break;
- case T_CreateRoleStmt:
- retval = _copyCreateRoleStmt(from);
- break;
- case T_AlterRoleStmt:
- retval = _copyAlterRoleStmt(from);
- break;
- case T_AlterRoleSetStmt:
- retval = _copyAlterRoleSetStmt(from);
- break;
- case T_DropRoleStmt:
- retval = _copyDropRoleStmt(from);
- break;
- case T_CreateProfileStmt:
- retval = _copyCreateProfileStmt(from);
- break;
- case T_AlterProfileStmt:
- retval = _copyAlterProfileStmt(from);
- break;
- case T_DropProfileStmt:
- retval = _copyDropProfileStmt(from);
- break;
- case T_DenyLoginPoint:
- retval = _copyDenyLoginPoint(from);
- break;
- case T_DenyLoginInterval:
- retval = _copyDenyLoginInterval(from);
- break;
- case T_CreateSeqStmt:
- retval = _copyCreateSeqStmt(from);
- break;
- case T_AlterSeqStmt:
- retval = _copyAlterSeqStmt(from);
- break;
- case T_DefineStmt:
- retval = _copyDefineStmt(from);
- break;
- case T_CreateDomainStmt:
- retval = _copyCreateDomainStmt(from);
- break;
- case T_CreateOpClassStmt:
- retval = _copyCreateOpClassStmt(from);
- break;
- case T_CreateOpClassItem:
- retval = _copyCreateOpClassItem(from);
- break;
- case T_CreateOpFamilyStmt:
- retval = _copyCreateOpFamilyStmt(from);
- break;
- case T_AlterOpFamilyStmt:
- retval = _copyAlterOpFamilyStmt(from);
- break;
- case T_CreateDirectoryTableStmt:
- retval = _copyCreateDirectoryTableStmt(from);
- break;
- case T_AlterDirectoryTableStmt:
- retval = _copyAlterDirectoryTableStmt(from);
- break;
- case T_DropStmt:
- retval = _copyDropStmt(from);
- break;
- case T_DropDirectoryTableStmt:
- retval = _copyDropDirectoryTableStmt(from);
- break;
- case T_TruncateStmt:
- retval = _copyTruncateStmt(from);
- break;
- case T_CommentStmt:
- retval = _copyCommentStmt(from);
- break;
- case T_SecLabelStmt:
- retval = _copySecLabelStmt(from);
- break;
- case T_DeclareCursorStmt:
- retval = _copyDeclareCursorStmt(from);
- break;
- case T_ClosePortalStmt:
- retval = _copyClosePortalStmt(from);
- break;
- case T_FetchStmt:
- retval = _copyFetchStmt(from);
- break;
- case T_IndexStmt:
- retval = _copyIndexStmt(from);
- break;
- case T_CreateStatsStmt:
- retval = _copyCreateStatsStmt(from);
- break;
- case T_StatsElem:
- retval = _copyStatsElem(from);
- break;
- case T_AlterStatsStmt:
- retval = _copyAlterStatsStmt(from);
- break;
- case T_CreateFunctionStmt:
- retval = _copyCreateFunctionStmt(from);
- break;
- case T_FunctionParameter:
- retval = _copyFunctionParameter(from);
- break;
- case T_AlterFunctionStmt:
- retval = _copyAlterFunctionStmt(from);
- break;
- case T_DoStmt:
- retval = _copyDoStmt(from);
- break;
- case T_CallStmt:
- retval = _copyCallStmt(from);
- break;
- case T_RenameStmt:
- retval = _copyRenameStmt(from);
- break;
- case T_AlterObjectDependsStmt:
- retval = _copyAlterObjectDependsStmt(from);
- break;
- case T_AlterObjectSchemaStmt:
- retval = _copyAlterObjectSchemaStmt(from);
- break;
- case T_AlterOwnerStmt:
- retval = _copyAlterOwnerStmt(from);
- break;
- case T_AlterOperatorStmt:
- retval = _copyAlterOperatorStmt(from);
- break;
- case T_AlterTypeStmt:
- retval = _copyAlterTypeStmt(from);
- break;
- case T_RuleStmt:
- retval = _copyRuleStmt(from);
- break;
- case T_NotifyStmt:
- retval = _copyNotifyStmt(from);
- break;
- case T_ListenStmt:
- retval = _copyListenStmt(from);
- break;
- case T_UnlistenStmt:
- retval = _copyUnlistenStmt(from);
- break;
- case T_TransactionStmt:
- retval = _copyTransactionStmt(from);
- break;
- case T_CompositeTypeStmt:
- retval = _copyCompositeTypeStmt(from);
- break;
- case T_CreateEnumStmt:
- retval = _copyCreateEnumStmt(from);
- break;
- case T_CreateRangeStmt:
- retval = _copyCreateRangeStmt(from);
- break;
- case T_AlterEnumStmt:
- retval = _copyAlterEnumStmt(from);
- break;
- case T_ViewStmt:
- retval = _copyViewStmt(from);
- break;
- case T_LoadStmt:
- retval = _copyLoadStmt(from);
- break;
- case T_CreatedbStmt:
- retval = _copyCreatedbStmt(from);
- break;
- case T_AlterDatabaseStmt:
- retval = _copyAlterDatabaseStmt(from);
- break;
- case T_AlterDatabaseRefreshCollStmt:
- retval = _copyAlterDatabaseRefreshCollStmt(from);
- break;
- case T_AlterDatabaseSetStmt:
- retval = _copyAlterDatabaseSetStmt(from);
- break;
- case T_DropdbStmt:
- retval = _copyDropdbStmt(from);
- break;
- case T_AlterSystemStmt:
- retval = _copyAlterSystemStmt(from);
- break;
- case T_ClusterStmt:
- retval = _copyClusterStmt(from);
- break;
- case T_VacuumStmt:
- retval = _copyVacuumStmt(from);
- break;
- case T_VacuumRelation:
- retval = _copyVacuumRelation(from);
- break;
- case T_ExplainStmt:
- retval = _copyExplainStmt(from);
- break;
- case T_CreateTableAsStmt:
- retval = _copyCreateTableAsStmt(from);
- break;
- case T_RefreshMatViewStmt:
- retval = _copyRefreshMatViewStmt(from);
- break;
- case T_CheckPointStmt:
- retval = _copyCheckPointStmt(from);
- break;
- case T_DiscardStmt:
- retval = _copyDiscardStmt(from);
- break;
- case T_LockStmt:
- retval = _copyLockStmt(from);
- break;
- case T_ConstraintsSetStmt:
- retval = _copyConstraintsSetStmt(from);
- break;
- case T_ReindexIndexInfo:
- retval = _copyReindexIndexInfo(from);
- break;
- case T_ReindexStmt:
- retval = _copyReindexStmt(from);
- break;
- case T_CreateConversionStmt:
- retval = _copyCreateConversionStmt(from);
- break;
- case T_CreateCastStmt:
- retval = _copyCreateCastStmt(from);
- break;
- case T_CreateTransformStmt:
- retval = _copyCreateTransformStmt(from);
- break;
- case T_PrepareStmt:
- retval = _copyPrepareStmt(from);
- break;
- case T_ExecuteStmt:
- retval = _copyExecuteStmt(from);
- break;
- case T_DeallocateStmt:
- retval = _copyDeallocateStmt(from);
- break;
- case T_DropOwnedStmt:
- retval = _copyDropOwnedStmt(from);
- break;
- case T_ReassignOwnedStmt:
- retval = _copyReassignOwnedStmt(from);
- break;
- case T_AlterTSDictionaryStmt:
- retval = _copyAlterTSDictionaryStmt(from);
- break;
- case T_AlterTSConfigurationStmt:
- retval = _copyAlterTSConfigurationStmt(from);
- break;
- case T_PublicationTable:
- retval = _copyPublicationTable(from);
- break;
- case T_PublicationObjSpec:
- retval = _copyPublicationObjSpec(from);
- break;
- case T_CreatePublicationStmt:
- retval = _copyCreatePublicationStmt(from);
- break;
- case T_AlterPublicationStmt:
- retval = _copyAlterPublicationStmt(from);
- break;
- case T_CreateSubscriptionStmt:
- retval = _copyCreateSubscriptionStmt(from);
- break;
- case T_AlterSubscriptionStmt:
- retval = _copyAlterSubscriptionStmt(from);
- break;
- case T_DropSubscriptionStmt:
- retval = _copyDropSubscriptionStmt(from);
- break;
- case T_RetrieveStmt:
- retval = _copyRetrieveStmt(from);
- break;
- case T_CreateWarehouseStmt:
- retval = _copyCreateWarehouseStmt(from);
- break;
- case T_DropWarehouseStmt:
- retval = _copyDropWarehouseStmt(from);
- break;
- case T_PathKey:
- retval = _copyPathKey(from);
- break;
- case T_DistributionKey:
- retval = _copyDistributionKey(from);
- break;
- case T_RestrictInfo:
- retval = _copyRestrictInfo(from);
- break;
- case T_PlaceHolderVar:
- retval = _copyPlaceHolderVar(from);
- break;
- case T_SpecialJoinInfo:
- retval = _copySpecialJoinInfo(from);
- break;
- case T_AppendRelInfo:
- retval = _copyAppendRelInfo(from);
- break;
- case T_PlaceHolderInfo:
- retval = _copyPlaceHolderInfo(from);
- break;
- case T_GroupedVarInfo:
- retval = _copyGroupedVarInfo(from);
- break;
- case T_SegfileMapNode:
- retval = _copySegfileMapNode(from);
- break;
- case T_PlannedStmt:
- retval = _copyPlannedStmt(from);
- break;
- case T_Flow:
- retval = _copyFlow(from);
- break;
- case T_Result:
- retval = _copyResult(from);
- break;
- case T_ProjectSet:
- retval = _copyProjectSet(from);
- break;
- case T_ModifyTable:
- retval = _copyModifyTable(from);
- break;
- case T_Append:
- retval = _copyAppend(from);
- break;
- case T_MergeAppend:
- retval = _copyMergeAppend(from);
- break;
- case T_Sequence:
- retval = _copySequence(from);
- break;
- case T_RecursiveUnion:
- retval = _copyRecursiveUnion(from);
- break;
- case T_BitmapAnd:
- retval = _copyBitmapAnd(from);
- break;
- case T_BitmapOr:
- retval = _copyBitmapOr(from);
- break;
- case T_SeqScan:
- retval = _copySeqScan(from);
- break;
- case T_SampleScan:
- retval = _copySampleScan(from);
- break;
- case T_IndexScan:
- retval = _copyIndexScan(from);
- break;
- case T_DynamicIndexScan:
- retval = _copyDynamicIndexScan(from);
- break;
- case T_IndexOnlyScan:
- retval = _copyIndexOnlyScan(from);
- break;
- case T_DynamicIndexOnlyScan:
- retval = _copyDynamicIndexOnlyScan(from);
- break;
- case T_BitmapIndexScan:
- retval = _copyBitmapIndexScan(from);
- break;
- case T_DynamicBitmapIndexScan:
- retval = _copyDynamicBitmapIndexScan(from);
- break;
- case T_BitmapHeapScan:
- retval = _copyBitmapHeapScan(from);
- break;
- case T_DynamicBitmapHeapScan:
- retval = _copyDynamicBitmapHeapScan(from);
- break;
- case T_DynamicSeqScan:
- retval = _copyDynamicSeqScan(from);
- break;
- case T_TidScan:
- retval = _copyTidScan(from);
- break;
- case T_TidRangeScan:
- retval = _copyTidRangeScan(from);
- break;
- case T_SubqueryScan:
- retval = _copySubqueryScan(from);
- break;
- case T_FunctionScan:
- retval = _copyFunctionScan(from);
- break;
- case T_TableFunctionScan:
- retval = _copyTableFunctionScan(from);
- break;
- case T_ValuesScan:
- retval = _copyValuesScan(from);
- break;
- case T_TableFuncScan:
- retval = _copyTableFuncScan(from);
- break;
- case T_CteScan:
- retval = _copyCteScan(from);
- break;
- case T_NamedTuplestoreScan:
- retval = _copyNamedTuplestoreScan(from);
- break;
- case T_WorkTableScan:
- retval = _copyWorkTableScan(from);
- break;
- case T_ExternalScanInfo:
- retval = _copyExternalScanInfo(from);
- break;
- case T_ForeignScan:
- retval = _copyForeignScan(from);
- break;
- case T_DynamicForeignScan:
- retval = _copyDynamicForeignScan(from);
- break;
- case T_CustomScan:
- retval = _copyCustomScan(from);
- break;
- case T_NestLoop:
- retval = _copyNestLoop(from);
- break;
- case T_NestLoopParam:
- retval = _copyNestLoopParam(from);
- break;
- case T_MergeJoin:
- retval = _copyMergeJoin(from);
- break;
- case T_HashJoin:
- retval = _copyHashJoin(from);
- break;
- case T_ShareInputScan:
- retval = _copyShareInputScan(from);
- break;
- case T_Material:
- retval = _copyMaterial(from);
- break;
- case T_Memoize:
- retval = _copyMemoize(from);
- break;
- case T_Sort:
- retval = _copySort(from);
- break;
- case T_IncrementalSort:
- retval = _copyIncrementalSort(from);
- break;
- case T_Group:
- retval = _copyGroup(from);
- break;
- case T_Agg:
- retval = _copyAgg(from);
- break;
- case T_TupleSplit:
- retval = _copyTupleSplit(from);
- break;
- case T_WindowAgg:
- retval = _copyWindowAgg(from);
- break;
- case T_Unique:
- retval = _copyUnique(from);
- break;
- case T_Gather:
- retval = _copyGather(from);
- break;
- case T_GatherMerge:
- retval = _copyGatherMerge(from);
- break;
- case T_Hash:
- retval = _copyHash(from);
- break;
- case T_RuntimeFilter:
- retval = _copyRuntimeFilter(from);
- break;
- case T_SetOp:
- retval = _copySetOp(from);
- break;
- case T_LockRows:
- retval = _copyLockRows(from);
- break;
- case T_Limit:
- retval = _copyLimit(from);
- break;
- case T_Motion:
- retval = _copyMotion(from);
- break;
- case T_SplitUpdate:
- retval = _copySplitUpdate(from);
- break;
- case T_SplitMerge:
- retval = _copySplitMerge(from);
- break;
- case T_AssertOp:
- retval = _copyAssertOp(from);
- break;
- case T_PlanRowMark:
- retval = _copyPlanRowMark(from);
- break;
- case T_PartitionPruneInfo:
- retval = _copyPartitionPruneInfo(from);
- break;
- case T_PartitionedRelPruneInfo:
- retval = _copyPartitionedRelPruneInfo(from);
- break;
- case T_PartitionPruneStepOp:
- retval = _copyPartitionPruneStepOp(from);
- break;
- case T_PartitionPruneStepCombine:
- retval = _copyPartitionPruneStepCombine(from);
- break;
- case T_PlanInvalItem:
- retval = _copyPlanInvalItem(from);
- break;
- case T_PartitionSelector:
- retval = _copyPartitionSelector(from);
- break;
- case T_Bitmapset:
- retval = _copyBitmapset(from);
- break;
- case T_ExtensibleNode:
- retval = _copyExtensibleNode(from);
- break;
- case T_Integer:
- retval = _copyInteger(from);
- break;
- case T_Float:
- retval = _copyFloat(from);
- break;
- case T_Boolean:
- retval = _copyBoolean(from);
- break;
- case T_String:
- retval = _copyString(from);
- break;
- case T_BitString:
- retval = _copyBitString(from);
- break;
- case T_ForeignKeyCacheInfo:
- retval = _copyForeignKeyCacheInfo(from);
- break;
- case T_OidAssignment:
- retval = _copyOidAssignment(from);
- break;
- case T_SliceTable:
- retval = _copySliceTable(from);
- break;
- case T_CdbProcess:
- retval = _copyCdbProcess(from);
- break;
- case T_CursorPosInfo:
- retval = _copyCursorPosInfo(from);
- break;
-
- case T_PathTarget:
- retval = _copyPathTarget(from);
- break;
- case T_AlteredTableInfo:
- retval = _copyAlteredTableInfo(from);
- break;
-
- case T_CookedConstraint:
- retval = _copyCookedConstraint(from);
- break;
- case T_WindowHashAgg:
- retval = _copyWindowHashAgg(from);
- break;
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index d9244ca6739..74422b1e659 100755
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -51,7 +51,6 @@ sub elem
# able to make this list the only copy. For now, we just check that
# it matches the list of files passed on the command line.
my @all_input_files = qw(
- catalog/gp_distribution_policy.h
nodes/nodes.h
nodes/primnodes.h
nodes/parsenodes.h
@@ -59,21 +58,33 @@ sub elem
nodes/plannodes.h
nodes/execnodes.h
access/amapi.h
+ access/extprotocol.h
+ access/formatter.h
access/sdir.h
access/tableam.h
access/tsmapi.h
+ access/tupdesc.h
+ catalog/heap.h
+ cdb/cdbgang.h
commands/event_trigger.h
+ commands/explain_gp.h
commands/trigger.h
+ executor/execdesc.h
executor/tuptable.h
foreign/fdwapi.h
+ nodes/altertablenodes.h
nodes/bitmapset.h
nodes/extensible.h
nodes/lockoptions.h
nodes/miscnodes.h
nodes/replnodes.h
nodes/supportnodes.h
+ nodes/tidbitmap.h
nodes/value.h
+ utils/queryenvironment.h
utils/rel.h
+ catalog/gp_distribution_policy.h
+ cdb/cdbpathlocus.h
);
# Nodes from these input files are automatically treated as nodetag_only.
@@ -83,17 +94,21 @@ sub elem
my @nodetag_only_files = qw(
nodes/execnodes.h
access/amapi.h
+ access/extprotocol.h
+ access/formatter.h
access/sdir.h
access/tableam.h
access/tsmapi.h
commands/event_trigger.h
+ commands/explain_gp.h
commands/trigger.h
executor/tuptable.h
foreign/fdwapi.h
nodes/lockoptions.h
nodes/miscnodes.h
nodes/replnodes.h
- nodes/supportnodes.h
+ nodes/supportnodes.h
+ nodes/tidbitmap.h
);
# ARM ABI STABILITY CHECK HERE:
@@ -108,7 +123,7 @@ sub elem
# ABI stability during development.
my $last_nodetag = 'WindowObjectData';
-my $last_nodetag_no = 557;
+my $last_nodetag_no = 584;
# output file names
my @output_files;
@@ -351,6 +366,10 @@ sub elem
{
push @no_read, $in_struct;
}
+ elsif ($attr eq 'no_read_write')
+ {
+ push @no_read_write, $in_struct;
+ }
elsif ($attr eq 'nodetag_only')
{
push @nodetag_only, $in_struct;
@@ -474,6 +493,7 @@ sub elem
equal_as_scalar
equal_ignore
equal_ignore_if_zero
+ copy_ignore
query_jumble_ignore
query_jumble_location
read_write_ignore
@@ -716,7 +736,7 @@ sub elem
my $copy_as_field;
my $copy_as_scalar = 0;
my $equal_as_scalar = 0;
- foreach my $a (@a)
+ foreach my $a (@a)
{
if ($a =~ /^array_size\(([\w.]+)\)$/)
{
@@ -742,6 +762,10 @@ sub elem
{
$equal_ignore = 1;
}
+ elsif ($a eq 'copy_ignore')
+ {
+ $copy_ignore = 1;
+ }
}
# override type-specific copy method if requested
@@ -864,6 +888,23 @@ sub elem
# the table itself, just reference the original one.
print $cff "\tCOPY_SCALAR_FIELD($f);\n" unless $copy_ignore;
print $eff "\tCOMPARE_SCALAR_FIELD($f);\n" unless $equal_ignore;
+ }
+ elsif ($t eq 'bytea*')
+ {
+ print $cff "\tCOPY_VARLENA_FIELD($f, -1);\n" unless $copy_ignore;
+ print $eff "\tCOMPARE_VARLENA_FIELD($f, -1);\n" unless $equal_ignore;
+ }
+ elsif($t eq 'TupleDesc')
+ {
+ print $cff "\tnewnode->$f = CreateTupleDescCopyConstr(from->$f);\n" unless $copy_ignore;
+ }
+ elsif ($t eq 'ItemPointerData')
+ {
+ print $cff "\tCOPY_BINARY_FIELD($f, sizeof(ItemPointerData));\n" unless $copy_ignore;
+ }
+ elsif($t eq 'Relation')
+ {
+
}
else
{
@@ -889,6 +930,720 @@ sub elem
close $cfs;
close $efs;
+
+# outfuncs.c, readfuncs.c
+
+push @output_files, 'outfuncs.funcs.c';
+open my $off, '>', "$output_path/outfuncs.funcs.c$tmpext" or die $!;
+push @output_files, 'readfuncs.funcs.c';
+open my $rff, '>', "$output_path/readfuncs.funcs.c$tmpext" or die $!;
+push @output_files, 'outfuncs.switch.c';
+open my $ofs, '>', "$output_path/outfuncs.switch.c$tmpext" or die $!;
+push @output_files, 'readfuncs.switch.c';
+open my $rfs, '>', "$output_path/readfuncs.switch.c$tmpext" or die $!;
+
+printf $off $header_comment, 'outfuncs.funcs.c';
+printf $rff $header_comment, 'readfuncs.funcs.c';
+printf $ofs $header_comment, 'outfuncs.switch.c';
+printf $rfs $header_comment, 'readfuncs.switch.c';
+
+print $off $node_includes;
+print $rff $node_includes;
+
+
+push @output_files, 'outfast.funcs.c';
+open my $ofaf, '>', "$output_path/outfast.funcs.c$tmpext" or die $!;
+push @output_files, 'readfast.funcs.c';
+open my $rfaf, '>', "$output_path/readfast.funcs.c$tmpext" or die $!;
+push @output_files, 'outfast.switch.c';
+open my $ofas, '>', "$output_path/outfast.switch.c$tmpext" or die $!;
+push @output_files, 'readfast.switch.c';
+open my $rfas, '>', "$output_path/readfast.switch.c$tmpext" or die $!;
+
+printf $ofaf $header_comment, 'outfast.funcs.c';
+printf $rfaf $header_comment, 'readfast.funcs.c';
+printf $ofas $header_comment, 'outfast.switch.c';
+printf $rfas $header_comment, 'readfast.switch.c';
+
+print $ofaf $node_includes;
+print $rfaf $node_includes;
+
+foreach my $n (@node_types)
+{
+ next if elem $n, @abstract_types;
+ next if elem $n, @nodetag_only;
+ next if elem $n, @no_read_write;
+ next if elem $n, @special_read_write;
+
+ my $no_read = (elem $n, @no_read);
+
+ # output format starts with upper case node type name
+ my $N = uc $n;
+
+ print $ofs "\t\t\tcase T_${n}:\n"
+ . "\t\t\t\t_out${n}(str, obj);\n"
+ . "\t\t\t\tbreak;\n";
+
+ print $rfs "\tif (MATCH(\"$N\", "
+ . length($N) . "))\n"
+ . "\t\treturn (Node *) _read${n}();\n"
+ unless $no_read;
+
+ # for out and read fast
+ print $ofas "\t\t\tcase T_${n}:\n"
+ . "\t\t\t\t_out${n}(str, obj);\n"
+ . "\t\t\t\tbreak;\n";
+
+ print $rfas "\t\t\tcase T_${n}:\n"
+ . "\t\t\t\treturn_value = _read${n}();\n"
+ . "\t\t\t\tbreak;\n"
+ unless $no_read;
+
+ next if elem $n, @custom_read_write;
+
+ print $off "
+static void
+_out${n}(StringInfo str, const $n *node)
+{
+\tWRITE_NODE_TYPE(\"$N\");
+
+";
+ # for out fast
+ print $ofaf "
+static void
+_out${n}(StringInfo str, const $n *node)
+{
+\tWRITE_NODE_TYPE(\"$N\");
+
+";
+
+ if (!$no_read)
+ {
+ my $macro =
+ (@{ $node_type_info{$n}->{fields} } > 0)
+ ? 'READ_LOCALS'
+ : 'READ_LOCALS_NO_FIELDS';
+ print $rff "
+static $n *
+_read${n}(void)
+{
+\t$macro($n);
+
+";
+
+ # for read fast
+ my $macro =
+ (@{ $node_type_info{$n}->{fields} } > 0)
+ ? 'READ_LOCALS'
+ : 'READ_LOCALS_NO_FIELDS';
+ print $rfaf "
+static $n *
+_read${n}(void)
+{
+\t$macro($n);
+
+";
+ }
+
+ # track already-processed fields to support field order checks
+ # (this isn't quite redundant with the previous loop, since
+ # we may be considering structs that lack copy/equal support)
+ my %previous_fields;
+
+ # print instructions for each field
+ foreach my $f (@{ $node_type_info{$n}->{fields} })
+ {
+ my $t = $node_type_info{$n}->{field_types}{$f};
+ my @a = @{ $node_type_info{$n}->{field_attrs}{$f} };
+
+ # extract per-field attributes
+ my $array_size_field;
+ my $read_as_field;
+ my $read_write_ignore = 0;
+ foreach my $a (@a)
+ {
+ if ($a =~ /^array_size\(([\w.]+)\)$/)
+ {
+ $array_size_field = $1;
+ # insist that we read the array size first!
+ die
+ "array size field $array_size_field for field $n.$f must precede $f\n"
+ if (!$previous_fields{$array_size_field} && !$no_read);
+ }
+ elsif ($a =~ /^read_as\(([\w.]+)\)$/)
+ {
+ $read_as_field = $1;
+ }
+ elsif ($a eq 'read_write_ignore')
+ {
+ $read_write_ignore = 1;
+ }
+ }
+
+ if ($read_write_ignore)
+ {
+ # nothing to do if no_read
+ next if $no_read;
+ # for read_write_ignore with read_as(), emit the appropriate
+ # assignment on the read side and move on.
+ if (defined $read_as_field)
+ {
+ print $rff "\tlocal_node->$f = $read_as_field;\n";
+
+ #for read fast
+ print $rfaf "\tlocal_node->$f = $read_as_field;\n";
+ next;
+ }
+ # else, bad specification
+ die "$n.$f must not be marked read_write_ignore\n";
+ }
+
+ # select instructions by field type
+ if ($t eq 'bool')
+ {
+ print $off "\tWRITE_BOOL_FIELD($f);\n";
+ print $rff "\tREAD_BOOL_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_BOOL_FIELD($f);\n";
+ print $rfaf "\tREAD_BOOL_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'int' && $f =~ 'location$')
+ {
+ print $off "\tWRITE_LOCATION_FIELD($f);\n";
+ print $rff "\tREAD_LOCATION_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_LOCATION_FIELD($f);\n";
+ print $rfaf "\tREAD_LOCATION_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'int'
+ || $t eq 'int8'
+ || $t eq 'int16'
+ || $t eq 'int32'
+ || $t eq 'AttrNumber'
+ || $t eq 'StrategyNumber')
+ {
+ print $off "\tWRITE_INT_FIELD($f);\n";
+ print $rff "\tREAD_INT_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_INT_FIELD($f);\n";
+ print $rfaf "\tREAD_INT_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'int64')
+ {
+ print $off "\tWRITE_LONG_FIELD($f);\n";
+ print $rff "\tREAD_LONG_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_LONG_FIELD($f);\n";
+ print $rfaf "\tREAD_LONG_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'uint32'
+ || $t eq 'uint8'
+ || $t eq 'bits32'
+ || $t eq 'BlockNumber'
+ || $t eq 'Index'
+ || $t eq 'SubTransactionId')
+ {
+ print $off "\tWRITE_UINT_FIELD($f);\n";
+ print $rff "\tREAD_UINT_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_UINT_FIELD($f);\n";
+ print $rfaf "\tREAD_UINT_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'uint64'
+ || $t eq 'AclMode')
+ {
+ print $off "\tWRITE_UINT64_FIELD($f);\n";
+ print $rff "\tREAD_UINT64_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_UINT64_FIELD($f);\n";
+ print $rfaf "\tREAD_UINT64_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'Oid' || $t eq 'RelFileNumber')
+ {
+ print $off "\tWRITE_OID_FIELD($f);\n";
+ print $rff "\tREAD_OID_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_OID_FIELD($f);\n";
+ print $rfaf "\tREAD_OID_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'long')
+ {
+ print $off "\tWRITE_LONG_FIELD($f);\n";
+ print $rff "\tREAD_LONG_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_LONG_FIELD($f);\n";
+ print $rfaf "\tREAD_LONG_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'char')
+ {
+ print $off "\tWRITE_CHAR_FIELD($f);\n";
+ print $rff "\tREAD_CHAR_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_CHAR_FIELD($f);\n";
+ print $rfaf "\tREAD_CHAR_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'double')
+ {
+ print $off "\tWRITE_FLOAT_FIELD($f);\n";
+ print $rff "\tREAD_FLOAT_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_FLOAT_FIELD($f);\n";
+ print $rfaf "\tREAD_FLOAT_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'Cardinality')
+ {
+ print $off "\tWRITE_FLOAT_FIELD($f);\n";
+ print $rff "\tREAD_FLOAT_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_FLOAT_FIELD($f);\n";
+ print $rfaf "\tREAD_FLOAT_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'Cost')
+ {
+ print $off "\tWRITE_FLOAT_FIELD($f);\n";
+ print $rff "\tREAD_FLOAT_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_FLOAT_FIELD($f);\n";
+ print $rfaf "\tREAD_FLOAT_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'QualCost')
+ {
+ print $off "\tWRITE_FLOAT_FIELD($f.startup);\n";
+ print $off "\tWRITE_FLOAT_FIELD($f.per_tuple);\n";
+ print $rff "\tREAD_FLOAT_FIELD($f.startup);\n" unless $no_read;
+ print $rff "\tREAD_FLOAT_FIELD($f.per_tuple);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_FLOAT_FIELD($f.startup);\n";
+ print $ofaf "\tWRITE_FLOAT_FIELD($f.per_tuple);\n";
+ print $rfaf "\tREAD_FLOAT_FIELD($f.startup);\n" unless $no_read;
+ print $rfaf "\tREAD_FLOAT_FIELD($f.per_tuple);\n" unless $no_read;
+ }
+ elsif ($t eq 'Selectivity')
+ {
+ print $off "\tWRITE_FLOAT_FIELD($f);\n";
+ print $rff "\tREAD_FLOAT_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_FLOAT_FIELD($f);\n";
+ print $rfaf "\tREAD_FLOAT_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'char*')
+ {
+ print $off "\tWRITE_STRING_FIELD($f);\n";
+ print $rff "\tREAD_STRING_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_STRING_FIELD($f);\n";
+ print $rfaf "\tREAD_STRING_FIELD($f);\n" unless $no_read;
+ }
+ elsif ($t eq 'Bitmapset*' || $t eq 'Relids')
+ {
+ print $off "\tWRITE_BITMAPSET_FIELD($f);\n";
+ print $rff "\tREAD_BITMAPSET_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_BITMAPSET_FIELD($f);\n";
+ print $rfaf "\tREAD_BITMAPSET_FIELD($f);\n" unless $no_read;
+ }
+ elsif (elem $t, @enum_types)
+ {
+ print $off "\tWRITE_ENUM_FIELD($f, $t);\n";
+ print $rff "\tREAD_ENUM_FIELD($f, $t);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_ENUM_FIELD($f, $t);\n";
+ print $rfaf "\tREAD_ENUM_FIELD($f, $t);\n" unless $no_read;
+ }
+ # arrays of scalar types
+ elsif ($t =~ /^(\w+)(\*|\[\w+\])$/ and elem $1, @scalar_types)
+ {
+ my $tt = uc $1;
+ if (!defined $array_size_field)
+ {
+ die "no array size defined for $n.$f of type $t\n";
+ }
+ if ($node_type_info{$n}->{field_types}{$array_size_field} eq
+ 'List*')
+ {
+ print $off
+ "\tWRITE_${tt}_ARRAY($f, list_length(node->$array_size_field));\n";
+ print $rff
+ "\tREAD_${tt}_ARRAY($f, list_length(local_node->$array_size_field));\n"
+ unless $no_read;
+
+ # for out and read fast
+ print $ofaf
+ "\tWRITE_${tt}_ARRAY($f, list_length(node->$array_size_field));\n";
+ print $rfaf
+ "\tREAD_${tt}_ARRAY($f, list_length(local_node->$array_size_field));\n"
+ unless $no_read;
+ }
+ else
+ {
+ print $off
+ "\tWRITE_${tt}_ARRAY($f, node->$array_size_field);\n";
+ print $rff
+ "\tREAD_${tt}_ARRAY($f, local_node->$array_size_field);\n"
+ unless $no_read;
+
+ # for out and read fast
+ print $ofaf
+ "\tWRITE_${tt}_ARRAY($f, node->$array_size_field);\n";
+ print $rfaf
+ "\tREAD_${tt}_ARRAY($f, local_node->$array_size_field);\n"
+ unless $no_read;
+ }
+ }
+ elsif ($t eq 'function pointer')
+ {
+ # We don't print these, and we can't read them either
+ die "cannot read function pointer in struct \"$n\" field \"$f\"\n"
+ unless $no_read;
+ }
+ # Special treatments of several Path node fields
+ elsif ($t eq 'RelOptInfo*' && elem 'write_only_relids', @a)
+ {
+ print $off
+ "\tappendStringInfoString(str, \" :parent_relids \");\n"
+ . "\toutBitmapset(str, node->$f->relids);\n";
+
+ # for out and read fast
+ print $ofaf
+ "\tappendStringInfoString(str, \" :parent_relids \");\n"
+ . "\toutBitmapset(str, node->$f->relids);\n";
+ }
+ elsif ($t eq 'PathTarget*' && elem 'write_only_nondefault_pathtarget',
+ @a)
+ {
+ (my $f2 = $f) =~ s/pathtarget/parent/;
+ print $off "\tif (node->$f != node->$f2->reltarget)\n"
+ . "\t\tWRITE_NODE_FIELD($f);\n";
+
+ # for out and read fast
+ print $ofaf "\tif (node->$f != node->$f2->reltarget)\n"
+ . "\t\tWRITE_NODE_FIELD($f);\n";
+ }
+ elsif ($t eq 'ParamPathInfo*' && elem 'write_only_req_outer', @a)
+ {
+ print $off
+ "\tappendStringInfoString(str, \" :required_outer \");\n"
+ . "\tif (node->$f)\n"
+ . "\t\toutBitmapset(str, node->$f->ppi_req_outer);\n"
+ . "\telse\n"
+ . "\t\toutBitmapset(str, NULL);\n";
+
+ # for out and read fast
+ print $ofaf
+ "\tappendStringInfoString(str, \" :required_outer \");\n"
+ . "\tif (node->$f)\n"
+ . "\t\toutBitmapset(str, node->$f->ppi_req_outer);\n"
+ . "\telse\n"
+ . "\t\toutBitmapset(str, NULL);\n";
+ }
+ # node type
+ elsif (($t =~ /^(\w+)\*$/ or $t =~ /^struct\s+(\w+)\*$/)
+ and elem $1, @node_types)
+ {
+ die
+ "node type \"$1\" lacks write support, which is required for struct \"$n\" field \"$f\"\n"
+ if (elem $1, @no_read_write or elem $1, @nodetag_only);
+ die
+ "node type \"$1\" lacks read support, which is required for struct \"$n\" field \"$f\"\n"
+ if (elem $1, @no_read or elem $1, @nodetag_only)
+ and !$no_read;
+
+ print $off "\tWRITE_NODE_FIELD($f);\n";
+ print $rff "\tREAD_NODE_FIELD($f);\n" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "\tWRITE_NODE_FIELD($f);\n";
+ print $rfaf "\tREAD_NODE_FIELD($f);\n" unless $no_read;
+ }
+ # arrays of node pointers (currently supported for write only)
+ elsif (($t =~ /^(\w+)\*\*$/ or $t =~ /^struct\s+(\w+)\*\*$/)
+ and elem($1, @node_types))
+ {
+ if (!defined $array_size_field)
+ {
+ die "no array size defined for $n.$f of type $t\n";
+ }
+ if ($node_type_info{$n}->{field_types}{$array_size_field} eq
+ 'List*')
+ {
+ print $off
+ "\tWRITE_NODE_ARRAY($f, list_length(node->$array_size_field));\n";
+ print $rff
+ "\tREAD_NODE_ARRAY($f, list_length(local_node->$array_size_field));\n"
+ unless $no_read;
+
+ # for out and read fast
+ print $ofaf
+ "\tWRITE_NODE_ARRAY($f, list_length(node->$array_size_field));\n";
+ print $rfaf
+ "\tREAD_NODE_ARRAY($f, list_length(local_node->$array_size_field));\n"
+ unless $no_read;
+ }
+ else
+ {
+ print $off
+ "\tWRITE_NODE_ARRAY($f, node->$array_size_field);\n";
+ print $rff
+ "\tREAD_NODE_ARRAY($f, local_node->$array_size_field);\n"
+ unless $no_read;
+
+ # for out and read fast
+ print $ofaf
+ "\tWRITE_NODE_ARRAY($f, node->$array_size_field);\n";
+ print $rfaf
+ "\tREAD_NODE_ARRAY($f, local_node->$array_size_field);\n"
+ unless $no_read;
+ }
+ }
+ elsif ($t eq 'struct CustomPathMethods*'
+ || $t eq 'struct CustomScanMethods*')
+ {
+ print $off q{
+ /* CustomName is a key to lookup CustomScanMethods */
+ appendStringInfoString(str, " :methods ");
+ outToken(str, node->methods->CustomName);
+};
+ print $rff q!
+ {
+ /* Lookup CustomScanMethods by CustomName */
+ char *custom_name;
+ const CustomScanMethods *methods;
+ token = pg_strtok(&length); /* skip methods: */
+ token = pg_strtok(&length); /* CustomName */
+ custom_name = nullable_string(token, length);
+ methods = GetCustomScanMethods(custom_name, false);
+ local_node->methods = methods;
+ }
+! unless $no_read;
+
+ # for out and read fast
+ print $ofaf q{
+ /* CustomName is a key to lookup CustomScanMethods */
+ appendStringInfoString(str, " :methods ");
+ outToken(str, node->methods->CustomName);
+};
+ print $rfaf q!
+ {
+ /* Lookup CustomScanMethods by CustomName */
+ char *custom_name;
+ const CustomScanMethods *methods;
+ READ_STRING_VAR(custom_name);
+ /* find custom scan methods from hash table. */
+ methods = GetCustomScanMethods(custom_name, false);
+ local_node->methods = methods;
+ }
+! unless $no_read;
+ }
+ elsif($t eq 'bytea*')
+ {
+ print $ofaf
+ "\tWRITE_BYTEA_FIELD($f);\n";
+ print $rfaf
+ "\tREAD_BYTEA_FIELD($f);\n"
+ unless $no_read;
+ }
+ elsif($t eq 'CdbPathLocus')
+ {
+ print $off
+ "\t_outCdbPathLocus(str, &node->$f);\n";
+
+ # for out and read fast
+ print $ofaf
+ "\t_outCdbPathLocus(str, &node->$f);\n";
+ }
+ elsif($t eq 'ItemPointerData')
+ {
+ print $off
+ "\tWRITE_UINT_FIELD($f.ip_blkid.bi_hi);
+ \tWRITE_UINT_FIELD($f.ip_blkid.bi_lo);
+ \tWRITE_UINT_FIELD($f.ip_posid);\n";
+ print $rff
+ "\tREAD_UINT_FIELD($f.ip_blkid.bi_hi);
+ \tREAD_UINT_FIELD($f.ip_blkid.bi_lo);
+ \tREAD_UINT_FIELD($f.ip_posid);\n"
+ unless $no_read;
+
+ # for out and read fast
+ print $ofaf
+ "\tWRITE_UINT_FIELD($f.ip_blkid.bi_hi);
+ \tWRITE_UINT_FIELD($f.ip_blkid.bi_lo);
+ \tWRITE_UINT_FIELD($f.ip_posid);\n";
+ print $rfaf
+ "\tREAD_UINT_FIELD($f.ip_blkid.bi_hi);
+ \tREAD_UINT_FIELD($f.ip_blkid.bi_lo);
+ \tREAD_UINT_FIELD($f.ip_posid);\n"
+ unless $no_read;
+ }
+ elsif($t eq 'TupleDesc')
+ {
+ print $ofaf "\tfor (int i = 0; i < node->$f->natts; i++)
+ \tappendBinaryStringInfo(str, (char *) &node->$f->attrs[i], ATTRIBUTE_FIXED_PART_SIZE);\n";
+ print $rfaf "\tlocal_node->tuple = CreateTemplateTupleDesc(local_node->natts);
+ if (local_node->$f->natts > 0)
+ {
+ int i = 0;
+ for (; i < local_node->$f->natts; i++)
+ {
+ memcpy(&local_node->$f->attrs[i], read_str_ptr, ATTRIBUTE_FIXED_PART_SIZE);
+ read_str_ptr+=ATTRIBUTE_FIXED_PART_SIZE;
+ }
+ }\n"
+ unless $no_read;
+ }
+ else
+ {
+ die
+ "could not handle type \"$t\" in struct \"$n\" field \"$f\"\n";
+ }
+
+ # for read_as() without read_write_ignore, we have to read the value
+ # that outfuncs.c wrote and then overwrite it.
+ if (defined $read_as_field)
+ {
+ print $rff "\tlocal_node->$f = $read_as_field;\n" unless $no_read;
+
+ # for out and read fast
+ print $rff "\tlocal_node->$f = $read_as_field;\n" unless $no_read;
+ }
+
+ $previous_fields{$f} = 1;
+ }
+
+ print $off "}
+";
+ print $rff "
+\tREAD_DONE();
+}
+" unless $no_read;
+
+ # for out and read fast
+ print $ofaf "}
+";
+ print $rfaf "
+\tREAD_DONE();
+}
+" unless $no_read;
+}
+
+close $off;
+close $rff;
+close $ofs;
+close $rfs;
+
+
+# queryjumblefuncs.c
+
+push @output_files, 'queryjumblefuncs.funcs.c';
+open my $jff, '>', "$output_path/queryjumblefuncs.funcs.c$tmpext" or die $!;
+push @output_files, 'queryjumblefuncs.switch.c';
+open my $jfs, '>', "$output_path/queryjumblefuncs.switch.c$tmpext" or die $!;
+
+printf $jff $header_comment, 'queryjumblefuncs.funcs.c';
+printf $jfs $header_comment, 'queryjumblefuncs.switch.c';
+
+print $jff $node_includes;
+
+foreach my $n (@node_types)
+{
+ next if elem $n, @abstract_types;
+ next if elem $n, @nodetag_only;
+ my $struct_no_query_jumble = (elem $n, @no_query_jumble);
+
+ print $jfs "\t\t\tcase T_${n}:\n"
+ . "\t\t\t\t_jumble${n}(jstate, expr);\n"
+ . "\t\t\t\tbreak;\n"
+ unless $struct_no_query_jumble;
+
+ next if elem $n, @custom_query_jumble;
+
+ print $jff "
+static void
+_jumble${n}(JumbleState *jstate, Node *node)
+{
+\t${n} *expr = (${n} *) node;\n
+" unless $struct_no_query_jumble;
+
+ # print instructions for each field
+ foreach my $f (@{ $node_type_info{$n}->{fields} })
+ {
+ my $t = $node_type_info{$n}->{field_types}{$f};
+ my @a = @{ $node_type_info{$n}->{field_attrs}{$f} };
+ my $query_jumble_ignore = $struct_no_query_jumble;
+ my $query_jumble_location = 0;
+
+ # extract per-field attributes
+ foreach my $a (@a)
+ {
+ if ($a eq 'query_jumble_ignore')
+ {
+ $query_jumble_ignore = 1;
+ }
+ elsif ($a eq 'query_jumble_location')
+ {
+ $query_jumble_location = 1;
+ }
+ }
+
+ # node type
+ if (($t =~ /^(\w+)\*$/ or $t =~ /^struct\s+(\w+)\*$/)
+ and elem $1, @node_types)
+ {
+ print $jff "\tJUMBLE_NODE($f);\n"
+ unless $query_jumble_ignore;
+ }
+ elsif ($t eq 'int' && $f =~ 'location$')
+ {
+ # Track the node's location only if directly requested.
+ if ($query_jumble_location)
+ {
+ print $jff "\tJUMBLE_LOCATION($f);\n"
+ unless $query_jumble_ignore;
+ }
+ }
+ elsif ($t eq 'char*')
+ {
+ print $jff "\tJUMBLE_STRING($f);\n"
+ unless $query_jumble_ignore;
+ }
+ else
+ {
+ print $jff "\tJUMBLE_FIELD($f);\n"
+ unless $query_jumble_ignore;
+ }
+ }
+
+ # Some nodes have no attributes like CheckPointStmt,
+ # so tweak things for empty contents.
+ if (scalar(@{ $node_type_info{$n}->{fields} }) == 0)
+ {
+ print $jff "\t(void) expr;\n"
+ unless $struct_no_query_jumble;
+ }
+
+ print $jff "}
+" unless $struct_no_query_jumble;
+}
+
+close $jff;
+close $jfs;
+
# now rename the temporary files to their final names
foreach my $file (@output_files)
{
diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c
index ec2ad3b889a..3b1282f7036 100644
--- a/src/backend/nodes/nodeFuncs.c
+++ b/src/backend/nodes/nodeFuncs.c
@@ -3036,7 +3036,6 @@ expression_tree_mutator_impl(Node *node,
case T_NextValueExpr:
case T_RangeTblRef:
case T_String:
- case T_Null:
case T_CTESearchClause:
return (Node *) copyObject(node);
case T_WithCheckOption:
diff --git a/src/backend/nodes/outfast.c b/src/backend/nodes/outfast.c
index f31bfa87045..ed3d3fe9cba 100644
--- a/src/backend/nodes/outfast.c
+++ b/src/backend/nodes/outfast.c
@@ -33,8 +33,11 @@
#include
#include "lib/stringinfo.h"
+#include "nodes/extensible.h"
+#include "nodes/altertablenodes.h"
#include "nodes/params.h"
#include "nodes/parsenodes.h"
+#include "nodes/pathnodes.h"
#include "nodes/plannodes.h"
#include "utils/datum.h"
#include "utils/expandeddatum.h"
@@ -215,8 +218,18 @@
} \
}
-static void _outNode(StringInfo str, void *obj);
+/* Write an Oid array */
+#define WRITE_INDEX_ARRAY(fldname, count) \
+ if ( (count) > 0 && node->fldname) \
+ { \
+ int i; \
+ for(i = 0; i < (count); i++) \
+ { \
+ appendBinaryStringInfo(str, (const char *)&node->fldname[i], sizeof(Index)); \
+ } \
+ }
+static void _outNode(StringInfo str, void *obj);
#define outDatum(str, value, typlen, typbyval) _outDatum(str, value, typlen, typbyval)
static void
@@ -324,152 +337,111 @@ _outDatum(StringInfo str, Datum value, int typlen, bool typbyval)
}
}
-#define COMPILING_BINARY_FUNCS
-#include "outfuncs.c"
-
-/*****************************************************************************
- *
- * Stuff from primnodes.h.
- *
- *****************************************************************************/
-
static void
-_outConst(StringInfo str, Const *node)
+_outCdbPathLocus(StringInfo str, const CdbPathLocus *node)
{
- WRITE_NODE_TYPE("CONST");
-
- WRITE_OID_FIELD(consttype);
- WRITE_INT_FIELD(consttypmod);
- WRITE_OID_FIELD(constcollid);
- WRITE_INT_FIELD(constlen);
- WRITE_BOOL_FIELD(constbyval);
- WRITE_BOOL_FIELD(constisnull);
- WRITE_LOCATION_FIELD(location);
-
- if (!node->constisnull)
- _outDatum(str, node->constvalue, node->constlen, node->constbyval);
+ WRITE_ENUM_FIELD(locustype, CdbLocusType);
+ WRITE_NODE_FIELD(distkey);
+ WRITE_INT_FIELD(numsegments);
}
+
static void
-_outBoolExpr(StringInfo str, BoolExpr *node)
+_outInteger(StringInfo str, const Integer *node)
{
- WRITE_NODE_TYPE("BOOLEXPR");
- WRITE_ENUM_FIELD(boolop, BoolExprType);
-
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
+ int16 vt = T_Integer;
+ appendBinaryStringInfo(str, (const char *)&vt, sizeof(int16));
+ appendBinaryStringInfo(str, (const char *)&node->ival, sizeof(int));
}
-/*****************************************************************************
- *
- * Stuff from extensible.h
- *
- *****************************************************************************/
static void
-_outExtensibleNode(StringInfo str, const ExtensibleNode *node)
+_outFloat(StringInfo str, const Float *node)
{
- const ExtensibleNodeMethods *methods;
- StringInfoData buf;
- initStringInfo(&buf);
+ int16 vt = T_Float;
+ int slen;
- methods = GetExtensibleNodeMethods(node->extnodename, false);
+ appendBinaryStringInfo(str, (const char *) &vt, sizeof(int16));
+ slen = (node->fval != NULL ? strlen(node->fval) : 0);
+ appendBinaryStringInfo(str, (const char *)&slen, sizeof(int));
+ if (slen > 0)
+ appendBinaryStringInfo(str, node->fval, slen);
+}
- WRITE_NODE_TYPE("EXTENSIBLENODE");
+static void
+_outBoolean(StringInfo str, const Boolean *node)
+{
+ int16 vt = T_Boolean;
+ appendBinaryStringInfo(str, (const char *)&vt, sizeof(int16));
+ appendBinaryStringInfo(str, (const char *)&node->boolval, sizeof(bool));
+}
- WRITE_STRING_FIELD(extnodename);
- /* serialize the private fields */
- methods->nodeOut(&buf, node);
+static void
+_outString(StringInfo str, const String *node)
+{
+ int16 vt = T_String;
+ int slen;
- WRITE_STRING_VAR(buf.data);
+ appendBinaryStringInfo(str, (const char *) &vt, sizeof(int16));
+ slen = (node->sval != NULL ? strlen(node->sval) : 0);
+ appendBinaryStringInfo(str, (const char *)&slen, sizeof(int));
+ if (slen > 0)
+ appendBinaryStringInfo(str, node->sval, slen);
}
-/*****************************************************************************
- *
- * Stuff from parsenodes.h.
- *
- *****************************************************************************/
-
static void
-_outCreateExtensionStmt(StringInfo str, CreateExtensionStmt *node)
+_outBitString(StringInfo str, const BitString *node)
{
- WRITE_NODE_TYPE("CREATEEXTENSIONSTMT");
- WRITE_STRING_FIELD(extname);
- WRITE_BOOL_FIELD(if_not_exists);
- WRITE_NODE_FIELD(options);
- WRITE_ENUM_FIELD(create_ext_state, CreateExtensionState);
+ int16 vt = T_BitString;
+ int slen;
+
+ appendBinaryStringInfo(str, (const char *) &vt, sizeof(int16));
+ slen = (node->bsval != NULL ? strlen(node->bsval) : 0);
+ appendBinaryStringInfo(str, (const char *)&slen, sizeof(int));
+ if (slen > 0)
+ appendBinaryStringInfo(str, node->bsval, slen);
}
static void
-_outRoleSpec(StringInfo str, const RoleSpec *node)
+_outA_Const(StringInfo str, A_Const *node)
{
- WRITE_NODE_TYPE("ROLESPEC");
-
- WRITE_ENUM_FIELD(roletype, RoleSpecType);
- WRITE_STRING_FIELD(rolename);
+ WRITE_NODE_TYPE("A_CONST");
+ WRITE_BOOL_FIELD(isnull);
+ if (!node->isnull)
+ _outNode(str, &node->val);
WRITE_LOCATION_FIELD(location);
}
static void
-_outAlterDefaultPrivilegesStmt(StringInfo str, AlterDefaultPrivilegesStmt *node)
+_outConst(StringInfo str, Const *node)
{
- WRITE_NODE_TYPE("ALTERDEFAULTPRIVILEGESSTMT");
- WRITE_NODE_FIELD(options);
- WRITE_NODE_FIELD(action);
+ WRITE_NODE_TYPE("CONST");
+
+ WRITE_OID_FIELD(consttype);
+ WRITE_INT_FIELD(consttypmod);
+ WRITE_OID_FIELD(constcollid);
+ WRITE_INT_FIELD(constlen);
+ WRITE_BOOL_FIELD(constbyval);
+ WRITE_BOOL_FIELD(constisnull);
+ WRITE_LOCATION_FIELD(location);
+
+ if (!node->constisnull)
+ _outDatum(str, node->constvalue, node->constlen, node->constbyval);
}
static void
-_outQuery(StringInfo str, Query *node)
+_outBoolExpr(StringInfo str, BoolExpr *node)
{
- WRITE_NODE_TYPE("QUERY");
-
- WRITE_ENUM_FIELD(commandType, CmdType);
- WRITE_ENUM_FIELD(querySource, QuerySource);
- WRITE_BOOL_FIELD(canSetTag);
- WRITE_NODE_FIELD(utilityStmt);
- WRITE_INT_FIELD(resultRelation);
- WRITE_BOOL_FIELD(hasAggs);
- WRITE_BOOL_FIELD(hasWindowFuncs);
- WRITE_BOOL_FIELD(hasSubLinks);
- WRITE_BOOL_FIELD(hasDynamicFunctions);
- WRITE_BOOL_FIELD(hasFuncsWithExecRestrictions);
- WRITE_BOOL_FIELD(hasDistinctOn);
- WRITE_BOOL_FIELD(hasRecursive);
- WRITE_BOOL_FIELD(hasModifyingCTE);
- WRITE_BOOL_FIELD(hasForUpdate);
- WRITE_BOOL_FIELD(hasRowSecurity);
- WRITE_BOOL_FIELD(canOptSelectLockingClause);
- WRITE_NODE_FIELD(cteList);
- WRITE_NODE_FIELD(rtable);
- WRITE_NODE_FIELD(rteperminfos);
- WRITE_NODE_FIELD(jointree);
- WRITE_NODE_FIELD(mergeActionList);
- WRITE_BOOL_FIELD(mergeUseOuterJoin);
- WRITE_NODE_FIELD(targetList);
- WRITE_NODE_FIELD(withCheckOptions);
- WRITE_NODE_FIELD(onConflict);
- WRITE_NODE_FIELD(returningList);
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(groupingSets);
- WRITE_NODE_FIELD(havingQual);
- WRITE_NODE_FIELD(windowClause);
- WRITE_NODE_FIELD(distinctClause);
- WRITE_NODE_FIELD(sortClause);
- WRITE_NODE_FIELD(scatterClause);
- WRITE_BOOL_FIELD(isTableValueSelect);
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(setOperations);
- WRITE_NODE_FIELD(constraintDeps);
- WRITE_BOOL_FIELD(parentStmtType);
+ WRITE_NODE_TYPE("BOOLEXPR");
+ WRITE_ENUM_FIELD(boolop, BoolExprType);
- /* Don't serialize policy */
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
}
static void
-_outAExpr(StringInfo str, A_Expr *node)
+_outA_Expr(StringInfo str, A_Expr *node)
{
WRITE_NODE_TYPE("AEXPR");
WRITE_ENUM_FIELD(kind, A_Expr_Kind);
@@ -547,334 +519,648 @@ _outAExpr(StringInfo str, A_Expr *node)
}
static void
-_outInteger(StringInfo str, const Integer *node)
+_outColumnDef(StringInfo str, const ColumnDef *node)
{
- int16 vt = T_Integer;
- appendBinaryStringInfo(str, (const char *)&vt, sizeof(int16));
- appendBinaryStringInfo(str, (const char *)&node->ival, sizeof(int));
-}
+ WRITE_NODE_TYPE("COLUMNDEF");
+ WRITE_STRING_FIELD(colname);
+ WRITE_NODE_FIELD(typeName);
+ WRITE_STRING_FIELD(compression);
+ WRITE_INT_FIELD(inhcount);
+ WRITE_BOOL_FIELD(is_local);
+ WRITE_BOOL_FIELD(is_not_null);
+ WRITE_BOOL_FIELD(is_from_type);
+ WRITE_INT_FIELD(attnum);
+ WRITE_INT_FIELD(storage);
+ WRITE_STRING_FIELD(storage_name);
+ WRITE_NODE_FIELD(raw_default);
+ WRITE_NODE_FIELD(cooked_default);
+
+ WRITE_BOOL_FIELD(hasCookedMissingVal);
+ WRITE_BOOL_FIELD(missingIsNull);
+ if (node->hasCookedMissingVal && !node->missingIsNull)
+ outDatum(str, node->missingVal, -1, false);
+
+ WRITE_CHAR_FIELD(identity);
+ WRITE_NODE_FIELD(identitySequence);
+ WRITE_CHAR_FIELD(generated);
+ WRITE_NODE_FIELD(collClause);
+ WRITE_OID_FIELD(collOid);
+ WRITE_NODE_FIELD(constraints);
+ WRITE_NODE_FIELD(encoding);
+ WRITE_NODE_FIELD(fdwoptions);
+ WRITE_LOCATION_FIELD(location);
+}
static void
-_outFloat(StringInfo str, const Float *node)
+_outRangeTblEntry(StringInfo str, const RangeTblEntry *node)
{
- int16 vt = T_Float;
- int slen;
+ WRITE_NODE_TYPE("RTE");
- appendBinaryStringInfo(str, (const char *) &vt, sizeof(int16));
- slen = (node->fval != NULL ? strlen(node->fval) : 0);
- appendBinaryStringInfo(str, (const char *)&slen, sizeof(int));
- if (slen > 0)
- appendBinaryStringInfo(str, node->fval, slen);
+ /* put alias + eref first to make dump more legible */
+ WRITE_NODE_FIELD(alias);
+ WRITE_NODE_FIELD(eref);
+ WRITE_ENUM_FIELD(rtekind, RTEKind);
+ WRITE_BOOL_FIELD(relisivm);
+
+ switch (node->rtekind)
+ {
+ case RTE_RELATION:
+ WRITE_OID_FIELD(relid);
+ WRITE_CHAR_FIELD(relkind);
+ WRITE_INT_FIELD(rellockmode);
+ WRITE_NODE_FIELD(tablesample);
+ WRITE_UINT_FIELD(perminfoindex);
+ break;
+ case RTE_SUBQUERY:
+ WRITE_NODE_FIELD(subquery);
+ WRITE_BOOL_FIELD(security_barrier);
+ WRITE_OID_FIELD(relid);
+ WRITE_CHAR_FIELD(relkind);
+ WRITE_INT_FIELD(rellockmode);
+ WRITE_UINT_FIELD(perminfoindex);
+ break;
+ case RTE_JOIN:
+ WRITE_ENUM_FIELD(jointype, JoinType);
+ WRITE_INT_FIELD(joinmergedcols);
+ WRITE_NODE_FIELD(joinaliasvars);
+ WRITE_NODE_FIELD(joinleftcols);
+ WRITE_NODE_FIELD(joinrightcols);
+ WRITE_NODE_FIELD(join_using_alias);
+ break;
+ case RTE_FUNCTION:
+ WRITE_NODE_FIELD(functions);
+ WRITE_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNCTION:
+ WRITE_NODE_FIELD(subquery);
+ WRITE_NODE_FIELD(functions);
+ WRITE_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNC:
+ WRITE_NODE_FIELD(tablefunc);
+ break;
+ case RTE_VALUES:
+ WRITE_NODE_FIELD(values_lists);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ break;
+ case RTE_CTE:
+ WRITE_STRING_FIELD(ctename);
+ WRITE_UINT_FIELD(ctelevelsup);
+ WRITE_BOOL_FIELD(self_reference);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ break;
+ case RTE_NAMEDTUPLESTORE:
+ WRITE_STRING_FIELD(enrname);
+ WRITE_FLOAT_FIELD(enrtuples);
+ WRITE_OID_FIELD(relid);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ break;
+ case RTE_RESULT:
+ /* no extra fields */
+ break;
+ case RTE_VOID: /*CDB*/
+ break;
+ default:
+ elog(ERROR, "unrecognized RTE kind: %d", (int) node->rtekind);
+ break;
+ }
+
+ WRITE_BOOL_FIELD(lateral);
+ WRITE_BOOL_FIELD(inh);
+ WRITE_BOOL_FIELD(inFromCl);
+ WRITE_NODE_FIELD(securityQuals);
+
+ WRITE_BOOL_FIELD(forceDistRandom);
}
static void
-_outBoolean(StringInfo str, const Boolean *node)
+_outConstraint(StringInfo str, const Constraint *node)
{
- int16 vt = T_Boolean;
- appendBinaryStringInfo(str, (const char *)&vt, sizeof(int16));
- appendBinaryStringInfo(str, (const char *)&node->boolval, sizeof(bool));
-}
+ WRITE_NODE_TYPE("CONSTRAINT");
+ WRITE_ENUM_FIELD(contype, ConstrType);
+ /* name, or NULL if unnamed */
+ WRITE_STRING_FIELD(conname);
+ WRITE_BOOL_FIELD(deferrable);
+ WRITE_BOOL_FIELD(initdeferred);
+ WRITE_LOCATION_FIELD(location);
-static void
-_outString(StringInfo str, const String *node)
-{
- int16 vt = T_String;
- int slen;
+ WRITE_BOOL_FIELD(is_no_inherit);
+ WRITE_NODE_FIELD(raw_expr);
+ WRITE_STRING_FIELD(cooked_expr);
+ WRITE_CHAR_FIELD(generated_when);
+ WRITE_BOOL_FIELD(nulls_not_distinct);
- appendBinaryStringInfo(str, (const char *) &vt, sizeof(int16));
- slen = (node->sval != NULL ? strlen(node->sval) : 0);
- appendBinaryStringInfo(str, (const char *)&slen, sizeof(int));
- if (slen > 0)
- appendBinaryStringInfo(str, node->sval, slen);
-}
+ WRITE_NODE_FIELD(keys);
+ WRITE_NODE_FIELD(including);
-static void
-_outBitString(StringInfo str, const BitString *node)
-{
- int16 vt = T_BitString;
- int slen;
+ WRITE_NODE_FIELD(exclusions);
- appendBinaryStringInfo(str, (const char *) &vt, sizeof(int16));
- slen = (node->bsval != NULL ? strlen(node->bsval) : 0);
- appendBinaryStringInfo(str, (const char *)&slen, sizeof(int));
- if (slen > 0)
- appendBinaryStringInfo(str, node->bsval, slen);
+ WRITE_NODE_FIELD(options);
+ WRITE_STRING_FIELD(indexname);
+ WRITE_STRING_FIELD(indexspace);
+ WRITE_BOOL_FIELD(reset_default_tblspc);
+
+ WRITE_STRING_FIELD(access_method);
+ WRITE_NODE_FIELD(where_clause);
+
+ WRITE_NODE_FIELD(pktable);
+ WRITE_NODE_FIELD(fk_attrs);
+ WRITE_NODE_FIELD(pk_attrs);
+ WRITE_CHAR_FIELD(fk_matchtype);
+ WRITE_CHAR_FIELD(fk_upd_action);
+ WRITE_CHAR_FIELD(fk_del_action);
+ WRITE_NODE_FIELD(old_conpfeqop);
+ WRITE_OID_FIELD(old_pktable_oid);
+
+ WRITE_BOOL_FIELD(skip_validation);
+ WRITE_BOOL_FIELD(initially_valid);
}
-
static void
-_outAConst(StringInfo str, A_Const *node)
+_outPlannerGlobal(StringInfo str, const PlannerGlobal *node)
{
- WRITE_NODE_TYPE("A_CONST");
- WRITE_BOOL_FIELD(isnull);
- if (!node->isnull)
- _outNode(str, &node->val);
- WRITE_LOCATION_FIELD(location);
+ WRITE_NODE_TYPE("PLANNERGLOBAL");
+
+ /* NB: this isn't a complete set of fields */
+ WRITE_NODE_FIELD(subplans);
+ WRITE_BITMAPSET_FIELD(rewindPlanIDs);
+ WRITE_NODE_FIELD(finalrtable);
+ WRITE_NODE_FIELD(finalrowmarks);
+ WRITE_NODE_FIELD(resultRelations);
+ WRITE_NODE_FIELD(appendRelations);
+ WRITE_NODE_FIELD(relationOids);
+ WRITE_NODE_FIELD(invalItems);
+ WRITE_NODE_FIELD(paramExecTypes);
+ WRITE_UINT_FIELD(lastPHId);
+ WRITE_UINT_FIELD(lastRowMarkId);
+ WRITE_INT_FIELD(lastPlanNodeId);
+ WRITE_BOOL_FIELD(transientPlan);
+ WRITE_BOOL_FIELD(oneoffPlan);
+ WRITE_NODE_FIELD(share.motStack);
+ WRITE_BITMAPSET_FIELD(share.qdShares);
+ WRITE_BOOL_FIELD(dependsOnRole);
+ WRITE_BOOL_FIELD(parallelModeOK);
+ WRITE_BOOL_FIELD(parallelModeNeeded);
+ WRITE_CHAR_FIELD(maxParallelHazard);
}
static void
-_outCookedConstraint(StringInfo str, CookedConstraint *node)
+_outPlannerInfo(StringInfo str, const PlannerInfo *node)
{
- WRITE_NODE_TYPE("COOKEDCONSTRAINT");
-
- WRITE_ENUM_FIELD(contype,ConstrType);
- WRITE_STRING_FIELD(name);
- WRITE_INT_FIELD(attnum);
- WRITE_NODE_FIELD(expr);
- WRITE_BOOL_FIELD(is_local);
- WRITE_INT_FIELD(inhcount);
- WRITE_BOOL_FIELD(is_no_inherit);
+ WRITE_NODE_TYPE("PLANNERINFO");
+
+ /* NB: this isn't a complete set of fields */
+ WRITE_NODE_FIELD(parse);
+ WRITE_NODE_FIELD(glob);
+ WRITE_UINT_FIELD(query_level);
+ WRITE_NODE_FIELD(plan_params);
+ WRITE_BITMAPSET_FIELD(outer_params);
+ WRITE_INT_FIELD(simple_rel_array_size);
+ WRITE_BITMAPSET_FIELD(all_baserels);
+ WRITE_BITMAPSET_FIELD(outer_join_rels);
+ WRITE_NODE_FIELD(join_rel_list);
+ WRITE_NODE_FIELD(join_rel_list);
+ WRITE_BOOL_FIELD(setup_agg_pushdown);
+ WRITE_NODE_FIELD(grouped_rel_info_list);
+ WRITE_INT_FIELD(join_cur_level);
+ WRITE_NODE_FIELD(init_plans);
+ WRITE_NODE_FIELD(cte_plan_ids);
+ WRITE_NODE_FIELD(multiexpr_params);
+ WRITE_NODE_FIELD(join_domains);
+ WRITE_NODE_FIELD(eq_classes);
+ WRITE_BOOL_FIELD(ec_merging_done);
+ WRITE_NODE_FIELD(canon_pathkeys);
+ WRITE_NODE_FIELD(left_join_clauses);
+ WRITE_NODE_FIELD(right_join_clauses);
+ WRITE_NODE_FIELD(full_join_clauses);
+ WRITE_NODE_FIELD(join_info_list);
+ WRITE_INT_FIELD(last_rinfo_serial);
+ WRITE_BITMAPSET_FIELD(all_result_relids);
+ WRITE_BITMAPSET_FIELD(leaf_result_relids);
+ WRITE_NODE_FIELD(append_rel_list);
+ WRITE_NODE_FIELD(row_identity_vars);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_NODE_FIELD(placeholder_list);
+ WRITE_NODE_FIELD(grouped_var_list);
+ WRITE_NODE_FIELD(fkey_list);
+ WRITE_NODE_FIELD(query_pathkeys);
+ WRITE_NODE_FIELD(group_pathkeys);
+ WRITE_INT_FIELD(num_groupby_pathkeys);
+ WRITE_NODE_FIELD(window_pathkeys);
+ WRITE_NODE_FIELD(distinct_pathkeys);
+ WRITE_NODE_FIELD(sort_pathkeys);
+ WRITE_NODE_FIELD(processed_groupClause);
+ WRITE_NODE_FIELD(processed_distinctClause);
+ WRITE_NODE_FIELD(processed_tlist);
+ WRITE_INT_FIELD(max_sortgroupref);
+ WRITE_NODE_FIELD(update_colnos);
+ WRITE_NODE_FIELD(minmax_aggs);
+ WRITE_FLOAT_FIELD(total_table_pages);
+ WRITE_FLOAT_FIELD(tuple_fraction);
+ WRITE_FLOAT_FIELD(limit_tuples);
+ WRITE_UINT_FIELD(qual_security_level);
+ WRITE_BOOL_FIELD(hasJoinRTEs);
+ WRITE_BOOL_FIELD(hasLateralRTEs);
+ WRITE_BOOL_FIELD(hasHavingQual);
+ WRITE_BOOL_FIELD(hasPseudoConstantQuals);
+ WRITE_BOOL_FIELD(hasAlternativeSubPlans);
+ WRITE_BOOL_FIELD(placeholdersFrozen);
+ WRITE_BOOL_FIELD(hasRecursion);
+ WRITE_NODE_FIELD(agginfos);
+ WRITE_NODE_FIELD(aggtransinfos);
+ WRITE_INT_FIELD(numOrderedAggs);
+ WRITE_BOOL_FIELD(hasNonPartialAggs);
+ WRITE_BOOL_FIELD(hasNonSerialAggs);
+ WRITE_INT_FIELD(wt_param_id);
+ WRITE_NODE_FIELD(non_recursive_path);
+ WRITE_BITMAPSET_FIELD(curOuterRels);
+ WRITE_NODE_FIELD(curOuterParams);
+ WRITE_BOOL_FIELD(partColsUpdated);
}
static void
-_outAlterEnumStmt(StringInfo str, AlterEnumStmt *node)
+_outForeignKeyOptInfo(StringInfo str, const ForeignKeyOptInfo *node)
{
- WRITE_NODE_TYPE("ALTERENUMSTMT");
-
- WRITE_NODE_FIELD(typeName);
- WRITE_STRING_FIELD(oldVal);
- WRITE_STRING_FIELD(newVal);
- WRITE_STRING_FIELD(newValNeighbor);
- WRITE_BOOL_FIELD(newValIsAfter);
- WRITE_BOOL_FIELD(skipIfNewValExists);
+ WRITE_NODE_TYPE("FOREIGNKEYOPTINFO");
+
+ WRITE_UINT_FIELD(con_relid);
+ WRITE_UINT_FIELD(ref_relid);
+ WRITE_INT_FIELD(nkeys);
+ WRITE_ATTRNUMBER_ARRAY(conkey, node->nkeys);
+ WRITE_ATTRNUMBER_ARRAY(confkey, node->nkeys);
+ WRITE_OID_ARRAY(conpfeqop, node->nkeys);
+ WRITE_INT_FIELD(nmatched_ec);
+ WRITE_INT_FIELD(nconst_ec);
+ WRITE_INT_FIELD(nmatched_rcols);
+ WRITE_INT_FIELD(nmatched_ri);
}
static void
-_outCreateFdwStmt(StringInfo str, CreateFdwStmt *node)
+_outEquivalenceClass(StringInfo str, const EquivalenceClass *node)
{
- WRITE_NODE_TYPE("CREATEFDWSTMT");
-
- WRITE_STRING_FIELD(fdwname);
- WRITE_NODE_FIELD(func_options);
- WRITE_NODE_FIELD(options);
+ /*
+ * To simplify reading, we just chase up to the topmost merged EC and
+ * print that, without bothering to show the merge-ees separately.
+ */
+ while (node->ec_merged)
+ node = node->ec_merged;
+
+ WRITE_NODE_TYPE("EQUIVALENCECLASS");
+
+ WRITE_NODE_FIELD(ec_opfamilies);
+ WRITE_OID_FIELD(ec_collation);
+ WRITE_NODE_FIELD(ec_members);
+ WRITE_NODE_FIELD(ec_sources);
+ WRITE_NODE_FIELD(ec_derives);
+ WRITE_BITMAPSET_FIELD(ec_relids);
+ WRITE_BOOL_FIELD(ec_has_const);
+ WRITE_BOOL_FIELD(ec_has_volatile);
+ WRITE_BOOL_FIELD(ec_broken);
+ WRITE_UINT_FIELD(ec_sortref);
+ WRITE_UINT_FIELD(ec_min_security);
+ WRITE_UINT_FIELD(ec_max_security);
}
static void
-_outAlterFdwStmt(StringInfo str, AlterFdwStmt *node)
+_outExtensibleNode(StringInfo str, const ExtensibleNode *node)
{
- WRITE_NODE_TYPE("ALTERFDWSTMT");
+ const ExtensibleNodeMethods *methods;
- WRITE_STRING_FIELD(fdwname);
- WRITE_NODE_FIELD(func_options);
- WRITE_NODE_FIELD(options);
-}
+ methods = GetExtensibleNodeMethods(node->extnodename, false);
-static void
-_outCreateForeignServerStmt(StringInfo str, CreateForeignServerStmt *node)
-{
- WRITE_NODE_TYPE("CREATEFOREIGNSERVERSTMT");
+ WRITE_NODE_TYPE("EXTENSIBLENODE");
- WRITE_STRING_FIELD(servername);
- WRITE_STRING_FIELD(servertype);
- WRITE_STRING_FIELD(version);
- WRITE_STRING_FIELD(fdwname);
- WRITE_NODE_FIELD(options);
+ WRITE_STRING_FIELD(extnodename);
+
+ /* serialize the private fields */
+ methods->nodeOut(str, node);
}
static void
-_outAddForeignSegstmt(StringInfo str, AddForeignSegStmt *node)
+_outSerializedParams(StringInfo str, const SerializedParams *node)
{
- WRITE_NODE_TYPE("ADDFOREIGNSEGSTMT");
+ WRITE_NODE_TYPE("SERIALIZEDPARAMS");
- WRITE_STRING_FIELD(servername);
- WRITE_STRING_FIELD(tablename);
- WRITE_NODE_FIELD(options);
-}
+ WRITE_INT_FIELD(nExternParams);
+ for (int i = 0; i < node->nExternParams; i++)
+ {
+ WRITE_BOOL_FIELD(externParams[i].isnull);
+ WRITE_INT_FIELD(externParams[i].pflags);
+ WRITE_OID_FIELD(externParams[i].ptype);
+ WRITE_INT_FIELD(externParams[i].plen);
+ WRITE_BOOL_FIELD(externParams[i].pbyval);
+
+ if (!node->externParams[i].isnull)
+ _outDatum(str,
+ node->externParams[i].value,
+ node->externParams[i].plen,
+ node->externParams[i].pbyval);
+ }
-static void
-_outAlterForeignServerStmt(StringInfo str, AlterForeignServerStmt *node)
-{
- WRITE_NODE_TYPE("ALTERFOREIGNSERVERSTMT");
+ WRITE_INT_FIELD(nExecParams);
+ for (int i = 0; i < node->nExecParams; i++)
+ {
+ WRITE_BOOL_FIELD(execParams[i].isnull);
+ WRITE_BOOL_FIELD(execParams[i].isvalid);
+ WRITE_INT_FIELD(execParams[i].plen);
+ WRITE_BOOL_FIELD(execParams[i].pbyval);
+
+ if (node->execParams[i].isvalid && !node->execParams[i].isnull)
+ _outDatum(str,
+ node->execParams[i].value,
+ node->execParams[i].plen,
+ node->execParams[i].pbyval);
+ WRITE_BOOL_FIELD(execParams[i].pbyval);
+ }
- WRITE_STRING_FIELD(servername);
- WRITE_STRING_FIELD(version);
- WRITE_NODE_FIELD(options);
- WRITE_BOOL_FIELD(has_version);
+ /*
+ * No text output function for TupleDescNodes. But that's OK, we
+ * only support text output for debugging purposes.
+ */
+ WRITE_NODE_FIELD(transientTypes);
}
static void
-_outCreateStorageServerStmt(StringInfo str, CreateStorageServerStmt *node)
+_outSliceTable(StringInfo str, const SliceTable *node)
{
- WRITE_NODE_TYPE("CREATESTORAGESERVERSTMT");
+ WRITE_NODE_TYPE("SLICETABLE");
- WRITE_STRING_FIELD(servername);
- WRITE_NODE_FIELD(options);
+ WRITE_INT_FIELD(localSlice);
+ WRITE_INT_FIELD(numSlices);
+ for (int i = 0; i < node->numSlices; i++)
+ {
+ WRITE_INT_FIELD(slices[i].sliceIndex);
+ WRITE_INT_FIELD(slices[i].rootIndex);
+ WRITE_INT_FIELD(slices[i].parentIndex);
+ WRITE_INT_FIELD(slices[i].planNumSegments);
+ WRITE_NODE_FIELD(slices[i].children); /* List of int index */
+ WRITE_ENUM_FIELD(slices[i].gangType, GangType);
+ WRITE_NODE_FIELD(slices[i].segments); /* List of int */
+ WRITE_BOOL_FIELD(slices[i].useMppParallelMode);
+ WRITE_INT_FIELD(slices[i].parallel_workers);
+ WRITE_DUMMY_FIELD(slices[i].primaryGang);
+ WRITE_NODE_FIELD(slices[i].primaryProcesses); /* List of (CDBProcess *) */
+ WRITE_BITMAPSET_FIELD(slices[i].processesMap);
+ }
+ WRITE_BOOL_FIELD(hasMotions);
+ WRITE_INT_FIELD(instrument_options);
+ WRITE_INT_FIELD(ic_instance_id);
}
static void
-_outAlterStorageServerStmt(StringInfo str, AlterStorageServerStmt *node)
+_outTupleDescNode(StringInfo str, const TupleDescNode *node)
{
- WRITE_NODE_TYPE("ALTERSTORAGESERVERSTMT");
+ int i;
- WRITE_STRING_FIELD(servername);
- WRITE_NODE_FIELD(options);
-}
+ Assert(node->tuple->tdtypeid == RECORDOID);
-static void
-_outDropStorageServerStmt(StringInfo str, DropStorageServerStmt *node)
-{
- WRITE_NODE_TYPE("DROPSTORAGESERVERSTMT");
+ WRITE_NODE_TYPE("TUPLEDESCNODE");
+ WRITE_INT_FIELD(natts);
+ WRITE_INT_FIELD(tuple->natts);
- WRITE_STRING_FIELD(servername);
- WRITE_BOOL_FIELD(missing_ok);
-}
+ for (i = 0; i < node->tuple->natts; i++)
+ appendBinaryStringInfo(str, (char *) &node->tuple->attrs[i], ATTRIBUTE_FIXED_PART_SIZE);
-static void
-_outCreateUserMappingStmt(StringInfo str, CreateUserMappingStmt *node)
-{
- WRITE_NODE_TYPE("CREATEUSERMAPPINGSTMT");
+ Assert(node->tuple->constr == NULL);
- WRITE_NODE_FIELD(user);
- WRITE_STRING_FIELD(servername);
- WRITE_NODE_FIELD(options);
+ WRITE_OID_FIELD(tuple->tdtypeid);
+ WRITE_INT_FIELD(tuple->tdtypmod);
+ WRITE_INT_FIELD(tuple->tdrefcount);
}
static void
-_outAlterUserMappingStmt(StringInfo str, AlterUserMappingStmt *node)
+wrapStringList(List *list)
{
- WRITE_NODE_TYPE("ALTERUSERMAPPINGSTMT");
+ ListCell *lc;
- WRITE_NODE_FIELD(user);
- WRITE_STRING_FIELD(servername);
- WRITE_NODE_FIELD(options);
+ foreach(lc, list)
+ {
+ char *str = (char *) lfirst(lc);
+
+ lfirst(lc) = makeString(str);
+ }
}
static void
-_outDropUserMappingStmt(StringInfo str, DropUserMappingStmt *node)
+unwrapStringList(List *list)
{
- WRITE_NODE_TYPE("DROPUSERMAPPINGSTMT");
+ ListCell *lc;
+
+ foreach(lc, list)
+ {
+ String *val = lfirst(lc);
- WRITE_NODE_FIELD(user);
- WRITE_STRING_FIELD(servername);
- WRITE_BOOL_FIELD(missing_ok);
+ lfirst(lc) = strVal(val);
+ pfree(val);
+ }
}
static void
-_outCreateStorageUserMappingStmt(StringInfo str, CreateStorageUserMappingStmt *node)
+_outAlteredTableInfo(StringInfo str, const AlteredTableInfo *node)
{
- WRITE_NODE_TYPE("CREATEUSERMAPPINGSTMT");
+ ListCell *lc;
- WRITE_NODE_FIELD(user);
- WRITE_STRING_FIELD(servername);
- WRITE_NODE_FIELD(options);
-}
+ WRITE_NODE_TYPE("ALTEREDTABLEINFO");
-static void
-_outAlterStorageUserMappingStmt(StringInfo str, AlterStorageUserMappingStmt *node)
-{
- WRITE_NODE_TYPE("ALTERSTORAGEUSERMAPPINGSTMT");
+ WRITE_OID_FIELD(relid);
+ WRITE_CHAR_FIELD(relkind);
+ /* oldDesc is omitted */
- WRITE_NODE_FIELD(user);
- WRITE_STRING_FIELD(servername);
- WRITE_NODE_FIELD(options);
-}
+ for (int i = 0; i < AT_NUM_PASSES; i++)
+ {
+ WRITE_NODE_FIELD(subcmds[i]);
+ }
-static void
-_outDropStorageUserMappingStmt(StringInfo str, DropStorageUserMappingStmt *node)
-{
- WRITE_NODE_TYPE("DROPSTORAGEUSERMAPPINGSTMT");
+ /*
+ * These aren't Nodes in upstream, so make sure the node tags
+ * are set correctly before trying to serialize them.
+ */
+ foreach(lc, node->constraints)
+ {
+ NewConstraint *e = (NewConstraint *) lfirst(lc);
+ e->type = T_NewConstraint;
+ }
+ foreach(lc, node->newvals)
+ {
+ NewColumnValue *e = (NewColumnValue *) lfirst(lc);
+ e->type = T_NewColumnValue;
+ }
- WRITE_NODE_FIELD(user);
- WRITE_STRING_FIELD(servername);
- WRITE_BOOL_FIELD(missing_ok);
+ WRITE_NODE_FIELD(constraints);
+ WRITE_NODE_FIELD(newvals);
+ WRITE_NODE_FIELD(afterStmts);
+ WRITE_BOOL_FIELD(verify_new_notnull);
+ WRITE_INT_FIELD(rewrite);
+ WRITE_OID_FIELD(newAccessMethod);
+ WRITE_BOOL_FIELD(dist_opfamily_changed);
+ WRITE_OID_FIELD(new_opclass);
+ /*
+ * NB: newTableSpace is excluded, it will be assigned in phase 1 of AlterTable.
+ * If newTableSpace is required, refer to the name in its corresponding cmd.
+ * If newTableSpace is strongly required in serialization, please add it
+ * and update `ATPrepSetTableSpace()` to avoid error.
+ */
+ WRITE_BOOL_FIELD(chgPersistence);
+ WRITE_CHAR_FIELD(newrelpersistence);
+ WRITE_NODE_FIELD(partition_constraint);
+ WRITE_BOOL_FIELD(validate_default);
+ WRITE_NODE_FIELD(changedConstraintOids);
+
+ /* node->changedConstraintDefs is a list of naked strings, so
+ * we can't use WRITE_NODE_FIELD on it. Temporarily wrap them in Values.
+ */
+ wrapStringList(node->changedConstraintDefs);
+ WRITE_NODE_FIELD(changedConstraintDefs);
+ /* unwrap them again */
+ unwrapStringList(node->changedConstraintDefs);
+
+ WRITE_NODE_FIELD(changedIndexOids);
+ wrapStringList(node->changedIndexDefs);
+ WRITE_NODE_FIELD(changedIndexDefs);
+ unwrapStringList(node->changedIndexDefs);
+ WRITE_NODE_FIELD(beforeStmtLists);
+ WRITE_NODE_FIELD(constraintLists);
}
static void
-_outAlterObjectDependsStmt(StringInfo str, const AlterObjectDependsStmt *node)
+_outNewConstraint(StringInfo str, const NewConstraint *node)
{
- WRITE_NODE_TYPE("ALTEROBJECTDEPENDSSTMT");
+ WRITE_NODE_TYPE("NEWCONSTRAINT");
- WRITE_ENUM_FIELD(objectType,ObjectType);
- WRITE_NODE_FIELD(relation);
- WRITE_NODE_FIELD(object);
- WRITE_NODE_FIELD(extname);
+ WRITE_STRING_FIELD(name);
+ WRITE_ENUM_FIELD(contype, ConstrType);
+ WRITE_OID_FIELD(refrelid);
+ WRITE_OID_FIELD(refindid);
+ WRITE_OID_FIELD(conid);
+ WRITE_NODE_FIELD(qual);
+ /* can't serialize qualstate */
}
static void
-_outCustomScan(StringInfo str, const CustomScan *node)
+_outPlannedStmt(StringInfo str, const PlannedStmt *node)
{
- WRITE_NODE_TYPE("CUSTOMSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_UINT_FIELD(flags);
- WRITE_NODE_FIELD(custom_plans);
- WRITE_NODE_FIELD(custom_exprs);
- WRITE_NODE_FIELD(custom_private);
- WRITE_NODE_FIELD(custom_scan_tlist);
- WRITE_BITMAPSET_FIELD(custom_relids);
- WRITE_STRING_FIELD(methods->CustomName);
-}
+ WRITE_NODE_TYPE("PLANNEDSTMT");
-static void
-_outAccessPriv(StringInfo str, AccessPriv *node)
-{
- WRITE_NODE_TYPE("ACCESSPRIV");
+ WRITE_ENUM_FIELD(commandType, CmdType);
+ WRITE_ENUM_FIELD(planGen, PlanGenerator);
+ WRITE_UINT64_FIELD(queryId);
+ WRITE_BOOL_FIELD(hasReturning);
+ WRITE_BOOL_FIELD(hasModifyingCTE);
+ WRITE_BOOL_FIELD(canSetTag);
+ WRITE_BOOL_FIELD(transientPlan);
+ WRITE_BOOL_FIELD(oneoffPlan);
+ WRITE_OID_FIELD(simplyUpdatableRel);
+ WRITE_BOOL_FIELD(dependsOnRole);
+ WRITE_BOOL_FIELD(parallelModeNeeded);
+ WRITE_INT_FIELD(jitFlags);
+ WRITE_NODE_FIELD(planTree);
+ WRITE_NODE_FIELD(rtable);
+ WRITE_NODE_FIELD(permInfos);
+ WRITE_NODE_FIELD(resultRelations);
+ WRITE_NODE_FIELD(appendRelations);
+ WRITE_NODE_FIELD(subplans);
+ WRITE_BITMAPSET_FIELD(rewindPlanIDs);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_NODE_FIELD(relationOids);
+ WRITE_NODE_FIELD(paramExecTypes);
+ WRITE_NODE_FIELD(utilityStmt);
+ WRITE_LOCATION_FIELD(stmt_location);
+ WRITE_INT_FIELD(stmt_len);
- WRITE_STRING_FIELD(priv_name);
- WRITE_NODE_FIELD(cols);
-}
+ WRITE_INT_ARRAY(subplan_sliceIds, list_length(node->subplans));
-static void
-_outAlterTableMoveAllStmt(StringInfo str, AlterTableMoveAllStmt *node)
-{
- WRITE_NODE_TYPE("ALTERTABLESPACEMOVESTMT");
+ WRITE_INT_FIELD(numSlices);
+ for (int i = 0; i < node->numSlices; i++)
+ {
+ WRITE_INT_FIELD(slices[i].sliceIndex);
+ WRITE_INT_FIELD(slices[i].parentIndex);
+ WRITE_INT_FIELD(slices[i].gangType);
+ WRITE_INT_FIELD(slices[i].numsegments);
+ WRITE_INT_FIELD(slices[i].parallel_workers);
+ WRITE_INT_FIELD(slices[i].segindex);
+ WRITE_BOOL_FIELD(slices[i].directDispatch.isDirectDispatch);
+ WRITE_NODE_FIELD(slices[i].directDispatch.contentIds);
+ }
- WRITE_STRING_FIELD(orig_tablespacename);
- WRITE_ENUM_FIELD(objtype, ObjectType);
- WRITE_NODE_FIELD(roles);
- WRITE_STRING_FIELD(new_tablespacename);
- WRITE_BOOL_FIELD(nowait);
-}
+ WRITE_BITMAPSET_FIELD(rewindPlanIDs);
-static void
-_outAlterTableSpaceOptionsStmt(StringInfo str, AlterTableSpaceOptionsStmt *node)
-{
- WRITE_NODE_TYPE("ALTERTABLESPACEOPTIONS");
+ WRITE_NODE_FIELD(intoPolicy);
- WRITE_STRING_FIELD(tablespacename);
- WRITE_NODE_FIELD(options);
- WRITE_BOOL_FIELD(isReset);
- WRITE_NODE_FIELD(tags);
- WRITE_BOOL_FIELD(unsettag);
-}
+ WRITE_UINT64_FIELD(query_mem);
-static void
-_outCreateAmStmt(StringInfo str, const CreateAmStmt *node)
-{
- WRITE_NODE_TYPE("CREATEAMSTMT");
+ WRITE_NODE_FIELD(intoClause);
+ WRITE_NODE_FIELD(copyIntoClause);
+ WRITE_NODE_FIELD(refreshClause);
+ WRITE_INT_FIELD(metricsQueryType);
+ WRITE_NODE_FIELD(extensionContext);
- WRITE_STRING_FIELD(amname);
- WRITE_NODE_FIELD(handler_name);
- WRITE_INT_FIELD(amtype);
-}
-static void
-_outAggExprId(StringInfo str, const AggExprId *node)
-{
- WRITE_NODE_TYPE("AGGEXPRID");
}
+
static void
-_outRowIdExpr(StringInfo str, const RowIdExpr *node)
+_outMotion(StringInfo str, const Motion *node)
{
- WRITE_NODE_TYPE("ROWIDEXPR");
-
- WRITE_INT_FIELD(rowidexpr_id);
+ WRITE_NODE_TYPE("MOTION");
+
+ WRITE_FLOAT_FIELD(plan.startup_cost);
+ WRITE_FLOAT_FIELD(plan.total_cost);
+ WRITE_FLOAT_FIELD(plan.plan_rows);
+ WRITE_INT_FIELD(plan.plan_width);
+ WRITE_BOOL_FIELD(plan.parallel_aware);
+ WRITE_BOOL_FIELD(plan.parallel_safe);
+ WRITE_BOOL_FIELD(plan.async_capable);
+ WRITE_INT_FIELD(plan.plan_node_id);
+ WRITE_NODE_FIELD(plan.targetlist);
+ WRITE_NODE_FIELD(plan.qual);
+ WRITE_NODE_FIELD(plan.lefttree);
+ WRITE_NODE_FIELD(plan.righttree);
+ WRITE_NODE_FIELD(plan.initPlan);
+ WRITE_BITMAPSET_FIELD(plan.extParam);
+ WRITE_BITMAPSET_FIELD(plan.allParam);
+ WRITE_NODE_FIELD(plan.flow);
+ WRITE_UINT_FIELD(plan.locustype);
+ WRITE_INT_FIELD(plan.parallel);
+ WRITE_UINT64_FIELD(plan.operatorMemKB);
+
+ WRITE_INT_FIELD(motionID);
+ WRITE_ENUM_FIELD(motionType, MotionType);
+
+ WRITE_BOOL_FIELD(sendSorted);
+
+ WRITE_NODE_FIELD(hashExprs);
+ WRITE_OID_ARRAY(hashFuncs, list_length(node->hashExprs));
+ WRITE_INT_FIELD(numSortCols);
+ WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numSortCols);
+ WRITE_INT_ARRAY(sortOperators, node->numSortCols);
+ WRITE_INT_ARRAY(collations, node->numSortCols);
+ WRITE_BOOL_ARRAY(nullsFirst, node->numSortCols);
+ WRITE_INT_FIELD(segidColIdx);
+
+ WRITE_INT_FIELD(numHashSegments);
}
static void
-_outGpSplitPartitionCmd(StringInfo str, const GpSplitPartitionCmd *node)
+_outOidAssignment(StringInfo str, const OidAssignment *node)
{
- WRITE_NODE_TYPE("GPSPLITPARTITIONCMD");
-
- WRITE_NODE_FIELD(partid);
- WRITE_NODE_FIELD(start);
- WRITE_NODE_FIELD(end);
- WRITE_NODE_FIELD(at);
- WRITE_NODE_FIELD(arg2);
+ WRITE_NODE_TYPE("OIDASSIGNMENT");
+
+ WRITE_OID_FIELD(catalog);
+ WRITE_STRING_FIELD(objname);
+ WRITE_OID_FIELD(namespaceOid);
+ WRITE_OID_FIELD(keyOid1);
+ WRITE_OID_FIELD(keyOid2);
+ WRITE_OID_FIELD(oid);
}
+#include "outfast.funcs.c"
+
/*
* _outNode -
* converts a Node into binary string and append it to 'str'
@@ -905,1092 +1191,8 @@ _outNode(StringInfo str, void *obj)
{
switch (nodeTag(obj))
{
- case T_PlannedStmt:
- _outPlannedStmt(str,obj);
- break;
- case T_QueryDispatchDesc:
- _outQueryDispatchDesc(str,obj);
- break;
- case T_SerializedParams:
- _outSerializedParams(str, obj);
- break;
- case T_OidAssignment:
- _outOidAssignment(str,obj);
- break;
- case T_Plan:
- _outPlan(str, obj);
- break;
- case T_Result:
- _outResult(str, obj);
- break;
- case T_ProjectSet:
- _outProjectSet(str, obj);
- break;
- case T_ModifyTable:
- _outModifyTable(str, obj);
- break;
- case T_Append:
- _outAppend(str, obj);
- break;
- case T_MergeAppend:
- _outMergeAppend(str, obj);
- break;
- case T_Sequence:
- _outSequence(str, obj);
- break;
- case T_RecursiveUnion:
- _outRecursiveUnion(str, obj);
- break;
- case T_BitmapAnd:
- _outBitmapAnd(str, obj);
- break;
- case T_BitmapOr:
- _outBitmapOr(str, obj);
- break;
- case T_Gather:
- _outGather(str, obj);
- break;
- case T_GatherMerge:
- _outGatherMerge(str, obj);
- break;
- case T_Scan:
- _outScan(str, obj);
- break;
- case T_SeqScan:
- _outSeqScan(str, obj);
- break;
- case T_DynamicSeqScan:
- _outDynamicSeqScan(str, obj);
- break;
- case T_ExternalScanInfo:
- _outExternalScanInfo(str, obj);
- break;
- case T_SampleScan:
- _outSampleScan(str, obj);
- break;
- case T_IndexScan:
- _outIndexScan(str, obj);
- break;
- case T_IndexOnlyScan:
- _outIndexOnlyScan(str, obj);
- break;
- case T_DynamicIndexScan:
- _outDynamicIndexScan(str, obj);
- break;
- case T_DynamicIndexOnlyScan:
- _outDynamicIndexOnlyScan(str, obj);
- break;
- case T_BitmapIndexScan:
- _outBitmapIndexScan(str, obj);
- break;
- case T_DynamicBitmapIndexScan:
- _outDynamicBitmapIndexScan(str, obj);
- break;
- case T_BitmapHeapScan:
- _outBitmapHeapScan(str, obj);
- break;
- case T_DynamicBitmapHeapScan:
- _outDynamicBitmapHeapScan(str, obj);
- break;
- case T_TidScan:
- _outTidScan(str, obj);
- break;
- case T_TidRangeScan:
- _outTidRangeScan(str, obj);
- break;
- case T_SubqueryScan:
- _outSubqueryScan(str, obj);
- break;
- case T_FunctionScan:
- _outFunctionScan(str, obj);
- break;
- case T_TableFuncScan:
- _outTableFuncScan(str, obj);
- break;
- case T_ValuesScan:
- _outValuesScan(str, obj);
- break;
- case T_CteScan:
- _outCteScan(str, obj);
- break;
- case T_NamedTuplestoreScan:
- _outNamedTuplestoreScan(str, obj);
- break;
- case T_WorkTableScan:
- _outWorkTableScan(str, obj);
- break;
- case T_ForeignScan:
- _outForeignScan(str, obj);
- break;
- case T_DynamicForeignScan:
- _outDynamicForeignScan(str, obj);
- break;
- case T_CustomScan:
- _outCustomScan(str, obj);
- break;
- case T_Join:
- _outJoin(str, obj);
- break;
- case T_NestLoop:
- _outNestLoop(str, obj);
- break;
- case T_MergeJoin:
- _outMergeJoin(str, obj);
- break;
- case T_HashJoin:
- _outHashJoin(str, obj);
- break;
- case T_Agg:
- _outAgg(str, obj);
- break;
- case T_TupleSplit:
- _outTupleSplit(str, obj);
- break;
- case T_DQAExpr:
- _outDQAExpr(str, obj);
- break;
- case T_WindowAgg:
- _outWindowAgg(str, obj);
- break;
- case T_WindowHashAgg:
- _outWindowHashAgg(str, obj);
- break;
- case T_Group:
- _outGroup(str, obj);
- break;
- case T_TableFunctionScan:
- _outTableFunctionScan(str, obj);
- break;
- case T_Material:
- _outMaterial(str, obj);
- break;
- case T_ShareInputScan:
- _outShareInputScan(str, obj);
- break;
- case T_Memoize:
- _outMemoize(str, obj);
- break;
- case T_Sort:
- _outSort(str, obj);
- break;
- case T_IncrementalSort:
- _outIncrementalSort(str, obj);
- break;
- case T_Unique:
- _outUnique(str, obj);
- break;
- case T_Hash:
- _outHash(str, obj);
- break;
- case T_SetOp:
- _outSetOp(str, obj);
- break;
- case T_LockRows:
- _outLockRows(str, obj);
- break;
- case T_RuntimeFilter:
- _outRuntimeFilter(str, obj);
- break;
- case T_Limit:
- _outLimit(str, obj);
- break;
- case T_NestLoopParam:
- _outNestLoopParam(str, obj);
- break;
- case T_PlanRowMark:
- _outPlanRowMark(str, obj);
- break;
- case T_PartitionPruneInfo:
- _outPartitionPruneInfo(str, obj);
- break;
- case T_PartitionedRelPruneInfo:
- _outPartitionedRelPruneInfo(str, obj);
- break;
- case T_PartitionPruneStepOp:
- _outPartitionPruneStepOp(str, obj);
- break;
- case T_PartitionPruneStepCombine:
- _outPartitionPruneStepCombine(str, obj);
- break;
- case T_Motion:
- _outMotion(str, obj);
- break;
- case T_SplitUpdate:
- _outSplitUpdate(str, obj);
- break;
- case T_SplitMerge:
- _outSplitMerge(str, obj);
- break;
- case T_AssertOp:
- _outAssertOp(str, obj);
- break;
- case T_PartitionSelector:
- _outPartitionSelector(str, obj);
- break;
- case T_GpPartDefElem:
- _outGpPartDefElem(str, obj);
- break;
- case T_Alias:
- _outAlias(str, obj);
- break;
- case T_RangeVar:
- _outRangeVar(str, obj);
- break;
- case T_TableFunc:
- _outTableFunc(str, obj);
- break;
- case T_IntoClause:
- _outIntoClause(str, obj);
- break;
- case T_CopyIntoClause:
- _outCopyIntoClause(str, obj);
- break;
- case T_RefreshClause:
- _outRefreshClause(str, obj);
- break;
- case T_Var:
- _outVar(str, obj);
- break;
- case T_Const:
- _outConst(str, obj);
- break;
- case T_Param:
- _outParam(str, obj);
- break;
- case T_Aggref:
- _outAggref(str, obj);
- break;
- case T_GroupingFunc:
- _outGroupingFunc(str, obj);
- break;
- case T_GroupId:
- _outGroupId(str, obj);
- break;
- case T_GroupingSetId:
- _outGroupingSetId(str, obj);
- break;
- case T_WindowFunc:
- _outWindowFunc(str, obj);
- break;
- case T_SubscriptingRef:
- _outSubscriptingRef(str, obj);
- break;
- case T_FuncExpr:
- _outFuncExpr(str, obj);
- break;
- case T_NamedArgExpr:
- _outNamedArgExpr(str, obj);
- break;
- case T_OpExpr:
- _outOpExpr(str, obj);
- break;
- case T_DistinctExpr:
- _outDistinctExpr(str, obj);
- break;
- case T_ScalarArrayOpExpr:
- _outScalarArrayOpExpr(str, obj);
- break;
- case T_BoolExpr:
- _outBoolExpr(str, obj);
- break;
- case T_SubLink:
- _outSubLink(str, obj);
- break;
- case T_SubPlan:
- _outSubPlan(str, obj);
- break;
- case T_AlternativeSubPlan:
- _outAlternativeSubPlan(str, obj);
- break;
- case T_FieldSelect:
- _outFieldSelect(str, obj);
- break;
- case T_FieldStore:
- _outFieldStore(str, obj);
- break;
- case T_RelabelType:
- _outRelabelType(str, obj);
- break;
- case T_CoerceViaIO:
- _outCoerceViaIO(str, obj);
- break;
- case T_ArrayCoerceExpr:
- _outArrayCoerceExpr(str, obj);
- break;
- case T_ConvertRowtypeExpr:
- _outConvertRowtypeExpr(str, obj);
- break;
- case T_CollateExpr:
- _outCollateExpr(str, obj);
- break;
- case T_CaseExpr:
- _outCaseExpr(str, obj);
- break;
- case T_CaseWhen:
- _outCaseWhen(str, obj);
- break;
- case T_CaseTestExpr:
- _outCaseTestExpr(str, obj);
- break;
- case T_ArrayExpr:
- _outArrayExpr(str, obj);
- break;
- case T_RowExpr:
- _outRowExpr(str, obj);
- break;
- case T_RowCompareExpr:
- _outRowCompareExpr(str, obj);
- break;
- case T_CoalesceExpr:
- _outCoalesceExpr(str, obj);
- break;
- case T_MinMaxExpr:
- _outMinMaxExpr(str, obj);
- break;
- case T_NullIfExpr:
- _outNullIfExpr(str, obj);
- break;
- case T_NullTest:
- _outNullTest(str, obj);
- break;
- case T_BooleanTest:
- _outBooleanTest(str, obj);
- break;
- case T_SQLValueFunction:
- _outSQLValueFunction(str, obj);
- break;
- case T_XmlExpr:
- _outXmlExpr(str, obj);
- break;
- case T_CoerceToDomain:
- _outCoerceToDomain(str, obj);
- break;
- case T_CoerceToDomainValue:
- _outCoerceToDomainValue(str, obj);
- break;
- case T_SetToDefault:
- _outSetToDefault(str, obj);
- break;
- case T_CurrentOfExpr:
- _outCurrentOfExpr(str, obj);
- break;
- case T_NextValueExpr:
- _outNextValueExpr(str, obj);
- break;
- case T_InferenceElem:
- _outInferenceElem(str, obj);
- break;
- case T_TargetEntry:
- _outTargetEntry(str, obj);
- break;
- case T_RangeTblRef:
- _outRangeTblRef(str, obj);
- break;
- case T_JoinExpr:
- _outJoinExpr(str, obj);
- break;
- case T_FromExpr:
- _outFromExpr(str, obj);
- break;
- case T_OnConflictExpr:
- _outOnConflictExpr(str, obj);
- break;
- case T_CreateExtensionStmt:
- _outCreateExtensionStmt(str, obj);
- break;
- case T_GrantStmt:
- _outGrantStmt(str, obj);
- break;
- case T_AccessPriv:
- _outAccessPriv(str, obj);
- break;
- case T_ObjectWithArgs:
- _outObjectWithArgs(str, obj);
- break;
- case T_GrantRoleStmt:
- _outGrantRoleStmt(str, obj);
- break;
- case T_LockStmt:
- _outLockStmt(str, obj);
- break;
-
- case T_ExtensibleNode:
- _outExtensibleNode(str, obj);
- break;
-
- case T_CreateStmt:
- _outCreateStmt(str, obj);
- break;
- case T_CreateForeignTableStmt:
- _outCreateForeignTableStmt(str, obj);
- break;
- case T_DistributionKeyElem:
- _outDistributionKeyElem(str, obj);
- break;
- case T_ColumnReferenceStorageDirective:
- _outColumnReferenceStorageDirective(str, obj);
- break;
- case T_RoleSpec:
- _outRoleSpec(str, obj);
- break;
-
- case T_SegfileMapNode:
- _outSegfileMapNode(str, obj);
- break;
-
- case T_ExtTableTypeDesc:
- _outExtTableTypeDesc(str, obj);
- break;
- case T_CreateExternalStmt:
- _outCreateExternalStmt(str, obj);
- break;
-
- case T_IndexStmt:
- _outIndexStmt(str, obj);
- break;
- case T_ReindexStmt:
- _outReindexStmt(str, obj);
- break;
- case T_ReindexIndexInfo:
- _outReindexIndexInfo(str, obj);
- break;
-
- case T_ConstraintsSetStmt:
- _outConstraintsSetStmt(str, obj);
- break;
-
- case T_CreateFunctionStmt:
- _outCreateFunctionStmt(str, obj);
- break;
- case T_FunctionParameter:
- _outFunctionParameter(str, obj);
- break;
- case T_AlterFunctionStmt:
- _outAlterFunctionStmt(str, obj);
- break;
-
- case T_AlterObjectDependsStmt:
- _outAlterObjectDependsStmt(str, obj);
- break;
-
- case T_DefineStmt:
- _outDefineStmt(str,obj);
- break;
-
- case T_CompositeTypeStmt:
- _outCompositeTypeStmt(str,obj);
- break;
- case T_CreateEnumStmt:
- _outCreateEnumStmt(str,obj);
- break;
- case T_CreateRangeStmt:
- _outCreateRangeStmt(str, obj);
- break;
- case T_AlterEnumStmt:
- _outAlterEnumStmt(str, obj);
- break;
-
- case T_CreateCastStmt:
- _outCreateCastStmt(str,obj);
- break;
- case T_CreateOpClassStmt:
- _outCreateOpClassStmt(str,obj);
- break;
- case T_CreateOpClassItem:
- _outCreateOpClassItem(str,obj);
- break;
- case T_CreateOpFamilyStmt:
- _outCreateOpFamilyStmt(str,obj);
- break;
- case T_AlterOpFamilyStmt:
- _outAlterOpFamilyStmt(str,obj);
- break;
- case T_CreateConversionStmt:
- _outCreateConversionStmt(str,obj);
- break;
-
-
- case T_ViewStmt:
- _outViewStmt(str, obj);
- break;
- case T_RuleStmt:
- _outRuleStmt(str, obj);
- break;
- case T_DropStmt:
- _outDropStmt(str, obj);
- break;
- case T_DropOwnedStmt:
- _outDropOwnedStmt(str, obj);
- break;
- case T_ReassignOwnedStmt:
- _outReassignOwnedStmt(str, obj);
- break;
- case T_TruncateStmt:
- _outTruncateStmt(str, obj);
- break;
- case T_ReplicaIdentityStmt:
- _outReplicaIdentityStmt(str, obj);
- break;
- case T_AlterTableStmt:
- _outAlterTableStmt(str, obj);
- break;
- case T_AlterTableCmd:
- _outAlterTableCmd(str, obj);
- break;
- case T_AlteredTableInfo:
- _outAlteredTableInfo(str, obj);
- break;
- case T_NewConstraint:
- _outNewConstraint(str, obj);
- break;
- case T_NewColumnValue:
- _outNewColumnValue(str, obj);
- break;
-
- case T_CreateRoleStmt:
- _outCreateRoleStmt(str, obj);
- break;
- case T_DropRoleStmt:
- _outDropRoleStmt(str, obj);
- break;
- case T_AlterRoleStmt:
- _outAlterRoleStmt(str, obj);
- break;
- case T_AlterRoleSetStmt:
- _outAlterRoleSetStmt(str, obj);
- break;
-
- case T_CreateProfileStmt:
- _outCreateProfileStmt(str, obj);
- break;
- case T_AlterProfileStmt:
- _outAlterProfileStmt(str, obj);
- break;
- case T_DropProfileStmt:
- _outDropProfileStmt(str, obj);
- break;
-
- case T_AlterSystemStmt:
- _outAlterSystemStmt(str, obj);
- break;
-
- case T_AlterObjectSchemaStmt:
- _outAlterObjectSchemaStmt(str, obj);
- break;
-
- case T_AlterOwnerStmt:
- _outAlterOwnerStmt(str, obj);
- break;
+#include "outfast.switch.c"
- case T_RenameStmt:
- _outRenameStmt(str, obj);
- break;
-
- case T_CreateSeqStmt:
- _outCreateSeqStmt(str, obj);
- break;
- case T_AlterSeqStmt:
- _outAlterSeqStmt(str, obj);
- break;
- case T_ClusterStmt:
- _outClusterStmt(str, obj);
- break;
- case T_CreatedbStmt:
- _outCreatedbStmt(str, obj);
- break;
- case T_DropdbStmt:
- _outDropdbStmt(str, obj);
- break;
- case T_CreateDomainStmt:
- _outCreateDomainStmt(str, obj);
- break;
- case T_AlterDomainStmt:
- _outAlterDomainStmt(str, obj);
- break;
- case T_AlterDefaultPrivilegesStmt:
- _outAlterDefaultPrivilegesStmt(str, obj);
- break;
- case T_TransactionStmt:
- _outTransactionStmt(str, obj);
- break;
- case T_CreateStatsStmt:
- _outCreateStatsStmt(str, obj);
- break;
- case T_AlterStatsStmt:
- _outAlterStatsStmt(str, obj);
- break;
- case T_NotifyStmt:
- _outNotifyStmt(str, obj);
- break;
- case T_DeclareCursorStmt:
- _outDeclareCursorStmt(str, obj);
- break;
- case T_SingleRowErrorDesc:
- _outSingleRowErrorDesc(str, obj);
- break;
- case T_CopyStmt:
- _outCopyStmt(str, obj);
- break;
- case T_SelectStmt:
- _outSelectStmt(str, obj);
- break;
- case T_InsertStmt:
- _outInsertStmt(str, obj);
- break;
- case T_DeleteStmt:
- _outDeleteStmt(str, obj);
- break;
- case T_UpdateStmt:
- _outUpdateStmt(str, obj);
- break;
- case T_ColumnDef:
- _outColumnDef(str, obj);
- break;
- case T_TypeName:
- _outTypeName(str, obj);
- break;
- case T_SortBy:
- _outSortBy(str, obj);
- break;
- case T_TypeCast:
- _outTypeCast(str, obj);
- break;
- case T_CollateClause:
- _outCollateClause(str, obj);
- break;
- case T_IndexElem:
- _outIndexElem(str, obj);
- break;
- case T_Query:
- _outQuery(str, obj);
- break;
- case T_WithCheckOption:
- _outWithCheckOption(str, obj);
- break;
- case T_SortGroupClause:
- _outSortGroupClause(str, obj);
- break;
- case T_GroupingSet:
- _outGroupingSet(str, obj);
- break;
- case T_WindowClause:
- _outWindowClause(str, obj);
- break;
- case T_RowMarkClause:
- _outRowMarkClause(str, obj);
- break;
- case T_WithClause:
- _outWithClause(str, obj);
- break;
- case T_CTESearchClause:
- _outCTESearchClause(str, obj);
- break;
- case T_CTECycleClause:
- _outCTECycleClause(str, obj);
- break;
- case T_CommonTableExpr:
- _outCommonTableExpr(str, obj);
- break;
- case T_SetOperationStmt:
- _outSetOperationStmt(str, obj);
- break;
- case T_RangeTblEntry:
- _outRangeTblEntry(str, obj);
- break;
- case T_RangeTblFunction:
- _outRangeTblFunction(str, obj);
- break;
- case T_TableSampleClause:
- _outTableSampleClause(str, obj);
- break;
- case T_A_Expr:
- _outAExpr(str, obj);
- break;
- case T_ColumnRef:
- _outColumnRef(str, obj);
- break;
- case T_ParamRef:
- _outParamRef(str, obj);
- break;
- case T_RawStmt:
- _outRawStmt(str, obj);
- break;
- case T_A_Const:
- _outAConst(str, obj);
- break;
- case T_A_Star:
- _outA_Star(str, obj);
- break;
- case T_A_Indices:
- _outA_Indices(str, obj);
- break;
- case T_A_Indirection:
- _outA_Indirection(str, obj);
- break;
- case T_A_ArrayExpr:
- _outA_ArrayExpr(str,obj);
- break;
- case T_ResTarget:
- _outResTarget(str, obj);
- break;
- case T_MultiAssignRef:
- _outMultiAssignRef(str, obj);
- break;
- case T_Constraint:
- _outConstraint(str, obj);
- break;
- case T_FuncCall:
- _outFuncCall(str, obj);
- break;
- case T_DefElem:
- _outDefElem(str, obj);
- break;
- case T_TableLikeClause:
- _outTableLikeClause(str, obj);
- break;
- case T_LockingClause:
- _outLockingClause(str, obj);
- break;
- case T_XmlSerialize:
- _outXmlSerialize(str, obj);
- break;
- case T_TriggerTransition:
- _outTriggerTransition(str, obj);
- break;
- case T_PartitionElem:
- _outPartitionElem(str, obj);
- break;
- case T_PartitionSpec:
- _outPartitionSpec(str, obj);
- break;
- case T_PartitionBoundSpec:
- _outPartitionBoundSpec(str, obj);
- break;
- case T_PartitionRangeDatum:
- _outPartitionRangeDatum(str, obj);
- break;
- case T_PartitionCmd:
- _outPartitionCmd(str, obj);
- break;
- case T_GpAlterPartitionId:
- _outGpAlterPartitionId(str, obj);
- break;
- case T_GpDropPartitionCmd:
- _outGpDropPartitionCmd(str, obj);
- break;
- case T_GpAlterPartitionCmd:
- _outGpAlterPartitionCmd(str, obj);
- break;
-
- case T_CreateSchemaStmt:
- _outCreateSchemaStmt(str, obj);
- break;
- case T_AlterSchemaStmt:
- _outAlterSchemaStmt(str, obj);
- break;
-
- case T_CreateTagStmt:
- _outCreateTagStmt(str, obj);
- break;
- case T_AlterTagStmt:
- _outAlterTagStmt(str, obj);
- break;
- case T_DropTagStmt:
- _outDropTagStmt(str, obj);
- break;
- case T_CreatePLangStmt:
- _outCreatePLangStmt(str, obj);
- break;
- case T_VacuumStmt:
- _outVacuumStmt(str, obj);
- break;
- case T_VacuumRelation:
- _outVacuumRelation(str, obj);
- break;
- case T_CdbProcess:
- _outCdbProcess(str, obj);
- break;
- case T_SliceTable:
- _outSliceTable(str, obj);
- break;
- case T_CursorPosInfo:
- _outCursorPosInfo(str, obj);
- break;
- case T_VariableSetStmt:
- _outVariableSetStmt(str, obj);
- break;
-
- case T_DMLActionExpr:
- _outDMLActionExpr(str, obj);
- break;
-
- case T_CreateTrigStmt:
- _outCreateTrigStmt(str, obj);
- break;
-
- case T_CreateTableSpaceStmt:
- _outCreateTableSpaceStmt(str, obj);
- break;
-
- case T_DropTableSpaceStmt:
- _outDropTableSpaceStmt(str, obj);
- break;
-
- case T_CreateQueueStmt:
- _outCreateQueueStmt(str, obj);
- break;
- case T_AlterQueueStmt:
- _outAlterQueueStmt(str, obj);
- break;
- case T_DropQueueStmt:
- _outDropQueueStmt(str, obj);
- break;
-
- case T_CreateResourceGroupStmt:
- _outCreateResourceGroupStmt(str, obj);
- break;
- case T_DropResourceGroupStmt:
- _outDropResourceGroupStmt(str, obj);
- break;
- case T_AlterResourceGroupStmt:
- _outAlterResourceGroupStmt(str, obj);
- break;
-
- case T_CommentStmt:
- _outCommentStmt(str, obj);
- break;
- case T_TableValueExpr:
- _outTableValueExpr(str, obj);
- break;
- case T_DenyLoginInterval:
- _outDenyLoginInterval(str, obj);
- break;
- case T_DenyLoginPoint:
- _outDenyLoginPoint(str, obj);
- break;
-
- case T_AlterTypeStmt:
- _outAlterTypeStmt(str, obj);
- break;
- case T_AlterExtensionStmt:
- _outAlterExtensionStmt(str, obj);
- break;
- case T_AlterExtensionContentsStmt:
- _outAlterExtensionContentsStmt(str, obj);
- break;
-
- case T_TupleDescNode:
- _outTupleDescNode(str, obj);
- break;
-
- case T_AlterTSConfigurationStmt:
- _outAlterTSConfigurationStmt(str, obj);
- break;
- case T_AlterTSDictionaryStmt:
- _outAlterTSDictionaryStmt(str, obj);
- break;
-
- case T_CookedConstraint:
- _outCookedConstraint(str, obj);
- break;
-
- case T_DropUserMappingStmt:
- _outDropUserMappingStmt(str, obj);
- break;
- case T_AlterUserMappingStmt:
- _outAlterUserMappingStmt(str, obj);
- break;
- case T_CreateUserMappingStmt:
- _outCreateUserMappingStmt(str, obj);
- break;
- case T_CreateStorageUserMappingStmt:
- _outCreateStorageUserMappingStmt(str, obj);
- break;
- case T_AlterStorageUserMappingStmt:
- _outAlterStorageUserMappingStmt(str, obj);
- break;
- case T_DropStorageUserMappingStmt:
- _outDropStorageUserMappingStmt(str, obj);
- break;
- case T_AlterForeignServerStmt:
- _outAlterForeignServerStmt(str, obj);
- break;
- case T_CreateForeignServerStmt:
- _outCreateForeignServerStmt(str, obj);
- break;
- case T_AddForeignSegStmt:
- _outAddForeignSegstmt(str, obj);
- break;
- case T_AlterFdwStmt:
- _outAlterFdwStmt(str, obj);
- break;
- case T_CreateStorageServerStmt:
- _outCreateStorageServerStmt(str, obj);
- break;
- case T_AlterStorageServerStmt:
- _outAlterStorageServerStmt(str, obj);
- break;
- case T_DropStorageServerStmt:
- _outDropStorageServerStmt(str, obj);
- break;
- case T_CreateFdwStmt:
- _outCreateFdwStmt(str, obj);
- break;
- case T_GpPolicy:
- _outGpPolicy(str, obj);
- break;
- case T_DistributedBy:
- _outDistributedBy(str, obj);
- break;
- case T_ImportForeignSchemaStmt:
- _outImportForeignSchemaStmt(str, obj);
- break;
- case T_AlterTableMoveAllStmt:
- _outAlterTableMoveAllStmt(str, obj);
- break;
- case T_AlterTableSpaceOptionsStmt:
- _outAlterTableSpaceOptionsStmt(str, obj);
- break;
-
- case T_CreatePublicationStmt:
- _outCreatePublicationStmt(str, obj);
- break;
- case T_AlterPublicationStmt:
- _outAlterPublicationStmt(str, obj);
- break;
- case T_CreateSubscriptionStmt:
- _outCreateSubscriptionStmt(str, obj);
- break;
- case T_DropSubscriptionStmt:
- _outDropSubscriptionStmt(str, obj);
- break;
- case T_AlterSubscriptionStmt:
- _outAlterSubscriptionStmt(str, obj);
- break;
-
- case T_CreatePolicyStmt:
- _outCreatePolicyStmt(str, obj);
- break;
- case T_AlterPolicyStmt:
- _outAlterPolicyStmt(str, obj);
- break;
- case T_CreateTransformStmt:
- _outCreateTransformStmt(str, obj);
- break;
- case T_CreateAmStmt:
- _outCreateAmStmt(str, obj);
- break;
- case T_AggExprId:
- _outAggExprId(str, obj);
- break;
- case T_RowIdExpr:
- _outRowIdExpr(str, obj);
- break;
- case T_RelAggInfo:
- _outRelAggInfo(str, obj);
- break;
- case T_RestrictInfo:
- _outRestrictInfo(str, obj);
- break;
- case T_IndexClause:
- _outIndexClause(str, obj);
- break;
- case T_PlaceHolderVar:
- _outPlaceHolderVar(str, obj);
- break;
- case T_SpecialJoinInfo:
- _outSpecialJoinInfo(str, obj);
- break;
- case T_AppendRelInfo:
- _outAppendRelInfo(str, obj);
- break;
- case T_PlaceHolderInfo:
- _outPlaceHolderInfo(str, obj);
- break;
- case T_GroupedVarInfo:
- _outGroupedVarInfo(str, obj);
- break;
- case T_MinMaxAggInfo:
- _outMinMaxAggInfo(str, obj);
- break;
- case T_PlannerParamItem:
- _outPlannerParamItem(str, obj);
- break;
- case T_GpPartitionRangeSpec:
- _outGpPartitionRangeSpec(str, obj);
- break;
- case T_GpPartitionRangeItem:
- _outGpPartitionRangeItem(str, obj);
- break;
- case T_GpPartitionListSpec:
- _outGpPartitionListSpec(str, obj);
- break;
- case T_GpSplitPartitionCmd:
- _outGpSplitPartitionCmd(str, obj);
- break;
- case T_GpPartitionDefinition:
- _outGpPartitionDefinition(str, obj);
- break;
- case T_StatsElem:
- _outStatsElem(str, obj);
- break;
- case T_ReturnStmt:
- _outReturnStmt(str, obj);
- break;
- case T_CreateDirectoryTableStmt:
- _outCreateDirectoryTableStmt(str, obj);
- break;
- case T_AlterDirectoryTableStmt:
- _outAlterDirectoryTableStmt(str, obj);
- break;
- case T_DropDirectoryTableStmt:
- _outDropDirectoryTableStmt(str, obj);
- break;
- case T_CreateTaskStmt:
- _outCreateTaskStmt(str, obj);
- break;
- case T_AlterTaskStmt:
- _outAlterTaskStmt(str, obj);
- break;
- case T_DropTaskStmt:
- _outDropTaskStmt(str, obj);
- break;
- case T_EphemeralNamedRelationInfo:
- _outEphemeralNamedRelationInfo(str, obj);
- break;
- case T_AlterDatabaseStmt:
- _outAlterDatabaseStmt(str, obj);
- break;
- case T_RTEPermissionInfo:
- _outRTEPermissionInfo(str, obj);
- break;
- case T_MergeAction:
- _outMergeAction(str, obj);
- break;
- case T_PublicationObjSpec:
- _outPublicationObjSpec(str, obj);
- break;
- case T_PublicationTable:
- _outPublicationTable(str, obj);
- break;
- case T_WindowDef:
- _outWindowDef(str, obj);
- break;
- case T_JsonConstructorExpr:
- _outJsonConstructorExpr(str, obj);
- break;
- case T_JsonIsPredicate:
- _outJsonIsPredicate(str, obj);
- break;
- case T_JsonReturning:
- _outJsonReturning(str, obj);
- break;
- case T_JsonValueExpr:
- _outJsonValueExpr(str, obj);
- break;
- case T_JsonFormat:
- _outJsonFormat(str, obj);
- break;
default:
elog(ERROR, "could not serialize unrecognized node type: %d",
(int) nodeTag(obj));
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index c48ded5a813..6c907991dab 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -35,28 +35,23 @@
#include
+#include "access/attnum.h"
#include "common/shortest_dec.h"
+#include "executor/execdesc.h"
#include "lib/stringinfo.h"
#include "miscadmin.h"
-#include "nodes/extensible.h"
-#include "nodes/pathnodes.h"
-#include "nodes/plannodes.h"
+#include "nodes/bitmapset.h"
+#include "nodes/altertablenodes.h"
+#include "nodes/nodes.h"
+#include "nodes/pg_list.h"
#include "utils/datum.h"
-#include "utils/rel.h"
-#include "cdb/cdbgang.h"
-#include "nodes/altertablenodes.h"
+#include "cdb/cdbpathlocus.h"
-/*
- * outfuncs.c is compiled normally into outfuncs.o, but it's also
- * #included from outfast.c. When #included, outfast.c defines
- * COMPILING_BINARY_FUNCS, and provides replacements WRITE_* macros. See
- * comments at top of readfast.c.
- */
-#ifndef COMPILING_BINARY_FUNCS
static void outChar(StringInfo str, char c);
static void outDouble(StringInfo str, double d);
+
/*
* Macros to simplify output of different kinds of fields. Use these
* wherever possible to reduce the chance for silly typos. Note that these
@@ -130,36 +125,33 @@ static void outDouble(StringInfo str, double d);
/* Write a variable-length array (not a List) of Node pointers */
#define WRITE_NODE_ARRAY(fldname, len) \
- (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
- writeNodeArray(str, (const Node * const *) node->fldname, len))
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ writeNodeArray(str, (const Node * const *) node->fldname, len))
+/* Write a variable-length array of AttrNumber */
#define WRITE_ATTRNUMBER_ARRAY(fldname, len) \
- do { \
- appendStringInfoString(str, " :" CppAsString(fldname) " "); \
- for (int i = 0; i < len; i++) \
- appendStringInfo(str, " %d", node->fldname[i]); \
- } while(0)
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ writeAttrNumberCols(str, node->fldname, len))
+/* Write a variable-length array of Oid */
#define WRITE_OID_ARRAY(fldname, len) \
- do { \
- appendStringInfoString(str, " :" CppAsString(fldname) " "); \
- for (int i = 0; i < len; i++) \
- appendStringInfo(str, " %u", node->fldname[i]); \
- } while(0)
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ writeOidCols(str, node->fldname, len))
+
+/* Write a variable-length array of Index */
+#define WRITE_INDEX_ARRAY(fldname, len) \
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ writeIndexCols(str, node->fldname, len))
+/* Write a variable-length array of int */
#define WRITE_INT_ARRAY(fldname, len) \
- do { \
- appendStringInfoString(str, " :" CppAsString(fldname) " "); \
- for (int i = 0; i < len; i++) \
- appendStringInfo(str, " %d", node->fldname[i]); \
- } while(0)
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ writeIntCols(str, node->fldname, len))
+/* Write a variable-length array of bool */
#define WRITE_BOOL_ARRAY(fldname, len) \
- do { \
- appendStringInfoString(str, " :" CppAsString(fldname) " "); \
- for (int i = 0; i < len; i++) \
- appendStringInfo(str, " %s", booltostr(node->fldname[i])); \
- } while(0)
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ writeBoolCols(str, node->fldname, len))
/* Write a bytea field */
#define WRITE_BYTEA_FIELD(fldname) \
@@ -170,48 +162,31 @@ static void outDouble(StringInfo str, double d);
(appendStringInfo(str, " :" CppAsString(fldname) " "), \
outToken(str, NULL))
-static void _outCdbPathLocus(StringInfo str, const CdbPathLocus *node);
-#endif /* COMPILING_BINARY_FUNCS */
-#define booltostr(x) ((x) ? "true" : "false")
-
-
-#ifndef COMPILING_BINARY_FUNCS
-
-/*
- * Print an array (not a List) of Node pointers.
- *
- * The decoration is identical to that of scalar arrays, but we can't
- * quite use appendStringInfo() in the loop.
- */
static void
-writeNodeArray(StringInfo str, const Node *const *arr, int len)
+_outCdbPathLocus(StringInfo str, const CdbPathLocus *node)
{
- if (arr != NULL)
- {
- appendStringInfoChar(str, '(');
- for (int i = 0; i < len; i++)
- {
- appendStringInfoChar(str, ' ');
- outNode(str, arr[i]);
- }
- appendStringInfoChar(str, ')');
- }
- else
- appendStringInfoString(str, "<>");
+ WRITE_ENUM_FIELD(locustype, CdbLocusType);
+ WRITE_NODE_FIELD(distkey);
+ WRITE_INT_FIELD(numsegments);
}
+#define booltostr(x) ((x) ? "true" : "false")
+
+
/*
* outToken
* Convert an ordinary string (eg, an identifier) into a form that
* will be decoded back to a plain token by read.c's functions.
*
- * If a null or empty string is given, it is encoded as "<>".
+ * If a null string pointer is given, it is encoded as '<>'.
+ * An empty string is encoded as '""'. To avoid ambiguity, input
+ * strings beginning with '<' or '"' receive a leading backslash.
*/
void
outToken(StringInfo str, const char *s)
{
- if (s == NULL || *s == '\0')
+ if (s == NULL)
{
appendStringInfoString(str, "<>");
return;
@@ -279,6 +254,61 @@ outDouble(StringInfo str, double d)
appendStringInfoString(str, buf);
}
+/*
+ * common implementation for scalar-array-writing functions
+ *
+ * The data format is either "<>" for a NULL pointer or "(item item item)".
+ * fmtstr must include a leading space, and the rest of it must produce
+ * something that will be seen as a single simple token by pg_strtok().
+ * convfunc can be empty, or the name of a conversion macro or function.
+ */
+#define WRITE_SCALAR_ARRAY(fnname, datatype, fmtstr, convfunc) \
+static void \
+fnname(StringInfo str, const datatype *arr, int len) \
+{ \
+ if (arr != NULL) \
+ { \
+ appendStringInfoChar(str, '('); \
+ for (int i = 0; i < len; i++) \
+ appendStringInfo(str, fmtstr, convfunc(arr[i])); \
+ appendStringInfoChar(str, ')'); \
+ } \
+ else \
+ appendStringInfoString(str, "<>"); \
+}
+
+WRITE_SCALAR_ARRAY(writeAttrNumberCols, AttrNumber, " %d",)
+WRITE_SCALAR_ARRAY(writeOidCols, Oid, " %u",)
+WRITE_SCALAR_ARRAY(writeIndexCols, Index, " %u",)
+WRITE_SCALAR_ARRAY(writeIntCols, int, " %d",)
+WRITE_SCALAR_ARRAY(writeBoolCols, bool, " %s", booltostr)
+
+/*
+ * Print an array (not a List) of Node pointers.
+ *
+ * The decoration is identical to that of scalar arrays, but we can't
+ * quite use appendStringInfo() in the loop.
+ */
+static void
+writeNodeArray(StringInfo str, const Node *const *arr, int len)
+{
+ if (arr != NULL)
+ {
+ appendStringInfoChar(str, '(');
+ for (int i = 0; i < len; i++)
+ {
+ appendStringInfoChar(str, ' ');
+ outNode(str, arr[i]);
+ }
+ appendStringInfoChar(str, ')');
+ }
+ else
+ appendStringInfoString(str, "<>");
+}
+
+/*
+ * Print a List.
+ */
static void
_outList(StringInfo str, const List *node)
{
@@ -325,6 +355,9 @@ _outList(StringInfo str, const List *node)
* converts a bitmap set of integers
*
* Note: the output format is "(b int int ...)", similar to an integer List.
+ *
+ * We export this function for use by extensions that define extensible nodes.
+ * That's somewhat historical, though, because calling outNode() will work.
*/
void
outBitmapset(StringInfo str, const Bitmapset *bms)
@@ -374,5289 +407,955 @@ outDatum(StringInfo str, Datum value, int typlen, bool typbyval)
}
}
-#endif /* COMPILING_BINARY_FUNCS */
-
-/*
- * Stuff from plannodes.h
- */
-
-static void
-_outPlannedStmt(StringInfo str, const PlannedStmt *node)
-{
- WRITE_NODE_TYPE("PLANNEDSTMT");
-
- WRITE_ENUM_FIELD(commandType, CmdType);
- WRITE_ENUM_FIELD(planGen, PlanGenerator);
- WRITE_UINT64_FIELD(queryId);
- WRITE_BOOL_FIELD(hasReturning);
- WRITE_BOOL_FIELD(hasModifyingCTE);
- WRITE_BOOL_FIELD(canSetTag);
- WRITE_BOOL_FIELD(transientPlan);
- WRITE_BOOL_FIELD(oneoffPlan);
- WRITE_OID_FIELD(simplyUpdatableRel);
- WRITE_BOOL_FIELD(dependsOnRole);
- WRITE_BOOL_FIELD(parallelModeNeeded);
- WRITE_INT_FIELD(jitFlags);
- WRITE_NODE_FIELD(planTree);
- WRITE_NODE_FIELD(rtable);
- WRITE_NODE_FIELD(permInfos);
- WRITE_NODE_FIELD(resultRelations);
- WRITE_NODE_FIELD(appendRelations);
- WRITE_NODE_FIELD(subplans);
- WRITE_BITMAPSET_FIELD(rewindPlanIDs);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(relationOids);
- /*
- * Don't serialize invalItems when dispatching. The TIDs of the invalidated items wouldn't
- * make sense in segments.
- */
-#ifndef COMPILING_BINARY_FUNCS
- WRITE_NODE_FIELD(invalItems);
-#endif /* COMPILING_BINARY_FUNCS */
- WRITE_NODE_FIELD(paramExecTypes);
- WRITE_NODE_FIELD(utilityStmt);
- WRITE_LOCATION_FIELD(stmt_location);
- WRITE_INT_FIELD(stmt_len);
-
- WRITE_INT_ARRAY(subplan_sliceIds, list_length(node->subplans));
-
- WRITE_INT_FIELD(numSlices);
- for (int i = 0; i < node->numSlices; i++)
- {
- WRITE_INT_FIELD(slices[i].sliceIndex);
- WRITE_INT_FIELD(slices[i].parentIndex);
- WRITE_INT_FIELD(slices[i].gangType);
- WRITE_INT_FIELD(slices[i].numsegments);
- WRITE_INT_FIELD(slices[i].parallel_workers);
- WRITE_INT_FIELD(slices[i].segindex);
- WRITE_BOOL_FIELD(slices[i].directDispatch.isDirectDispatch);
- WRITE_NODE_FIELD(slices[i].directDispatch.contentIds);
- }
-
- WRITE_BITMAPSET_FIELD(rewindPlanIDs);
-
- WRITE_NODE_FIELD(intoPolicy);
-
- WRITE_UINT64_FIELD(query_mem);
-
- WRITE_NODE_FIELD(intoClause);
- WRITE_NODE_FIELD(copyIntoClause);
- WRITE_NODE_FIELD(refreshClause);
- WRITE_INT_FIELD(metricsQueryType);
- WRITE_NODE_FIELD(extensionContext);
-}
+#include "outfuncs.funcs.c"
-/*
- * print the basic stuff of all nodes that inherit from Plan
- */
-static void
-_outPlanInfo(StringInfo str, const Plan *node)
-{
- WRITE_FLOAT_FIELD(startup_cost);
- WRITE_FLOAT_FIELD(total_cost);
- WRITE_FLOAT_FIELD(plan_rows);
- WRITE_INT_FIELD(plan_width);
- WRITE_BOOL_FIELD(parallel_aware);
- WRITE_BOOL_FIELD(parallel_safe);
- WRITE_BOOL_FIELD(async_capable);
- WRITE_INT_FIELD(plan_node_id);
- WRITE_NODE_FIELD(targetlist);
- WRITE_NODE_FIELD(qual);
- WRITE_NODE_FIELD(lefttree);
- WRITE_NODE_FIELD(righttree);
- WRITE_NODE_FIELD(initPlan);
- WRITE_BITMAPSET_FIELD(extParam);
- WRITE_BITMAPSET_FIELD(allParam);
- /* 'flow' is only needed during planning. */
-#ifndef COMPILING_BINARY_FUNCS
- WRITE_NODE_FIELD(flow);
-#endif /* COMPILING_BINARY_FUNCS */
-
- WRITE_UINT64_FIELD(operatorMemKB);
-}
/*
- * print the basic stuff of all nodes that inherit from Scan
+ * Support functions for nodes with custom_read_write attribute or
+ * special_read_write attribute
*/
-static void
-_outScanInfo(StringInfo str, const Scan *node)
-{
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_UINT_FIELD(scanrelid);
-}
-/*
- * print the basic stuff of all nodes that inherit from Join
- */
static void
-_outJoinPlanInfo(StringInfo str, const Join *node)
+_outConst(StringInfo str, const Const *node)
{
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_BOOL_FIELD(prefetch_inner);
- WRITE_BOOL_FIELD(prefetch_joinqual);
- WRITE_BOOL_FIELD(prefetch_qual);
-
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_BOOL_FIELD(inner_unique);
- WRITE_NODE_FIELD(joinqual);
-}
-
+ WRITE_NODE_TYPE("CONST");
-static void
-_outPlan(StringInfo str, const Plan *node)
-{
- WRITE_NODE_TYPE("PLAN");
+ WRITE_OID_FIELD(consttype);
+ WRITE_INT_FIELD(consttypmod);
+ WRITE_OID_FIELD(constcollid);
+ WRITE_INT_FIELD(constlen);
+ WRITE_BOOL_FIELD(constbyval);
+ WRITE_BOOL_FIELD(constisnull);
+ WRITE_LOCATION_FIELD(location);
- _outPlanInfo(str, (const Plan *) node);
+ appendStringInfoString(str, " :constvalue ");
+ if (node->constisnull)
+ appendStringInfoString(str, "<>");
+ else
+ outDatum(str, node->constvalue, node->constlen, node->constbyval);
}
static void
-_outResult(StringInfo str, const Result *node)
+_outBoolExpr(StringInfo str, const BoolExpr *node)
{
- WRITE_NODE_TYPE("RESULT");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(resconstantqual);
+ char *opstr = NULL;
- WRITE_INT_FIELD(numHashFilterCols);
- WRITE_ATTRNUMBER_ARRAY(hashFilterColIdx, node->numHashFilterCols);
- WRITE_OID_ARRAY(hashFilterFuncs, node->numHashFilterCols);
-}
+ WRITE_NODE_TYPE("BOOLEXPR");
-static void
-_outProjectSet(StringInfo str, const ProjectSet *node)
-{
- WRITE_NODE_TYPE("PROJECTSET");
+ /* do-it-yourself enum representation */
+ switch (node->boolop)
+ {
+ case AND_EXPR:
+ opstr = "and";
+ break;
+ case OR_EXPR:
+ opstr = "or";
+ break;
+ case NOT_EXPR:
+ opstr = "not";
+ break;
+ }
+ appendStringInfoString(str, " :boolop ");
+ outToken(str, opstr);
- _outPlanInfo(str, (const Plan *) node);
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
}
static void
-_outModifyTable(StringInfo str, const ModifyTable *node)
+_outForeignKeyOptInfo(StringInfo str, const ForeignKeyOptInfo *node)
{
- WRITE_NODE_TYPE("MODIFYTABLE");
+ int i;
- _outPlanInfo(str, (const Plan *) node);
+ WRITE_NODE_TYPE("FOREIGNKEYOPTINFO");
- WRITE_ENUM_FIELD(operation, CmdType);
- WRITE_BOOL_FIELD(canSetTag);
- WRITE_UINT_FIELD(nominalRelation);
- WRITE_UINT_FIELD(rootRelation);
- WRITE_BOOL_FIELD(partColsUpdated);
- WRITE_BOOL_FIELD(splitUpdate);
- WRITE_NODE_FIELD(resultRelations);
- WRITE_NODE_FIELD(updateColnosLists);
- WRITE_NODE_FIELD(withCheckOptionLists);
- WRITE_NODE_FIELD(returningLists);
- WRITE_NODE_FIELD(fdwPrivLists);
- WRITE_BITMAPSET_FIELD(fdwDirectModifyPlans);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_INT_FIELD(epqParam);
- WRITE_ENUM_FIELD(onConflictAction, OnConflictAction);
- WRITE_NODE_FIELD(arbiterIndexes);
- WRITE_NODE_FIELD(onConflictSet);
- WRITE_NODE_FIELD(onConflictCols);
- WRITE_NODE_FIELD(onConflictWhere);
- WRITE_UINT_FIELD(exclRelRTI);
- WRITE_NODE_FIELD(exclRelTlist);
- WRITE_BOOL_FIELD(forceTupleRouting);
- WRITE_NODE_FIELD(mergeActionLists);
+ WRITE_UINT_FIELD(con_relid);
+ WRITE_UINT_FIELD(ref_relid);
+ WRITE_INT_FIELD(nkeys);
+ WRITE_ATTRNUMBER_ARRAY(conkey, node->nkeys);
+ WRITE_ATTRNUMBER_ARRAY(confkey, node->nkeys);
+ WRITE_OID_ARRAY(conpfeqop, node->nkeys);
+ WRITE_INT_FIELD(nmatched_ec);
+ WRITE_INT_FIELD(nconst_ec);
+ WRITE_INT_FIELD(nmatched_rcols);
+ WRITE_INT_FIELD(nmatched_ri);
+ /* for compactness, just print the number of matches per column: */
+ appendStringInfoString(str, " :eclass");
+ for (i = 0; i < node->nkeys; i++)
+ appendStringInfo(str, " %d", (node->eclass[i] != NULL));
+ appendStringInfoString(str, " :rinfos");
+ for (i = 0; i < node->nkeys; i++)
+ appendStringInfo(str, " %d", list_length(node->rinfos[i]));
}
static void
-_outAppend(StringInfo str, const Append *node)
+_outEquivalenceClass(StringInfo str, const EquivalenceClass *node)
{
- WRITE_NODE_TYPE("APPEND");
-
- _outPlanInfo(str, (const Plan *) node);
+ /*
+ * To simplify reading, we just chase up to the topmost merged EC and
+ * print that, without bothering to show the merge-ees separately.
+ */
+ while (node->ec_merged)
+ node = node->ec_merged;
- WRITE_BITMAPSET_FIELD(apprelids);
- WRITE_NODE_FIELD(appendplans);
- WRITE_INT_FIELD(nasyncplans);
- WRITE_INT_FIELD(first_partial_plan);
- WRITE_NODE_FIELD(part_prune_info);
- WRITE_NODE_FIELD(join_prune_paramids);
-}
+ WRITE_NODE_TYPE("EQUIVALENCECLASS");
-static void
-_outMergeAppend(StringInfo str, const MergeAppend *node)
-{
- WRITE_NODE_TYPE("MERGEAPPEND");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_BITMAPSET_FIELD(apprelids);
- WRITE_NODE_FIELD(mergeplans);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
- WRITE_OID_ARRAY(sortOperators, node->numCols);
- WRITE_OID_ARRAY(collations, node->numCols);
- WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
- WRITE_NODE_FIELD(part_prune_info);
- WRITE_NODE_FIELD(join_prune_paramids);
+ WRITE_NODE_FIELD(ec_opfamilies);
+ WRITE_OID_FIELD(ec_collation);
+ WRITE_NODE_FIELD(ec_members);
+ WRITE_NODE_FIELD(ec_sources);
+ WRITE_NODE_FIELD(ec_derives);
+ WRITE_BITMAPSET_FIELD(ec_relids);
+ WRITE_BOOL_FIELD(ec_has_const);
+ WRITE_BOOL_FIELD(ec_has_volatile);
+ WRITE_BOOL_FIELD(ec_broken);
+ WRITE_UINT_FIELD(ec_sortref);
+ WRITE_UINT_FIELD(ec_min_security);
+ WRITE_UINT_FIELD(ec_max_security);
}
static void
-_outRecursiveUnion(StringInfo str, const RecursiveUnion *node)
+_outExtensibleNode(StringInfo str, const ExtensibleNode *node)
{
- WRITE_NODE_TYPE("RECURSIVEUNION");
-
- _outPlanInfo(str, (const Plan *) node);
+ const ExtensibleNodeMethods *methods;
- WRITE_INT_FIELD(wtParam);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(dupColIdx, node->numCols);
- WRITE_OID_ARRAY(dupOperators, node->numCols);
- WRITE_OID_ARRAY(dupCollations, node->numCols);
- WRITE_LONG_FIELD(numGroups);
-}
+ methods = GetExtensibleNodeMethods(node->extnodename, false);
-static void
-_outBitmapAnd(StringInfo str, const BitmapAnd *node)
-{
- WRITE_NODE_TYPE("BITMAPAND");
+ WRITE_NODE_TYPE("EXTENSIBLENODE");
- _outPlanInfo(str, (const Plan *) node);
+ WRITE_STRING_FIELD(extnodename);
- WRITE_NODE_FIELD(bitmapplans);
+ /* serialize the private fields */
+ methods->nodeOut(str, node);
}
static void
-_outBitmapOr(StringInfo str, const BitmapOr *node)
+_outRangeTblEntry(StringInfo str, const RangeTblEntry *node)
{
- WRITE_NODE_TYPE("BITMAPOR");
-
- _outPlanInfo(str, (const Plan *) node);
+ WRITE_NODE_TYPE("RANGETBLENTRY");
- WRITE_BOOL_FIELD(isshared);
- WRITE_NODE_FIELD(bitmapplans);
-}
-
-static void
-_outGather(StringInfo str, const Gather *node)
-{
- WRITE_NODE_TYPE("GATHER");
+ /* put alias + eref first to make dump more legible */
+ WRITE_NODE_FIELD(alias);
+ WRITE_NODE_FIELD(eref);
+ WRITE_ENUM_FIELD(rtekind, RTEKind);
+ WRITE_BOOL_FIELD(relisivm);
- _outPlanInfo(str, (const Plan *) node);
+ switch (node->rtekind)
+ {
+ case RTE_RELATION:
+ WRITE_OID_FIELD(relid);
+ WRITE_CHAR_FIELD(relkind);
+ WRITE_INT_FIELD(rellockmode);
+ WRITE_NODE_FIELD(tablesample);
+ WRITE_UINT_FIELD(perminfoindex);
+ break;
+ case RTE_SUBQUERY:
+ WRITE_NODE_FIELD(subquery);
+ WRITE_BOOL_FIELD(security_barrier);
+ /* we re-use these RELATION fields, too: */
+ WRITE_OID_FIELD(relid);
+ WRITE_CHAR_FIELD(relkind);
+ WRITE_INT_FIELD(rellockmode);
+ WRITE_UINT_FIELD(perminfoindex);
+ break;
+ case RTE_JOIN:
+ WRITE_ENUM_FIELD(jointype, JoinType);
+ WRITE_INT_FIELD(joinmergedcols);
+ WRITE_NODE_FIELD(joinaliasvars);
+ WRITE_NODE_FIELD(joinleftcols);
+ WRITE_NODE_FIELD(joinrightcols);
+ WRITE_NODE_FIELD(join_using_alias);
+ break;
+ case RTE_FUNCTION:
+ WRITE_NODE_FIELD(functions);
+ WRITE_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNCTION:
+ WRITE_NODE_FIELD(subquery);
+ WRITE_NODE_FIELD(functions);
+ WRITE_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNC:
+ WRITE_NODE_FIELD(tablefunc);
+ break;
+ case RTE_VALUES:
+ WRITE_NODE_FIELD(values_lists);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ break;
+ case RTE_CTE:
+ WRITE_STRING_FIELD(ctename);
+ WRITE_UINT_FIELD(ctelevelsup);
+ WRITE_BOOL_FIELD(self_reference);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ break;
+ case RTE_NAMEDTUPLESTORE:
+ WRITE_STRING_FIELD(enrname);
+ WRITE_FLOAT_FIELD(enrtuples);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ /* we re-use these RELATION fields, too: */
+ WRITE_OID_FIELD(relid);
+ break;
+ case RTE_RESULT:
+ /* no extra fields */
+ break;
+ case RTE_VOID: /*CDB*/
+ break;
+ default:
+ elog(ERROR, "unrecognized RTE kind: %d", (int) node->rtekind);
+ break;
+ }
- WRITE_INT_FIELD(num_workers);
- WRITE_INT_FIELD(rescan_param);
- WRITE_BOOL_FIELD(single_copy);
- WRITE_BOOL_FIELD(invisible);
- WRITE_BITMAPSET_FIELD(initParam);
-}
+ WRITE_BOOL_FIELD(lateral);
+ WRITE_BOOL_FIELD(inh);
+ WRITE_BOOL_FIELD(inFromCl);
+ WRITE_NODE_FIELD(securityQuals);
-static void
-_outGatherMerge(StringInfo str, const GatherMerge *node)
-{
- WRITE_NODE_TYPE("GATHERMERGE");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_INT_FIELD(num_workers);
- WRITE_INT_FIELD(rescan_param);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
- WRITE_OID_ARRAY(sortOperators, node->numCols);
- WRITE_OID_ARRAY(collations, node->numCols);
- WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
- WRITE_BITMAPSET_FIELD(initParam);
+ WRITE_BOOL_FIELD(forceDistRandom);
}
static void
-_outScan(StringInfo str, const Scan *node)
+_outSerializedParams(StringInfo str, const SerializedParams *node)
{
- WRITE_NODE_TYPE("SCAN");
-
- _outScanInfo(str, node);
-}
+ WRITE_NODE_TYPE("SERIALIZEDPARAMS");
-static void
-_outSeqScan(StringInfo str, const SeqScan *node)
-{
- WRITE_NODE_TYPE("SEQSCAN");
+ WRITE_INT_FIELD(nExternParams);
+ for (int i = 0; i < node->nExternParams; i++)
+ {
+ WRITE_BOOL_FIELD(externParams[i].isnull);
+ WRITE_INT_FIELD(externParams[i].pflags);
+ WRITE_OID_FIELD(externParams[i].ptype);
+ WRITE_INT_FIELD(externParams[i].plen);
+ WRITE_BOOL_FIELD(externParams[i].pbyval);
+
+ if (!node->externParams[i].isnull)
+ outDatum(str,
+ node->externParams[i].value,
+ node->externParams[i].plen,
+ node->externParams[i].pbyval);
+ }
- _outScanInfo(str, (const Scan *) node);
+ WRITE_INT_FIELD(nExecParams);
+ for (int i = 0; i < node->nExecParams; i++)
+ {
+ WRITE_BOOL_FIELD(execParams[i].isnull);
+ WRITE_BOOL_FIELD(execParams[i].isvalid);
+ WRITE_INT_FIELD(execParams[i].plen);
+ WRITE_BOOL_FIELD(execParams[i].pbyval);
+
+ if (node->execParams[i].isvalid && !node->execParams[i].isnull)
+ outDatum(str,
+ node->execParams[i].value,
+ node->execParams[i].plen,
+ node->execParams[i].pbyval);
+ WRITE_BOOL_FIELD(execParams[i].pbyval);
+ }
}
static void
-_outDynamicSeqScan(StringInfo str, const DynamicSeqScan *node)
+_outSliceTable(StringInfo str, const SliceTable *node)
{
- WRITE_NODE_TYPE("DYNAMICSEQSCAN");
+ WRITE_NODE_TYPE("SLICETABLE");
- _outScanInfo(str, (Scan *)node);
- WRITE_NODE_FIELD(partOids);
- WRITE_NODE_FIELD(part_prune_info);
- WRITE_NODE_FIELD(join_prune_paramids);
+ WRITE_INT_FIELD(localSlice);
+ WRITE_INT_FIELD(numSlices);
+ for (int i = 0; i < node->numSlices; i++)
+ {
+ WRITE_INT_FIELD(slices[i].sliceIndex);
+ WRITE_INT_FIELD(slices[i].rootIndex);
+ WRITE_INT_FIELD(slices[i].parentIndex);
+ WRITE_INT_FIELD(slices[i].planNumSegments);
+ WRITE_NODE_FIELD(slices[i].children); /* List of int index */
+ WRITE_ENUM_FIELD(slices[i].gangType, GangType);
+ WRITE_NODE_FIELD(slices[i].segments); /* List of int */
+ WRITE_BOOL_FIELD(slices[i].useMppParallelMode);
+ WRITE_INT_FIELD(slices[i].parallel_workers);
+ WRITE_DUMMY_FIELD(slices[i].primaryGang);
+ WRITE_NODE_FIELD(slices[i].primaryProcesses); /* List of (CDBProcess *) */
+ WRITE_BITMAPSET_FIELD(slices[i].processesMap);
+ }
+ WRITE_BOOL_FIELD(hasMotions);
+ WRITE_INT_FIELD(instrument_options);
+ WRITE_INT_FIELD(ic_instance_id);
}
static void
-_outSampleScan(StringInfo str, const SampleScan *node)
+_outA_Expr(StringInfo str, const A_Expr *node)
{
- WRITE_NODE_TYPE("SAMPLESCAN");
+ WRITE_NODE_TYPE("A_EXPR");
- _outScanInfo(str, (const Scan *) node);
+ switch (node->kind)
+ {
+ case AEXPR_OP:
+ appendStringInfoChar(str, ' ');
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_OP_ANY:
+ appendStringInfoChar(str, ' ');
+ WRITE_NODE_FIELD(name);
+ appendStringInfoString(str, " ANY ");
+ break;
+ case AEXPR_OP_ALL:
+ appendStringInfoChar(str, ' ');
+ WRITE_NODE_FIELD(name);
+ appendStringInfoString(str, " ALL ");
+ break;
+ case AEXPR_DISTINCT:
+ appendStringInfoString(str, " DISTINCT ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_NOT_DISTINCT:
+ appendStringInfoString(str, " NOT_DISTINCT ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_NULLIF:
+ appendStringInfoString(str, " NULLIF ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_IN:
+ appendStringInfoString(str, " IN ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_LIKE:
+ appendStringInfoString(str, " LIKE ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_ILIKE:
+ appendStringInfoString(str, " ILIKE ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_SIMILAR:
+ appendStringInfoString(str, " SIMILAR ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_BETWEEN:
+ appendStringInfoString(str, " BETWEEN ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_NOT_BETWEEN:
+ appendStringInfoString(str, " NOT_BETWEEN ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_BETWEEN_SYM:
+ appendStringInfoString(str, " BETWEEN_SYM ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_NOT_BETWEEN_SYM:
+ appendStringInfoString(str, " NOT_BETWEEN_SYM ");
+ WRITE_NODE_FIELD(name);
+ break;
+ default:
+ appendStringInfoString(str, " ??");
+ break;
+ }
- WRITE_NODE_FIELD(tablesample);
+ WRITE_NODE_FIELD(lexpr);
+ WRITE_NODE_FIELD(rexpr);
+ WRITE_LOCATION_FIELD(location);
}
static void
-outIndexScanFields(StringInfo str, const IndexScan *node)
+_outInteger(StringInfo str, const Integer *node)
{
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_OID_FIELD(indexid);
- WRITE_NODE_FIELD(indexqual);
- WRITE_NODE_FIELD(indexqualorig);
- WRITE_NODE_FIELD(indexorderby);
- WRITE_NODE_FIELD(indexorderbyorig);
- WRITE_NODE_FIELD(indexorderbyops);
- WRITE_ENUM_FIELD(indexorderdir, ScanDirection);
+ appendStringInfo(str, "%d", node->ival);
}
static void
-_outIndexScan(StringInfo str, const IndexScan *node)
+_outFloat(StringInfo str, const Float *node)
{
- WRITE_NODE_TYPE("INDEXSCAN");
-
- outIndexScanFields(str, node);
+ /*
+ * We assume the value is a valid numeric literal and so does not need
+ * quoting.
+ */
+ appendStringInfoString(str, node->fval);
}
static void
-outIndexOnlyScanFields(StringInfo str, const IndexOnlyScan *node)
+_outBoolean(StringInfo str, const Boolean *node)
{
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_OID_FIELD(indexid);
- WRITE_NODE_FIELD(indexqual);
- WRITE_NODE_FIELD(recheckqual);
- WRITE_NODE_FIELD(indexorderby);
- WRITE_NODE_FIELD(indextlist);
- WRITE_ENUM_FIELD(indexorderdir, ScanDirection);
+ appendStringInfoString(str, node->boolval ? "true" : "false");
}
static void
-_outIndexOnlyScan(StringInfo str, const IndexOnlyScan *node)
+_outString(StringInfo str, const String *node)
{
- WRITE_NODE_TYPE("INDEXONLYSCAN");
-
- outIndexOnlyScanFields(str, node);
+ /*
+ * We use outToken to provide escaping of the string's content, but we
+ * don't want it to convert an empty string to '""', because we're putting
+ * double quotes around the string already.
+ */
+ appendStringInfoChar(str, '"');
+ if (node->sval[0] != '\0')
+ outToken(str, node->sval);
+ appendStringInfoChar(str, '"');
}
static void
-_outDynamicIndexScan(StringInfo str, const DynamicIndexScan *node)
+_outBitString(StringInfo str, const BitString *node)
{
- WRITE_NODE_TYPE("DYNAMICINDEXSCAN");
-
- outIndexScanFields(str, &node->indexscan);
- WRITE_NODE_FIELD(partOids);
- WRITE_NODE_FIELD(part_prune_info);
- WRITE_NODE_FIELD(join_prune_paramids);
+ /*
+ * The lexer will always produce a string starting with 'b' or 'x'. There
+ * might be characters following that that need escaping, but outToken
+ * won't escape the 'b' or 'x'. This is relied on by nodeTokenType.
+ */
+ Assert(node->bsval[0] == 'b' || node->bsval[0] == 'x');
+ outToken(str, node->bsval);
}
static void
-_outDynamicIndexOnlyScan(StringInfo str, const DynamicIndexOnlyScan *node)
+_outA_Const(StringInfo str, const A_Const *node)
{
- WRITE_NODE_TYPE("DYNAMICINDEXONLYSCAN");
+ WRITE_NODE_TYPE("A_CONST");
- outIndexOnlyScanFields(str, &node->indexscan);
- WRITE_NODE_FIELD(partOids);
- WRITE_NODE_FIELD(part_prune_info);
- WRITE_NODE_FIELD(join_prune_paramids);
+ if (node->isnull)
+ appendStringInfoString(str, " NULL");
+ else
+ {
+ appendStringInfoString(str, " :val ");
+ outNode(str, &node->val);
+ }
+ WRITE_LOCATION_FIELD(location);
}
static void
-_outBitmapIndexScanFields(StringInfo str, const BitmapIndexScan *node)
+_outConstraint(StringInfo str, const Constraint *node)
{
- _outScanInfo(str, (Scan *) node);
-
- WRITE_OID_FIELD(indexid);
- WRITE_BOOL_FIELD(isshared);
- WRITE_NODE_FIELD(indexqual);
- WRITE_NODE_FIELD(indexqualorig);
-}
+ WRITE_NODE_TYPE("CONSTRAINT");
-static void
-_outBitmapIndexScan(StringInfo str, const BitmapIndexScan *node)
-{
- WRITE_NODE_TYPE("BITMAPINDEXSCAN");
+ WRITE_STRING_FIELD(conname);
+ WRITE_BOOL_FIELD(deferrable);
+ WRITE_BOOL_FIELD(initdeferred);
+ WRITE_LOCATION_FIELD(location);
- _outBitmapIndexScanFields(str, node);
-}
+ appendStringInfoString(str, " :contype ");
+ switch (node->contype)
+ {
+ case CONSTR_NULL:
+ appendStringInfoString(str, "NULL");
+ break;
-static void
-_outDynamicBitmapIndexScan(StringInfo str, const DynamicBitmapIndexScan *node)
-{
- WRITE_NODE_TYPE("DYNAMICBITMAPINDEXSCAN");
+ case CONSTR_NOTNULL:
+ appendStringInfoString(str, "NOT_NULL");
+ break;
- _outBitmapIndexScanFields(str, &node->biscan);
-}
+ case CONSTR_DEFAULT:
+ appendStringInfoString(str, "DEFAULT");
+ WRITE_NODE_FIELD(raw_expr);
+ WRITE_STRING_FIELD(cooked_expr);
+ break;
-static void
-outBitmapHeapScanFields(StringInfo str, const BitmapHeapScan *node)
-{
- _outScanInfo(str, (const Scan *) node);
+ case CONSTR_IDENTITY:
+ appendStringInfoString(str, "IDENTITY");
+ WRITE_NODE_FIELD(options);
+ WRITE_CHAR_FIELD(generated_when);
+ break;
- WRITE_NODE_FIELD(bitmapqualorig);
-}
+ case CONSTR_GENERATED:
+ appendStringInfoString(str, "GENERATED");
+ WRITE_NODE_FIELD(raw_expr);
+ WRITE_STRING_FIELD(cooked_expr);
+ WRITE_CHAR_FIELD(generated_when);
+ break;
-static void
-_outBitmapHeapScan(StringInfo str, const BitmapHeapScan *node)
-{
- WRITE_NODE_TYPE("BITMAPHEAPSCAN");
+ case CONSTR_CHECK:
+ appendStringInfoString(str, "CHECK");
+ WRITE_BOOL_FIELD(is_no_inherit);
+ WRITE_NODE_FIELD(raw_expr);
+ WRITE_STRING_FIELD(cooked_expr);
+ WRITE_BOOL_FIELD(skip_validation);
+ WRITE_BOOL_FIELD(initially_valid);
+ break;
- outBitmapHeapScanFields(str, node);
-}
+ case CONSTR_PRIMARY:
+ appendStringInfoString(str, "PRIMARY_KEY");
+ WRITE_NODE_FIELD(keys);
+ WRITE_NODE_FIELD(including);
+ WRITE_NODE_FIELD(options);
+ WRITE_STRING_FIELD(indexname);
+ WRITE_STRING_FIELD(indexspace);
+ WRITE_BOOL_FIELD(reset_default_tblspc);
+ /* access_method and where_clause not currently used */
+ break;
-static void
-_outDynamicBitmapHeapScan(StringInfo str, const DynamicBitmapHeapScan *node)
-{
- WRITE_NODE_TYPE("DYNAMICBITMAPHEAPSCAN");
+ case CONSTR_UNIQUE:
+ appendStringInfoString(str, "UNIQUE");
+ WRITE_BOOL_FIELD(nulls_not_distinct);
+ WRITE_NODE_FIELD(keys);
+ WRITE_NODE_FIELD(including);
+ WRITE_NODE_FIELD(options);
+ WRITE_STRING_FIELD(indexname);
+ WRITE_STRING_FIELD(indexspace);
+ WRITE_BOOL_FIELD(reset_default_tblspc);
+ /* access_method and where_clause not currently used */
+ break;
- outBitmapHeapScanFields(str, &node->bitmapheapscan);
- WRITE_NODE_FIELD(partOids);
- WRITE_NODE_FIELD(part_prune_info);
- WRITE_NODE_FIELD(join_prune_paramids);
-}
+ case CONSTR_EXCLUSION:
+ appendStringInfoString(str, "EXCLUSION");
+ WRITE_NODE_FIELD(exclusions);
+ WRITE_NODE_FIELD(including);
+ WRITE_NODE_FIELD(options);
+ WRITE_STRING_FIELD(indexname);
+ WRITE_STRING_FIELD(indexspace);
+ WRITE_BOOL_FIELD(reset_default_tblspc);
+ WRITE_STRING_FIELD(access_method);
+ WRITE_NODE_FIELD(where_clause);
+ break;
-static void
-_outTidScan(StringInfo str, const TidScan *node)
-{
- WRITE_NODE_TYPE("TIDSCAN");
+ case CONSTR_FOREIGN:
+ appendStringInfoString(str, "FOREIGN_KEY");
+ WRITE_NODE_FIELD(pktable);
+ WRITE_NODE_FIELD(fk_attrs);
+ WRITE_NODE_FIELD(pk_attrs);
+ WRITE_CHAR_FIELD(fk_matchtype);
+ WRITE_CHAR_FIELD(fk_upd_action);
+ WRITE_CHAR_FIELD(fk_del_action);
+ WRITE_NODE_FIELD(fk_del_set_cols);
+ WRITE_NODE_FIELD(old_conpfeqop);
+ WRITE_OID_FIELD(old_pktable_oid);
+ WRITE_BOOL_FIELD(skip_validation);
+ WRITE_BOOL_FIELD(initially_valid);
+ break;
- _outScanInfo(str, (const Scan *) node);
+ case CONSTR_ATTR_DEFERRABLE:
+ appendStringInfoString(str, "ATTR_DEFERRABLE");
+ break;
- WRITE_NODE_FIELD(tidquals);
-}
+ case CONSTR_ATTR_NOT_DEFERRABLE:
+ appendStringInfoString(str, "ATTR_NOT_DEFERRABLE");
+ break;
-static void
-_outSubqueryScan(StringInfo str, const SubqueryScan *node)
-{
- WRITE_NODE_TYPE("SUBQUERYSCAN");
+ case CONSTR_ATTR_DEFERRED:
+ appendStringInfoString(str, "ATTR_DEFERRED");
+ break;
- _outScanInfo(str, (const Scan *) node);
+ case CONSTR_ATTR_IMMEDIATE:
+ appendStringInfoString(str, "ATTR_IMMEDIATE");
+ break;
- WRITE_NODE_FIELD(subplan);
+ default:
+ elog(ERROR, "unrecognized ConstrType: %d", (int) node->contype);
+ break;
+ }
}
+
static void
-_outFunctionScan(StringInfo str, const FunctionScan *node)
+_outColumnDef(StringInfo str, const ColumnDef *node)
{
- WRITE_NODE_TYPE("FUNCTIONSCAN");
+ WRITE_NODE_TYPE("COLUMNDEF");
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(functions);
- WRITE_BOOL_FIELD(funcordinality);
- WRITE_NODE_FIELD(param);
- WRITE_BOOL_FIELD(resultInTupleStore);
- WRITE_INT_FIELD(initplanId);
-}
-
-static void
-_outTableFuncScan(StringInfo str, const TableFuncScan *node)
-{
- WRITE_NODE_TYPE("TABLEFUNCSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(tablefunc);
-}
-
-static void
-_outValuesScan(StringInfo str, const ValuesScan *node)
-{
- WRITE_NODE_TYPE("VALUESSCAN");
+ WRITE_STRING_FIELD(colname);
+ WRITE_NODE_FIELD(typeName);
+ WRITE_STRING_FIELD(compression);
+ WRITE_INT_FIELD(inhcount);
+ WRITE_BOOL_FIELD(is_local);
+ WRITE_BOOL_FIELD(is_not_null);
+ WRITE_BOOL_FIELD(is_from_type);
+ WRITE_INT_FIELD(attnum);
+ WRITE_INT_FIELD(storage);
+ WRITE_NODE_FIELD(raw_default);
+ WRITE_NODE_FIELD(cooked_default);
- _outScanInfo(str, (const Scan *) node);
+ WRITE_BOOL_FIELD(hasCookedMissingVal);
+ WRITE_BOOL_FIELD(missingIsNull);
+ if (node->hasCookedMissingVal && !node->missingIsNull)
+ outDatum(str, node->missingVal, -1, false);
- WRITE_NODE_FIELD(values_lists);
+ WRITE_CHAR_FIELD(identity);
+ WRITE_NODE_FIELD(identitySequence);
+ WRITE_CHAR_FIELD(generated);
+ WRITE_NODE_FIELD(collClause);
+ WRITE_OID_FIELD(collOid);
+ WRITE_NODE_FIELD(constraints);
+ WRITE_NODE_FIELD(encoding);
+ WRITE_NODE_FIELD(fdwoptions);
+ WRITE_LOCATION_FIELD(location);
}
-static void
-_outCteScan(StringInfo str, const CteScan *node)
-{
- WRITE_NODE_TYPE("CTESCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_INT_FIELD(ctePlanId);
- WRITE_INT_FIELD(cteParam);
-}
static void
-_outNamedTuplestoreScan(StringInfo str, const NamedTuplestoreScan *node)
+_outPlannerGlobal(StringInfo str, const PlannerGlobal *node)
{
- WRITE_NODE_TYPE("NAMEDTUPLESTORESCAN");
-
- _outScanInfo(str, (const Scan *) node);
+ WRITE_NODE_TYPE("PLANNERGLOBAL");
- WRITE_STRING_FIELD(enrname);
+ /* NB: this isn't a complete set of fields */
+ WRITE_NODE_FIELD(subplans);
+ WRITE_BITMAPSET_FIELD(rewindPlanIDs);
+ WRITE_NODE_FIELD(finalrtable);
+ WRITE_NODE_FIELD(finalrowmarks);
+ WRITE_NODE_FIELD(resultRelations);
+ WRITE_NODE_FIELD(appendRelations);
+ WRITE_NODE_FIELD(relationOids);
+ WRITE_NODE_FIELD(invalItems);
+ WRITE_NODE_FIELD(paramExecTypes);
+ WRITE_UINT_FIELD(lastPHId);
+ WRITE_UINT_FIELD(lastRowMarkId);
+ WRITE_INT_FIELD(lastPlanNodeId);
+ WRITE_BOOL_FIELD(transientPlan);
+ WRITE_BOOL_FIELD(oneoffPlan);
+ WRITE_NODE_FIELD(share.motStack);
+ WRITE_BITMAPSET_FIELD(share.qdShares);
+ WRITE_BOOL_FIELD(dependsOnRole);
+ WRITE_BOOL_FIELD(parallelModeOK);
+ WRITE_BOOL_FIELD(parallelModeNeeded);
+ WRITE_CHAR_FIELD(maxParallelHazard);
}
static void
-_outWorkTableScan(StringInfo str, const WorkTableScan *node)
+_outPlannerInfo(StringInfo str, const PlannerInfo *node)
{
- WRITE_NODE_TYPE("WORKTABLESCAN");
-
- _outScanInfo(str, (const Scan *) node);
+ WRITE_NODE_TYPE("PLANNERINFO");
- WRITE_INT_FIELD(wtParam);
+ /* NB: this isn't a complete set of fields */
+ WRITE_NODE_FIELD(parse);
+ WRITE_NODE_FIELD(glob);
+ WRITE_UINT_FIELD(query_level);
+ WRITE_NODE_FIELD(plan_params);
+ WRITE_BITMAPSET_FIELD(outer_params);
+ WRITE_NODE_ARRAY(simple_rel_array, node->simple_rel_array_size);
+ WRITE_INT_FIELD(simple_rel_array_size);
+ WRITE_BITMAPSET_FIELD(all_baserels);
+ WRITE_BITMAPSET_FIELD(outer_join_rels);
+ WRITE_NODE_FIELD(join_rel_list);
+ WRITE_NODE_FIELD(join_rel_list);
+ WRITE_BOOL_FIELD(setup_agg_pushdown);
+ WRITE_NODE_FIELD(grouped_rel_info_list);
+ WRITE_INT_FIELD(join_cur_level);
+ WRITE_NODE_FIELD(init_plans);
+ WRITE_NODE_FIELD(cte_plan_ids);
+ WRITE_NODE_FIELD(multiexpr_params);
+ WRITE_NODE_FIELD(join_domains);
+ WRITE_NODE_FIELD(eq_classes);
+ WRITE_BOOL_FIELD(ec_merging_done);
+ WRITE_NODE_FIELD(canon_pathkeys);
+ WRITE_NODE_FIELD(left_join_clauses);
+ WRITE_NODE_FIELD(right_join_clauses);
+ WRITE_NODE_FIELD(full_join_clauses);
+ WRITE_NODE_FIELD(join_info_list);
+ WRITE_INT_FIELD(last_rinfo_serial);
+ WRITE_BITMAPSET_FIELD(all_result_relids);
+ WRITE_BITMAPSET_FIELD(leaf_result_relids);
+ WRITE_NODE_FIELD(append_rel_list);
+ WRITE_NODE_FIELD(row_identity_vars);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_NODE_FIELD(placeholder_list);
+ WRITE_NODE_FIELD(grouped_var_list);
+ WRITE_NODE_FIELD(fkey_list);
+ WRITE_NODE_FIELD(query_pathkeys);
+ WRITE_NODE_FIELD(group_pathkeys);
+ WRITE_INT_FIELD(num_groupby_pathkeys);
+ WRITE_NODE_FIELD(window_pathkeys);
+ WRITE_NODE_FIELD(distinct_pathkeys);
+ WRITE_NODE_FIELD(sort_pathkeys);
+ WRITE_NODE_FIELD(processed_groupClause);
+ WRITE_NODE_FIELD(processed_distinctClause);
+ WRITE_NODE_FIELD(processed_tlist);
+ WRITE_INT_FIELD(max_sortgroupref);
+ WRITE_NODE_FIELD(update_colnos);
+ WRITE_NODE_FIELD(minmax_aggs);
+ WRITE_FLOAT_FIELD(total_table_pages);
+ WRITE_FLOAT_FIELD(tuple_fraction);
+ WRITE_FLOAT_FIELD(limit_tuples);
+ WRITE_UINT_FIELD(qual_security_level);
+ WRITE_BOOL_FIELD(hasJoinRTEs);
+ WRITE_BOOL_FIELD(hasLateralRTEs);
+ WRITE_BOOL_FIELD(hasHavingQual);
+ WRITE_BOOL_FIELD(hasPseudoConstantQuals);
+ WRITE_BOOL_FIELD(hasAlternativeSubPlans);
+ WRITE_BOOL_FIELD(placeholdersFrozen);
+ WRITE_BOOL_FIELD(hasRecursion);
+ WRITE_NODE_FIELD(agginfos);
+ WRITE_NODE_FIELD(aggtransinfos);
+ WRITE_INT_FIELD(numOrderedAggs);
+ WRITE_BOOL_FIELD(hasNonPartialAggs);
+ WRITE_BOOL_FIELD(hasNonSerialAggs);
+ WRITE_INT_FIELD(wt_param_id);
+ WRITE_NODE_FIELD(non_recursive_path);
+ WRITE_BITMAPSET_FIELD(curOuterRels);
+ WRITE_NODE_FIELD(curOuterParams);
+ WRITE_BOOL_FIELD(partColsUpdated);
}
static void
-outForeignScanFields(StringInfo str, const ForeignScan *node)
+_outTupleDescNode(StringInfo str, const TupleDescNode *node)
{
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_ENUM_FIELD(operation, CmdType);
- WRITE_UINT_FIELD(resultRelation);
- WRITE_OID_FIELD(fs_server);
- WRITE_NODE_FIELD(fdw_exprs);
- WRITE_NODE_FIELD(fdw_private);
- WRITE_NODE_FIELD(fdw_scan_tlist);
- WRITE_NODE_FIELD(fdw_recheck_quals);
- WRITE_BITMAPSET_FIELD(fs_relids);
- WRITE_BOOL_FIELD(fsSystemCol);
-}
+ Assert(node->tuple->tdtypeid == RECORDOID);
-static void
-_outForeignScan(StringInfo str, const ForeignScan *node)
-{
- WRITE_NODE_TYPE("FOREIGNSCAN");
+ WRITE_NODE_TYPE("TUPLEDESCNODE");
+ WRITE_INT_FIELD(natts);
+ WRITE_INT_FIELD(tuple->natts);
- outForeignScanFields(str, node);
+ WRITE_OID_FIELD(tuple->tdtypeid);
+ WRITE_INT_FIELD(tuple->tdtypmod);
+ WRITE_INT_FIELD(tuple->tdrefcount);
}
-static void
-_outDynamicForeignScan(StringInfo str, const DynamicForeignScan *node)
-{
- WRITE_NODE_TYPE("DYNAMICFOREIGNSCAN");
-
- outForeignScanFields(str, &node->foreignscan);
- WRITE_NODE_FIELD(partOids);
- WRITE_NODE_FIELD(part_prune_info);
- WRITE_NODE_FIELD(join_prune_paramids);
- WRITE_NODE_FIELD(fdw_private_list);
-}
-#ifndef COMPILING_BINARY_FUNCS
static void
-_outCustomScan(StringInfo str, const CustomScan *node)
+wrapStringList(List *list)
{
- WRITE_NODE_TYPE("CUSTOMSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_UINT_FIELD(flags);
- WRITE_NODE_FIELD(custom_plans);
- WRITE_NODE_FIELD(custom_exprs);
- WRITE_NODE_FIELD(custom_private);
- WRITE_NODE_FIELD(custom_scan_tlist);
- WRITE_BITMAPSET_FIELD(custom_relids);
- /* CustomName is a key to lookup CustomScanMethods */
- appendStringInfoString(str, " :methods ");
- outToken(str, node->methods->CustomName);
-}
-#endif /* COMPILING_BINARY_FUNCS */
+ ListCell *lc;
-static void
-_outJoin(StringInfo str, const Join *node)
-{
- WRITE_NODE_TYPE("JOIN");
+ foreach(lc, list)
+ {
+ char *str = (char *) lfirst(lc);
- _outJoinPlanInfo(str, (const Join *) node);
+ lfirst(lc) = makeString(str);
+ }
}
static void
-_outNestLoop(StringInfo str, const NestLoop *node)
+unwrapStringList(List *list)
{
- WRITE_NODE_TYPE("NESTLOOP");
-
- _outJoinPlanInfo(str, (const Join *) node);
+ ListCell *lc;
- WRITE_NODE_FIELD(nestParams);
+ foreach(lc, list)
+ {
+ String *val = lfirst(lc);
- WRITE_BOOL_FIELD(shared_outer);
- WRITE_BOOL_FIELD(singleton_outer); /*CDB-OLAP*/
+ lfirst(lc) = strVal(val);
+ pfree(val);
+ }
}
static void
-_outMergeJoin(StringInfo str, const MergeJoin *node)
+_outAlteredTableInfo(StringInfo str, const AlteredTableInfo *node)
{
- int numCols;
-
- WRITE_NODE_TYPE("MERGEJOIN");
-
- _outJoinPlanInfo(str, (const Join *) node);
+ ListCell *lc;
- WRITE_BOOL_FIELD(skip_mark_restore);
- WRITE_NODE_FIELD(mergeclauses);
+ WRITE_NODE_TYPE("ALTEREDTABLEINFO");
- numCols = list_length(node->mergeclauses);
-
- WRITE_OID_ARRAY(mergeFamilies, numCols);
- WRITE_OID_ARRAY(mergeCollations, numCols);
- WRITE_INT_ARRAY(mergeStrategies, numCols);
- WRITE_BOOL_ARRAY(mergeNullsFirst, numCols);
- WRITE_BOOL_FIELD(unique_outer);
-}
+ WRITE_OID_FIELD(relid);
+ WRITE_CHAR_FIELD(relkind);
+ /* oldDesc is omitted */
-static void
-_outHashJoin(StringInfo str, const HashJoin *node)
-{
- WRITE_NODE_TYPE("HASHJOIN");
+ for (int i = 0; i < AT_NUM_PASSES; i++)
+ {
+ WRITE_NODE_FIELD(subcmds[i]);
+ }
- _outJoinPlanInfo(str, (const Join *) node);
+ /*
+ * These aren't Nodes in upstream, so make sure the node tags
+ * are set correctly before trying to serialize them.
+ */
+ foreach(lc, node->constraints)
+ {
+ NewConstraint *e = (NewConstraint *) lfirst(lc);
+ e->type = T_NewConstraint;
+ }
+ foreach(lc, node->newvals)
+ {
+ NewColumnValue *e = (NewColumnValue *) lfirst(lc);
+ e->type = T_NewColumnValue;
+ }
- WRITE_NODE_FIELD(hashclauses);
- WRITE_NODE_FIELD(hashoperators);
- WRITE_NODE_FIELD(hashcollations);
- WRITE_NODE_FIELD(hashkeys);
- WRITE_NODE_FIELD(hashqualclauses);
- WRITE_BOOL_FIELD(batch0_barrier);
- WRITE_BOOL_FIELD(outer_motionhazard);
-}
+ WRITE_NODE_FIELD(constraints);
+ WRITE_NODE_FIELD(newvals);
+ WRITE_NODE_FIELD(afterStmts);
+ WRITE_BOOL_FIELD(verify_new_notnull);
+ WRITE_INT_FIELD(rewrite);
+ WRITE_OID_FIELD(newAccessMethod);
+ WRITE_BOOL_FIELD(dist_opfamily_changed);
+ WRITE_OID_FIELD(new_opclass);
+ /*
+ * NB: newTableSpace is excluded, it will be assigned in phase 1 of AlterTable.
+ * If newTableSpace is required, refer to the name in its corresponding cmd.
+ * If newTableSpace is strongly required in serialization, please add it
+ * and update `ATPrepSetTableSpace()` to avoid error.
+ */
+ WRITE_BOOL_FIELD(chgPersistence);
+ WRITE_CHAR_FIELD(newrelpersistence);
+ WRITE_NODE_FIELD(partition_constraint);
+ WRITE_BOOL_FIELD(validate_default);
+ WRITE_NODE_FIELD(changedConstraintOids);
+
+ /* node->changedConstraintDefs is a list of naked strings, so
+ * we can't use WRITE_NODE_FIELD on it. Temporarily wrap them in Values.
+ */
+ wrapStringList(node->changedConstraintDefs);
+ WRITE_NODE_FIELD(changedConstraintDefs);
+ /* unwrap them again */
+ unwrapStringList(node->changedConstraintDefs);
-static void
-_outAgg(StringInfo str, const Agg *node)
-{
- WRITE_NODE_TYPE("AGG");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
- WRITE_ENUM_FIELD(aggsplit, AggSplit);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(grpColIdx, node->numCols);
- WRITE_OID_ARRAY(grpOperators, node->numCols);
- WRITE_OID_ARRAY(grpCollations, node->numCols);
- WRITE_LONG_FIELD(numGroups);
- WRITE_UINT64_FIELD(transitionSpace);
- WRITE_BITMAPSET_FIELD(aggParams);
- WRITE_NODE_FIELD(groupingSets);
- WRITE_NODE_FIELD(chain);
- WRITE_BOOL_FIELD(streaming);
- WRITE_UINT_FIELD(agg_expr_id);
+ WRITE_NODE_FIELD(changedIndexOids);
+ wrapStringList(node->changedIndexDefs);
+ WRITE_NODE_FIELD(changedIndexDefs);
+ unwrapStringList(node->changedIndexDefs);
+ WRITE_NODE_FIELD(beforeStmtLists);
+ WRITE_NODE_FIELD(constraintLists);
}
static void
-_outWindowAgg(StringInfo str, const WindowAgg *node)
+_outNewConstraint(StringInfo str, const NewConstraint *node)
{
- WRITE_NODE_TYPE("WINDOWAGG");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_UINT_FIELD(winref);
- WRITE_INT_FIELD(partNumCols);
- WRITE_ATTRNUMBER_ARRAY(partColIdx, node->partNumCols);
- WRITE_OID_ARRAY(partOperators, node->partNumCols);
- WRITE_OID_ARRAY(partCollations, node->partNumCols);
- WRITE_INT_FIELD(ordNumCols);
- WRITE_ATTRNUMBER_ARRAY(ordColIdx, node->ordNumCols);
- WRITE_OID_ARRAY(ordOperators, node->ordNumCols);
- WRITE_OID_ARRAY(ordCollations, node->ordNumCols);
- WRITE_INT_FIELD(firstOrderCol);
- WRITE_OID_FIELD(firstOrderCmpOperator);
- WRITE_BOOL_FIELD(firstOrderNullsFirst);
- WRITE_INT_FIELD(frameOptions);
- WRITE_NODE_FIELD(startOffset);
- WRITE_NODE_FIELD(endOffset);
- WRITE_NODE_FIELD(runCondition);
- WRITE_NODE_FIELD(runConditionOrig);
- WRITE_OID_FIELD(startInRangeFunc);
- WRITE_OID_FIELD(endInRangeFunc);
- WRITE_OID_FIELD(inRangeColl);
- WRITE_BOOL_FIELD(inRangeAsc);
- WRITE_BOOL_FIELD(inRangeNullsFirst);
- WRITE_BOOL_FIELD(topWindow);
-}
+ WRITE_NODE_TYPE("NEWCONSTRAINT");
-static void
-_outWindowHashAgg(StringInfo str, const WindowHashAgg *node)
-{
- WRITE_NODE_TYPE("WINDOWHASHAGG");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_UINT_FIELD(winref);
- WRITE_INT_FIELD(partNumCols);
- WRITE_ATTRNUMBER_ARRAY(partColIdx, node->partNumCols);
- WRITE_OID_ARRAY(partOperators, node->partNumCols);
- WRITE_OID_ARRAY(partCollations, node->partNumCols);
- WRITE_INT_FIELD(ordNumCols);
- WRITE_ATTRNUMBER_ARRAY(ordColIdx, node->ordNumCols);
- WRITE_OID_ARRAY(ordOperators, node->ordNumCols);
- WRITE_OID_ARRAY(ordCollations, node->ordNumCols);
- WRITE_BOOL_ARRAY(ordNullsFirst, node->ordNumCols);
- WRITE_INT_FIELD(frameOptions);
- WRITE_NODE_FIELD(startOffset);
- WRITE_NODE_FIELD(endOffset);
- WRITE_OID_FIELD(startInRangeFunc);
- WRITE_OID_FIELD(endInRangeFunc);
- WRITE_OID_FIELD(inRangeColl);
- WRITE_BOOL_FIELD(inRangeAsc);
- WRITE_BOOL_FIELD(inRangeNullsFirst);
+ WRITE_STRING_FIELD(name);
+ WRITE_ENUM_FIELD(contype, ConstrType);
+ WRITE_OID_FIELD(refrelid);
+ WRITE_OID_FIELD(refindid);
+ WRITE_OID_FIELD(conid);
+ WRITE_NODE_FIELD(qual);
+ /* can't serialize qualstate */
}
static void
-_outGroup(StringInfo str, const Group *node)
+_outPlannedStmt(StringInfo str, const PlannedStmt *node)
{
- WRITE_NODE_TYPE("GROUP");
-
- _outPlanInfo(str, (const Plan *) node);
+ WRITE_NODE_TYPE("PLANNEDSTMT");
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(grpColIdx, node->numCols);
- WRITE_OID_ARRAY(grpOperators, node->numCols);
- WRITE_OID_ARRAY(grpCollations, node->numCols);
-}
+ WRITE_ENUM_FIELD(commandType, CmdType);
+ WRITE_ENUM_FIELD(planGen, PlanGenerator);
+ WRITE_UINT64_FIELD(queryId);
+ WRITE_BOOL_FIELD(hasReturning);
+ WRITE_BOOL_FIELD(hasModifyingCTE);
+ WRITE_BOOL_FIELD(canSetTag);
+ WRITE_BOOL_FIELD(transientPlan);
+ WRITE_BOOL_FIELD(oneoffPlan);
+ WRITE_OID_FIELD(simplyUpdatableRel);
+ WRITE_BOOL_FIELD(dependsOnRole);
+ WRITE_BOOL_FIELD(parallelModeNeeded);
+ WRITE_INT_FIELD(jitFlags);
+ WRITE_NODE_FIELD(planTree);
+ WRITE_NODE_FIELD(rtable);
+ WRITE_NODE_FIELD(permInfos);
+ WRITE_NODE_FIELD(resultRelations);
+ WRITE_NODE_FIELD(appendRelations);
+ WRITE_NODE_FIELD(subplans);
+ WRITE_BITMAPSET_FIELD(rewindPlanIDs);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_NODE_FIELD(relationOids);
+ WRITE_NODE_FIELD(invalItems);
+ WRITE_NODE_FIELD(paramExecTypes);
+ WRITE_NODE_FIELD(utilityStmt);
+ WRITE_LOCATION_FIELD(stmt_location);
+ WRITE_INT_FIELD(stmt_len);
-static void
-_outMaterial(StringInfo str, const Material *node)
-{
- WRITE_NODE_TYPE("MATERIAL");
+ WRITE_INT_ARRAY(subplan_sliceIds, list_length(node->subplans));
- _outPlanInfo(str, (const Plan *) node);
+ WRITE_INT_FIELD(numSlices);
+ for (int i = 0; i < node->numSlices; i++)
+ {
+ WRITE_INT_FIELD(slices[i].sliceIndex);
+ WRITE_INT_FIELD(slices[i].parentIndex);
+ WRITE_INT_FIELD(slices[i].gangType);
+ WRITE_INT_FIELD(slices[i].numsegments);
+ WRITE_INT_FIELD(slices[i].parallel_workers);
+ WRITE_INT_FIELD(slices[i].segindex);
+ WRITE_BOOL_FIELD(slices[i].directDispatch.isDirectDispatch);
+ WRITE_NODE_FIELD(slices[i].directDispatch.contentIds);
+ }
- WRITE_BOOL_FIELD(cdb_strict);
- WRITE_BOOL_FIELD(cdb_shield_child_from_rescans);
-}
+ WRITE_BITMAPSET_FIELD(rewindPlanIDs);
-static void
-_outSortInfo(StringInfo str, const Sort *node)
-{
- _outPlanInfo(str, (const Plan *) node);
+ WRITE_NODE_FIELD(intoPolicy);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
- WRITE_OID_ARRAY(sortOperators, node->numCols);
- WRITE_OID_ARRAY(collations, node->numCols);
- WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
-}
+ WRITE_UINT64_FIELD(query_mem);
-static void
-_outSort(StringInfo str, const Sort *node)
-{
- WRITE_NODE_TYPE("SORT");
+ WRITE_NODE_FIELD(intoClause);
+ WRITE_NODE_FIELD(copyIntoClause);
+ WRITE_NODE_FIELD(refreshClause);
+ WRITE_INT_FIELD(metricsQueryType);
+ WRITE_NODE_FIELD(extensionContext);
- _outSortInfo(str, node);
}
static void
-_outIncrementalSort(StringInfo str, const IncrementalSort *node)
+_outMotion(StringInfo str, const Motion *node)
{
- WRITE_NODE_TYPE("INCREMENTALSORT");
+ WRITE_NODE_TYPE("MOTION");
- _outSortInfo(str, (const Sort *) node);
-
- WRITE_INT_FIELD(nPresortedCols);
-}
+ WRITE_FLOAT_FIELD(plan.startup_cost);
+ WRITE_FLOAT_FIELD(plan.total_cost);
+ WRITE_FLOAT_FIELD(plan.plan_rows);
+ WRITE_INT_FIELD(plan.plan_width);
+ WRITE_BOOL_FIELD(plan.parallel_aware);
+ WRITE_BOOL_FIELD(plan.parallel_safe);
+ WRITE_BOOL_FIELD(plan.async_capable);
+ WRITE_INT_FIELD(plan.plan_node_id);
+ WRITE_NODE_FIELD(plan.targetlist);
+ WRITE_NODE_FIELD(plan.qual);
+ WRITE_NODE_FIELD(plan.lefttree);
+ WRITE_NODE_FIELD(plan.righttree);
+ WRITE_NODE_FIELD(plan.initPlan);
+ WRITE_BITMAPSET_FIELD(plan.extParam);
+ WRITE_BITMAPSET_FIELD(plan.allParam);
+ WRITE_NODE_FIELD(plan.flow);
+ WRITE_UINT_FIELD(plan.locustype);
+ WRITE_INT_FIELD(plan.parallel);
+ WRITE_UINT64_FIELD(plan.operatorMemKB);
+
+ WRITE_INT_FIELD(motionID);
+ WRITE_ENUM_FIELD(motionType, MotionType);
-static void
-_outUnique(StringInfo str, const Unique *node)
-{
- WRITE_NODE_TYPE("UNIQUE");
+ WRITE_BOOL_FIELD(sendSorted);
- _outPlanInfo(str, (const Plan *) node);
+ WRITE_NODE_FIELD(hashExprs);
+ WRITE_OID_ARRAY(hashFuncs, list_length(node->hashExprs));
+ WRITE_INT_FIELD(numSortCols);
+ WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numSortCols);
+ WRITE_OID_ARRAY(sortOperators, node->numSortCols);
+ WRITE_OID_ARRAY(collations, node->numSortCols);
+ WRITE_BOOL_ARRAY(nullsFirst, node->numSortCols);
+ WRITE_INT_FIELD(segidColIdx);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(uniqColIdx, node->numCols);
- WRITE_OID_ARRAY(uniqOperators, node->numCols);
- WRITE_OID_ARRAY(uniqCollations, node->numCols);
+ WRITE_INT_FIELD(numHashSegments);
}
static void
-_outHash(StringInfo str, const Hash *node)
+_outOidAssignment(StringInfo str, const OidAssignment *node)
{
- WRITE_NODE_TYPE("HASH");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(hashkeys);
- WRITE_OID_FIELD(skewTable);
- WRITE_INT_FIELD(skewColumn);
- WRITE_BOOL_FIELD(skewInherit);
- WRITE_FLOAT_FIELD(rows_total);
- WRITE_BOOL_FIELD(rescannable); /*CDB*/
- WRITE_BOOL_FIELD(sync_barrier);
-}
+ WRITE_NODE_TYPE("OIDASSIGNMENT");
-static void
-_outSetOp(StringInfo str, const SetOp *node)
-{
- WRITE_NODE_TYPE("SETOP");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_ENUM_FIELD(cmd, SetOpCmd);
- WRITE_ENUM_FIELD(strategy, SetOpStrategy);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(dupColIdx, node->numCols);
- WRITE_OID_ARRAY(dupOperators, node->numCols);
- WRITE_OID_ARRAY(dupCollations, node->numCols);
- WRITE_INT_FIELD(flagColIdx);
- WRITE_INT_FIELD(firstFlag);
- WRITE_LONG_FIELD(numGroups);
+ WRITE_OID_FIELD(catalog);
+ WRITE_STRING_FIELD(objname);
+ WRITE_OID_FIELD(namespaceOid);
+ WRITE_OID_FIELD(keyOid1);
+ WRITE_OID_FIELD(keyOid2);
+ WRITE_OID_FIELD(oid);
}
-static void
-_outLockRows(StringInfo str, const LockRows *node)
+/*
+ * outNode -
+ * converts a Node into ascii string and append it to 'str'
+ */
+void
+outNode(StringInfo str, const void *obj)
{
- WRITE_NODE_TYPE("LOCKROWS");
+ /* Guard against stack overflow due to overly complex expressions */
+ check_stack_depth();
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(rowMarks);
- WRITE_INT_FIELD(epqParam);
-}
-
-static void
-_outRuntimeFilter(StringInfo str, const RuntimeFilter *node)
-{
- WRITE_NODE_TYPE("RUNTIME_FILTER");
-
- _outPlanInfo(str, (const Plan *) node);
-}
-
-static void
-_outLimit(StringInfo str, const Limit *node)
-{
- WRITE_NODE_TYPE("LIMIT");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_ENUM_FIELD(limitOption, LimitOption);
- WRITE_INT_FIELD(uniqNumCols);
- WRITE_ATTRNUMBER_ARRAY(uniqColIdx, node->uniqNumCols);
- WRITE_OID_ARRAY(uniqOperators, node->uniqNumCols);
- WRITE_OID_ARRAY(uniqCollations, node->uniqNumCols);
-}
-
-static void
-_outNestLoopParam(StringInfo str, const NestLoopParam *node)
-{
- WRITE_NODE_TYPE("NESTLOOPPARAM");
-
- WRITE_INT_FIELD(paramno);
- WRITE_NODE_FIELD(paramval);
-}
-
-static void
-_outPlanRowMark(StringInfo str, const PlanRowMark *node)
-{
- WRITE_NODE_TYPE("PLANROWMARK");
-
- WRITE_UINT_FIELD(rti);
- WRITE_UINT_FIELD(prti);
- WRITE_UINT_FIELD(rowmarkId);
- WRITE_ENUM_FIELD(markType, RowMarkType);
- WRITE_INT_FIELD(allMarkTypes);
- WRITE_ENUM_FIELD(strength, LockClauseStrength);
- WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
- WRITE_BOOL_FIELD(isParent);
-}
-
-static void
-_outPartitionPruneInfo(StringInfo str, const PartitionPruneInfo *node)
-{
- WRITE_NODE_TYPE("PARTITIONPRUNEINFO");
-
- WRITE_NODE_FIELD(prune_infos);
- WRITE_BITMAPSET_FIELD(other_subplans);
-}
-
-static void
-_outPartitionedRelPruneInfo(StringInfo str, const PartitionedRelPruneInfo *node)
-{
- WRITE_NODE_TYPE("PARTITIONEDRELPRUNEINFO");
-
- WRITE_UINT_FIELD(rtindex);
- WRITE_BITMAPSET_FIELD(present_parts);
- WRITE_INT_FIELD(nparts);
- WRITE_INT_ARRAY(subplan_map, node->nparts);
- WRITE_INT_ARRAY(subpart_map, node->nparts);
- WRITE_OID_ARRAY(relid_map, node->nparts);
- WRITE_NODE_FIELD(initial_pruning_steps);
- WRITE_NODE_FIELD(exec_pruning_steps);
- WRITE_BITMAPSET_FIELD(execparamids);
-}
-
-static void
-_outPartitionPruneStepOp(StringInfo str, const PartitionPruneStepOp *node)
-{
- WRITE_NODE_TYPE("PARTITIONPRUNESTEPOP");
-
- WRITE_INT_FIELD(step.step_id);
- WRITE_INT_FIELD(opstrategy);
- WRITE_NODE_FIELD(exprs);
- WRITE_NODE_FIELD(cmpfns);
- WRITE_BITMAPSET_FIELD(nullkeys);
-}
-
-static void
-_outPartitionPruneStepCombine(StringInfo str, const PartitionPruneStepCombine *node)
-{
- WRITE_NODE_TYPE("PARTITIONPRUNESTEPCOMBINE");
-
- WRITE_INT_FIELD(step.step_id);
- WRITE_ENUM_FIELD(combineOp, PartitionPruneCombineOp);
- WRITE_NODE_FIELD(source_stepids);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-static void
-_outPlanInvalItem(StringInfo str, const PlanInvalItem *node)
-{
- WRITE_NODE_TYPE("PLANINVALITEM");
-
- WRITE_INT_FIELD(cacheId);
- WRITE_UINT_FIELD(hashValue);
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-/*****************************************************************************
- *
- * Stuff from primnodes.h.
- *
- *****************************************************************************/
-
-static void
-_outAlias(StringInfo str, const Alias *node)
-{
- WRITE_NODE_TYPE("ALIAS");
-
- WRITE_STRING_FIELD(aliasname);
- WRITE_NODE_FIELD(colnames);
-}
-
-static void
-_outRangeVar(StringInfo str, const RangeVar *node)
-{
- WRITE_NODE_TYPE("RANGEVAR");
-
- /*
- * we deliberately ignore catalogname here, since it is presently not
- * semantically meaningful
- */
- WRITE_STRING_FIELD(catalogname);
- WRITE_STRING_FIELD(schemaname);
- WRITE_STRING_FIELD(relname);
- WRITE_BOOL_FIELD(inh);
- WRITE_CHAR_FIELD(relpersistence);
- WRITE_NODE_FIELD(alias);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTableFunc(StringInfo str, const TableFunc *node)
-{
- WRITE_NODE_TYPE("TABLEFUNC");
-
- WRITE_NODE_FIELD(ns_uris);
- WRITE_NODE_FIELD(ns_names);
- WRITE_NODE_FIELD(docexpr);
- WRITE_NODE_FIELD(rowexpr);
- WRITE_NODE_FIELD(colnames);
- WRITE_NODE_FIELD(coltypes);
- WRITE_NODE_FIELD(coltypmods);
- WRITE_NODE_FIELD(colcollations);
- WRITE_NODE_FIELD(colexprs);
- WRITE_NODE_FIELD(coldefexprs);
- WRITE_BITMAPSET_FIELD(notnulls);
- WRITE_INT_FIELD(ordinalitycol);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outIntoClause(StringInfo str, const IntoClause *node)
-{
- WRITE_NODE_TYPE("INTOCLAUSE");
-
- WRITE_NODE_FIELD(rel);
- WRITE_NODE_FIELD(colNames);
- WRITE_STRING_FIELD(accessMethod);
- WRITE_NODE_FIELD(options);
- WRITE_ENUM_FIELD(onCommit, OnCommitAction);
- WRITE_STRING_FIELD(tableSpaceName);
- WRITE_NODE_FIELD(viewQuery);
- WRITE_BOOL_FIELD(skipData);
- WRITE_NODE_FIELD(distributedBy);
- WRITE_BOOL_FIELD(ivm);
- WRITE_OID_FIELD(matviewOid);
- WRITE_STRING_FIELD(enrname);
- WRITE_BOOL_FIELD(dynamicTbl);
- WRITE_STRING_FIELD(schedule);
-}
-
-static void
-_outVar(StringInfo str, const Var *node)
-{
- WRITE_NODE_TYPE("VAR");
-
- WRITE_UINT_FIELD(varno);
- WRITE_INT_FIELD(varattno);
- WRITE_OID_FIELD(vartype);
- WRITE_INT_FIELD(vartypmod);
- WRITE_OID_FIELD(varcollid);
- WRITE_BITMAPSET_FIELD(varnullingrels);
- WRITE_UINT_FIELD(varlevelsup);
- WRITE_UINT_FIELD(varnosyn);
- WRITE_INT_FIELD(varattnosyn);
- WRITE_LOCATION_FIELD(location);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-static void
-_outConst(StringInfo str, const Const *node)
-{
- WRITE_NODE_TYPE("CONST");
-
- WRITE_OID_FIELD(consttype);
- WRITE_INT_FIELD(consttypmod);
- WRITE_OID_FIELD(constcollid);
- WRITE_INT_FIELD(constlen);
- WRITE_BOOL_FIELD(constbyval);
- WRITE_BOOL_FIELD(constisnull);
- WRITE_LOCATION_FIELD(location);
-
- appendStringInfoString(str, " :constvalue ");
- if (node->constisnull)
+ if (obj == NULL)
appendStringInfoString(str, "<>");
+ else if (IsA(obj, List) || IsA(obj, IntList) || IsA(obj, OidList) ||
+ IsA(obj, XidList))
+ _outList(str, obj);
+ /* nodeRead does not want to see { } around these! */
+ else if (IsA(obj, Integer))
+ _outInteger(str, (Integer *) obj);
+ else if (IsA(obj, Float))
+ _outFloat(str, (Float *) obj);
+ else if (IsA(obj, Boolean))
+ _outBoolean(str, (Boolean *) obj);
+ else if (IsA(obj, String))
+ _outString(str, (String *) obj);
+ else if (IsA(obj, BitString))
+ _outBitString(str, (BitString *) obj);
+ else if (IsA(obj, Bitmapset))
+ outBitmapset(str, (Bitmapset *) obj);
else
- outDatum(str, node->constvalue, node->constlen, node->constbyval);
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-static void
-_outParam(StringInfo str, const Param *node)
-{
- WRITE_NODE_TYPE("PARAM");
-
- WRITE_ENUM_FIELD(paramkind, ParamKind);
- WRITE_INT_FIELD(paramid);
- WRITE_OID_FIELD(paramtype);
- WRITE_INT_FIELD(paramtypmod);
- WRITE_OID_FIELD(paramcollid);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outAggref(StringInfo str, const Aggref *node)
-{
- WRITE_NODE_TYPE("AGGREF");
-
- WRITE_OID_FIELD(aggfnoid);
- WRITE_OID_FIELD(aggtype);
- WRITE_OID_FIELD(aggcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_OID_FIELD(aggtranstype);
- WRITE_NODE_FIELD(aggargtypes);
- WRITE_NODE_FIELD(aggdirectargs);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(aggorder);
- WRITE_NODE_FIELD(aggdistinct);
- WRITE_NODE_FIELD(aggfilter);
- WRITE_BOOL_FIELD(aggstar);
- WRITE_BOOL_FIELD(aggvariadic);
- WRITE_CHAR_FIELD(aggkind);
- WRITE_UINT_FIELD(agglevelsup);
- WRITE_ENUM_FIELD(aggsplit, AggSplit);
- WRITE_INT_FIELD(aggno);
- WRITE_INT_FIELD(aggtransno);
- WRITE_LOCATION_FIELD(location);
- WRITE_INT_FIELD(agg_expr_id);
-}
-
-static void
-_outGroupingFunc(StringInfo str, const GroupingFunc *node)
-{
- WRITE_NODE_TYPE("GROUPINGFUNC");
-
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(refs);
- WRITE_NODE_FIELD(cols);
- WRITE_UINT_FIELD(agglevelsup);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outWindowFunc(StringInfo str, const WindowFunc *node)
-{
- WRITE_NODE_TYPE("WINDOWFUNC");
-
- WRITE_OID_FIELD(winfnoid);
- WRITE_OID_FIELD(wintype);
- WRITE_OID_FIELD(wincollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(aggfilter);
- WRITE_UINT_FIELD(winref);
- WRITE_BOOL_FIELD(winstar);
- WRITE_BOOL_FIELD(winagg);
- WRITE_BOOL_FIELD(windistinct);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSubscriptingRef(StringInfo str, const SubscriptingRef *node)
-{
- WRITE_NODE_TYPE("SUBSCRIPTINGREF");
-
- WRITE_OID_FIELD(refcontainertype);
- WRITE_OID_FIELD(refelemtype);
- WRITE_OID_FIELD(refrestype);
- WRITE_INT_FIELD(reftypmod);
- WRITE_OID_FIELD(refcollid);
- WRITE_NODE_FIELD(refupperindexpr);
- WRITE_NODE_FIELD(reflowerindexpr);
- WRITE_NODE_FIELD(refexpr);
- WRITE_NODE_FIELD(refassgnexpr);
-}
-
-static void
-_outFuncExpr(StringInfo str, const FuncExpr *node)
-{
- WRITE_NODE_TYPE("FUNCEXPR");
-
- WRITE_OID_FIELD(funcid);
- WRITE_OID_FIELD(funcresulttype);
- WRITE_BOOL_FIELD(funcretset);
- WRITE_BOOL_FIELD(funcvariadic);
- WRITE_ENUM_FIELD(funcformat, CoercionForm);
- WRITE_OID_FIELD(funccollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
- WRITE_BOOL_FIELD(is_tablefunc); /* GPDB */
-}
-
-static void
-_outNamedArgExpr(StringInfo str, const NamedArgExpr *node)
-{
- WRITE_NODE_TYPE("NAMEDARGEXPR");
-
- WRITE_NODE_FIELD(arg);
- WRITE_STRING_FIELD(name);
- WRITE_INT_FIELD(argnumber);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outOpExpr(StringInfo str, const OpExpr *node)
-{
- WRITE_NODE_TYPE("OPEXPR");
-
- WRITE_OID_FIELD(opno);
- WRITE_OID_FIELD(opfuncid);
- WRITE_OID_FIELD(opresulttype);
- WRITE_BOOL_FIELD(opretset);
- WRITE_OID_FIELD(opcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outDistinctExpr(StringInfo str, const DistinctExpr *node)
-{
- WRITE_NODE_TYPE("DISTINCTEXPR");
-
- WRITE_OID_FIELD(opno);
- WRITE_OID_FIELD(opfuncid);
- WRITE_OID_FIELD(opresulttype);
- WRITE_BOOL_FIELD(opretset);
- WRITE_OID_FIELD(opcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outNullIfExpr(StringInfo str, const NullIfExpr *node)
-{
- WRITE_NODE_TYPE("NULLIFEXPR");
-
- WRITE_OID_FIELD(opno);
- WRITE_OID_FIELD(opfuncid);
- WRITE_OID_FIELD(opresulttype);
- WRITE_BOOL_FIELD(opretset);
- WRITE_OID_FIELD(opcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outScalarArrayOpExpr(StringInfo str, const ScalarArrayOpExpr *node)
-{
- WRITE_NODE_TYPE("SCALARARRAYOPEXPR");
-
- WRITE_OID_FIELD(opno);
- WRITE_OID_FIELD(opfuncid);
- WRITE_OID_FIELD(hashfuncid);
- WRITE_BOOL_FIELD(useOr);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-static void
-_outBoolExpr(StringInfo str, const BoolExpr *node)
-{
- char *opstr = NULL;
-
- WRITE_NODE_TYPE("BOOLEXPR");
-
- /* do-it-yourself enum representation */
- switch (node->boolop)
{
- case AND_EXPR:
- opstr = "and";
- break;
- case OR_EXPR:
- opstr = "or";
- break;
- case NOT_EXPR:
- opstr = "not";
- break;
- }
- appendStringInfoString(str, " :boolop ");
- outToken(str, opstr);
-
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-static void
-_outSubLink(StringInfo str, const SubLink *node)
-{
- WRITE_NODE_TYPE("SUBLINK");
-
- WRITE_ENUM_FIELD(subLinkType, SubLinkType);
- WRITE_INT_FIELD(subLinkId);
- WRITE_NODE_FIELD(testexpr);
- WRITE_NODE_FIELD(operName);
- WRITE_NODE_FIELD(subselect);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSubPlan(StringInfo str, const SubPlan *node)
-{
- WRITE_NODE_TYPE("SUBPLAN");
-
- WRITE_ENUM_FIELD(subLinkType, SubLinkType);
- WRITE_NODE_FIELD(testexpr);
- WRITE_NODE_FIELD(paramIds);
- WRITE_INT_FIELD(plan_id);
- WRITE_STRING_FIELD(plan_name);
- WRITE_OID_FIELD(firstColType);
- WRITE_INT_FIELD(firstColTypmod);
- WRITE_OID_FIELD(firstColCollation);
- WRITE_BOOL_FIELD(useHashTable);
- WRITE_BOOL_FIELD(unknownEqFalse);
- WRITE_BOOL_FIELD(parallel_safe);
- WRITE_BOOL_FIELD(is_initplan); /*CDB*/
- WRITE_BOOL_FIELD(is_multirow); /*CDB*/
- WRITE_NODE_FIELD(setParam);
- WRITE_NODE_FIELD(parParam);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(extParam);
- WRITE_FLOAT_FIELD(startup_cost);
- WRITE_FLOAT_FIELD(per_call_cost);
-}
-
-static void
-_outAlternativeSubPlan(StringInfo str, const AlternativeSubPlan *node)
-{
- WRITE_NODE_TYPE("ALTERNATIVESUBPLAN");
-
- WRITE_NODE_FIELD(subplans);
-}
-
-static void
-_outFieldSelect(StringInfo str, const FieldSelect *node)
-{
- WRITE_NODE_TYPE("FIELDSELECT");
-
- WRITE_NODE_FIELD(arg);
- WRITE_INT_FIELD(fieldnum);
- WRITE_OID_FIELD(resulttype);
- WRITE_INT_FIELD(resulttypmod);
- WRITE_OID_FIELD(resultcollid);
-}
-
-static void
-_outFieldStore(StringInfo str, const FieldStore *node)
-{
- WRITE_NODE_TYPE("FIELDSTORE");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(newvals);
- WRITE_NODE_FIELD(fieldnums);
- WRITE_OID_FIELD(resulttype);
-}
-
-static void
-_outRelabelType(StringInfo str, const RelabelType *node)
-{
- WRITE_NODE_TYPE("RELABELTYPE");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(resulttype);
- WRITE_INT_FIELD(resulttypmod);
- WRITE_OID_FIELD(resultcollid);
- WRITE_ENUM_FIELD(relabelformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCoerceViaIO(StringInfo str, const CoerceViaIO *node)
-{
- WRITE_NODE_TYPE("COERCEVIAIO");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(resulttype);
- WRITE_OID_FIELD(resultcollid);
- WRITE_ENUM_FIELD(coerceformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outArrayCoerceExpr(StringInfo str, const ArrayCoerceExpr *node)
-{
- WRITE_NODE_TYPE("ARRAYCOERCEEXPR");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(elemexpr);
- WRITE_OID_FIELD(resulttype);
- WRITE_INT_FIELD(resulttypmod);
- WRITE_OID_FIELD(resultcollid);
- WRITE_ENUM_FIELD(coerceformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
+ appendStringInfoChar(str, '{');
+ switch (nodeTag(obj))
+ {
+#include "outfuncs.switch.c"
-static void
-_outConvertRowtypeExpr(StringInfo str, const ConvertRowtypeExpr *node)
-{
- WRITE_NODE_TYPE("CONVERTROWTYPEEXPR");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(resulttype);
- WRITE_ENUM_FIELD(convertformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCollateExpr(StringInfo str, const CollateExpr *node)
-{
- WRITE_NODE_TYPE("COLLATE");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(collOid);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCaseExpr(StringInfo str, const CaseExpr *node)
-{
- WRITE_NODE_TYPE("CASE");
-
- WRITE_OID_FIELD(casetype);
- WRITE_OID_FIELD(casecollid);
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(defresult);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCaseWhen(StringInfo str, const CaseWhen *node)
-{
- WRITE_NODE_TYPE("WHEN");
-
- WRITE_NODE_FIELD(expr);
- WRITE_NODE_FIELD(result);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCaseTestExpr(StringInfo str, const CaseTestExpr *node)
-{
- WRITE_NODE_TYPE("CASETESTEXPR");
-
- WRITE_OID_FIELD(typeId);
- WRITE_INT_FIELD(typeMod);
- WRITE_OID_FIELD(collation);
-}
-
-static void
-_outArrayExpr(StringInfo str, const ArrayExpr *node)
-{
- WRITE_NODE_TYPE("ARRAY");
-
- WRITE_OID_FIELD(array_typeid);
- WRITE_OID_FIELD(array_collid);
- WRITE_OID_FIELD(element_typeid);
- WRITE_NODE_FIELD(elements);
- WRITE_BOOL_FIELD(multidims);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRowExpr(StringInfo str, const RowExpr *node)
-{
- WRITE_NODE_TYPE("ROW");
-
- WRITE_NODE_FIELD(args);
- WRITE_OID_FIELD(row_typeid);
- WRITE_ENUM_FIELD(row_format, CoercionForm);
- WRITE_NODE_FIELD(colnames);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRowCompareExpr(StringInfo str, const RowCompareExpr *node)
-{
- WRITE_NODE_TYPE("ROWCOMPARE");
-
- WRITE_ENUM_FIELD(rctype, RowCompareType);
- WRITE_NODE_FIELD(opnos);
- WRITE_NODE_FIELD(opfamilies);
- WRITE_NODE_FIELD(inputcollids);
- WRITE_NODE_FIELD(largs);
- WRITE_NODE_FIELD(rargs);
-}
-
-static void
-_outCoalesceExpr(StringInfo str, const CoalesceExpr *node)
-{
- WRITE_NODE_TYPE("COALESCE");
-
- WRITE_OID_FIELD(coalescetype);
- WRITE_OID_FIELD(coalescecollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outMinMaxExpr(StringInfo str, const MinMaxExpr *node)
-{
- WRITE_NODE_TYPE("MINMAX");
-
- WRITE_OID_FIELD(minmaxtype);
- WRITE_OID_FIELD(minmaxcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_ENUM_FIELD(op, MinMaxOp);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSQLValueFunction(StringInfo str, const SQLValueFunction *node)
-{
- WRITE_NODE_TYPE("SQLVALUEFUNCTION");
-
- WRITE_ENUM_FIELD(op, SQLValueFunctionOp);
- WRITE_OID_FIELD(type);
- WRITE_INT_FIELD(typmod);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outXmlExpr(StringInfo str, const XmlExpr *node)
-{
- WRITE_NODE_TYPE("XMLEXPR");
-
- WRITE_ENUM_FIELD(op, XmlExprOp);
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(named_args);
- WRITE_NODE_FIELD(arg_names);
- WRITE_NODE_FIELD(args);
- WRITE_ENUM_FIELD(xmloption, XmlOptionType);
- WRITE_OID_FIELD(type);
- WRITE_INT_FIELD(typmod);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outNullTest(StringInfo str, const NullTest *node)
-{
- WRITE_NODE_TYPE("NULLTEST");
-
- WRITE_NODE_FIELD(arg);
- WRITE_ENUM_FIELD(nulltesttype, NullTestType);
- WRITE_BOOL_FIELD(argisrow);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outBooleanTest(StringInfo str, const BooleanTest *node)
-{
- WRITE_NODE_TYPE("BOOLEANTEST");
-
- WRITE_NODE_FIELD(arg);
- WRITE_ENUM_FIELD(booltesttype, BoolTestType);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCoerceToDomain(StringInfo str, const CoerceToDomain *node)
-{
- WRITE_NODE_TYPE("COERCETODOMAIN");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(resulttype);
- WRITE_INT_FIELD(resulttypmod);
- WRITE_OID_FIELD(resultcollid);
- WRITE_ENUM_FIELD(coercionformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCoerceToDomainValue(StringInfo str, const CoerceToDomainValue *node)
-{
- WRITE_NODE_TYPE("COERCETODOMAINVALUE");
-
- WRITE_OID_FIELD(typeId);
- WRITE_INT_FIELD(typeMod);
- WRITE_OID_FIELD(collation);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSetToDefault(StringInfo str, const SetToDefault *node)
-{
- WRITE_NODE_TYPE("SETTODEFAULT");
-
- WRITE_OID_FIELD(typeId);
- WRITE_INT_FIELD(typeMod);
- WRITE_OID_FIELD(collation);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCurrentOfExpr(StringInfo str, const CurrentOfExpr *node)
-{
- WRITE_NODE_TYPE("CURRENTOFEXPR");
-
- WRITE_UINT_FIELD(cvarno);
- WRITE_STRING_FIELD(cursor_name);
- WRITE_INT_FIELD(cursor_param);
- WRITE_OID_FIELD(target_relid);
-}
-
-static void
-_outNextValueExpr(StringInfo str, const NextValueExpr *node)
-{
- WRITE_NODE_TYPE("NEXTVALUEEXPR");
-
- WRITE_OID_FIELD(seqid);
- WRITE_OID_FIELD(typeId);
-}
-
-static void
-_outInferenceElem(StringInfo str, const InferenceElem *node)
-{
- WRITE_NODE_TYPE("INFERENCEELEM");
-
- WRITE_NODE_FIELD(expr);
- WRITE_OID_FIELD(infercollid);
- WRITE_OID_FIELD(inferopclass);
-}
-
-static void
-_outTargetEntry(StringInfo str, const TargetEntry *node)
-{
- WRITE_NODE_TYPE("TARGETENTRY");
-
- WRITE_NODE_FIELD(expr);
- WRITE_INT_FIELD(resno);
- WRITE_STRING_FIELD(resname);
- WRITE_UINT_FIELD(ressortgroupref);
- WRITE_OID_FIELD(resorigtbl);
- WRITE_INT_FIELD(resorigcol);
- WRITE_BOOL_FIELD(resjunk);
-}
-
-static void
-_outRangeTblRef(StringInfo str, const RangeTblRef *node)
-{
- WRITE_NODE_TYPE("RANGETBLREF");
-
- WRITE_INT_FIELD(rtindex);
-}
-
-static void
-_outJoinExpr(StringInfo str, const JoinExpr *node)
-{
- WRITE_NODE_TYPE("JOINEXPR");
-
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_BOOL_FIELD(isNatural);
- WRITE_NODE_FIELD(larg);
- WRITE_NODE_FIELD(rarg);
- WRITE_NODE_FIELD(usingClause);
- WRITE_NODE_FIELD(join_using_alias);
- WRITE_NODE_FIELD(quals);
- WRITE_NODE_FIELD(alias);
- WRITE_INT_FIELD(rtindex);
-}
-
-static void
-_outFromExpr(StringInfo str, const FromExpr *node)
-{
- WRITE_NODE_TYPE("FROMEXPR");
-
- WRITE_NODE_FIELD(fromlist);
- WRITE_NODE_FIELD(quals);
-}
-
-static void
-_outOnConflictExpr(StringInfo str, const OnConflictExpr *node)
-{
- WRITE_NODE_TYPE("ONCONFLICTEXPR");
-
- WRITE_ENUM_FIELD(action, OnConflictAction);
- WRITE_NODE_FIELD(arbiterElems);
- WRITE_NODE_FIELD(arbiterWhere);
- WRITE_OID_FIELD(constraint);
- WRITE_NODE_FIELD(onConflictSet);
- WRITE_NODE_FIELD(onConflictWhere);
- WRITE_INT_FIELD(exclRelIndex);
- WRITE_NODE_FIELD(exclRelTlist);
-}
-
-/*****************************************************************************
- *
- * Stuff from pathnodes.h.
- *
- *****************************************************************************/
-
-/*
- * None of this stuff is needed after planning, and doesn't need to be
- * dispatched to QEs.
- */
-#ifndef COMPILING_BINARY_FUNCS
-
-/*
- * print the basic stuff of all nodes that inherit from Path
- *
- * Note we do NOT print the parent, else we'd be in infinite recursion.
- * We can print the parent's relids for identification purposes, though.
- * We print the pathtarget only if it's not the default one for the rel.
- * We also do not print the whole of param_info, since it's printed by
- * _outRelOptInfo; it's sufficient and less cluttering to print just the
- * required outer relids.
- */
-static void
-_outPathInfo(StringInfo str, const Path *node)
-{
- WRITE_ENUM_FIELD(pathtype, NodeTag);
- appendStringInfoString(str, " :parent_relids ");
- outBitmapset(str, node->parent->relids);
- if (node->pathtarget != node->parent->reltarget)
- WRITE_NODE_FIELD(pathtarget);
- appendStringInfoString(str, " :required_outer ");
- if (node->param_info)
- outBitmapset(str, node->param_info->ppi_req_outer);
- else
- outBitmapset(str, NULL);
- WRITE_BOOL_FIELD(parallel_aware);
- WRITE_BOOL_FIELD(parallel_safe);
- WRITE_INT_FIELD(parallel_workers);
- WRITE_FLOAT_FIELD(rows);
- WRITE_FLOAT_FIELD(startup_cost);
- WRITE_FLOAT_FIELD(total_cost);
- _outCdbPathLocus(str, &node->locus);
- WRITE_NODE_FIELD(pathkeys);
-}
-
-/*
- * print the basic stuff of all nodes that inherit from JoinPath
- */
-static void
-_outJoinPathInfo(StringInfo str, const JoinPath *node)
-{
- _outPathInfo(str, (const Path *) node);
-
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_BOOL_FIELD(inner_unique);
- WRITE_NODE_FIELD(outerjoinpath);
- WRITE_NODE_FIELD(innerjoinpath);
- WRITE_NODE_FIELD(joinrestrictinfo);
-}
-
-static void
-_outPath(StringInfo str, const Path *node)
-{
- WRITE_NODE_TYPE("PATH");
-
- _outPathInfo(str, (const Path *) node);
-}
-
-static void
-_outIndexPath(StringInfo str, const IndexPath *node)
-{
- WRITE_NODE_TYPE("INDEXPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(indexinfo);
- WRITE_NODE_FIELD(indexclauses);
- WRITE_NODE_FIELD(indexorderbys);
- WRITE_NODE_FIELD(indexorderbycols);
- WRITE_ENUM_FIELD(indexscandir, ScanDirection);
- WRITE_FLOAT_FIELD(indextotalcost);
- WRITE_FLOAT_FIELD(indexselectivity);
- WRITE_INT_FIELD(num_leading_eq);
-}
-
-static void
-_outBitmapHeapPath(StringInfo str, const BitmapHeapPath *node)
-{
- WRITE_NODE_TYPE("BITMAPHEAPPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(bitmapqual);
-}
-
-static void
-_outBitmapAndPath(StringInfo str, const BitmapAndPath *node)
-{
- WRITE_NODE_TYPE("BITMAPANDPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(bitmapquals);
- WRITE_FLOAT_FIELD(bitmapselectivity);
-}
-
-static void
-_outBitmapOrPath(StringInfo str, const BitmapOrPath *node)
-{
- WRITE_NODE_TYPE("BITMAPORPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(bitmapquals);
- WRITE_FLOAT_FIELD(bitmapselectivity);
-}
-
-static void
-_outTidPath(StringInfo str, const TidPath *node)
-{
- WRITE_NODE_TYPE("TIDPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(tidquals);
-}
-
-static void
-_outTidRangePath(StringInfo str, const TidRangePath *node)
-{
- WRITE_NODE_TYPE("TIDRANGEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(tidrangequals);
-}
-
-static void
-_outSubqueryScanPath(StringInfo str, const SubqueryScanPath *node)
-{
- WRITE_NODE_TYPE("SUBQUERYSCANPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
-}
-
-static void
-_outForeignPath(StringInfo str, const ForeignPath *node)
-{
- WRITE_NODE_TYPE("FOREIGNPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(fdw_outerpath);
- WRITE_NODE_FIELD(fdw_private);
-}
-
-static void
-_outCustomPath(StringInfo str, const CustomPath *node)
-{
- WRITE_NODE_TYPE("CUSTOMPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_UINT_FIELD(flags);
- WRITE_NODE_FIELD(custom_paths);
- WRITE_NODE_FIELD(custom_private);
- appendStringInfoString(str, " :methods ");
- outToken(str, node->methods->CustomName);
-}
-
-static void
-_outAppendPath(StringInfo str, const AppendPath *node)
-{
- WRITE_NODE_TYPE("APPENDPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpaths);
- WRITE_INT_FIELD(first_partial_path);
- WRITE_FLOAT_FIELD(limit_tuples);
-}
-
-static void
-_outMergeAppendPath(StringInfo str, const MergeAppendPath *node)
-{
- WRITE_NODE_TYPE("MERGEAPPENDPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpaths);
- WRITE_FLOAT_FIELD(limit_tuples);
-}
-
-static void
-_outGroupResultPath(StringInfo str, const GroupResultPath *node)
-{
- WRITE_NODE_TYPE("GROUPRESULTPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(quals);
-}
-
-static void
-_outMaterialPath(StringInfo str, const MaterialPath *node)
-{
- WRITE_NODE_TYPE("MATERIALPATH");
-
- _outPathInfo(str, (const Path *) node);
- WRITE_BOOL_FIELD(cdb_strict);
- WRITE_BOOL_FIELD(cdb_shield_child_from_rescans);
-
- WRITE_NODE_FIELD(subpath);
-}
-
-static void
-_outMemoizePath(StringInfo str, const MemoizePath *node)
-{
- WRITE_NODE_TYPE("MEMOIZEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(hash_operators);
- WRITE_NODE_FIELD(param_exprs);
- WRITE_BOOL_FIELD(singlerow);
- WRITE_BOOL_FIELD(binary_mode);
- WRITE_FLOAT_FIELD(calls);
- WRITE_UINT_FIELD(est_entries);
-}
-
-static void
-_outUniquePath(StringInfo str, const UniquePath *node)
-{
- WRITE_NODE_TYPE("UNIQUEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(umethod, UniquePathMethod);
- WRITE_NODE_FIELD(in_operators);
- WRITE_NODE_FIELD(uniq_exprs);
-}
-
-static void
-_outGatherPath(StringInfo str, const GatherPath *node)
-{
- WRITE_NODE_TYPE("GATHERPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_BOOL_FIELD(single_copy);
- WRITE_INT_FIELD(num_workers);
-}
-
-static void
-_outProjectionPath(StringInfo str, const ProjectionPath *node)
-{
- WRITE_NODE_TYPE("PROJECTIONPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_BOOL_FIELD(dummypp);
-}
-
-static void
-_outProjectSetPath(StringInfo str, const ProjectSetPath *node)
-{
- WRITE_NODE_TYPE("PROJECTSETPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
-}
-
-static void
-_outSortPathInfo(StringInfo str, const SortPath *node)
-{
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
-}
-
-static void
-_outSortPath(StringInfo str, const SortPath *node)
-{
- WRITE_NODE_TYPE("SORTPATH");
-
- _outSortPathInfo(str, node);
-}
-
-static void
-_outIncrementalSortPath(StringInfo str, const IncrementalSortPath *node)
-{
- WRITE_NODE_TYPE("INCREMENTALSORTPATH");
-
- _outSortPathInfo(str, (const SortPath *) node);
-
- WRITE_INT_FIELD(nPresortedCols);
-}
-
-static void
-_outGroupPath(StringInfo str, const GroupPath *node)
-{
- WRITE_NODE_TYPE("GROUPPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(qual);
-}
-
-static void
-_outUpperUniquePath(StringInfo str, const UpperUniquePath *node)
-{
- WRITE_NODE_TYPE("UPPERUNIQUEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_INT_FIELD(numkeys);
-}
-
-static void
-_outAggPath(StringInfo str, const AggPath *node)
-{
- WRITE_NODE_TYPE("AGGPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
- WRITE_ENUM_FIELD(aggsplit, AggSplit);
- WRITE_FLOAT_FIELD(numGroups);
- WRITE_UINT64_FIELD(transitionSpace);
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(qual);
- WRITE_BOOL_FIELD(streaming);
-}
-
-static void
-_outRollupData(StringInfo str, const RollupData *node)
-{
- WRITE_NODE_TYPE("ROLLUP");
-
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(gsets);
- WRITE_NODE_FIELD(gsets_data);
- WRITE_FLOAT_FIELD(numGroups);
- WRITE_BOOL_FIELD(hashable);
- WRITE_BOOL_FIELD(is_hashed);
-}
-
-static void
-_outGroupingSetData(StringInfo str, const GroupingSetData *node)
-{
- WRITE_NODE_TYPE("GSDATA");
-
- WRITE_NODE_FIELD(set);
- WRITE_FLOAT_FIELD(numGroups);
-}
-
-static void
-_outGroupingSetsPath(StringInfo str, const GroupingSetsPath *node)
-{
- WRITE_NODE_TYPE("GROUPINGSETSPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
- WRITE_NODE_FIELD(rollups);
- WRITE_NODE_FIELD(qual);
- WRITE_UINT64_FIELD(transitionSpace);
-}
-
-static void
-_outMinMaxAggPath(StringInfo str, const MinMaxAggPath *node)
-{
- WRITE_NODE_TYPE("MINMAXAGGPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(mmaggregates);
- WRITE_NODE_FIELD(quals);
-}
-
-static void
-_outWindowAggPath(StringInfo str, const WindowAggPath *node)
-{
- WRITE_NODE_TYPE("WINDOWAGGPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(winclause);
-}
-
-static void
-_outSetOpPath(StringInfo str, const SetOpPath *node)
-{
- WRITE_NODE_TYPE("SETOPPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(cmd, SetOpCmd);
- WRITE_ENUM_FIELD(strategy, SetOpStrategy);
- WRITE_NODE_FIELD(distinctList);
- WRITE_INT_FIELD(flagColIdx);
- WRITE_INT_FIELD(firstFlag);
- WRITE_FLOAT_FIELD(numGroups);
-}
-
-static void
-_outRecursiveUnionPath(StringInfo str, const RecursiveUnionPath *node)
-{
- WRITE_NODE_TYPE("RECURSIVEUNIONPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(leftpath);
- WRITE_NODE_FIELD(rightpath);
- WRITE_NODE_FIELD(distinctList);
- WRITE_INT_FIELD(wtParam);
- WRITE_FLOAT_FIELD(numGroups);
-}
-
-static void
-_outLockRowsPath(StringInfo str, const LockRowsPath *node)
-{
- WRITE_NODE_TYPE("LOCKROWSPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_INT_FIELD(epqParam);
-}
-
-static void
-_outModifyTablePath(StringInfo str, const ModifyTablePath *node)
-{
- WRITE_NODE_TYPE("MODIFYTABLEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(operation, CmdType);
- WRITE_BOOL_FIELD(canSetTag);
- WRITE_UINT_FIELD(nominalRelation);
- WRITE_UINT_FIELD(rootRelation);
- WRITE_BOOL_FIELD(partColsUpdated);
- WRITE_NODE_FIELD(resultRelations);
- WRITE_NODE_FIELD(updateColnosLists);
- WRITE_NODE_FIELD(withCheckOptionLists);
- WRITE_NODE_FIELD(returningLists);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(onconflict);
- WRITE_INT_FIELD(epqParam);
- WRITE_NODE_FIELD(mergeActionLists);
-}
-
-static void
-_outRuntimeFilterPath(StringInfo str, const LimitPath *node)
-{
- WRITE_NODE_TYPE("RUNTIMEFILTER");
-
- _outPathInfo(str, (const Path *) node);
-}
-
-static void
-_outLimitPath(StringInfo str, const LimitPath *node)
-{
- WRITE_NODE_TYPE("LIMITPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_ENUM_FIELD(limitOption, LimitOption);
-}
-
-static void
-_outGatherMergePath(StringInfo str, const GatherMergePath *node)
-{
- WRITE_NODE_TYPE("GATHERMERGEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_INT_FIELD(num_workers);
-}
-
-static void
-_outNestPath(StringInfo str, const NestPath *node)
-{
- WRITE_NODE_TYPE("NESTPATH");
-
- _outJoinPathInfo(str, (const JoinPath *) node);
-}
-
-static void
-_outMergePath(StringInfo str, const MergePath *node)
-{
- WRITE_NODE_TYPE("MERGEPATH");
-
- _outJoinPathInfo(str, (const JoinPath *) node);
-
- WRITE_NODE_FIELD(path_mergeclauses);
- WRITE_NODE_FIELD(outersortkeys);
- WRITE_NODE_FIELD(innersortkeys);
- WRITE_BOOL_FIELD(skip_mark_restore);
- WRITE_BOOL_FIELD(materialize_inner);
-}
-
-static void
-_outHashPath(StringInfo str, const HashPath *node)
-{
- WRITE_NODE_TYPE("HASHPATH");
-
- _outJoinPathInfo(str, (const JoinPath *) node);
-
- WRITE_NODE_FIELD(path_hashclauses);
- WRITE_INT_FIELD(num_batches);
- WRITE_FLOAT_FIELD(inner_rows_total);
-}
-
-static void
-_outPlannerGlobal(StringInfo str, const PlannerGlobal *node)
-{
- WRITE_NODE_TYPE("PLANNERGLOBAL");
-
- /* NB: this isn't a complete set of fields */
- WRITE_NODE_FIELD(subplans);
- WRITE_BITMAPSET_FIELD(rewindPlanIDs);
- WRITE_NODE_FIELD(finalrtable);
- WRITE_NODE_FIELD(finalrowmarks);
- WRITE_NODE_FIELD(resultRelations);
- WRITE_NODE_FIELD(appendRelations);
- WRITE_NODE_FIELD(relationOids);
- WRITE_NODE_FIELD(invalItems);
- WRITE_NODE_FIELD(paramExecTypes);
- WRITE_UINT_FIELD(lastPHId);
- WRITE_UINT_FIELD(lastRowMarkId);
- WRITE_INT_FIELD(lastPlanNodeId);
- WRITE_BOOL_FIELD(transientPlan);
- WRITE_BOOL_FIELD(oneoffPlan);
- WRITE_NODE_FIELD(share.motStack);
- WRITE_BITMAPSET_FIELD(share.qdShares);
- WRITE_BOOL_FIELD(dependsOnRole);
- WRITE_BOOL_FIELD(parallelModeOK);
- WRITE_BOOL_FIELD(parallelModeNeeded);
- WRITE_CHAR_FIELD(maxParallelHazard);
-}
-
-static void
-_outPlannerInfo(StringInfo str, const PlannerInfo *node)
-{
- WRITE_NODE_TYPE("PLANNERINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_NODE_FIELD(parse);
- WRITE_NODE_FIELD(glob);
- WRITE_UINT_FIELD(query_level);
- WRITE_NODE_FIELD(plan_params);
- WRITE_BITMAPSET_FIELD(outer_params);
- WRITE_NODE_ARRAY(simple_rel_array, node->simple_rel_array_size);
- WRITE_INT_FIELD(simple_rel_array_size);
- WRITE_BITMAPSET_FIELD(all_baserels);
- WRITE_BITMAPSET_FIELD(outer_join_rels);
- WRITE_NODE_FIELD(join_rel_list);
- WRITE_NODE_FIELD(join_rel_list);
- WRITE_BOOL_FIELD(setup_agg_pushdown);
- WRITE_NODE_FIELD(grouped_rel_info_list);
- WRITE_INT_FIELD(join_cur_level);
- WRITE_NODE_FIELD(init_plans);
- WRITE_NODE_FIELD(cte_plan_ids);
- WRITE_NODE_FIELD(multiexpr_params);
- WRITE_NODE_FIELD(join_domains);
- WRITE_NODE_FIELD(eq_classes);
- WRITE_BOOL_FIELD(ec_merging_done);
- WRITE_NODE_FIELD(canon_pathkeys);
- WRITE_NODE_FIELD(left_join_clauses);
- WRITE_NODE_FIELD(right_join_clauses);
- WRITE_NODE_FIELD(full_join_clauses);
- WRITE_NODE_FIELD(join_info_list);
- WRITE_INT_FIELD(last_rinfo_serial);
- WRITE_BITMAPSET_FIELD(all_result_relids);
- WRITE_BITMAPSET_FIELD(leaf_result_relids);
- WRITE_NODE_FIELD(append_rel_list);
- WRITE_NODE_FIELD(row_identity_vars);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(placeholder_list);
- WRITE_NODE_FIELD(grouped_var_list);
- WRITE_NODE_FIELD(fkey_list);
- WRITE_NODE_FIELD(query_pathkeys);
- WRITE_NODE_FIELD(group_pathkeys);
- WRITE_INT_FIELD(num_groupby_pathkeys);
- WRITE_NODE_FIELD(window_pathkeys);
- WRITE_NODE_FIELD(distinct_pathkeys);
- WRITE_NODE_FIELD(sort_pathkeys);
- WRITE_NODE_FIELD(processed_groupClause);
- WRITE_NODE_FIELD(processed_distinctClause);
- WRITE_NODE_FIELD(processed_tlist);
- WRITE_INT_FIELD(max_sortgroupref);
- WRITE_NODE_FIELD(update_colnos);
- WRITE_NODE_FIELD(minmax_aggs);
- WRITE_FLOAT_FIELD(total_table_pages);
- WRITE_FLOAT_FIELD(tuple_fraction);
- WRITE_FLOAT_FIELD(limit_tuples);
- WRITE_UINT_FIELD(qual_security_level);
- WRITE_BOOL_FIELD(hasJoinRTEs);
- WRITE_BOOL_FIELD(hasLateralRTEs);
- WRITE_BOOL_FIELD(hasHavingQual);
- WRITE_BOOL_FIELD(hasPseudoConstantQuals);
- WRITE_BOOL_FIELD(hasAlternativeSubPlans);
- WRITE_BOOL_FIELD(placeholdersFrozen);
- WRITE_BOOL_FIELD(hasRecursion);
- WRITE_NODE_FIELD(agginfos);
- WRITE_NODE_FIELD(aggtransinfos);
- WRITE_INT_FIELD(numOrderedAggs);
- WRITE_BOOL_FIELD(hasNonPartialAggs);
- WRITE_BOOL_FIELD(hasNonSerialAggs);
- WRITE_INT_FIELD(wt_param_id);
- WRITE_NODE_FIELD(non_recursive_path);
- WRITE_BITMAPSET_FIELD(curOuterRels);
- WRITE_NODE_FIELD(curOuterParams);
- WRITE_BOOL_FIELD(partColsUpdated);
-}
-
-static void
-_outRelOptInfo(StringInfo str, const RelOptInfo *node)
-{
- WRITE_NODE_TYPE("RELOPTINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_ENUM_FIELD(reloptkind, RelOptKind);
- WRITE_BITMAPSET_FIELD(relids);
- WRITE_FLOAT_FIELD(rows);
- WRITE_BOOL_FIELD(consider_startup);
- WRITE_BOOL_FIELD(consider_param_startup);
- WRITE_BOOL_FIELD(consider_parallel);
- WRITE_NODE_FIELD(reltarget);
- WRITE_NODE_FIELD(pathlist);
- WRITE_NODE_FIELD(ppilist);
- WRITE_NODE_FIELD(partial_pathlist);
- WRITE_NODE_FIELD(cheapest_startup_path);
- WRITE_NODE_FIELD(cheapest_total_path);
- WRITE_NODE_FIELD(cheapest_unique_path);
- WRITE_NODE_FIELD(cheapest_parameterized_paths);
- WRITE_BITMAPSET_FIELD(direct_lateral_relids);
- WRITE_BITMAPSET_FIELD(lateral_relids);
- WRITE_UINT_FIELD(relid);
- WRITE_OID_FIELD(reltablespace);
- WRITE_ENUM_FIELD(rtekind, RTEKind);
- WRITE_INT_FIELD(min_attr);
- WRITE_INT_FIELD(max_attr);
- WRITE_NODE_FIELD(lateral_vars);
- WRITE_BITMAPSET_FIELD(lateral_referencers);
- WRITE_NODE_FIELD(indexlist);
- WRITE_NODE_FIELD(statlist);
- WRITE_UINT_FIELD(pages);
- WRITE_FLOAT_FIELD(tuples);
- WRITE_FLOAT_FIELD(allvisfrac);
- WRITE_BITMAPSET_FIELD(eclass_indexes);
- WRITE_NODE_FIELD(subroot);
- WRITE_NODE_FIELD(subplan_params);
- WRITE_INT_FIELD(rel_parallel_workers);
- WRITE_UINT_FIELD(amflags);
- WRITE_OID_FIELD(serverid);
- WRITE_OID_FIELD(userid);
- WRITE_BOOL_FIELD(useridiscurrent);
- /* we don't try to print fdwroutine or fdw_private */
- /* can't print unique_for_rels/non_unique_for_rels; BMSes aren't Nodes */
- WRITE_NODE_FIELD(baserestrictinfo);
- WRITE_UINT_FIELD(baserestrict_min_security);
- WRITE_NODE_FIELD(joininfo);
- WRITE_BOOL_FIELD(has_eclass_joins);
- WRITE_BOOL_FIELD(consider_partitionwise_join);
- WRITE_BITMAPSET_FIELD(top_parent_relids);
- WRITE_BOOL_FIELD(partbounds_merged);
- WRITE_BITMAPSET_FIELD(all_partrels);
-}
-
-static void
-_outIndexOptInfo(StringInfo str, const IndexOptInfo *node)
-{
- WRITE_NODE_TYPE("INDEXOPTINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_OID_FIELD(indexoid);
- /* Do NOT print rel field, else infinite recursion */
- WRITE_UINT_FIELD(pages);
- WRITE_FLOAT_FIELD(tuples);
- WRITE_INT_FIELD(tree_height);
- WRITE_INT_FIELD(ncolumns);
- /* array fields aren't really worth the trouble to print */
- WRITE_OID_FIELD(relam);
- /* indexprs is redundant since we print indextlist */
- WRITE_NODE_FIELD(indpred);
- WRITE_NODE_FIELD(indextlist);
- WRITE_NODE_FIELD(indrestrictinfo);
- WRITE_BOOL_FIELD(predOK);
- WRITE_BOOL_FIELD(unique);
- WRITE_BOOL_FIELD(immediate);
- WRITE_BOOL_FIELD(hypothetical);
- /* we don't bother with fields copied from the index AM's API struct */
-}
-
-static void
-_outForeignKeyOptInfo(StringInfo str, const ForeignKeyOptInfo *node)
-{
- WRITE_NODE_TYPE("FOREIGNKEYOPTINFO");
-
- WRITE_UINT_FIELD(con_relid);
- WRITE_UINT_FIELD(ref_relid);
- WRITE_INT_FIELD(nkeys);
- WRITE_ATTRNUMBER_ARRAY(conkey, node->nkeys);
- WRITE_ATTRNUMBER_ARRAY(confkey, node->nkeys);
- WRITE_OID_ARRAY(conpfeqop, node->nkeys);
- WRITE_INT_FIELD(nmatched_ec);
- WRITE_INT_FIELD(nconst_ec);
- WRITE_INT_FIELD(nmatched_rcols);
- WRITE_INT_FIELD(nmatched_ri);
- /* for compactness, just print the number of matches per column: */
- appendStringInfoString(str, " :eclass");
- for (int i = 0; i < node->nkeys; i++)
- appendStringInfo(str, " %d", (node->eclass[i] != NULL));
- appendStringInfoString(str, " :rinfos");
- for (int i = 0; i < node->nkeys; i++)
- appendStringInfo(str, " %d", list_length(node->rinfos[i]));
-}
-
-static void
-_outStatisticExtInfo(StringInfo str, const StatisticExtInfo *node)
-{
- WRITE_NODE_TYPE("STATISTICEXTINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_OID_FIELD(statOid);
- /* don't write rel, leads to infinite recursion in plan tree dump */
- WRITE_CHAR_FIELD(kind);
- WRITE_BITMAPSET_FIELD(keys);
-}
-
-static void
-_outEquivalenceClass(StringInfo str, const EquivalenceClass *node)
-{
- /*
- * To simplify reading, we just chase up to the topmost merged EC and
- * print that, without bothering to show the merge-ees separately.
- */
- while (node->ec_merged)
- node = node->ec_merged;
-
- WRITE_NODE_TYPE("EQUIVALENCECLASS");
-
- WRITE_NODE_FIELD(ec_opfamilies);
- WRITE_OID_FIELD(ec_collation);
- WRITE_NODE_FIELD(ec_members);
- WRITE_NODE_FIELD(ec_sources);
- WRITE_NODE_FIELD(ec_derives);
- WRITE_BITMAPSET_FIELD(ec_relids);
- WRITE_BOOL_FIELD(ec_has_const);
- WRITE_BOOL_FIELD(ec_has_volatile);
- WRITE_BOOL_FIELD(ec_broken);
- WRITE_UINT_FIELD(ec_sortref);
- WRITE_UINT_FIELD(ec_min_security);
- WRITE_UINT_FIELD(ec_max_security);
-}
-
-static void
-_outEquivalenceMember(StringInfo str, const EquivalenceMember *node)
-{
- WRITE_NODE_TYPE("EQUIVALENCEMEMBER");
-
- WRITE_NODE_FIELD(em_expr);
- WRITE_BITMAPSET_FIELD(em_relids);
- WRITE_BOOL_FIELD(em_is_const);
- WRITE_BOOL_FIELD(em_is_child);
- WRITE_OID_FIELD(em_datatype);
- WRITE_NODE_FIELD(em_jdomain);
-}
-
-static void
-_outPathKey(StringInfo str, const PathKey *node)
-{
- WRITE_NODE_TYPE("PATHKEY");
-
- WRITE_NODE_FIELD(pk_eclass);
- WRITE_OID_FIELD(pk_opfamily);
- WRITE_INT_FIELD(pk_strategy);
- WRITE_BOOL_FIELD(pk_nulls_first);
-}
-
-static void
-_outPathTarget(StringInfo str, const PathTarget *node)
-{
- WRITE_NODE_TYPE("PATHTARGET");
-
- WRITE_NODE_FIELD(exprs);
- if (node->sortgrouprefs)
- {
- int i;
-
- appendStringInfoString(str, " :sortgrouprefs");
- for (i = 0; i < list_length(node->exprs); i++)
- appendStringInfo(str, " %u", node->sortgrouprefs[i]);
- }
- WRITE_FLOAT_FIELD(cost.startup);
- WRITE_FLOAT_FIELD(cost.per_tuple);
- WRITE_INT_FIELD(width);
- WRITE_ENUM_FIELD(has_volatile_expr, VolatileFunctionStatus);
-}
-
-static void
-_outParamPathInfo(StringInfo str, const ParamPathInfo *node)
-{
- WRITE_NODE_TYPE("PARAMPATHINFO");
-
- WRITE_BITMAPSET_FIELD(ppi_req_outer);
- WRITE_FLOAT_FIELD(ppi_rows);
- WRITE_NODE_FIELD(ppi_clauses);
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-static void
-_outRelAggInfo(StringInfo str, const RelAggInfo *node)
-{
- WRITE_NODE_TYPE("RELAGGINFO");
-
- WRITE_BITMAPSET_FIELD(relids);
- WRITE_NODE_FIELD(target);
- WRITE_NODE_FIELD(agg_input);
- WRITE_FLOAT_FIELD(input_rows);
- WRITE_NODE_FIELD(group_clauses);
- WRITE_NODE_FIELD(group_exprs);
- WRITE_NODE_FIELD(agg_exprs);
-
- WRITE_BOOL_FIELD(build_from_plain);
-
- WRITE_NODE_FIELD(rel_grouped);
- WRITE_NODE_FIELD(rel_grouped_non_plain);
-}
-
-static void
-_outRestrictInfo(StringInfo str, const RestrictInfo *node)
-{
- WRITE_NODE_TYPE("RESTRICTINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_NODE_FIELD(clause);
- WRITE_BOOL_FIELD(is_pushed_down);
- WRITE_BOOL_FIELD(can_join);
- WRITE_BOOL_FIELD(pseudoconstant);
- WRITE_BOOL_FIELD(has_clone);
- WRITE_BOOL_FIELD(is_clone);
- WRITE_BOOL_FIELD(leakproof);
- WRITE_ENUM_FIELD(has_volatile, VolatileFunctionStatus);
- WRITE_UINT_FIELD(security_level);
- WRITE_INT_FIELD(num_base_rels);
- WRITE_BOOL_FIELD(contain_outer_query_references);
- WRITE_BITMAPSET_FIELD(clause_relids);
- WRITE_BITMAPSET_FIELD(required_relids);
- WRITE_BITMAPSET_FIELD(incompatible_relids);
- WRITE_BITMAPSET_FIELD(outer_relids);
- WRITE_BITMAPSET_FIELD(left_relids);
- WRITE_BITMAPSET_FIELD(right_relids);
- WRITE_NODE_FIELD(orclause);
- /* don't write parent_ec, leads to infinite recursion in plan tree dump */
- WRITE_INT_FIELD(rinfo_serial);
- WRITE_FLOAT_FIELD(eval_cost.startup);
- WRITE_FLOAT_FIELD(eval_cost.per_tuple);
- WRITE_FLOAT_FIELD(norm_selec);
- WRITE_FLOAT_FIELD(outer_selec);
- WRITE_NODE_FIELD(mergeopfamilies);
- /* don't write left_ec, leads to infinite recursion in plan tree dump */
- /* don't write right_ec, leads to infinite recursion in plan tree dump */
- WRITE_NODE_FIELD(left_em);
- WRITE_NODE_FIELD(right_em);
- WRITE_BOOL_FIELD(outer_is_left);
- WRITE_OID_FIELD(hashjoinoperator);
- WRITE_FLOAT_FIELD(left_bucketsize);
- WRITE_FLOAT_FIELD(left_mcvfreq);
- WRITE_FLOAT_FIELD(right_mcvfreq);
- WRITE_OID_FIELD(left_hasheqoperator);
- WRITE_OID_FIELD(right_hasheqoperator);
- WRITE_OID_FIELD(hasheqoperator);
-}
-
-static void
-_outIndexClause(StringInfo str, const IndexClause *node)
-{
- WRITE_NODE_TYPE("INDEXCLAUSE");
-
- WRITE_NODE_FIELD(rinfo);
- WRITE_NODE_FIELD(indexquals);
- WRITE_BOOL_FIELD(lossy);
- WRITE_INT_FIELD(indexcol);
- WRITE_NODE_FIELD(indexcols);
-}
-
-static void
-_outPlaceHolderVar(StringInfo str, const PlaceHolderVar *node)
-{
- WRITE_NODE_TYPE("PLACEHOLDERVAR");
-
- WRITE_NODE_FIELD(phexpr);
- WRITE_BITMAPSET_FIELD(phrels);
- WRITE_BITMAPSET_FIELD(phnullingrels);
- WRITE_UINT_FIELD(phid);
- WRITE_UINT_FIELD(phlevelsup);
-}
-
-static void
-_outSpecialJoinInfo(StringInfo str, const SpecialJoinInfo *node)
-{
- WRITE_NODE_TYPE("SPECIALJOININFO");
-
- WRITE_BITMAPSET_FIELD(min_lefthand);
- WRITE_BITMAPSET_FIELD(min_righthand);
- WRITE_BITMAPSET_FIELD(syn_lefthand);
- WRITE_BITMAPSET_FIELD(syn_righthand);
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_UINT_FIELD(ojrelid);
- WRITE_BITMAPSET_FIELD(commute_above_l);
- WRITE_BITMAPSET_FIELD(commute_above_r);
- WRITE_BITMAPSET_FIELD(commute_below_l);
- WRITE_BITMAPSET_FIELD(commute_below_r);
- WRITE_BOOL_FIELD(lhs_strict);
- WRITE_BOOL_FIELD(semi_can_btree);
- WRITE_BOOL_FIELD(semi_can_hash);
- WRITE_NODE_FIELD(semi_operators);
- WRITE_NODE_FIELD(semi_rhs_exprs);
-}
-
-static void
-_outAppendRelInfo(StringInfo str, const AppendRelInfo *node)
-{
- WRITE_NODE_TYPE("APPENDRELINFO");
-
- WRITE_UINT_FIELD(parent_relid);
- WRITE_UINT_FIELD(child_relid);
- WRITE_OID_FIELD(parent_reltype);
- WRITE_OID_FIELD(child_reltype);
- WRITE_NODE_FIELD(translated_vars);
- WRITE_INT_FIELD(num_child_cols);
- WRITE_ATTRNUMBER_ARRAY(parent_colnos, node->num_child_cols);
- WRITE_OID_FIELD(parent_reloid);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-static void
-_outRowIdentityVarInfo(StringInfo str, const RowIdentityVarInfo *node)
-{
- WRITE_NODE_TYPE("ROWIDENTITYVARINFO");
-
- WRITE_NODE_FIELD(rowidvar);
- WRITE_INT_FIELD(rowidwidth);
- WRITE_STRING_FIELD(rowidname);
- WRITE_BITMAPSET_FIELD(rowidrels);
-}
-#endif
-
-static void
-_outPlaceHolderInfo(StringInfo str, const PlaceHolderInfo *node)
-{
- WRITE_NODE_TYPE("PLACEHOLDERINFO");
-
- WRITE_UINT_FIELD(phid);
- WRITE_NODE_FIELD(ph_var);
- WRITE_BITMAPSET_FIELD(ph_eval_at);
- WRITE_BITMAPSET_FIELD(ph_lateral);
- WRITE_BITMAPSET_FIELD(ph_needed);
- WRITE_INT_FIELD(ph_width);
-}
-
-static void
-_outGroupedVarInfo(StringInfo str, const GroupedVarInfo *node)
-{
- WRITE_NODE_TYPE("GROUPEDVARINFO");
-
- WRITE_NODE_FIELD(gvexpr);
- WRITE_NODE_FIELD(agg_partial);
- WRITE_UINT_FIELD(sortgroupref);
- WRITE_BITMAPSET_FIELD(gv_eval_at);
-}
-
-static void
-_outMinMaxAggInfo(StringInfo str, const MinMaxAggInfo *node)
-{
- WRITE_NODE_TYPE("MINMAXAGGINFO");
-
- WRITE_OID_FIELD(aggfnoid);
- WRITE_OID_FIELD(aggsortop);
- WRITE_NODE_FIELD(target);
- /* We intentionally omit subroot --- too large, not interesting enough */
- WRITE_NODE_FIELD(path);
- WRITE_FLOAT_FIELD(pathcost);
- WRITE_NODE_FIELD(param);
-}
-
-static void
-_outPlannerParamItem(StringInfo str, const PlannerParamItem *node)
-{
- WRITE_NODE_TYPE("PLANNERPARAMITEM");
-
- WRITE_NODE_FIELD(item);
- WRITE_INT_FIELD(paramId);
-}
-
-/*****************************************************************************
- *
- * Stuff from extensible.h
- *
- *****************************************************************************/
-
-#ifndef COMPILING_BINARY_FUNCS
-static void
-_outExtensibleNode(StringInfo str, const ExtensibleNode *node)
-{
- const ExtensibleNodeMethods *methods;
-
- methods = GetExtensibleNodeMethods(node->extnodename, false);
-
- WRITE_NODE_TYPE("EXTENSIBLENODE");
-
- WRITE_STRING_FIELD(extnodename);
-
- /* serialize the private fields */
- methods->nodeOut(str, node);
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-/*****************************************************************************
- *
- * Stuff from parsenodes.h.
- *
- *****************************************************************************/
-
-/*
- * print the basic stuff of all nodes that inherit from CreateStmt
- */
-static void
-_outCreateStmtInfo(StringInfo str, const CreateStmt *node)
-{
- WRITE_NODE_FIELD(relation);
- WRITE_NODE_FIELD(tableElts);
- WRITE_NODE_FIELD(inhRelations);
- WRITE_NODE_FIELD(partspec);
- WRITE_NODE_FIELD(partbound);
- WRITE_NODE_FIELD(ofTypename);
- WRITE_NODE_FIELD(constraints);
- WRITE_NODE_FIELD(options);
- WRITE_ENUM_FIELD(oncommit, OnCommitAction);
- WRITE_STRING_FIELD(tablespacename);
- WRITE_STRING_FIELD(accessMethod);
- WRITE_BOOL_FIELD(if_not_exists);
- WRITE_ENUM_FIELD(origin, CreateStmtOrigin);
-
- WRITE_NODE_FIELD(distributedBy);
- WRITE_NODE_FIELD(partitionBy);
- WRITE_CHAR_FIELD(relKind);
- WRITE_OID_FIELD(ownerid);
- WRITE_BOOL_FIELD(buildAoBlkdir);
- WRITE_NODE_FIELD(attr_encodings);
- WRITE_BOOL_FIELD(isCtas);
- WRITE_NODE_FIELD(intoQuery);
- WRITE_NODE_FIELD(intoPolicy);
-
- WRITE_NODE_FIELD(part_idx_oids);
- WRITE_NODE_FIELD(part_idx_names);
- WRITE_NODE_FIELD(tags);
-
- /*
- * Some extra checks to make sure we didn't get lost
- * during serialization/deserialization
- */
- Assert(node->relKind != 0);
- Assert(node->oncommit <= ONCOMMIT_DROP);
-}
-
-static void
-_outCreateStmt(StringInfo str, const CreateStmt *node)
-{
- WRITE_NODE_TYPE("CREATESTMT");
-
- _outCreateStmtInfo(str, (const CreateStmt *) node);
-}
-
-static void
-_outCreateForeignTableStmt(StringInfo str, const CreateForeignTableStmt *node)
-{
- WRITE_NODE_TYPE("CREATEFOREIGNTABLESTMT");
-
- _outCreateStmtInfo(str, (const CreateStmt *) node);
-
- WRITE_STRING_FIELD(servername);
- WRITE_NODE_FIELD(options);
- WRITE_NODE_FIELD(distributedBy);
-}
-
-static void
-_outImportForeignSchemaStmt(StringInfo str, const ImportForeignSchemaStmt *node)
-{
- WRITE_NODE_TYPE("IMPORTFOREIGNSCHEMASTMT");
-
- WRITE_STRING_FIELD(server_name);
- WRITE_STRING_FIELD(remote_schema);
- WRITE_STRING_FIELD(local_schema);
- WRITE_ENUM_FIELD(list_type, ImportForeignSchemaType);
- WRITE_NODE_FIELD(table_list);
- WRITE_NODE_FIELD(options);
-}
-
-static void
-_outIndexStmt(StringInfo str, const IndexStmt *node)
-{
- WRITE_NODE_TYPE("INDEXSTMT");
-
- WRITE_STRING_FIELD(idxname);
- WRITE_NODE_FIELD(relation);
- WRITE_OID_FIELD(relationOid);
- WRITE_STRING_FIELD(accessMethod);
- WRITE_STRING_FIELD(tableSpace);
- WRITE_NODE_FIELD(indexParams);
- WRITE_NODE_FIELD(indexIncludingParams);
- WRITE_NODE_FIELD(options);
- WRITE_NODE_FIELD(whereClause);
- WRITE_NODE_FIELD(excludeOpNames);
- WRITE_STRING_FIELD(idxcomment);
- WRITE_OID_FIELD(indexOid);
- WRITE_OID_FIELD(oldNumber);
- WRITE_UINT_FIELD(oldCreateSubid);
- WRITE_UINT_FIELD(oldFirstRelfilelocatorSubid);
- WRITE_BOOL_FIELD(unique);
- WRITE_BOOL_FIELD(nulls_not_distinct);
- WRITE_BOOL_FIELD(primary);
- WRITE_BOOL_FIELD(isconstraint);
- WRITE_BOOL_FIELD(deferrable);
- WRITE_BOOL_FIELD(initdeferred);
- WRITE_BOOL_FIELD(transformed);
- WRITE_BOOL_FIELD(concurrent);
- WRITE_BOOL_FIELD(if_not_exists);
- WRITE_BOOL_FIELD(reset_default_tblspc);
- WRITE_ENUM_FIELD(concurrentlyPhase, IndexConcurrentlyPhase);
- WRITE_OID_FIELD(indexRelationOid);
- WRITE_NODE_FIELD(tags);
-}
-
-static void
-_outCreateStatsStmt(StringInfo str, const CreateStatsStmt *node)
-{
- WRITE_NODE_TYPE("CREATESTATSSTMT");
-
- WRITE_NODE_FIELD(defnames);
- WRITE_NODE_FIELD(stat_types);
- WRITE_NODE_FIELD(exprs);
- WRITE_NODE_FIELD(relations);
- WRITE_STRING_FIELD(stxcomment);
- WRITE_BOOL_FIELD(transformed);
- WRITE_BOOL_FIELD(if_not_exists);
-}
-
-static void
-_outAlterStatsStmt(StringInfo str, const AlterStatsStmt *node)
-{
- WRITE_NODE_TYPE("ALTERSTATSSTMT");
-
- WRITE_NODE_FIELD(defnames);
- WRITE_INT_FIELD(stxstattarget);
- WRITE_BOOL_FIELD(missing_ok);
-}
-
-static void
-_outNotifyStmt(StringInfo str, const NotifyStmt *node)
-{
- WRITE_NODE_TYPE("NOTIFY");
-
- WRITE_STRING_FIELD(conditionname);
- WRITE_STRING_FIELD(payload);
-}
-
-static void
-_outDeclareCursorStmt(StringInfo str, const DeclareCursorStmt *node)
-{
- WRITE_NODE_TYPE("DECLARECURSOR");
-
- WRITE_STRING_FIELD(portalname);
- WRITE_INT_FIELD(options);
- WRITE_NODE_FIELD(query);
-}
-
-/*
- * SelectStmt's are never written to the catalog, they only exist
- * between parse and parseTransform. The only use of this function
- * is for debugging purposes.
- *
- * In GPDB, these are also dispatched from QD to QEs, so we need full
- * out/read support.
- *
- * If the Nodes Struct changed, we need to maintain these funtions.
- */
-static void
-_outSelectStmt(StringInfo str, const SelectStmt *node)
-{
- WRITE_NODE_TYPE("SELECT");
-
- WRITE_NODE_FIELD(distinctClause);
- WRITE_NODE_FIELD(intoClause);
- WRITE_NODE_FIELD(targetList);
- WRITE_NODE_FIELD(fromClause);
- WRITE_NODE_FIELD(whereClause);
- WRITE_NODE_FIELD(groupClause);
- WRITE_BOOL_FIELD(groupDistinct);
- WRITE_NODE_FIELD(havingClause);
- WRITE_NODE_FIELD(windowClause);
- WRITE_NODE_FIELD(valuesLists);
- WRITE_NODE_FIELD(sortClause);
- WRITE_NODE_FIELD(scatterClause);
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_ENUM_FIELD(limitOption, LimitOption);
- WRITE_NODE_FIELD(lockingClause);
- WRITE_NODE_FIELD(withClause);
- WRITE_ENUM_FIELD(op, SetOperation);
- WRITE_BOOL_FIELD(all);
- WRITE_NODE_FIELD(larg);
- WRITE_NODE_FIELD(rarg);
- WRITE_BOOL_FIELD(disableLockingOptimization);
-}
-
-static void
-_outReturnStmt(StringInfo str, const ReturnStmt *node)
-{
- WRITE_NODE_TYPE("RETURN");
-
- WRITE_NODE_FIELD(returnval);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-
-static void
-_outPLAssignStmt(StringInfo str, const PLAssignStmt *node)
-{
- WRITE_NODE_TYPE("PLASSIGN");
-
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(indirection);
- WRITE_INT_FIELD(nnames);
- WRITE_NODE_FIELD(val);
- WRITE_LOCATION_FIELD(location);
-}
-#endif
-
-static void
-_outFuncCall(StringInfo str, const FuncCall *node)
-{
- WRITE_NODE_TYPE("FUNCCALL");
-
- WRITE_NODE_FIELD(funcname);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(agg_order);
- WRITE_NODE_FIELD(agg_filter);
- WRITE_NODE_FIELD(over);
- WRITE_BOOL_FIELD(agg_within_group);
- WRITE_BOOL_FIELD(agg_star);
- WRITE_BOOL_FIELD(agg_distinct);
- WRITE_BOOL_FIELD(func_variadic);
- WRITE_ENUM_FIELD(funcformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outDefElem(StringInfo str, const DefElem *node)
-{
- WRITE_NODE_TYPE("DEFELEM");
-
- WRITE_STRING_FIELD(defnamespace);
- WRITE_STRING_FIELD(defname);
- WRITE_NODE_FIELD(arg);
- WRITE_ENUM_FIELD(defaction, DefElemAction);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTableLikeClause(StringInfo str, const TableLikeClause *node)
-{
- WRITE_NODE_TYPE("TABLELIKECLAUSE");
-
- WRITE_NODE_FIELD(relation);
- WRITE_UINT_FIELD(options);
- WRITE_OID_FIELD(relationOid);
-}
-
-static void
-_outLockingClause(StringInfo str, const LockingClause *node)
-{
- WRITE_NODE_TYPE("LOCKINGCLAUSE");
-
- WRITE_NODE_FIELD(lockedRels);
- WRITE_ENUM_FIELD(strength, LockClauseStrength);
- WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
-}
-
-static void
-_outXmlSerialize(StringInfo str, const XmlSerialize *node)
-{
- WRITE_NODE_TYPE("XMLSERIALIZE");
-
- WRITE_ENUM_FIELD(xmloption, XmlOptionType);
- WRITE_NODE_FIELD(expr);
- WRITE_NODE_FIELD(typeName);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTriggerTransition(StringInfo str, const TriggerTransition *node)
-{
- WRITE_NODE_TYPE("TRIGGERTRANSITION");
-
- WRITE_STRING_FIELD(name);
- WRITE_BOOL_FIELD(isNew);
- WRITE_BOOL_FIELD(isTable);
-}
-
-static void
-_outColumnDef(StringInfo str, const ColumnDef *node)
-{
- WRITE_NODE_TYPE("COLUMNDEF");
-
- WRITE_STRING_FIELD(colname);
- WRITE_NODE_FIELD(typeName);
- WRITE_STRING_FIELD(compression);
- WRITE_INT_FIELD(inhcount);
- WRITE_BOOL_FIELD(is_local);
- WRITE_BOOL_FIELD(is_not_null);
- WRITE_BOOL_FIELD(is_from_type);
- WRITE_INT_FIELD(attnum);
- WRITE_INT_FIELD(storage);
- WRITE_STRING_FIELD(storage_name);
- WRITE_NODE_FIELD(raw_default);
- WRITE_NODE_FIELD(cooked_default);
-
- WRITE_BOOL_FIELD(hasCookedMissingVal);
- WRITE_BOOL_FIELD(missingIsNull);
- if (node->hasCookedMissingVal && !node->missingIsNull)
- outDatum(str, node->missingVal, -1, false);
-
- WRITE_CHAR_FIELD(identity);
- WRITE_NODE_FIELD(identitySequence);
- WRITE_CHAR_FIELD(generated);
- WRITE_NODE_FIELD(collClause);
- WRITE_OID_FIELD(collOid);
- WRITE_NODE_FIELD(constraints);
- WRITE_NODE_FIELD(encoding);
- WRITE_NODE_FIELD(fdwoptions);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTypeName(StringInfo str, const TypeName *node)
-{
- WRITE_NODE_TYPE("TYPENAME");
-
- WRITE_NODE_FIELD(names);
- WRITE_OID_FIELD(typeOid);
- WRITE_BOOL_FIELD(setof);
- WRITE_BOOL_FIELD(pct_type);
- WRITE_NODE_FIELD(typmods);
- WRITE_INT_FIELD(typemod);
- WRITE_NODE_FIELD(arrayBounds);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTypeCast(StringInfo str, const TypeCast *node)
-{
- WRITE_NODE_TYPE("TYPECAST");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(typeName);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCollateClause(StringInfo str, const CollateClause *node)
-{
- WRITE_NODE_TYPE("COLLATECLAUSE");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(collname);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outIndexElem(StringInfo str, const IndexElem *node)
-{
- WRITE_NODE_TYPE("INDEXELEM");
-
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(expr);
- WRITE_STRING_FIELD(indexcolname);
- WRITE_NODE_FIELD(collation);
- WRITE_NODE_FIELD(opclass);
- WRITE_NODE_FIELD(opclassopts);
- WRITE_ENUM_FIELD(ordering, SortByDir);
- WRITE_ENUM_FIELD(nulls_ordering, SortByNulls);
-}
-
-static void
-_outStatsElem(StringInfo str, const StatsElem *node)
-{
- WRITE_NODE_TYPE("STATSELEM");
-
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(expr);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-static void
-_outQuery(StringInfo str, const Query *node)
-{
- WRITE_NODE_TYPE("QUERY");
-
- WRITE_ENUM_FIELD(commandType, CmdType);
- WRITE_ENUM_FIELD(querySource, QuerySource);
- /* we intentionally do not print the queryId field */
- WRITE_BOOL_FIELD(canSetTag);
-
- /*
- * Hack to work around missing outfuncs routines for a lot of the
- * utility-statement node types. (The only one we actually *need* for
- * rules support is NotifyStmt.) Someday we ought to support 'em all, but
- * for the meantime do this to avoid getting lots of warnings when running
- * with debug_print_parse on.
- */
- if (node->utilityStmt)
- {
- switch (nodeTag(node->utilityStmt))
- {
- case T_CreateStmt:
- case T_CreateExternalStmt:
- case T_DropStmt:
- case T_TruncateStmt:
- case T_AlterTableStmt:
- case T_AlterTableCmd:
- case T_ViewStmt:
- case T_RuleStmt:
-
- case T_CreateRoleStmt:
- case T_AlterRoleStmt:
- case T_AlterRoleSetStmt:
- case T_DropRoleStmt:
-
- case T_CreateProfileStmt:
- case T_AlterProfileStmt:
- case T_DropProfileStmt:
-
- case T_CreateSchemaStmt:
- case T_AlterSchemaStmt:
- case T_CreatePLangStmt:
- case T_AlterOwnerStmt:
- case T_AlterObjectSchemaStmt:
-
- case T_CreateTableSpaceStmt:
-
- case T_RenameStmt:
- case T_IndexStmt:
- case T_NotifyStmt:
- case T_DeclareCursorStmt:
- case T_VacuumStmt:
- case T_CreateSeqStmt:
- case T_AlterSeqStmt:
- case T_CreatedbStmt:
- case T_AlterDatabaseSetStmt:
- case T_DropdbStmt:
- case T_CreateDomainStmt:
- case T_AlterDomainStmt:
- case T_ClusterStmt:
-
- case T_CreateFunctionStmt:
- case T_AlterFunctionStmt:
-
- case T_TransactionStmt:
- case T_GrantStmt:
- case T_GrantRoleStmt:
- case T_LockStmt:
- case T_CopyStmt:
- case T_ReindexStmt:
- case T_ConstraintsSetStmt:
- case T_VariableSetStmt:
- case T_CreateTrigStmt:
- case T_DefineStmt:
- case T_CompositeTypeStmt:
- case T_CreateCastStmt:
- case T_CreateOpClassStmt:
- case T_CreateOpClassItem:
- case T_CreateConversionStmt:
- WRITE_NODE_FIELD(utilityStmt);
- break;
- default:
- appendStringInfoString(str, " :utilityStmt ?");
- appendStringInfo(str, "%u", nodeTag(node->utilityStmt));
- break;
- }
- }
- else
- appendStringInfoString(str, " :utilityStmt <>");
-
- WRITE_INT_FIELD(resultRelation);
- WRITE_BOOL_FIELD(hasAggs);
- WRITE_BOOL_FIELD(hasWindowFuncs);
- WRITE_BOOL_FIELD(hasTargetSRFs);
- WRITE_BOOL_FIELD(hasSubLinks);
- WRITE_BOOL_FIELD(hasDynamicFunctions);
- WRITE_BOOL_FIELD(hasFuncsWithExecRestrictions);
- WRITE_BOOL_FIELD(hasDistinctOn);
- WRITE_BOOL_FIELD(hasRecursive);
- WRITE_BOOL_FIELD(hasModifyingCTE);
- WRITE_BOOL_FIELD(hasForUpdate);
- WRITE_BOOL_FIELD(hasRowSecurity);
- WRITE_BOOL_FIELD(canOptSelectLockingClause);
- WRITE_BOOL_FIELD(isReturn);
- WRITE_NODE_FIELD(cteList);
- WRITE_NODE_FIELD(rtable);
- WRITE_NODE_FIELD(rteperminfos);
- WRITE_NODE_FIELD(jointree);
- WRITE_NODE_FIELD(mergeActionList);
- WRITE_BOOL_FIELD(mergeUseOuterJoin);
- WRITE_NODE_FIELD(targetList);
- WRITE_ENUM_FIELD(override, OverridingKind);
- WRITE_NODE_FIELD(onConflict);
- WRITE_NODE_FIELD(returningList);
- WRITE_NODE_FIELD(groupClause);
- WRITE_BOOL_FIELD(groupDistinct);
- WRITE_NODE_FIELD(groupingSets);
- WRITE_NODE_FIELD(havingQual);
- WRITE_NODE_FIELD(windowClause);
- WRITE_NODE_FIELD(distinctClause);
- WRITE_NODE_FIELD(sortClause);
- WRITE_NODE_FIELD(scatterClause);
- WRITE_BOOL_FIELD(isTableValueSelect);
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_ENUM_FIELD(limitOption, LimitOption);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(setOperations);
- WRITE_NODE_FIELD(constraintDeps);
- WRITE_NODE_FIELD(withCheckOptions);
- WRITE_LOCATION_FIELD(stmt_location);
- WRITE_INT_FIELD(stmt_len);
- WRITE_BOOL_FIELD(parentStmtType);
-
- /* Don't serialize policy */
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-static void
-_outWithCheckOption(StringInfo str, const WithCheckOption *node)
-{
- WRITE_NODE_TYPE("WITHCHECKOPTION");
-
- WRITE_ENUM_FIELD(kind, WCOKind);
- WRITE_STRING_FIELD(relname);
- WRITE_STRING_FIELD(polname);
- WRITE_NODE_FIELD(qual);
- WRITE_BOOL_FIELD(cascaded);
-}
-
-static void
-_outSortGroupClause(StringInfo str, const SortGroupClause *node)
-{
- WRITE_NODE_TYPE("SORTGROUPCLAUSE");
-
- WRITE_UINT_FIELD(tleSortGroupRef);
- WRITE_OID_FIELD(eqop);
- WRITE_OID_FIELD(sortop);
- WRITE_BOOL_FIELD(nulls_first);
- WRITE_BOOL_FIELD(hashable);
-}
-
-static void
-_outGroupingSet(StringInfo str, const GroupingSet *node)
-{
- WRITE_NODE_TYPE("GROUPINGSET");
-
- WRITE_ENUM_FIELD(kind, GroupingSetKind);
- WRITE_NODE_FIELD(content);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outWindowClause(StringInfo str, const WindowClause *node)
-{
- WRITE_NODE_TYPE("WINDOWCLAUSE");
-
- WRITE_STRING_FIELD(name);
- WRITE_STRING_FIELD(refname);
- WRITE_NODE_FIELD(partitionClause);
- WRITE_NODE_FIELD(orderClause);
- WRITE_INT_FIELD(frameOptions);
- WRITE_NODE_FIELD(startOffset);
- WRITE_NODE_FIELD(endOffset);
- WRITE_OID_FIELD(startInRangeFunc);
- WRITE_OID_FIELD(endInRangeFunc);
- WRITE_OID_FIELD(inRangeColl);
- WRITE_BOOL_FIELD(inRangeAsc);
- WRITE_BOOL_FIELD(inRangeNullsFirst);
- WRITE_UINT_FIELD(winref);
- WRITE_BOOL_FIELD(copiedOrder);
-}
-
-static void
-_outRowMarkClause(StringInfo str, const RowMarkClause *node)
-{
- WRITE_NODE_TYPE("ROWMARKCLAUSE");
-
- WRITE_UINT_FIELD(rti);
- WRITE_ENUM_FIELD(strength, LockClauseStrength);
- WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
- WRITE_BOOL_FIELD(pushedDown);
-}
-
-static void
-_outWithClause(StringInfo str, const WithClause *node)
-{
- WRITE_NODE_TYPE("WITHCLAUSE");
-
- WRITE_NODE_FIELD(ctes);
- WRITE_BOOL_FIELD(recursive);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCommonTableExpr(StringInfo str, const CommonTableExpr *node)
-{
- WRITE_NODE_TYPE("COMMONTABLEEXPR");
-
- WRITE_STRING_FIELD(ctename);
- WRITE_NODE_FIELD(aliascolnames);
- WRITE_ENUM_FIELD(ctematerialized, CTEMaterialize);
- WRITE_NODE_FIELD(ctequery);
- WRITE_NODE_FIELD(search_clause);
- WRITE_NODE_FIELD(cycle_clause);
- WRITE_LOCATION_FIELD(location);
- WRITE_BOOL_FIELD(cterecursive);
- WRITE_INT_FIELD(cterefcount);
- WRITE_NODE_FIELD(ctecolnames);
- WRITE_NODE_FIELD(ctecoltypes);
- WRITE_NODE_FIELD(ctecoltypmods);
- WRITE_NODE_FIELD(ctecolcollations);
-}
-
-static void
-_outSetOperationStmt(StringInfo str, const SetOperationStmt *node)
-{
- WRITE_NODE_TYPE("SETOPERATIONSTMT");
-
- WRITE_ENUM_FIELD(op, SetOperation);
- WRITE_BOOL_FIELD(all);
- WRITE_NODE_FIELD(larg);
- WRITE_NODE_FIELD(rarg);
- WRITE_NODE_FIELD(colTypes);
- WRITE_NODE_FIELD(colTypmods);
- WRITE_NODE_FIELD(colCollations);
- WRITE_NODE_FIELD(groupClauses);
-}
-
-static void
-_outRangeTblEntry(StringInfo str, const RangeTblEntry *node)
-{
- WRITE_NODE_TYPE("RTE");
-
- /* put alias + eref first to make dump more legible */
- WRITE_NODE_FIELD(alias);
- WRITE_NODE_FIELD(eref);
- WRITE_ENUM_FIELD(rtekind, RTEKind);
- WRITE_BOOL_FIELD(relisivm);
-
- switch (node->rtekind)
- {
- case RTE_RELATION:
- WRITE_OID_FIELD(relid);
- WRITE_CHAR_FIELD(relkind);
- WRITE_INT_FIELD(rellockmode);
- WRITE_NODE_FIELD(tablesample);
- WRITE_UINT_FIELD(perminfoindex);
- break;
- case RTE_SUBQUERY:
- WRITE_NODE_FIELD(subquery);
- WRITE_BOOL_FIELD(security_barrier);
- WRITE_OID_FIELD(relid);
- WRITE_CHAR_FIELD(relkind);
- WRITE_INT_FIELD(rellockmode);
- WRITE_UINT_FIELD(perminfoindex);
- break;
- case RTE_JOIN:
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_INT_FIELD(joinmergedcols);
- WRITE_NODE_FIELD(joinaliasvars);
- WRITE_NODE_FIELD(joinleftcols);
- WRITE_NODE_FIELD(joinrightcols);
- WRITE_NODE_FIELD(join_using_alias);
- break;
- case RTE_FUNCTION:
- WRITE_NODE_FIELD(functions);
- WRITE_BOOL_FIELD(funcordinality);
- break;
- case RTE_TABLEFUNCTION:
- WRITE_NODE_FIELD(subquery);
- WRITE_NODE_FIELD(functions);
- WRITE_BOOL_FIELD(funcordinality);
- break;
- case RTE_TABLEFUNC:
- WRITE_NODE_FIELD(tablefunc);
- break;
- case RTE_VALUES:
- WRITE_NODE_FIELD(values_lists);
- WRITE_NODE_FIELD(coltypes);
- WRITE_NODE_FIELD(coltypmods);
- WRITE_NODE_FIELD(colcollations);
- break;
- case RTE_CTE:
- WRITE_STRING_FIELD(ctename);
- WRITE_UINT_FIELD(ctelevelsup);
- WRITE_BOOL_FIELD(self_reference);
- WRITE_NODE_FIELD(coltypes);
- WRITE_NODE_FIELD(coltypmods);
- WRITE_NODE_FIELD(colcollations);
- break;
- case RTE_NAMEDTUPLESTORE:
- WRITE_STRING_FIELD(enrname);
- WRITE_FLOAT_FIELD(enrtuples);
- WRITE_OID_FIELD(relid);
- WRITE_NODE_FIELD(coltypes);
- WRITE_NODE_FIELD(coltypmods);
- WRITE_NODE_FIELD(colcollations);
- break;
- case RTE_RESULT:
- /* no extra fields */
- break;
- case RTE_VOID: /*CDB*/
- break;
- default:
- elog(ERROR, "unrecognized RTE kind: %d", (int) node->rtekind);
- break;
- }
-
- WRITE_BOOL_FIELD(lateral);
- WRITE_BOOL_FIELD(inh);
- WRITE_BOOL_FIELD(inFromCl);
- WRITE_NODE_FIELD(securityQuals);
-
- WRITE_BOOL_FIELD(forceDistRandom);
-}
-
-static void
-_outRangeTblFunction(StringInfo str, const RangeTblFunction *node)
-{
- WRITE_NODE_TYPE("RANGETBLFUNCTION");
-
- WRITE_NODE_FIELD(funcexpr);
- WRITE_INT_FIELD(funccolcount);
- WRITE_NODE_FIELD(funccolnames);
- WRITE_NODE_FIELD(funccoltypes);
- WRITE_NODE_FIELD(funccoltypmods);
- WRITE_NODE_FIELD(funccolcollations);
- /* funcuserdata is only serialized in binary out/read functions */
-#ifdef COMPILING_BINARY_FUNCS
- WRITE_BYTEA_FIELD(funcuserdata);
-#endif
- WRITE_BITMAPSET_FIELD(funcparams);
-}
-
-static void
-_outTableSampleClause(StringInfo str, const TableSampleClause *node)
-{
- WRITE_NODE_TYPE("TABLESAMPLECLAUSE");
-
- WRITE_OID_FIELD(tsmhandler);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(repeatable);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-static void
-_outAExpr(StringInfo str, const A_Expr *node)
-{
- WRITE_NODE_TYPE("AEXPR");
-
- switch (node->kind)
- {
- case AEXPR_OP:
- appendStringInfoChar(str, ' ');
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_OP_ANY:
- appendStringInfoChar(str, ' ');
- WRITE_NODE_FIELD(name);
- appendStringInfoString(str, " ANY ");
- break;
- case AEXPR_OP_ALL:
- appendStringInfoChar(str, ' ');
- WRITE_NODE_FIELD(name);
- appendStringInfoString(str, " ALL ");
- break;
- case AEXPR_DISTINCT:
- appendStringInfoString(str, " DISTINCT ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_NOT_DISTINCT:
- appendStringInfoString(str, " NOT_DISTINCT ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_NULLIF:
- appendStringInfoString(str, " NULLIF ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_IN:
- appendStringInfoString(str, " IN ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_LIKE:
- appendStringInfoString(str, " LIKE ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_ILIKE:
- appendStringInfoString(str, " ILIKE ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_SIMILAR:
- appendStringInfoString(str, " SIMILAR ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_BETWEEN:
- appendStringInfoString(str, " BETWEEN ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_NOT_BETWEEN:
- appendStringInfoString(str, " NOT_BETWEEN ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_BETWEEN_SYM:
- appendStringInfoString(str, " BETWEEN_SYM ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_NOT_BETWEEN_SYM:
- appendStringInfoString(str, " NOT_BETWEEN_SYM ");
- WRITE_NODE_FIELD(name);
- break;
- default:
- appendStringInfoString(str, " ??");
- break;
- }
-
- WRITE_NODE_FIELD(lexpr);
- WRITE_NODE_FIELD(rexpr);
- WRITE_LOCATION_FIELD(location);
-}
-
-#endif /* COMPILING_BINARY_FUNCS */
-
-static void
-_outColumnRef(StringInfo str, const ColumnRef *node)
-{
- WRITE_NODE_TYPE("COLUMNREF");
-
- WRITE_NODE_FIELD(fields);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outParamRef(StringInfo str, const ParamRef *node)
-{
- WRITE_NODE_TYPE("PARAMREF");
-
- WRITE_INT_FIELD(number);
- WRITE_LOCATION_FIELD(location);
-}
-
-/*
- * Node types found in raw parse trees (supported for debug purposes)
- */
-
-static void
-_outRawStmt(StringInfo str, const RawStmt *node)
-{
- WRITE_NODE_TYPE("RAWSTMT");
-
- WRITE_NODE_FIELD(stmt);
- WRITE_LOCATION_FIELD(stmt_location);
- WRITE_INT_FIELD(stmt_len);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-
-
-static void
-_outInteger(StringInfo str, const Integer *node)
-{
- appendStringInfo(str, "%d", node->ival);
-}
-
-static void
-_outFloat(StringInfo str, const Float *node)
-{
- /*
- * We assume the value is a valid numeric literal and so does not need
- * quoting.
- */
- appendStringInfoString(str, node->fval);
-}
-
-static void
-_outBoolean(StringInfo str, const Boolean *node)
-{
- appendStringInfoString(str, node->boolval ? "true" : "false");
-}
-
-static void
-_outString(StringInfo str, const String *node)
-{
- /*
- * We use outToken to provide escaping of the string's content, but we
- * don't want it to convert an empty string to '""', because we're putting
- * double quotes around the string already.
- */
- appendStringInfoChar(str, '"');
- if (node->sval[0] != '\0')
- outToken(str, node->sval);
- appendStringInfoChar(str, '"');
-}
-
-static void
-_outBitString(StringInfo str, const BitString *node)
-{
- /*
- * The lexer will always produce a string starting with 'b' or 'x'. There
- * might be characters following that that need escaping, but outToken
- * won't escape the 'b' or 'x'. This is relied on by nodeTokenType.
- */
- Assert(node->bsval[0] == 'b' || node->bsval[0] == 'x');
- outToken(str, node->bsval);
-}
-
-static void
-_outAConst(StringInfo str, const A_Const *node)
-{
- WRITE_NODE_TYPE("A_CONST");
-
- if (node->isnull)
- appendStringInfoString(str, " NULL");
- else
- {
- appendStringInfoString(str, " :val ");
- outNode(str, &node->val);
- }
- WRITE_LOCATION_FIELD(location);
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-static void
-_outA_Star(StringInfo str, const A_Star *node)
-{
- WRITE_NODE_TYPE("A_STAR");
-}
-
-static void
-_outA_Indices(StringInfo str, const A_Indices *node)
-{
- WRITE_NODE_TYPE("A_INDICES");
-
- WRITE_BOOL_FIELD(is_slice);
- WRITE_NODE_FIELD(lidx);
- WRITE_NODE_FIELD(uidx);
-}
-
-static void
-_outA_Indirection(StringInfo str, const A_Indirection *node)
-{
- WRITE_NODE_TYPE("A_INDIRECTION");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(indirection);
-}
-
-static void
-_outA_ArrayExpr(StringInfo str, const A_ArrayExpr *node)
-{
- WRITE_NODE_TYPE("A_ARRAYEXPR");
-
- WRITE_NODE_FIELD(elements);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outResTarget(StringInfo str, const ResTarget *node)
-{
- WRITE_NODE_TYPE("RESTARGET");
-
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(indirection);
- WRITE_NODE_FIELD(val);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outMultiAssignRef(StringInfo str, const MultiAssignRef *node)
-{
- WRITE_NODE_TYPE("MULTIASSIGNREF");
-
- WRITE_NODE_FIELD(source);
- WRITE_INT_FIELD(colno);
- WRITE_INT_FIELD(ncolumns);
-}
-
-static void
-_outSortBy(StringInfo str, const SortBy *node)
-{
- WRITE_NODE_TYPE("SORTBY");
-
- WRITE_NODE_FIELD(node);
- WRITE_ENUM_FIELD(sortby_dir, SortByDir);
- WRITE_ENUM_FIELD(sortby_nulls, SortByNulls);
- WRITE_NODE_FIELD(useOp);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outWindowDef(StringInfo str, const WindowDef *node)
-{
- WRITE_NODE_TYPE("WINDOWDEF");
-
- WRITE_STRING_FIELD(name);
- WRITE_STRING_FIELD(refname);
- WRITE_NODE_FIELD(partitionClause);
- WRITE_NODE_FIELD(orderClause);
- WRITE_INT_FIELD(frameOptions);
- WRITE_NODE_FIELD(startOffset);
- WRITE_NODE_FIELD(endOffset);
- WRITE_LOCATION_FIELD(location);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-
-static void
-_outRangeSubselect(StringInfo str, const RangeSubselect *node)
-{
- WRITE_NODE_TYPE("RANGESUBSELECT");
-
- WRITE_BOOL_FIELD(lateral);
- WRITE_NODE_FIELD(subquery);
- WRITE_NODE_FIELD(alias);
-}
-
-static void
-_outRangeFunction(StringInfo str, const RangeFunction *node)
-{
- WRITE_NODE_TYPE("RANGEFUNCTION");
-
- WRITE_BOOL_FIELD(lateral);
- WRITE_BOOL_FIELD(ordinality);
- WRITE_BOOL_FIELD(is_rowsfrom);
- WRITE_NODE_FIELD(functions);
- WRITE_NODE_FIELD(alias);
- WRITE_NODE_FIELD(coldeflist);
-}
-
-static void
-_outRangeTableSample(StringInfo str, const RangeTableSample *node)
-{
- WRITE_NODE_TYPE("RANGETABLESAMPLE");
-
- WRITE_NODE_FIELD(relation);
- WRITE_NODE_FIELD(method);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(repeatable);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRangeTableFunc(StringInfo str, const RangeTableFunc *node)
-{
- WRITE_NODE_TYPE("RANGETABLEFUNC");
-
- WRITE_BOOL_FIELD(lateral);
- WRITE_NODE_FIELD(docexpr);
- WRITE_NODE_FIELD(rowexpr);
- WRITE_NODE_FIELD(namespaces);
- WRITE_NODE_FIELD(columns);
- WRITE_NODE_FIELD(alias);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRangeTableFuncCol(StringInfo str, const RangeTableFuncCol *node)
-{
- WRITE_NODE_TYPE("RANGETABLEFUNCCOL");
-
- WRITE_STRING_FIELD(colname);
- WRITE_NODE_FIELD(typeName);
- WRITE_BOOL_FIELD(for_ordinality);
- WRITE_BOOL_FIELD(is_not_null);
- WRITE_NODE_FIELD(colexpr);
- WRITE_NODE_FIELD(coldefexpr);
- WRITE_LOCATION_FIELD(location);
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-static void
-_outConstraint(StringInfo str, const Constraint *node)
-{
- WRITE_NODE_TYPE("CONSTRAINT");
-
- WRITE_ENUM_FIELD(contype, ConstrType);
- /* name, or NULL if unnamed */
- WRITE_STRING_FIELD(conname);
- WRITE_BOOL_FIELD(deferrable);
- WRITE_BOOL_FIELD(initdeferred);
- WRITE_LOCATION_FIELD(location);
-
- WRITE_BOOL_FIELD(is_no_inherit);
- WRITE_NODE_FIELD(raw_expr);
- WRITE_STRING_FIELD(cooked_expr);
- WRITE_CHAR_FIELD(generated_when);
- WRITE_BOOL_FIELD(nulls_not_distinct);
-
- WRITE_NODE_FIELD(keys);
- WRITE_NODE_FIELD(including);
-
- WRITE_NODE_FIELD(exclusions);
-
- WRITE_NODE_FIELD(options);
- WRITE_STRING_FIELD(indexname);
- WRITE_STRING_FIELD(indexspace);
- WRITE_BOOL_FIELD(reset_default_tblspc);
-
- WRITE_STRING_FIELD(access_method);
- WRITE_NODE_FIELD(where_clause);
-
- WRITE_NODE_FIELD(pktable);
- WRITE_NODE_FIELD(fk_attrs);
- WRITE_NODE_FIELD(pk_attrs);
- WRITE_CHAR_FIELD(fk_matchtype);
- WRITE_CHAR_FIELD(fk_upd_action);
- WRITE_CHAR_FIELD(fk_del_action);
- WRITE_NODE_FIELD(old_conpfeqop);
- WRITE_OID_FIELD(old_pktable_oid);
-
- WRITE_BOOL_FIELD(skip_validation);
- WRITE_BOOL_FIELD(initially_valid);
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-static void
-_outForeignKeyCacheInfo(StringInfo str, const ForeignKeyCacheInfo *node)
-{
- WRITE_NODE_TYPE("FOREIGNKEYCACHEINFO");
-
- WRITE_OID_FIELD(conoid);
- WRITE_OID_FIELD(conrelid);
- WRITE_OID_FIELD(confrelid);
- WRITE_INT_FIELD(nkeys);
- WRITE_ATTRNUMBER_ARRAY(conkey, node->nkeys);
- WRITE_ATTRNUMBER_ARRAY(confkey, node->nkeys);
- WRITE_OID_ARRAY(conpfeqop, node->nkeys);
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-static void
-_outPartitionElem(StringInfo str, const PartitionElem *node)
-{
- WRITE_NODE_TYPE("PARTITIONELEM");
-
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(expr);
- WRITE_NODE_FIELD(collation);
- WRITE_NODE_FIELD(opclass);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outPartitionSpec(StringInfo str, const PartitionSpec *node)
-{
- WRITE_NODE_TYPE("PARTITIONSPEC");
-
- WRITE_ENUM_FIELD(strategy, PartitionStrategy);
- WRITE_NODE_FIELD(partParams);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outPartitionBoundSpec(StringInfo str, const PartitionBoundSpec *node)
-{
- WRITE_NODE_TYPE("PARTITIONBOUNDSPEC");
-
- WRITE_CHAR_FIELD(strategy);
- WRITE_BOOL_FIELD(is_default);
- WRITE_INT_FIELD(modulus);
- WRITE_INT_FIELD(remainder);
- WRITE_NODE_FIELD(listdatums);
- WRITE_NODE_FIELD(lowerdatums);
- WRITE_NODE_FIELD(upperdatums);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outPartitionRangeDatum(StringInfo str, const PartitionRangeDatum *node)
-{
- WRITE_NODE_TYPE("PARTITIONRANGEDATUM");
-
- WRITE_ENUM_FIELD(kind, PartitionRangeDatumKind);
- WRITE_NODE_FIELD(value);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCreateDirectoryTableStmt(StringInfo str, const CreateDirectoryTableStmt *node)
-{
- WRITE_NODE_TYPE("CREATEDIRECTORYTABLESTMT");
-
- _outCreateStmtInfo(str, (const CreateStmt *) node);
- WRITE_STRING_FIELD(tablespacename);
- WRITE_STRING_FIELD(location);
-}
-
-static void
-_outAlterDirectoryTableStmt(StringInfo str, const AlterDirectoryTableStmt *node)
-{
- WRITE_NODE_TYPE("ALTERDIRECTORYTABLESTMT");
-
- WRITE_NODE_FIELD(relation);
- WRITE_NODE_FIELD(tags);
- WRITE_BOOL_FIELD(unsettag);
-}
-
-static void
-_outCreateTaskStmt(StringInfo str, const CreateTaskStmt *node)
-{
- WRITE_NODE_TYPE("CREATETASKSTMT");
-
- WRITE_STRING_FIELD(taskname);
- WRITE_STRING_FIELD(schedule);
- WRITE_STRING_FIELD(sql);
- WRITE_NODE_FIELD(options);
- WRITE_BOOL_FIELD(if_not_exists);
-}
-
-static void
-_outAlterTaskStmt(StringInfo str, const AlterTaskStmt *node)
-{
- WRITE_NODE_TYPE("ALTERTASKSTMT");
-
- WRITE_STRING_FIELD(taskname);
- WRITE_NODE_FIELD(options);
- WRITE_BOOL_FIELD(missing_ok);
-}
-
-static void
-_outDropTaskStmt(StringInfo str, const DropTaskStmt *node)
-{
- WRITE_NODE_TYPE("DROPTASKSTMT");
-
- WRITE_STRING_FIELD(taskname);
- WRITE_BOOL_FIELD(missing_ok);
-}
-
-static void
-_outRTEPermissionInfo(StringInfo str, const RTEPermissionInfo *node)
-{
- WRITE_NODE_TYPE("RTEPERMISSIONINFO");
-
- WRITE_OID_FIELD(relid);
- WRITE_BOOL_FIELD(inh);
- WRITE_UINT64_FIELD(requiredPerms);
- WRITE_OID_FIELD(checkAsUser);
- WRITE_BITMAPSET_FIELD(selectedCols);
- WRITE_BITMAPSET_FIELD(insertedCols);
- WRITE_BITMAPSET_FIELD(updatedCols);
-}
-
-static void
-_outGpPolicy(StringInfo str, const GpPolicy *node)
-{
- WRITE_NODE_TYPE("GPPOLICY");
-
- WRITE_ENUM_FIELD(ptype, GpPolicyType);
- WRITE_INT_FIELD(numsegments);
- WRITE_INT_FIELD(nattrs);
- WRITE_ATTRNUMBER_ARRAY(attrs, node->nattrs);
- WRITE_OID_ARRAY(opclasses, node->nattrs);
-}
-
-static void
-_outMergeAction(StringInfo str, const MergeAction *node)
-{
- WRITE_NODE_TYPE("MERGEACTION");
-
- WRITE_BOOL_FIELD(matched);
- WRITE_ENUM_FIELD(commandType, CmdType);
- WRITE_ENUM_FIELD(override, OverridingKind);
- WRITE_NODE_FIELD(qual);
- WRITE_NODE_FIELD(targetList);
- WRITE_NODE_FIELD(updateColnos);
-}
-
-static void
-_outPublicationObjSpec(StringInfo str, const PublicationObjSpec *node)
-{
- WRITE_NODE_TYPE("PUBLICATIONOBJSPEC");
-
- WRITE_ENUM_FIELD(pubobjtype, PublicationObjSpecType);
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(pubtable);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outPublicationTable(StringInfo str, const PublicationTable *node)
-{
- WRITE_NODE_TYPE("PUBLICATIONTABLE");
-
- WRITE_NODE_FIELD(relation);
- WRITE_NODE_FIELD(whereClause);
- WRITE_NODE_FIELD(columns);
-}
-
-static void
-_outJsonIsPredicate(StringInfo str, const JsonIsPredicate *node)
-{
- WRITE_NODE_TYPE("JSONISPREDICATE");
-
- WRITE_NODE_FIELD(expr);
- WRITE_NODE_FIELD(format);
- WRITE_ENUM_FIELD(item_type, JsonValueType);
- WRITE_BOOL_FIELD(unique_keys);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outJsonConstructorExpr(StringInfo str, const JsonConstructorExpr *node)
-{
- WRITE_NODE_TYPE("JSONCONSTRUCTOREXPR");
-
- WRITE_ENUM_FIELD(type, JsonConstructorType);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(func);
- WRITE_NODE_FIELD(coercion);
- WRITE_NODE_FIELD(returning);
- WRITE_BOOL_FIELD(absent_on_null);
- WRITE_BOOL_FIELD(unique);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outJsonReturning(StringInfo str, const JsonReturning *node)
-{
- WRITE_NODE_TYPE("JSONRETURNING");
-
- WRITE_NODE_FIELD(format);
- WRITE_OID_FIELD(typid);
- WRITE_INT_FIELD(typmod);
-}
-
-static void
-_outJsonValueExpr(StringInfo str, const JsonValueExpr *node)
-{
- WRITE_NODE_TYPE("JSONVALUEEXPR");
-
- WRITE_NODE_FIELD(raw_expr);
- WRITE_NODE_FIELD(formatted_expr);
- WRITE_NODE_FIELD(format);
-}
-
-static void
-_outJsonFormat(StringInfo str, const JsonFormat *node)
-{
- WRITE_NODE_TYPE("JSONFORMAT");
-
- WRITE_ENUM_FIELD(format_type, JsonFormatType);
- WRITE_ENUM_FIELD(encoding, JsonEncoding);
- WRITE_LOCATION_FIELD(location);
-}
-
-#include "outfuncs_common.c"
-#ifndef COMPILING_BINARY_FUNCS
-/*
- * outNode -
- * converts a Node into ascii string and append it to 'str'
- */
-void
-outNode(StringInfo str, const void *obj)
-{
- /* Guard against stack overflow due to overly complex expressions */
- check_stack_depth();
-
- if (obj == NULL)
- appendStringInfoString(str, "<>");
- else if (IsA(obj, List) || IsA(obj, IntList) || IsA(obj, OidList) ||
- IsA(obj, XidList))
- _outList(str, obj);
- /* nodeRead does not want to see { } around these! */
- else if (IsA(obj, Integer))
- _outInteger(str, (Integer *) obj);
- else if (IsA(obj, Float))
- _outFloat(str, (Float *) obj);
- else if (IsA(obj, Boolean))
- _outBoolean(str, (Boolean *) obj);
- else if (IsA(obj, String))
- _outString(str, (String *) obj);
- else if (IsA(obj, BitString))
- _outBitString(str, (BitString *) obj);
- else if (IsA(obj, Bitmapset))
- outBitmapset(str, (Bitmapset *) obj);
- else
- {
- appendStringInfoChar(str, '{');
- switch (nodeTag(obj))
- {
- case T_PlannedStmt:
- _outPlannedStmt(str, obj);
- break;
- case T_QueryDispatchDesc:
- _outQueryDispatchDesc(str, obj);
- break;
- case T_SerializedParams:
- _outSerializedParams(str, obj);
- break;
- case T_OidAssignment:
- _outOidAssignment(str, obj);
- break;
- case T_Plan:
- _outPlan(str, obj);
- break;
- case T_Result:
- _outResult(str, obj);
- break;
- case T_ProjectSet:
- _outProjectSet(str, obj);
- break;
- case T_ModifyTable:
- _outModifyTable(str, obj);
- break;
- case T_Append:
- _outAppend(str, obj);
- break;
- case T_MergeAppend:
- _outMergeAppend(str, obj);
- break;
- case T_Sequence:
- _outSequence(str, obj);
- break;
- case T_RecursiveUnion:
- _outRecursiveUnion(str, obj);
- break;
- case T_BitmapAnd:
- _outBitmapAnd(str, obj);
- break;
- case T_BitmapOr:
- _outBitmapOr(str, obj);
- break;
- case T_Gather:
- _outGather(str, obj);
- break;
- case T_GatherMerge:
- _outGatherMerge(str, obj);
- break;
- case T_Scan:
- _outScan(str, obj);
- break;
- case T_SeqScan:
- _outSeqScan(str, obj);
- break;
- case T_DynamicSeqScan:
- _outDynamicSeqScan(str, obj);
- break;
- case T_ExternalScanInfo:
- _outExternalScanInfo(str, obj);
- break;
- case T_SampleScan:
- _outSampleScan(str, obj);
- break;
- case T_IndexScan:
- _outIndexScan(str, obj);
- break;
- case T_DynamicIndexScan:
- _outDynamicIndexScan(str,obj);
- break;
- case T_DynamicIndexOnlyScan:
- _outDynamicIndexOnlyScan(str,obj);
- break;
- case T_IndexOnlyScan:
- _outIndexOnlyScan(str, obj);
- break;
- case T_BitmapIndexScan:
- _outBitmapIndexScan(str, obj);
- break;
- case T_DynamicBitmapIndexScan:
- _outDynamicBitmapIndexScan(str, obj);
- break;
- case T_BitmapHeapScan:
- _outBitmapHeapScan(str, obj);
- break;
- case T_DynamicBitmapHeapScan:
- _outDynamicBitmapHeapScan(str, obj);
- break;
- case T_TidScan:
- _outTidScan(str, obj);
- break;
- case T_TidRangeScan:
- _outTidRangeScan(str, obj);
- break;
- case T_SubqueryScan:
- _outSubqueryScan(str, obj);
- break;
- case T_FunctionScan:
- _outFunctionScan(str, obj);
- break;
- case T_TableFuncScan:
- _outTableFuncScan(str, obj);
- break;
- case T_ValuesScan:
- _outValuesScan(str, obj);
- break;
- case T_CteScan:
- _outCteScan(str, obj);
- break;
- case T_NamedTuplestoreScan:
- _outNamedTuplestoreScan(str, obj);
- break;
- case T_WorkTableScan:
- _outWorkTableScan(str, obj);
- break;
- case T_ForeignScan:
- _outForeignScan(str, obj);
- break;
- case T_DynamicForeignScan:
- _outDynamicForeignScan(str, obj);
- break;
- case T_CustomScan:
- _outCustomScan(str, obj);
- break;
- case T_Join:
- _outJoin(str, obj);
- break;
- case T_NestLoop:
- _outNestLoop(str, obj);
- break;
- case T_MergeJoin:
- _outMergeJoin(str, obj);
- break;
- case T_HashJoin:
- _outHashJoin(str, obj);
- break;
- case T_Agg:
- _outAgg(str, obj);
- break;
- case T_TupleSplit:
- _outTupleSplit(str, obj);
- break;
- case T_DQAExpr:
- _outDQAExpr(str, obj);
- break;
- case T_WindowAgg:
- _outWindowAgg(str, obj);
- break;
- case T_WindowHashAgg:
- _outWindowHashAgg(str, obj);
- break;
- case T_Group:
- _outGroup(str, obj);
- break;
- case T_TableFunctionScan:
- _outTableFunctionScan(str, obj);
- break;
- case T_Material:
- _outMaterial(str, obj);
- break;
- case T_ShareInputScan:
- _outShareInputScan(str, obj);
- break;
- case T_Memoize:
- _outMemoize(str, obj);
- break;
- case T_Sort:
- _outSort(str, obj);
- break;
- case T_IncrementalSort:
- _outIncrementalSort(str, obj);
- break;
- case T_Unique:
- _outUnique(str, obj);
- break;
- case T_Hash:
- _outHash(str, obj);
- break;
- case T_SetOp:
- _outSetOp(str, obj);
- break;
- case T_LockRows:
- _outLockRows(str, obj);
- break;
- case T_RuntimeFilter:
- _outRuntimeFilter(str, obj);
- break;
- case T_Limit:
- _outLimit(str, obj);
- break;
- case T_NestLoopParam:
- _outNestLoopParam(str, obj);
- break;
- case T_PlanRowMark:
- _outPlanRowMark(str, obj);
- break;
- case T_PartitionPruneInfo:
- _outPartitionPruneInfo(str, obj);
- break;
- case T_PartitionedRelPruneInfo:
- _outPartitionedRelPruneInfo(str, obj);
- break;
- case T_PartitionPruneStepOp:
- _outPartitionPruneStepOp(str, obj);
- break;
- case T_PartitionPruneStepCombine:
- _outPartitionPruneStepCombine(str, obj);
- break;
- case T_PlanInvalItem:
- _outPlanInvalItem(str, obj);
- break;
- case T_Motion:
- _outMotion(str, obj);
- break;
- case T_SplitUpdate:
- _outSplitUpdate(str, obj);
- break;
- case T_SplitMerge:
- _outSplitMerge(str, obj);
- break;
- case T_AssertOp:
- _outAssertOp(str, obj);
- break;
- case T_PartitionSelector:
- _outPartitionSelector(str, obj);
- break;
- case T_Alias:
- _outAlias(str, obj);
- break;
- case T_RangeVar:
- _outRangeVar(str, obj);
- break;
- case T_TableFunc:
- _outTableFunc(str, obj);
- break;
- case T_IntoClause:
- _outIntoClause(str, obj);
- break;
- case T_CopyIntoClause:
- _outCopyIntoClause(str, obj);
- break;
- case T_RefreshClause:
- _outRefreshClause(str, obj);
- break;
- case T_Var:
- _outVar(str, obj);
- break;
- case T_Const:
- _outConst(str, obj);
- break;
- case T_Param:
- _outParam(str, obj);
- break;
- case T_Aggref:
- _outAggref(str, obj);
- break;
- case T_GroupingFunc:
- _outGroupingFunc(str, obj);
- break;
- case T_GroupId:
- _outGroupId(str, obj);
- break;
- case T_GroupingSetId:
- _outGroupingSetId(str, obj);
- break;
- case T_WindowFunc:
- _outWindowFunc(str, obj);
- break;
- case T_SubscriptingRef:
- _outSubscriptingRef(str, obj);
- break;
- case T_FuncExpr:
- _outFuncExpr(str, obj);
- break;
- case T_NamedArgExpr:
- _outNamedArgExpr(str, obj);
- break;
- case T_OpExpr:
- _outOpExpr(str, obj);
- break;
- case T_DistinctExpr:
- _outDistinctExpr(str, obj);
- break;
- case T_NullIfExpr:
- _outNullIfExpr(str, obj);
- break;
- case T_ScalarArrayOpExpr:
- _outScalarArrayOpExpr(str, obj);
- break;
- case T_BoolExpr:
- _outBoolExpr(str, obj);
- break;
- case T_SubLink:
- _outSubLink(str, obj);
- break;
- case T_SubPlan:
- _outSubPlan(str, obj);
- break;
- case T_AlternativeSubPlan:
- _outAlternativeSubPlan(str, obj);
- break;
- case T_FieldSelect:
- _outFieldSelect(str, obj);
- break;
- case T_FieldStore:
- _outFieldStore(str, obj);
- break;
- case T_RelabelType:
- _outRelabelType(str, obj);
- break;
- case T_CoerceViaIO:
- _outCoerceViaIO(str, obj);
- break;
- case T_ArrayCoerceExpr:
- _outArrayCoerceExpr(str, obj);
- break;
- case T_ConvertRowtypeExpr:
- _outConvertRowtypeExpr(str, obj);
- break;
- case T_CollateExpr:
- _outCollateExpr(str, obj);
- break;
- case T_CaseExpr:
- _outCaseExpr(str, obj);
- break;
- case T_CaseWhen:
- _outCaseWhen(str, obj);
- break;
- case T_CaseTestExpr:
- _outCaseTestExpr(str, obj);
- break;
- case T_ArrayExpr:
- _outArrayExpr(str, obj);
- break;
- case T_RowExpr:
- _outRowExpr(str, obj);
- break;
- case T_RowCompareExpr:
- _outRowCompareExpr(str, obj);
- break;
- case T_CoalesceExpr:
- _outCoalesceExpr(str, obj);
- break;
- case T_MinMaxExpr:
- _outMinMaxExpr(str, obj);
- break;
- case T_SQLValueFunction:
- _outSQLValueFunction(str, obj);
- break;
- case T_XmlExpr:
- _outXmlExpr(str, obj);
- break;
- case T_NullTest:
- _outNullTest(str, obj);
- break;
- case T_BooleanTest:
- _outBooleanTest(str, obj);
- break;
- case T_CoerceToDomain:
- _outCoerceToDomain(str, obj);
- break;
- case T_CoerceToDomainValue:
- _outCoerceToDomainValue(str, obj);
- break;
- case T_SetToDefault:
- _outSetToDefault(str, obj);
- break;
- case T_CurrentOfExpr:
- _outCurrentOfExpr(str, obj);
- break;
- case T_NextValueExpr:
- _outNextValueExpr(str, obj);
- break;
- case T_InferenceElem:
- _outInferenceElem(str, obj);
- break;
- case T_TargetEntry:
- _outTargetEntry(str, obj);
- break;
- case T_RangeTblRef:
- _outRangeTblRef(str, obj);
- break;
- case T_JoinExpr:
- _outJoinExpr(str, obj);
- break;
- case T_FromExpr:
- _outFromExpr(str, obj);
- break;
- case T_Flow:
- _outFlow(str, obj);
- break;
- case T_OnConflictExpr:
- _outOnConflictExpr(str, obj);
- break;
- case T_Path:
- _outPath(str, obj);
- break;
- case T_IndexPath:
- _outIndexPath(str, obj);
- break;
- case T_BitmapHeapPath:
- _outBitmapHeapPath(str, obj);
- break;
- case T_BitmapAndPath:
- _outBitmapAndPath(str, obj);
- break;
- case T_BitmapOrPath:
- _outBitmapOrPath(str, obj);
- break;
- case T_TidPath:
- _outTidPath(str, obj);
- break;
- case T_TidRangePath:
- _outTidRangePath(str, obj);
- break;
- case T_SubqueryScanPath:
- _outSubqueryScanPath(str, obj);
- break;
- case T_TableFunctionScanPath:
- _outTableFunctionScanPath(str, obj);
- break;
- case T_ForeignPath:
- _outForeignPath(str, obj);
- break;
- case T_CustomPath:
- _outCustomPath(str, obj);
- break;
- case T_AppendPath:
- _outAppendPath(str, obj);
- break;
- case T_MergeAppendPath:
- _outMergeAppendPath(str, obj);
- break;
- case T_AppendOnlyPath:
- _outAppendOnlyPath(str, obj);
- break;
- case T_AOCSPath:
- _outAOCSPath(str, obj);
- break;
- case T_GroupResultPath:
- _outGroupResultPath(str, obj);
- break;
- case T_MaterialPath:
- _outMaterialPath(str, obj);
- break;
- case T_MemoizePath:
- _outMemoizePath(str, obj);
- break;
- case T_UniquePath:
- _outUniquePath(str, obj);
- break;
- case T_GatherPath:
- _outGatherPath(str, obj);
- break;
- case T_ProjectionPath:
- _outProjectionPath(str, obj);
- break;
- case T_ProjectSetPath:
- _outProjectSetPath(str, obj);
- break;
- case T_SortPath:
- _outSortPath(str, obj);
- break;
- case T_IncrementalSortPath:
- _outIncrementalSortPath(str, obj);
- break;
- case T_GroupPath:
- _outGroupPath(str, obj);
- break;
- case T_UpperUniquePath:
- _outUpperUniquePath(str, obj);
- break;
- case T_AggPath:
- _outAggPath(str, obj);
- break;
- case T_GroupingSetsPath:
- _outGroupingSetsPath(str, obj);
- break;
- case T_MinMaxAggPath:
- _outMinMaxAggPath(str, obj);
- break;
- case T_WindowAggPath:
- _outWindowAggPath(str, obj);
- break;
- case T_SetOpPath:
- _outSetOpPath(str, obj);
- break;
- case T_RecursiveUnionPath:
- _outRecursiveUnionPath(str, obj);
- break;
- case T_LockRowsPath:
- _outLockRowsPath(str, obj);
- break;
- case T_ModifyTablePath:
- _outModifyTablePath(str, obj);
- break;
- case T_RuntimeFilterPath:
- _outRuntimeFilterPath(str, obj);
- break;
- case T_LimitPath:
- _outLimitPath(str, obj);
- break;
- case T_GatherMergePath:
- _outGatherMergePath(str, obj);
- break;
- case T_NestPath:
- _outNestPath(str, obj);
- break;
- case T_MergePath:
- _outMergePath(str, obj);
- break;
- case T_HashPath:
- _outHashPath(str, obj);
- break;
- case T_CdbMotionPath:
- _outCdbMotionPath(str, obj);
- break;
- case T_PlannerGlobal:
- _outPlannerGlobal(str, obj);
- break;
- case T_PlannerInfo:
- _outPlannerInfo(str, obj);
- break;
- case T_RelOptInfo:
- _outRelOptInfo(str, obj);
- break;
- case T_IndexOptInfo:
- _outIndexOptInfo(str, obj);
- break;
- case T_ForeignKeyOptInfo:
- _outForeignKeyOptInfo(str, obj);
- break;
- case T_EquivalenceClass:
- _outEquivalenceClass(str, obj);
- break;
- case T_EquivalenceMember:
- _outEquivalenceMember(str, obj);
- break;
- case T_PathKey:
- _outPathKey(str, obj);
- break;
- case T_DistributionKey:
- _outDistributionKey(str, obj);
- break;
- case T_PathTarget:
- _outPathTarget(str, obj);
- break;
- case T_ParamPathInfo:
- _outParamPathInfo(str, obj);
- break;
- case T_RelAggInfo:
- _outRelAggInfo(str, obj);
- break;
- case T_RestrictInfo:
- _outRestrictInfo(str, obj);
- break;
- case T_IndexClause:
- _outIndexClause(str, obj);
- break;
- case T_PlaceHolderVar:
- _outPlaceHolderVar(str, obj);
- break;
- case T_SpecialJoinInfo:
- _outSpecialJoinInfo(str, obj);
- break;
- case T_AppendRelInfo:
- _outAppendRelInfo(str, obj);
- break;
- case T_RowIdentityVarInfo:
- _outRowIdentityVarInfo(str, obj);
- break;
- case T_PlaceHolderInfo:
- _outPlaceHolderInfo(str, obj);
- break;
- case T_GroupedVarInfo:
- _outGroupedVarInfo(str, obj);
- break;
- case T_MinMaxAggInfo:
- _outMinMaxAggInfo(str, obj);
- break;
- case T_PlannerParamItem:
- _outPlannerParamItem(str, obj);
- break;
- case T_RollupData:
- _outRollupData(str, obj);
- break;
- case T_GroupingSetData:
- _outGroupingSetData(str, obj);
- break;
- case T_StatisticExtInfo:
- _outStatisticExtInfo(str, obj);
- break;
-
- case T_GrantStmt:
- _outGrantStmt(str, obj);
- break;
- case T_ObjectWithArgs:
- _outObjectWithArgs(str, obj);
- break;
- case T_GrantRoleStmt:
- _outGrantRoleStmt(str, obj);
- break;
- case T_LockStmt:
- _outLockStmt(str, obj);
- break;
- case T_ExtensibleNode:
- _outExtensibleNode(str, obj);
- break;
- case T_CreateStmt:
- _outCreateStmt(str, obj);
- break;
- case T_CreateForeignTableStmt:
- _outCreateForeignTableStmt(str, obj);
- break;
- case T_DistributionKeyElem:
- _outDistributionKeyElem(str, obj);
- break;
- case T_ColumnReferenceStorageDirective:
- _outColumnReferenceStorageDirective(str, obj);
- break;
- case T_SegfileMapNode:
- _outSegfileMapNode(str, obj);
- break;
- case T_ExtTableTypeDesc:
- _outExtTableTypeDesc(str, obj);
- break;
- case T_CreateExternalStmt:
- _outCreateExternalStmt(str, obj);
- break;
- case T_DistributedBy:
- _outDistributedBy(str, obj);
- break;
- case T_ImportForeignSchemaStmt:
- _outImportForeignSchemaStmt(str, obj);
- break;
- case T_IndexStmt:
- _outIndexStmt(str, obj);
- break;
- case T_ReindexStmt:
- _outReindexStmt(str, obj);
- break;
- case T_ReindexIndexInfo:
- _outReindexIndexInfo(str, obj);
- break;
-
- case T_ConstraintsSetStmt:
- _outConstraintsSetStmt(str, obj);
- break;
-
- case T_CreateFunctionStmt:
- _outCreateFunctionStmt(str, obj);
- break;
- case T_FunctionParameter:
- _outFunctionParameter(str, obj);
- break;
- case T_AlterFunctionStmt:
- _outAlterFunctionStmt(str, obj);
- break;
-
- case T_DefineStmt:
- _outDefineStmt(str,obj);
- break;
-
- case T_CompositeTypeStmt:
- _outCompositeTypeStmt(str,obj);
- break;
- case T_CreateEnumStmt:
- _outCreateEnumStmt(str,obj);
- break;
- case T_CreateRangeStmt:
- _outCreateRangeStmt(str,obj);
- break;
- case T_CreateCastStmt:
- _outCreateCastStmt(str,obj);
- break;
- case T_CreateOpClassStmt:
- _outCreateOpClassStmt(str,obj);
- break;
- case T_CreateOpClassItem:
- _outCreateOpClassItem(str,obj);
- break;
- case T_CreateOpFamilyStmt:
- _outCreateOpFamilyStmt(str,obj);
- break;
- case T_AlterOpFamilyStmt:
- _outAlterOpFamilyStmt(str,obj);
- break;
- case T_CreateConversionStmt:
- _outCreateConversionStmt(str,obj);
- break;
- case T_ViewStmt:
- _outViewStmt(str, obj);
- break;
- case T_RuleStmt:
- _outRuleStmt(str, obj);
- break;
- case T_DropStmt:
- _outDropStmt(str, obj);
- break;
- case T_DropOwnedStmt:
- _outDropOwnedStmt(str, obj);
- break;
- case T_ReassignOwnedStmt:
- _outReassignOwnedStmt(str, obj);
- break;
- case T_TruncateStmt:
- _outTruncateStmt(str, obj);
- break;
-
- case T_ReplicaIdentityStmt:
- _outReplicaIdentityStmt(str, obj);
- break;
- case T_AlterTableStmt:
- _outAlterTableStmt(str, obj);
- break;
- case T_AlterTableCmd:
- _outAlterTableCmd(str, obj);
- break;
- case T_AlteredTableInfo:
- _outAlteredTableInfo(str, obj);
- break;
- case T_NewConstraint:
- _outNewConstraint(str, obj);
- break;
- case T_NewColumnValue:
- _outNewColumnValue(str, obj);
- break;
-
- case T_CreateRoleStmt:
- _outCreateRoleStmt(str, obj);
- break;
- case T_DropRoleStmt:
- _outDropRoleStmt(str, obj);
- break;
- case T_AlterRoleStmt:
- _outAlterRoleStmt(str, obj);
- break;
- case T_AlterRoleSetStmt:
- _outAlterRoleSetStmt(str, obj);
- break;
-
- case T_CreateProfileStmt:
- _outCreateProfileStmt(str, obj);
- break;
- case T_AlterProfileStmt:
- _outAlterProfileStmt(str, obj);
- break;
- case T_DropProfileStmt:
- _outDropProfileStmt(str, obj);
- break;
-
- case T_AlterSystemStmt:
- _outAlterSystemStmt(str, obj);
- break;
-
- case T_AlterObjectSchemaStmt:
- _outAlterObjectSchemaStmt(str, obj);
- break;
-
- case T_AlterOwnerStmt:
- _outAlterOwnerStmt(str, obj);
- break;
-
- case T_RenameStmt:
- _outRenameStmt(str, obj);
- break;
-
- case T_CreateSeqStmt:
- _outCreateSeqStmt(str, obj);
- break;
- case T_AlterSeqStmt:
- _outAlterSeqStmt(str, obj);
- break;
- case T_ClusterStmt:
- _outClusterStmt(str, obj);
- break;
- case T_CreatedbStmt:
- _outCreatedbStmt(str, obj);
- break;
- case T_DropdbStmt:
- _outDropdbStmt(str, obj);
- break;
- case T_CreateDomainStmt:
- _outCreateDomainStmt(str, obj);
- break;
- case T_AlterDomainStmt:
- _outAlterDomainStmt(str, obj);
- break;
- case T_TransactionStmt:
- _outTransactionStmt(str, obj);
- break;
- case T_CreateStatsStmt:
- _outCreateStatsStmt(str, obj);
- break;
- case T_AlterStatsStmt:
- _outAlterStatsStmt(str, obj);
- break;
- case T_NotifyStmt:
- _outNotifyStmt(str, obj);
- break;
- case T_DeclareCursorStmt:
- _outDeclareCursorStmt(str, obj);
- break;
- case T_SingleRowErrorDesc:
- _outSingleRowErrorDesc(str, obj);
- break;
- case T_CopyStmt:
- _outCopyStmt(str, obj);
- break;
- case T_SelectStmt:
- _outSelectStmt(str, obj);
- break;
- case T_InsertStmt:
- _outInsertStmt(str, obj);
- break;
- case T_DeleteStmt:
- _outDeleteStmt(str, obj);
- break;
- case T_UpdateStmt:
- _outUpdateStmt(str, obj);
- break;
- case T_Null:
- _outNull(str, obj);
- break;
- case T_ReturnStmt:
- _outReturnStmt(str, obj);
- break;
- case T_PLAssignStmt:
- _outPLAssignStmt(str, obj);
- break;
- case T_ColumnDef:
- _outColumnDef(str, obj);
- break;
- case T_TypeName:
- _outTypeName(str, obj);
- break;
- case T_TypeCast:
- _outTypeCast(str, obj);
- break;
- case T_CollateClause:
- _outCollateClause(str, obj);
- break;
- case T_IndexElem:
- _outIndexElem(str, obj);
- break;
- case T_StatsElem:
- _outStatsElem(str, obj);
- break;
- case T_Query:
- _outQuery(str, obj);
- break;
- case T_WithCheckOption:
- _outWithCheckOption(str, obj);
- break;
- case T_SortGroupClause:
- _outSortGroupClause(str, obj);
- break;
- case T_GroupingSet:
- _outGroupingSet(str, obj);
- break;
- case T_WindowClause:
- _outWindowClause(str, obj);
- break;
- case T_RowMarkClause:
- _outRowMarkClause(str, obj);
- break;
- case T_WithClause:
- _outWithClause(str, obj);
- break;
- case T_CTESearchClause:
- _outCTESearchClause(str, obj);
- break;
- case T_CTECycleClause:
- _outCTECycleClause(str, obj);
- break;
- case T_CommonTableExpr:
- _outCommonTableExpr(str, obj);
- break;
- case T_SetOperationStmt:
- _outSetOperationStmt(str, obj);
- break;
- case T_RangeTblEntry:
- _outRangeTblEntry(str, obj);
- break;
- case T_RangeTblFunction:
- _outRangeTblFunction(str, obj);
- break;
- case T_TableSampleClause:
- _outTableSampleClause(str, obj);
- break;
- case T_A_Expr:
- _outAExpr(str, obj);
- break;
- case T_ColumnRef:
- _outColumnRef(str, obj);
- break;
- case T_ParamRef:
- _outParamRef(str, obj);
- break;
- case T_RawStmt:
- _outRawStmt(str, obj);
- break;
- case T_A_Const:
- _outAConst(str, obj);
- break;
- case T_A_Star:
- _outA_Star(str, obj);
- break;
- case T_A_Indices:
- _outA_Indices(str, obj);
- break;
- case T_A_Indirection:
- _outA_Indirection(str, obj);
- break;
- case T_A_ArrayExpr:
- _outA_ArrayExpr(str, obj);
- break;
- case T_ResTarget:
- _outResTarget(str, obj);
- break;
- case T_MultiAssignRef:
- _outMultiAssignRef(str, obj);
- break;
- case T_SortBy:
- _outSortBy(str, obj);
- break;
- case T_WindowDef:
- _outWindowDef(str, obj);
- break;
- case T_RangeSubselect:
- _outRangeSubselect(str, obj);
- break;
- case T_RangeFunction:
- _outRangeFunction(str, obj);
- break;
- case T_RangeTableSample:
- _outRangeTableSample(str, obj);
- break;
- case T_RangeTableFunc:
- _outRangeTableFunc(str, obj);
- break;
- case T_RangeTableFuncCol:
- _outRangeTableFuncCol(str, obj);
- break;
- case T_Constraint:
- _outConstraint(str, obj);
- break;
- case T_FuncCall:
- _outFuncCall(str, obj);
- break;
- case T_DefElem:
- _outDefElem(str, obj);
- break;
- case T_TableLikeClause:
- _outTableLikeClause(str, obj);
- break;
- case T_LockingClause:
- _outLockingClause(str, obj);
- break;
- case T_XmlSerialize:
- _outXmlSerialize(str, obj);
- break;
- case T_ForeignKeyCacheInfo:
- _outForeignKeyCacheInfo(str, obj);
- break;
- case T_TriggerTransition:
- _outTriggerTransition(str, obj);
- break;
- case T_PartitionElem:
- _outPartitionElem(str, obj);
- break;
- case T_PartitionSpec:
- _outPartitionSpec(str, obj);
- break;
- case T_PartitionBoundSpec:
- _outPartitionBoundSpec(str, obj);
- break;
- case T_PartitionRangeDatum:
- _outPartitionRangeDatum(str, obj);
- break;
- case T_PartitionCmd:
- _outPartitionCmd(str, obj);
- break;
- case T_GpAlterPartitionId:
- _outGpAlterPartitionId(str, obj);
- break;
- case T_GpAlterPartitionCmd:
- _outGpAlterPartitionCmd(str, obj);
- break;
- case T_GpDropPartitionCmd:
- _outGpDropPartitionCmd(str, obj);
- break;
-
- case T_CreateSchemaStmt:
- _outCreateSchemaStmt(str, obj);
- break;
- case T_AlterSchemaStmt:
- _outAlterSchemaStmt(str, obj);
- break;
-
- case T_CreateTagStmt:
- _outCreateTagStmt(str, obj);
- break;
- case T_AlterTagStmt:
- _outAlterTagStmt(str, obj);
- break;
- case T_DropTagStmt:
- _outDropTagStmt(str, obj);
- break;
- case T_CreatePLangStmt:
- _outCreatePLangStmt(str, obj);
- break;
- case T_VacuumStmt:
- _outVacuumStmt(str, obj);
- break;
- case T_VacuumRelation:
- _outVacuumRelation(str, obj);
- break;
- case T_CdbProcess:
- _outCdbProcess(str, obj);
- break;
- case T_SliceTable:
- _outSliceTable(str, obj);
- break;
- case T_CursorPosInfo:
- _outCursorPosInfo(str, obj);
- break;
- case T_VariableSetStmt:
- _outVariableSetStmt(str, obj);
- break;
-
- case T_DMLActionExpr:
- _outDMLActionExpr(str, obj);
- break;
-
- case T_CreateTrigStmt:
- _outCreateTrigStmt(str, obj);
- break;
-
- case T_CreateTableSpaceStmt:
- _outCreateTableSpaceStmt(str, obj);
- break;
-
- case T_DropTableSpaceStmt:
- _outDropTableSpaceStmt(str, obj);
- break;
-
- case T_CreateQueueStmt:
- _outCreateQueueStmt(str, obj);
- break;
- case T_AlterQueueStmt:
- _outAlterQueueStmt(str, obj);
- break;
- case T_DropQueueStmt:
- _outDropQueueStmt(str, obj);
- break;
-
- case T_CreateResourceGroupStmt:
- _outCreateResourceGroupStmt(str, obj);
- break;
- case T_DropResourceGroupStmt:
- _outDropResourceGroupStmt(str, obj);
- break;
- case T_AlterResourceGroupStmt:
- _outAlterResourceGroupStmt(str, obj);
- break;
-
- case T_CommentStmt:
- _outCommentStmt(str, obj);
- break;
-
- case T_TableValueExpr:
- _outTableValueExpr(str, obj);
- break;
- case T_DenyLoginInterval:
- _outDenyLoginInterval(str, obj);
- break;
- case T_DenyLoginPoint:
- _outDenyLoginPoint(str, obj);
- break;
-
- case T_AlterTypeStmt:
- _outAlterTypeStmt(str, obj);
- break;
- case T_AlterExtensionStmt:
- _outAlterExtensionStmt(str, obj);
- break;
- case T_AlterExtensionContentsStmt:
- _outAlterExtensionContentsStmt(str, obj);
- break;
- case T_TupleDescNode:
- _outTupleDescNode(str, obj);
- break;
-
- case T_AlterTSConfigurationStmt:
- _outAlterTSConfigurationStmt(str, obj);
- break;
- case T_AlterTSDictionaryStmt:
- _outAlterTSDictionaryStmt(str, obj);
- break;
-
- case T_CreatePublicationStmt:
- _outCreatePublicationStmt(str, obj);
- break;
- case T_AlterPublicationStmt:
- _outAlterPublicationStmt(str, obj);
- break;
- case T_CreateSubscriptionStmt:
- _outCreateSubscriptionStmt(str, obj);
- break;
- case T_DropSubscriptionStmt:
- _outDropSubscriptionStmt(str, obj);
- break;
- case T_AlterSubscriptionStmt:
- _outAlterSubscriptionStmt(str, obj);
- break;
-
- case T_CreatePolicyStmt:
- _outCreatePolicyStmt(str, obj);
- break;
- case T_AlterPolicyStmt:
- _outAlterPolicyStmt(str, obj);
- break;
- case T_CreateTransformStmt:
- _outCreateTransformStmt(str, obj);
- break;
- case T_GpPartitionDefinition:
- _outGpPartitionDefinition(str, obj);
- break;
- case T_GpPartDefElem:
- _outGpPartDefElem(str, obj);
- break;
- case T_GpPartitionRangeItem:
- _outGpPartitionRangeItem(str, obj);
- break;
- case T_GpPartitionRangeSpec:
- _outGpPartitionRangeSpec(str, obj);
- break;
- case T_GpPartitionListSpec:
- _outGpPartitionListSpec(str, obj);
- break;
- case T_EphemeralNamedRelationInfo:
- _outEphemeralNamedRelationInfo(str, obj);
- break;
- case T_AlterDatabaseStmt:
- _outAlterDatabaseStmt(str, obj);
- break;
- case T_CreateDirectoryTableStmt:
- _outCreateDirectoryTableStmt(str, obj);
- break;
- case T_AlterDirectoryTableStmt:
- _outAlterDirectoryTableStmt(str, obj);
- break;
- case T_DropDirectoryTableStmt:
- _outDropDirectoryTableStmt(str, obj);
- break;
- case T_CreateTaskStmt:
- _outCreateTaskStmt(str, obj);
- break;
- case T_AlterTaskStmt:
- _outAlterTaskStmt(str, obj);
- break;
- case T_DropTaskStmt:
- _outDropTaskStmt(str, obj);
- break;
- case T_RTEPermissionInfo:
- _outRTEPermissionInfo(str, obj);
- break;
- case T_GpPolicy:
- _outGpPolicy(str, obj);
- break;
- case T_MergeAction:
- _outMergeAction(str, obj);
- break;
- case T_PublicationObjSpec:
- _outPublicationObjSpec(str, obj);
- break;
- case T_PublicationTable:
- _outPublicationTable(str, obj);
- break;
- case T_JsonIsPredicate:
- _outJsonIsPredicate(str, obj);
- break;
- case T_JsonConstructorExpr:
- _outJsonConstructorExpr(str, obj);
- break;
- case T_JsonReturning:
- _outJsonReturning(str, obj);
- break;
- case T_JsonValueExpr:
- _outJsonValueExpr(str, obj);
- break;
- case T_JsonFormat:
- _outJsonFormat(str, obj);
- break;
default:
/*
@@ -5700,4 +1399,3 @@ bmsToString(const Bitmapset *bms)
outBitmapset(&str, bms);
return str.data;
}
-#endif /* COMPILING_BINARY_FUNCS */
diff --git a/src/backend/nodes/read.c b/src/backend/nodes/read.c
index 2cd0ced930e..b3664d40037 100644
--- a/src/backend/nodes/read.c
+++ b/src/backend/nodes/read.c
@@ -548,7 +548,7 @@ nodeRead(const char *token, int tok_len)
}
else
{
- elog(ERROR, "unrecognized token: \"%.*s\"", tok_len, token);
+ elog(PANIC, "unrecognized token: \"%.*s\"", tok_len, token);
result = NULL; /* keep compiler happy */
}
break;
diff --git a/src/backend/nodes/readfast.c b/src/backend/nodes/readfast.c
index ff3cb5eaddf..88545f9f4b9 100644
--- a/src/backend/nodes/readfast.c
+++ b/src/backend/nodes/readfast.c
@@ -33,6 +33,7 @@
#include
+#include "nodes/extensible.h"
#include "nodes/parsenodes.h"
#include "nodes/plannodes.h"
#include "nodes/readfuncs.h"
@@ -40,6 +41,7 @@
#include "catalog/pg_class.h"
#include "catalog/heap.h"
#include "cdb/cdbgang.h"
+#include "nodes/altertablenodes.h"
/*
* Macros to simplify reading of different kinds of fields. Use these
@@ -230,87 +232,6 @@ static Bitmapset *_readBitmapset(void);
*/
static const char *read_str_ptr;
-/*
- * For most structs, we reuse the definitions from readfuncs.c. See comment
- * in readfuncs.c.
- */
-#define COMPILING_BINARY_FUNCS
-#include "readfuncs.c"
-
-/*
- * For some structs, we have to provide a read functions because it differs
- * from the text version (or the text version doesn't exist at all).
- */
-
-/*
- * _readQuery
- */
-static Query *
-_readQuery(void)
-{
- READ_LOCALS(Query);
-
- READ_ENUM_FIELD(commandType, CmdType); Assert(local_node->commandType <= CMD_NOTHING);
- READ_ENUM_FIELD(querySource, QuerySource); Assert(local_node->querySource <= QSRC_PLANNER);
- READ_BOOL_FIELD(canSetTag);
- READ_NODE_FIELD(utilityStmt);
- READ_INT_FIELD(resultRelation);
- READ_BOOL_FIELD(hasAggs);
- READ_BOOL_FIELD(hasWindowFuncs);
- READ_BOOL_FIELD(hasSubLinks);
- READ_BOOL_FIELD(hasDynamicFunctions);
- READ_BOOL_FIELD(hasFuncsWithExecRestrictions);
- READ_BOOL_FIELD(hasDistinctOn);
- READ_BOOL_FIELD(hasRecursive);
- READ_BOOL_FIELD(hasModifyingCTE);
- READ_BOOL_FIELD(hasForUpdate);
- READ_BOOL_FIELD(hasRowSecurity);
- READ_BOOL_FIELD(canOptSelectLockingClause);
- READ_NODE_FIELD(cteList);
- READ_NODE_FIELD(rtable);
- READ_NODE_FIELD(rteperminfos);
- READ_NODE_FIELD(jointree);
- READ_NODE_FIELD(mergeActionList);
- READ_BOOL_FIELD(mergeUseOuterJoin);
- READ_NODE_FIELD(targetList);
- READ_NODE_FIELD(withCheckOptions);
- READ_NODE_FIELD(onConflict);
- READ_NODE_FIELD(returningList);
- READ_NODE_FIELD(groupClause);
- READ_NODE_FIELD(groupingSets);
- READ_NODE_FIELD(havingQual);
- READ_NODE_FIELD(windowClause);
- READ_NODE_FIELD(distinctClause);
- READ_NODE_FIELD(sortClause);
- READ_NODE_FIELD(scatterClause);
- READ_BOOL_FIELD(isTableValueSelect);
- READ_NODE_FIELD(limitOffset);
- READ_NODE_FIELD(limitCount);
- READ_NODE_FIELD(rowMarks);
- READ_NODE_FIELD(setOperations);
- READ_NODE_FIELD(constraintDeps);
- READ_BOOL_FIELD(parentStmtType);
-
- /* policy not serialized */
-
- READ_DONE();
-}
-
-static DMLActionExpr *
-_readDMLActionExpr(void)
-{
- READ_LOCALS(DMLActionExpr);
-
- READ_DONE();
-}
-
-/*
- * Stuff from primnodes.h.
- */
-
-/*
- * _readConst
- */
static Const *
_readConst(void)
{
@@ -331,291 +252,22 @@ _readConst(void)
READ_DONE();
}
-static ResTarget *
-_readResTarget(void)
-{
- READ_LOCALS(ResTarget);
-
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(indirection);
- READ_NODE_FIELD(val);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static MultiAssignRef *
-_readMultiAssignRef(void)
-{
- READ_LOCALS(MultiAssignRef);
-
- READ_NODE_FIELD(source);
- READ_INT_FIELD(colno);
- READ_INT_FIELD(ncolumns);
-
- READ_DONE();
-}
-
-static DropOwnedStmt *
-_readDropOwnedStmt(void)
-{
- READ_LOCALS(DropOwnedStmt);
-
- READ_NODE_FIELD(roles);
- READ_ENUM_FIELD(behavior, DropBehavior);
-
- READ_DONE();
-}
-
-static ReassignOwnedStmt *
-_readReassignOwnedStmt(void)
-{
- READ_LOCALS(ReassignOwnedStmt);
-
- READ_NODE_FIELD(roles);
- READ_NODE_FIELD(newrole);
-
- READ_DONE();
-}
-
-static AlterObjectDependsStmt *
-_readAlterObjectDependsStmt(void)
-{
- READ_LOCALS(AlterObjectDependsStmt);
-
- READ_ENUM_FIELD(objectType,ObjectType);
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(object);
- READ_NODE_FIELD(extname);
-
- READ_DONE();
-}
-
-static SelectStmt *
-_readSelectStmt(void)
-{
- READ_LOCALS(SelectStmt);
-
- READ_NODE_FIELD(distinctClause);
- READ_NODE_FIELD(intoClause);
- READ_NODE_FIELD(targetList);
- READ_NODE_FIELD(fromClause);
- READ_NODE_FIELD(whereClause);
- READ_NODE_FIELD(groupClause);
- READ_BOOL_FIELD(groupDistinct);
- READ_NODE_FIELD(havingClause);
- READ_NODE_FIELD(windowClause);
- READ_NODE_FIELD(valuesLists);
- READ_NODE_FIELD(sortClause);
- READ_NODE_FIELD(scatterClause);
- READ_NODE_FIELD(limitOffset);
- READ_NODE_FIELD(limitCount);
- READ_ENUM_FIELD(limitOption, LimitOption);
- READ_NODE_FIELD(lockingClause);
- READ_NODE_FIELD(withClause);
- READ_ENUM_FIELD(op, SetOperation);
- READ_BOOL_FIELD(all);
- READ_NODE_FIELD(larg);
- READ_NODE_FIELD(rarg);
- READ_BOOL_FIELD(disableLockingOptimization);
- READ_DONE();
-}
-
-static InsertStmt *
-_readInsertStmt(void)
-{
- READ_LOCALS(InsertStmt);
-
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(cols);
- READ_NODE_FIELD(selectStmt);
- READ_NODE_FIELD(returningList);
- READ_NODE_FIELD(withClause);
- READ_DONE();
-}
-
-static DeleteStmt *
-_readDeleteStmt(void)
-{
- READ_LOCALS(DeleteStmt);
-
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(usingClause);
- READ_NODE_FIELD(whereClause);
- READ_NODE_FIELD(returningList);
- READ_NODE_FIELD(withClause);
- READ_DONE();
-}
-
-static UpdateStmt *
-_readUpdateStmt(void)
-{
- READ_LOCALS(UpdateStmt);
-
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(targetList);
- READ_NODE_FIELD(whereClause);
- READ_NODE_FIELD(fromClause);
- READ_NODE_FIELD(returningList);
- READ_NODE_FIELD(withClause);
- READ_DONE();
-}
-
-
-static Integer *
-_readInteger(void)
-{
- READ_LOCALS(Integer);
-
- memcpy(&local_node->ival, read_str_ptr, sizeof(int));
- read_str_ptr += sizeof(int);
-
- READ_DONE();
-}
-
-static Boolean *
-_readBoolean(void)
-{
- READ_LOCALS(Boolean);
-
- memcpy(&local_node->boolval, read_str_ptr, sizeof(bool));
- read_str_ptr += sizeof(bool);
-
- READ_DONE();
-}
-
-static Float *
-_readFloat(void)
-{
- READ_LOCALS(Float);
-
- int slen;
- char *nn;
- memcpy(&slen, read_str_ptr, sizeof(int));
- read_str_ptr += sizeof(int);
- nn = palloc(slen + 1);
- memcpy(nn, read_str_ptr, slen);
- nn[slen] = '\0';
- local_node->fval = nn;
- read_str_ptr += slen;
-
- READ_DONE();
-}
-
-static String *
-_readString(void)
-{
- int slen;
- char *nn;
-
- READ_LOCALS(String);
-
- memcpy(&slen, read_str_ptr, sizeof(int));
- read_str_ptr += sizeof(int);
- nn = palloc(slen + 1);
- memcpy(nn, read_str_ptr, slen);
- nn[slen] = '\0';
- local_node->sval = nn;
- read_str_ptr += slen;
-
- READ_DONE();
-}
-
-static BitString *
-_readBitString(void)
-{
- READ_LOCALS(BitString);
-
- int slen;
- char *nn;
- memcpy(&slen, read_str_ptr, sizeof(int));
- read_str_ptr += sizeof(int);
- nn = palloc(slen + 1);
- memcpy(nn, read_str_ptr, slen);
- nn[slen] = '\0';
- local_node->bsval = nn;
- read_str_ptr += slen;
-
- READ_DONE();
-}
-
-static A_Const *
-_readAConst(void)
-{
- READ_LOCALS(A_Const);
-
- READ_BOOL_FIELD(isnull);
-
- if (!local_node->isnull)
- {
- union ValUnion *tmp = readNodeBinary();
-
- switch (nodeTag(tmp))
- {
- case T_Integer:
- memcpy(&local_node->val, tmp, sizeof(Integer));
- break;
- case T_Float:
- memcpy(&local_node->val, tmp, sizeof(Float));
- break;
- case T_Boolean:
- memcpy(&local_node->val, tmp, sizeof(Boolean));
- break;
- case T_String:
- memcpy(&local_node->val, tmp, sizeof(String));
- break;
- case T_BitString:
- memcpy(&local_node->val, tmp, sizeof(BitString));
- break;
- default:
- break;
- }
- }
-
- READ_LOCATION_FIELD(location); /*CDB*/
- READ_DONE();
-}
-
-static A_Star *
-_readA_Star(void)
-{
- READ_LOCALS(A_Star);
- READ_DONE();
-}
-
-static A_Indices *
-_readA_Indices(void)
-{
- READ_LOCALS(A_Indices);
- READ_BOOL_FIELD(is_slice);
- READ_NODE_FIELD(lidx);
- READ_NODE_FIELD(uidx);
- READ_DONE();
-}
-
-static A_Indirection *
-_readA_Indirection(void)
+static BoolExpr *
+_readBoolExpr(void)
{
- READ_LOCALS(A_Indirection);
- READ_NODE_FIELD(arg);
- READ_NODE_FIELD(indirection);
- READ_DONE();
-}
+ READ_LOCALS(BoolExpr);
-static RoleSpec *
-_readRoleSpec(void)
-{
- READ_LOCALS(RoleSpec);
+ READ_ENUM_FIELD(boolop, BoolExprType);
- READ_ENUM_FIELD(roletype, RoleSpecType);
- READ_STRING_FIELD(rolename);
+ READ_NODE_FIELD(args);
READ_LOCATION_FIELD(location);
READ_DONE();
}
+
static A_Expr *
-_readAExpr(void)
+_readA_Expr(void)
{
READ_LOCALS(A_Expr);
@@ -695,73 +347,226 @@ _readAExpr(void)
READ_DONE();
}
-/*
- * _readOpExpr
- */
-static OpExpr *
-_readOpExpr(void)
+static A_Const *
+_readA_Const(void)
{
- READ_LOCALS(OpExpr);
+ READ_LOCALS(A_Const);
- READ_OID_FIELD(opno);
- READ_OID_FIELD(opfuncid);
+ READ_BOOL_FIELD(isnull);
- /*
- * The opfuncid is stored in the textual format primarily for debugging
- * and documentation reasons. We want to always read it as zero to force
- * it to be re-looked-up in the pg_operator entry. This ensures that
- * stored rules don't have hidden dependencies on operators' functions.
- * (We don't currently support an ALTER OPERATOR command, but might
- * someday.)
- */
-/* local_node->opfuncid = InvalidOid; */
+ if (!local_node->isnull)
+ {
+ union ValUnion *tmp = readNodeBinary();
- READ_OID_FIELD(opresulttype);
- READ_BOOL_FIELD(opretset);
- READ_OID_FIELD(opcollid);
- READ_OID_FIELD(inputcollid);
- READ_NODE_FIELD(args);
- READ_LOCATION_FIELD(location);
+ switch (nodeTag(tmp))
+ {
+ case T_Integer:
+ memcpy(&local_node->val, tmp, sizeof(Integer));
+ break;
+ case T_Float:
+ memcpy(&local_node->val, tmp, sizeof(Float));
+ break;
+ case T_Boolean:
+ memcpy(&local_node->val, tmp, sizeof(Boolean));
+ break;
+ case T_String:
+ memcpy(&local_node->val, tmp, sizeof(String));
+ break;
+ case T_BitString:
+ memcpy(&local_node->val, tmp, sizeof(BitString));
+ break;
+ default:
+ break;
+ }
+ }
+ READ_LOCATION_FIELD(location); /*CDB*/
READ_DONE();
}
-/*
- * _readBoolExpr
- */
-static BoolExpr *
-_readBoolExpr(void)
-{
- READ_LOCALS(BoolExpr);
- READ_ENUM_FIELD(boolop, BoolExprType);
+static ColumnDef *
+_readColumnDef(void)
+{
+ READ_LOCALS(ColumnDef);
- READ_NODE_FIELD(args);
+ READ_STRING_FIELD(colname);
+ READ_NODE_FIELD(typeName);
+ READ_STRING_FIELD(compression);
+ READ_INT_FIELD(inhcount);
+ READ_BOOL_FIELD(is_local);
+ READ_BOOL_FIELD(is_not_null);
+ READ_BOOL_FIELD(is_from_type);
+ READ_INT_FIELD(attnum);
+ READ_INT_FIELD(storage);
+ READ_STRING_FIELD(storage_name);
+ READ_NODE_FIELD(raw_default);
+ READ_NODE_FIELD(cooked_default);
+
+ READ_BOOL_FIELD(hasCookedMissingVal);
+ READ_BOOL_FIELD(missingIsNull);
+ if (local_node->hasCookedMissingVal && !local_node->missingIsNull)
+ local_node->missingVal = readDatum(false);
+
+ READ_CHAR_FIELD(identity);
+ READ_NODE_FIELD(identitySequence);
+ READ_CHAR_FIELD(generated);
+ READ_NODE_FIELD(collClause);
+ READ_OID_FIELD(collOid);
+ READ_NODE_FIELD(constraints);
+ READ_NODE_FIELD(encoding);
+ READ_NODE_FIELD(fdwoptions);
READ_LOCATION_FIELD(location);
READ_DONE();
}
-/*
- * Stuff from parsenodes.h.
- */
+static RangeTblEntry *
+_readRangeTblEntry(void)
+{
+ READ_LOCALS(RangeTblEntry);
+ /* put alias + eref first to make dump more legible */
+ READ_NODE_FIELD(alias);
+ READ_NODE_FIELD(eref);
+ READ_ENUM_FIELD(rtekind, RTEKind);
+ READ_BOOL_FIELD(relisivm);
-/*
- * _readCollateClause
- */
-static CollateClause *
-_readCollateClause(void)
+ switch (local_node->rtekind)
+ {
+ case RTE_RELATION:
+ READ_OID_FIELD(relid);
+ READ_CHAR_FIELD(relkind);
+ READ_INT_FIELD(rellockmode);
+ READ_NODE_FIELD(tablesample);
+ READ_UINT_FIELD(perminfoindex);
+ break;
+ case RTE_SUBQUERY:
+ READ_NODE_FIELD(subquery);
+ READ_BOOL_FIELD(security_barrier);
+ READ_OID_FIELD(relid);
+ READ_CHAR_FIELD(relkind);
+ READ_INT_FIELD(rellockmode);
+ READ_UINT_FIELD(perminfoindex);
+ break;
+ case RTE_JOIN:
+ READ_ENUM_FIELD(jointype, JoinType);
+ READ_INT_FIELD(joinmergedcols);
+ READ_NODE_FIELD(joinaliasvars);
+ READ_NODE_FIELD(joinleftcols);
+ READ_NODE_FIELD(joinrightcols);
+ READ_NODE_FIELD(join_using_alias);
+ break;
+ case RTE_FUNCTION:
+ READ_NODE_FIELD(functions);
+ READ_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNCTION:
+ READ_NODE_FIELD(subquery);
+ READ_NODE_FIELD(functions);
+ READ_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNC:
+ READ_NODE_FIELD(tablefunc);
+ /* The RTE must have a copy of the column type info, if any */
+ if (local_node->tablefunc)
+ {
+ TableFunc *tf = local_node->tablefunc;
+
+ local_node->coltypes = tf->coltypes;
+ local_node->coltypmods = tf->coltypmods;
+ local_node->colcollations = tf->colcollations;
+ }
+ break;
+ case RTE_VALUES:
+ READ_NODE_FIELD(values_lists);
+ READ_NODE_FIELD(coltypes);
+ READ_NODE_FIELD(coltypmods);
+ READ_NODE_FIELD(colcollations);
+ break;
+ case RTE_CTE:
+ READ_STRING_FIELD(ctename);
+ READ_UINT_FIELD(ctelevelsup);
+ READ_BOOL_FIELD(self_reference);
+ READ_NODE_FIELD(coltypes);
+ READ_NODE_FIELD(coltypmods);
+ READ_NODE_FIELD(colcollations);
+ break;
+ case RTE_NAMEDTUPLESTORE:
+ READ_STRING_FIELD(enrname);
+ READ_FLOAT_FIELD(enrtuples);
+ READ_OID_FIELD(relid);
+ READ_NODE_FIELD(coltypes);
+ READ_NODE_FIELD(coltypmods);
+ READ_NODE_FIELD(colcollations);
+ break;
+ case RTE_RESULT:
+ /* no extra fields */
+ break;
+ case RTE_VOID: /*CDB*/
+ break;
+ default:
+ elog(ERROR, "unrecognized RTE kind: %d",
+ (int) local_node->rtekind);
+ break;
+ }
+
+ READ_BOOL_FIELD(lateral);
+ READ_BOOL_FIELD(inh);
+ READ_BOOL_FIELD(inFromCl);
+ READ_NODE_FIELD(securityQuals);
+
+ READ_BOOL_FIELD(forceDistRandom);
+
+ READ_DONE();
+}
+
+static Constraint *
+_readConstraint(void)
{
- READ_LOCALS(CollateClause);
+ READ_LOCALS(Constraint);
+
+ READ_ENUM_FIELD(contype, ConstrType);
+ READ_STRING_FIELD(conname); /* name, or NULL if unnamed */
+ READ_BOOL_FIELD(deferrable);
+ READ_BOOL_FIELD(initdeferred);
+ READ_LOCATION_FIELD(location);
+
+ READ_BOOL_FIELD(is_no_inherit);
+ READ_NODE_FIELD(raw_expr);
+ READ_STRING_FIELD(cooked_expr);
+ READ_CHAR_FIELD(generated_when);
+ READ_BOOL_FIELD(nulls_not_distinct);
+
+ READ_NODE_FIELD(keys);
+ READ_NODE_FIELD(including);
- READ_NODE_FIELD(arg);
- READ_NODE_FIELD(collname);
- READ_INT_FIELD(location);
+ READ_NODE_FIELD(exclusions);
+
+ READ_NODE_FIELD(options);
+ READ_STRING_FIELD(indexname);
+ READ_STRING_FIELD(indexspace);
+ READ_BOOL_FIELD(reset_default_tblspc);
+
+ READ_STRING_FIELD(access_method);
+ READ_NODE_FIELD(where_clause);
+
+ READ_NODE_FIELD(pktable);
+ READ_NODE_FIELD(fk_attrs);
+ READ_NODE_FIELD(pk_attrs);
+ READ_CHAR_FIELD(fk_matchtype);
+ READ_CHAR_FIELD(fk_upd_action);
+ READ_CHAR_FIELD(fk_del_action);
+ READ_NODE_FIELD(old_conpfeqop);
+ READ_OID_FIELD(old_pktable_oid);
+
+ READ_BOOL_FIELD(skip_validation);
+ READ_BOOL_FIELD(initially_valid);
READ_DONE();
}
+
static ExtensibleNode *
_readExtensibleNode(void)
{
@@ -803,154 +608,25 @@ _readExtensibleNode(void)
READ_DONE();
}
-/*
- * Apache Cloudberry additions for serialization support
- */
-#include "nodes/plannodes.h"
-
-static CreateExtensionStmt *
-_readCreateExtensionStmt(void)
-{
- READ_LOCALS(CreateExtensionStmt);
- READ_STRING_FIELD(extname);
- READ_BOOL_FIELD(if_not_exists);
- READ_NODE_FIELD(options);
- READ_ENUM_FIELD(create_ext_state, CreateExtensionState);
-
- READ_DONE();
-}
-
-static void
-_readCreateStmt_common(CreateStmt *local_node)
-{
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(tableElts);
- READ_NODE_FIELD(inhRelations);
- READ_NODE_FIELD(partspec);
- READ_NODE_FIELD(partbound);
- READ_NODE_FIELD(ofTypename);
- READ_NODE_FIELD(constraints);
- READ_NODE_FIELD(options);
- READ_ENUM_FIELD(oncommit,OnCommitAction);
- READ_STRING_FIELD(tablespacename);
- READ_STRING_FIELD(accessMethod);
- READ_BOOL_FIELD(if_not_exists);
- READ_ENUM_FIELD(origin, CreateStmtOrigin);
-
- READ_NODE_FIELD(distributedBy);
- READ_NODE_FIELD(partitionBy);
- READ_CHAR_FIELD(relKind);
- READ_OID_FIELD(ownerid);
- READ_BOOL_FIELD(buildAoBlkdir);
- READ_NODE_FIELD(attr_encodings);
- READ_BOOL_FIELD(isCtas);
- READ_NODE_FIELD(intoQuery);
- READ_NODE_FIELD(intoPolicy);
-
- READ_NODE_FIELD(part_idx_oids);
- READ_NODE_FIELD(part_idx_names);
- READ_NODE_FIELD(tags);
-
- /*
- * Some extra checks to make sure we didn't get lost
- * during serialization/deserialization
- */
- Assert(local_node->relKind == RELKIND_RELATION ||
- local_node->relKind == RELKIND_PARTITIONED_TABLE ||
- local_node->relKind == RELKIND_INDEX ||
- local_node->relKind == RELKIND_SEQUENCE ||
- local_node->relKind == RELKIND_TOASTVALUE ||
- local_node->relKind == RELKIND_VIEW ||
- local_node->relKind == RELKIND_COMPOSITE_TYPE ||
- local_node->relKind == RELKIND_FOREIGN_TABLE ||
- local_node->relKind == RELKIND_MATVIEW ||
- local_node->relKind == RELKIND_DIRECTORY_TABLE ||
- IsAppendonlyMetadataRelkind(local_node->relKind));
- Assert(local_node->oncommit <= ONCOMMIT_DROP);
-}
-
-static CreateStmt *
-_readCreateStmt(void)
-{
- READ_LOCALS(CreateStmt);
-
- _readCreateStmt_common(local_node);
-
- READ_DONE();
-}
-
-static CreateRangeStmt *
-_readCreateRangeStmt(void)
-{
- READ_LOCALS(CreateRangeStmt);
-
- READ_NODE_FIELD(typeName);
- READ_NODE_FIELD(params);
-
- READ_DONE();
-}
-
-static CreateForeignTableStmt *
-_readCreateForeignTableStmt(void)
-{
- READ_LOCALS(CreateForeignTableStmt);
-
- _readCreateStmt_common(&local_node->base);
-
- READ_STRING_FIELD(servername);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(distributedBy);
-
- READ_DONE();
-}
-
-static AlterDefaultPrivilegesStmt *
-_readAlterDefaultPrivilegesStmt(void)
+static Bitmapset *
+_readBitmapset(void)
{
- READ_LOCALS(AlterDefaultPrivilegesStmt);
-
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(action);
-
- READ_DONE();
-}
+ Bitmapset *bms = NULL;
+ int nwords;
+ int i;
-static CopyStmt *
-_readCopyStmt(void)
-{
- READ_LOCALS(CopyStmt);
-
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(attlist);
- READ_BOOL_FIELD(is_from);
- READ_BOOL_FIELD(is_program);
- READ_STRING_FIELD(filename);
- READ_STRING_FIELD(dirfilename);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(sreh);
+ memcpy(&nwords, read_str_ptr, sizeof(int)); read_str_ptr+=sizeof(int);
+ if (nwords==0)
+ return bms;
- READ_DONE();
-}
+ bms = palloc(offsetof(Bitmapset, words)+nwords*sizeof(bitmapword));
+ bms->nwords = nwords;
+ for (i = 0; i < nwords; i++)
+ {
+ memcpy(&bms->words[i], read_str_ptr, sizeof(bitmapword)); read_str_ptr+=sizeof(bitmapword);
+ }
-static QueryDispatchDesc *
-_readQueryDispatchDesc(void)
-{
- READ_LOCALS(QueryDispatchDesc);
-
- READ_NODE_FIELD(intoCreateStmt);
- READ_NODE_FIELD(paramInfo);
- READ_NODE_FIELD(oidAssignments);
- READ_NODE_FIELD(sliceTable);
- READ_NODE_FIELD(cursorPositions);
- READ_STRING_FIELD(parallelCursorName);
- READ_BOOL_FIELD(useChangedAOOpts);
- READ_INT_FIELD(secContext);
- READ_NODE_FIELD(namedRelList);
- READ_OID_FIELD(matviewOid);
- READ_OID_FIELD(tableid);
- READ_INT_FIELD(snaplen);
- READ_STRING_FIELD(snapname);
- READ_DONE();
+ return bms;
}
static SerializedParams *
@@ -991,2059 +667,432 @@ _readSerializedParams(void)
READ_DONE();
}
-static OidAssignment *
-_readOidAssignment(void)
+static SliceTable *
+_readSliceTable(void)
{
- READ_LOCALS(OidAssignment);
+ READ_LOCALS(SliceTable);
+
+ READ_INT_FIELD(localSlice);
+ READ_INT_FIELD(numSlices);
+ local_node->slices = palloc0(local_node->numSlices * sizeof(ExecSlice));
+ for (int i = 0; i < local_node->numSlices; i++)
+ {
+ READ_INT_FIELD(slices[i].sliceIndex);
+ READ_INT_FIELD(slices[i].rootIndex);
+ READ_INT_FIELD(slices[i].parentIndex);
+ READ_INT_FIELD(slices[i].planNumSegments);
+ READ_NODE_FIELD(slices[i].children); /* List of int index */
+ READ_ENUM_FIELD(slices[i].gangType, GangType);
+ READ_NODE_FIELD(slices[i].segments); /* List of int index */
+ READ_BOOL_FIELD(slices[i].useMppParallelMode);
+ READ_INT_FIELD(slices[i].parallel_workers);
+ local_node->slices[i].primaryGang = NULL;
+ READ_NODE_FIELD(slices[i].primaryProcesses); /* List of (CDBProcess *) */
+ READ_BITMAPSET_FIELD(slices[i].processesMap);
+ }
+ READ_BOOL_FIELD(hasMotions);
+
+ READ_INT_FIELD(instrument_options);
+ READ_INT_FIELD(ic_instance_id);
- READ_OID_FIELD(catalog);
- READ_STRING_FIELD_NULL(objname);
- READ_OID_FIELD(namespaceOid);
- READ_OID_FIELD(keyOid1);
- READ_OID_FIELD(keyOid2);
- READ_OID_FIELD(oid);
READ_DONE();
}
-static Sequence *
-_readSequence(void)
+
+static Integer *
+_readInteger(void)
{
- READ_LOCALS(Sequence);
- ReadCommonPlan(&local_node->plan);
- READ_NODE_FIELD(subplans);
+ READ_LOCALS(Integer);
+
+ memcpy(&local_node->ival, read_str_ptr, sizeof(int));
+ read_str_ptr += sizeof(int);
+
READ_DONE();
}
-static DynamicSeqScan *
-_readDynamicSeqScan(void)
+static Boolean *
+_readBoolean(void)
{
- READ_LOCALS(DynamicSeqScan);
+ READ_LOCALS(Boolean);
- ReadCommonScan(&local_node->seqscan.scan);
- READ_NODE_FIELD(partOids);
- READ_NODE_FIELD(part_prune_info);
- READ_NODE_FIELD(join_prune_paramids);
+ memcpy(&local_node->boolval, read_str_ptr, sizeof(bool));
+ read_str_ptr += sizeof(bool);
READ_DONE();
}
-/*
- * _readExternalScanInfo
- */
-static ExternalScanInfo *
-_readExternalScanInfo(void)
+static Float *
+_readFloat(void)
{
- READ_LOCALS(ExternalScanInfo);
-
- READ_NODE_FIELD(uriList);
- READ_CHAR_FIELD(fmtType);
- READ_BOOL_FIELD(isMasterOnly);
- READ_INT_FIELD(rejLimit);
- READ_BOOL_FIELD(rejLimitInRows);
- READ_CHAR_FIELD(logErrors);
- READ_INT_FIELD(encoding);
- READ_INT_FIELD(scancounter);
- READ_NODE_FIELD(extOptions);
+ READ_LOCALS(Float);
+
+ int slen;
+ char *nn;
+ memcpy(&slen, read_str_ptr, sizeof(int));
+ read_str_ptr += sizeof(int);
+ nn = palloc(slen + 1);
+ memcpy(nn, read_str_ptr, slen);
+ nn[slen] = '\0';
+ local_node->fval = nn;
+ read_str_ptr += slen;
READ_DONE();
}
-static CustomScan *
-_readCustomScan(void)
+static String *
+_readString(void)
{
- char *custom_name;
- const CustomScanMethods *methods;
-
- READ_LOCALS(CustomScan);
+ int slen;
+ char *nn;
- ReadCommonScan(&local_node->scan);
+ READ_LOCALS(String);
- READ_UINT_FIELD(flags);
- READ_NODE_FIELD(custom_plans);
- READ_NODE_FIELD(custom_exprs);
- READ_NODE_FIELD(custom_private);
- READ_NODE_FIELD(custom_scan_tlist);
- READ_BITMAPSET_FIELD(custom_relids);
- READ_STRING_VAR(custom_name);
- /* find custom scan methods from hash table. */
- methods = GetCustomScanMethods(custom_name, false);
- local_node->methods = methods;
+ memcpy(&slen, read_str_ptr, sizeof(int));
+ read_str_ptr += sizeof(int);
+ nn = palloc(slen + 1);
+ memcpy(nn, read_str_ptr, slen);
+ nn[slen] = '\0';
+ local_node->sval = nn;
+ read_str_ptr += slen;
READ_DONE();
}
-/*
- * _readShareInputScan
- */
-static ShareInputScan *
-_readShareInputScan(void)
+static BitString *
+_readBitString(void)
{
- READ_LOCALS(ShareInputScan);
-
- READ_BOOL_FIELD(cross_slice);
- READ_INT_FIELD(share_id);
- READ_INT_FIELD(producer_slice_id);
- READ_INT_FIELD(this_slice_id);
- READ_INT_FIELD(nconsumers);
- READ_BOOL_FIELD(discard_output);
- READ_BOOL_FIELD(ref_set);
+ READ_LOCALS(BitString);
- ReadCommonPlan(&local_node->scan.plan);
+ int slen;
+ char *nn;
+ memcpy(&slen, read_str_ptr, sizeof(int));
+ read_str_ptr += sizeof(int);
+ nn = palloc(slen + 1);
+ memcpy(nn, read_str_ptr, slen);
+ nn[slen] = '\0';
+ local_node->bsval = nn;
+ read_str_ptr += slen;
READ_DONE();
}
-/*
- * _readMotion
- */
-static Motion *
-_readMotion(void)
+static TupleDescNode *
+_readTupleDescNode(void)
{
- READ_LOCALS(Motion);
-
- READ_INT_FIELD(motionID);
- READ_ENUM_FIELD(motionType, MotionType);
+ READ_LOCALS(TupleDescNode);
- Assert(local_node->motionType == MOTIONTYPE_GATHER ||
- local_node->motionType == MOTIONTYPE_GATHER_SINGLE ||
- local_node->motionType == MOTIONTYPE_HASH ||
- local_node->motionType == MOTIONTYPE_BROADCAST ||
- local_node->motionType == MOTIONTYPE_BROADCAST_WORKERS ||
- local_node->motionType == MOTIONTYPE_EXPLICIT);
+ READ_INT_FIELD(natts);
- READ_BOOL_FIELD(sendSorted);
+ local_node->tuple = CreateTemplateTupleDesc(local_node->natts);
- READ_NODE_FIELD(hashExprs);
- READ_OID_ARRAY(hashFuncs, list_length(local_node->hashExprs));
+ READ_INT_FIELD(tuple->natts);
+ if (local_node->tuple->natts > 0)
+ {
+ int i = 0;
+ for (; i < local_node->tuple->natts; i++)
+ {
+ memcpy(&local_node->tuple->attrs[i], read_str_ptr, ATTRIBUTE_FIXED_PART_SIZE);
+ read_str_ptr+=ATTRIBUTE_FIXED_PART_SIZE;
+ }
+ }
- READ_INT_FIELD(numSortCols);
- READ_ATTRNUMBER_ARRAY(sortColIdx, local_node->numSortCols);
- READ_OID_ARRAY(sortOperators, local_node->numSortCols);
- READ_OID_ARRAY(collations, local_node->numSortCols);
- READ_BOOL_ARRAY(nullsFirst, local_node->numSortCols);
+ READ_OID_FIELD(tuple->tdtypeid);
+ READ_INT_FIELD(tuple->tdtypmod);
+ READ_INT_FIELD(tuple->tdrefcount);
- READ_INT_FIELD(segidColIdx);
- READ_INT_FIELD(numHashSegments);
+ // Transient type don't have constraint.
+ local_node->tuple->constr = NULL;
- ReadCommonPlan(&local_node->plan);
+ Assert(local_node->tuple->tdtypeid == RECORDOID);
READ_DONE();
}
-/*
- * _readSplitUpdate
- */
-static SplitUpdate *
-_readSplitUpdate(void)
+static void
+unwrapStringList(List *list)
{
- READ_LOCALS(SplitUpdate);
+ ListCell *lc;
- READ_INT_FIELD(actionColIdx);
- READ_NODE_FIELD(insertColIdx);
- READ_NODE_FIELD(deleteColIdx);
-
- READ_INT_FIELD(numHashSegments);
- READ_INT_FIELD(numHashAttrs);
- READ_ATTRNUMBER_ARRAY(hashAttnos, local_node->numHashAttrs);
- READ_OID_ARRAY(hashFuncs, local_node->numHashAttrs);
-
- ReadCommonPlan(&local_node->plan);
+ foreach(lc, list)
+ {
+ String *val = lfirst(lc);
- READ_DONE();
+ lfirst(lc) = strVal(val);
+ pfree(val);
+ }
}
-/*
- * _readSplitUpdate
- */
-static SplitMerge *
-_readSplitMerge(void)
+static AlteredTableInfo *
+_readAlteredTableInfo(void)
{
- READ_LOCALS(SplitMerge);
+ READ_LOCALS(AlteredTableInfo);
- READ_INT_FIELD(numHashSegments);
- READ_INT_FIELD(numHashAttrs);
- READ_ATTRNUMBER_ARRAY(hashAttnos, local_node->numHashAttrs);
- READ_OID_ARRAY(hashFuncs, local_node->numHashAttrs);
-
- READ_NODE_FIELD(resultRelations);
- READ_NODE_FIELD(mergeActionLists);
- READ_BOOL_FIELD(hasSplitUpdate);
- READ_UINT_FIELD(rootResultRelation);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_DONE();
-}
+ READ_OID_FIELD(relid);
+ READ_CHAR_FIELD(relkind);
+ /* oldDesc is omitted */
+ for (int i = 0; i < AT_NUM_PASSES; i++)
+ {
+ READ_NODE_FIELD(subcmds[i]);
+ }
-static PlaceHolderVar *
-_readPlaceHolderVar(void)
-{
- READ_LOCALS(PlaceHolderVar);
+ READ_NODE_FIELD(constraints);
+ READ_NODE_FIELD(newvals);
+ READ_NODE_FIELD(afterStmts);
+ READ_BOOL_FIELD(verify_new_notnull);
+ READ_INT_FIELD(rewrite);
+ READ_OID_FIELD(newAccessMethod);
+ READ_BOOL_FIELD(dist_opfamily_changed);
+ READ_OID_FIELD(new_opclass);
+ READ_BOOL_FIELD(chgPersistence);
+ READ_CHAR_FIELD(newrelpersistence);
+ READ_NODE_FIELD(partition_constraint);
+ READ_BOOL_FIELD(validate_default);
+ READ_NODE_FIELD(changedConstraintOids);
+ READ_NODE_FIELD(changedConstraintDefs);
+ /* The QD sends changedConstraintDefs wrapped in Values. Unwrap them. */
+ unwrapStringList(local_node->changedConstraintDefs);
+ READ_NODE_FIELD(changedIndexOids);
+ READ_NODE_FIELD(changedIndexDefs);
+ unwrapStringList(local_node->changedIndexDefs);
+ READ_NODE_FIELD(beforeStmtLists);
+ READ_NODE_FIELD(constraintLists);
+
+ READ_DONE();
+}
+
+static NewConstraint *
+_readNewConstraint(void)
+{
+ READ_LOCALS(NewConstraint);
- READ_NODE_FIELD(phexpr);
- READ_BITMAPSET_FIELD(phrels);
- READ_BITMAPSET_FIELD(phnullingrels);
- READ_UINT_FIELD(phid);
- READ_UINT_FIELD(phlevelsup);
+ READ_STRING_FIELD(name);
+ READ_ENUM_FIELD(contype, ConstrType);
+ READ_OID_FIELD(refrelid);
+ READ_OID_FIELD(refindid);
+ READ_OID_FIELD(conid);
+ READ_NODE_FIELD(qual);
+ /* can't serialize qualstate */
READ_DONE();
}
-/*
- * _readAssertOp
- */
-static AssertOp *
-_readAssertOp(void)
+static PlannedStmt *
+_readPlannedStmt(void)
{
- READ_LOCALS(AssertOp);
-
- READ_NODE_FIELD(errmessage);
- READ_INT_FIELD(errcode);
-
- ReadCommonPlan(&local_node->plan);
+ READ_LOCALS(PlannedStmt);
- READ_DONE();
-}
-
-/*
- * _readPartitionSelector
- */
-static PartitionSelector *
-_readPartitionSelector(void)
-{
- READ_LOCALS(PartitionSelector);
-
- READ_INT_FIELD(paramid);
- READ_NODE_FIELD(part_prune_info);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_DONE();
-}
-
-static Bitmapset *
-_readBitmapset(void)
-{
- Bitmapset *bms = NULL;
- int nwords;
- int i;
+ READ_ENUM_FIELD(commandType, CmdType);
+ READ_ENUM_FIELD(planGen, PlanGenerator);
+ READ_UINT64_FIELD(queryId);
+ READ_BOOL_FIELD(hasReturning);
+ READ_BOOL_FIELD(hasModifyingCTE);
+ READ_BOOL_FIELD(canSetTag);
+ READ_BOOL_FIELD(transientPlan);
+ READ_BOOL_FIELD(oneoffPlan);
+ READ_OID_FIELD(simplyUpdatableRel);
+ READ_BOOL_FIELD(dependsOnRole);
+ READ_BOOL_FIELD(parallelModeNeeded);
+ READ_INT_FIELD(jitFlags);
+ READ_NODE_FIELD(planTree);
+ READ_NODE_FIELD(rtable);
+ READ_NODE_FIELD(permInfos);
+ READ_NODE_FIELD(resultRelations);
+ READ_NODE_FIELD(appendRelations);
+ READ_NODE_FIELD(subplans);
+ READ_BITMAPSET_FIELD(rewindPlanIDs);
+ READ_NODE_FIELD(rowMarks);
+ READ_NODE_FIELD(relationOids);
+ READ_NODE_FIELD(paramExecTypes);
+ READ_NODE_FIELD(utilityStmt);
+ READ_LOCATION_FIELD(stmt_location);
+ READ_INT_FIELD(stmt_len);
- memcpy(&nwords, read_str_ptr, sizeof(int)); read_str_ptr+=sizeof(int);
- if (nwords==0)
- return bms;
+ READ_INT_ARRAY(subplan_sliceIds, list_length(local_node->subplans));
- bms = palloc(offsetof(Bitmapset, words)+nwords*sizeof(bitmapword));
- bms->nwords = nwords;
- for (i = 0; i < nwords; i++)
+ READ_INT_FIELD(numSlices);
+ local_node->slices = palloc(local_node->numSlices * sizeof(PlanSlice));
+ for (int i = 0; i < local_node->numSlices; i++)
{
- memcpy(&bms->words[i], read_str_ptr, sizeof(bitmapword)); read_str_ptr+=sizeof(bitmapword);
+ READ_INT_FIELD(slices[i].sliceIndex);
+ READ_INT_FIELD(slices[i].parentIndex);
+ READ_INT_FIELD(slices[i].gangType);
+ READ_INT_FIELD(slices[i].numsegments);
+ READ_INT_FIELD(slices[i].parallel_workers);
+ READ_INT_FIELD(slices[i].segindex);
+ READ_BOOL_FIELD(slices[i].directDispatch.isDirectDispatch);
+ READ_NODE_FIELD(slices[i].directDispatch.contentIds);
}
- return bms;
-}
-
-static CreateTrigStmt *
-_readCreateTrigStmt(void)
-{
- READ_LOCALS(CreateTrigStmt);
-
- READ_BOOL_FIELD(replace);
- READ_STRING_FIELD(trigname);
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(funcname);
- READ_NODE_FIELD(args);
- READ_BOOL_FIELD(row);
- READ_INT_FIELD(timing);
- READ_INT_FIELD(events);
- READ_NODE_FIELD(columns);
- READ_NODE_FIELD(whenClause);
- READ_BOOL_FIELD(isconstraint);
- READ_NODE_FIELD(transitionRels);
- READ_BOOL_FIELD(deferrable);
- READ_BOOL_FIELD(initdeferred);
- READ_NODE_FIELD(constrrel);
- READ_OID_FIELD(matviewId);
-
- READ_DONE();
-}
-
-static TriggerTransition *
-_readTriggerTransition()
-{
- READ_LOCALS(TriggerTransition);
-
- READ_STRING_FIELD(name);
- READ_BOOL_FIELD(isNew);
- READ_BOOL_FIELD(isTable);
-
- READ_DONE();
-}
-
-static CreateTableSpaceStmt *
-_readCreateTableSpaceStmt(void)
-{
- READ_LOCALS(CreateTableSpaceStmt);
-
- READ_STRING_FIELD(tablespacename);
- READ_NODE_FIELD(owner);
- READ_STRING_FIELD(location);
- READ_NODE_FIELD(options);
- READ_STRING_FIELD(filehandler);
- READ_NODE_FIELD(tags);
-
- READ_DONE();
-}
-
-static CreateAmStmt *
-_readCreateAmStmt()
-{
- READ_LOCALS(CreateAmStmt);
-
- READ_STRING_FIELD(amname);
- READ_NODE_FIELD(handler_name);
- READ_INT_FIELD(amtype);
-
- READ_DONE();
-}
-
-static AlterTableMoveAllStmt *
-_readAlterTableMoveAllStmt(void)
-{
- READ_LOCALS(AlterTableMoveAllStmt);
-
- READ_STRING_FIELD(orig_tablespacename);
- READ_ENUM_FIELD(objtype, ObjectType);
- READ_NODE_FIELD(roles);
- READ_STRING_FIELD(new_tablespacename);
- READ_BOOL_FIELD(nowait);
-
- READ_DONE();
-}
-
-static AlterTableSpaceOptionsStmt *
-_readAlterTableSpaceOptionsStmt(void)
-{
- READ_LOCALS(AlterTableSpaceOptionsStmt);
-
- READ_STRING_FIELD(tablespacename);
- READ_NODE_FIELD(options);
- READ_BOOL_FIELD(isReset);
- READ_NODE_FIELD(tags);
- READ_BOOL_FIELD(unsettag);
+ READ_BITMAPSET_FIELD(rewindPlanIDs);
- READ_DONE();
-}
+ READ_NODE_FIELD(intoPolicy);
-static DropTableSpaceStmt *
-_readDropTableSpaceStmt(void)
-{
- READ_LOCALS(DropTableSpaceStmt);
+ READ_UINT64_FIELD(query_mem);
- READ_STRING_FIELD(tablespacename);
- READ_BOOL_FIELD(missing_ok);
+ READ_NODE_FIELD(intoClause);
+ READ_NODE_FIELD(copyIntoClause);
+ READ_NODE_FIELD(refreshClause);
+ READ_INT_FIELD(metricsQueryType);
+ READ_NODE_FIELD(extensionContext);
READ_DONE();
}
-
-static CreateQueueStmt *
-_readCreateQueueStmt(void)
-{
- READ_LOCALS(CreateQueueStmt);
-
- READ_STRING_FIELD(queue);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-static AlterQueueStmt *
-_readAlterQueueStmt(void)
+static Motion *
+_readMotion(void)
{
- READ_LOCALS(AlterQueueStmt);
-
- READ_STRING_FIELD(queue);
- READ_NODE_FIELD(options);
+ READ_LOCALS(Motion);
- READ_DONE();
-}
-static DropQueueStmt *
-_readDropQueueStmt(void)
-{
- READ_LOCALS(DropQueueStmt);
+ READ_FLOAT_FIELD(plan.startup_cost);
+ READ_FLOAT_FIELD(plan.total_cost);
+ READ_FLOAT_FIELD(plan.plan_rows);
+ READ_INT_FIELD(plan.plan_width);
+ READ_BOOL_FIELD(plan.parallel_aware);
+ READ_BOOL_FIELD(plan.parallel_safe);
+ READ_BOOL_FIELD(plan.async_capable);
+ READ_INT_FIELD(plan.plan_node_id);
+ READ_NODE_FIELD(plan.targetlist);
+ READ_NODE_FIELD(plan.qual);
+ READ_NODE_FIELD(plan.lefttree);
+ READ_NODE_FIELD(plan.righttree);
+ READ_NODE_FIELD(plan.initPlan);
+ READ_BITMAPSET_FIELD(plan.extParam);
+ READ_BITMAPSET_FIELD(plan.allParam);
+ READ_NODE_FIELD(plan.flow);
+ READ_UINT_FIELD(plan.locustype);
+ READ_INT_FIELD(plan.parallel);
+ READ_UINT64_FIELD(plan.operatorMemKB);
+
+ READ_INT_FIELD(motionID);
+ READ_ENUM_FIELD(motionType, MotionType);
- READ_STRING_FIELD(queue);
+ Assert(local_node->motionType == MOTIONTYPE_GATHER ||
+ local_node->motionType == MOTIONTYPE_GATHER_SINGLE ||
+ local_node->motionType == MOTIONTYPE_HASH ||
+ local_node->motionType == MOTIONTYPE_BROADCAST ||
+ local_node->motionType == MOTIONTYPE_BROADCAST_WORKERS ||
+ local_node->motionType == MOTIONTYPE_EXPLICIT);
- READ_DONE();
-}
+ READ_BOOL_FIELD(sendSorted);
-static CreateResourceGroupStmt *
-_readCreateResourceGroupStmt(void)
-{
- READ_LOCALS(CreateResourceGroupStmt);
+ READ_NODE_FIELD(hashExprs);
+ READ_OID_ARRAY(hashFuncs, list_length(local_node->hashExprs));
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(options);
+ READ_INT_FIELD(numSortCols);
+ READ_ATTRNUMBER_ARRAY(sortColIdx, local_node->numSortCols);
+ READ_OID_ARRAY(sortOperators, local_node->numSortCols);
+ READ_OID_ARRAY(collations, local_node->numSortCols);
+ READ_BOOL_ARRAY(nullsFirst, local_node->numSortCols);
+ READ_INT_FIELD(segidColIdx);
+ READ_INT_FIELD(numHashSegments);
+
READ_DONE();
}
-static DropResourceGroupStmt *
-_readDropResourceGroupStmt(void)
+static OidAssignment *
+_readOidAssignment(void)
{
- READ_LOCALS(DropResourceGroupStmt);
-
- READ_STRING_FIELD(name);
+ READ_LOCALS(OidAssignment);
+ READ_OID_FIELD(catalog);
+ READ_STRING_FIELD_NULL(objname);
+ READ_OID_FIELD(namespaceOid);
+ READ_OID_FIELD(keyOid1);
+ READ_OID_FIELD(keyOid2);
+ READ_OID_FIELD(oid);
READ_DONE();
}
-static AlterResourceGroupStmt *
-_readAlterResourceGroupStmt(void)
-{
- READ_LOCALS(AlterResourceGroupStmt);
-
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(options);
+#include "readfast.funcs.c"
- READ_DONE();
-}
+/*
+ * For some structs, we have to provide a read functions because it differs
+ * from the text version (or the text version doesn't exist at all).
+ */
-static CommentStmt *
-_readCommentStmt(void)
+static void *
+readNodeBinary(void)
{
- READ_LOCALS(CommentStmt);
-
- READ_ENUM_FIELD(objtype, ObjectType);
- READ_NODE_FIELD(object);
- READ_STRING_FIELD(comment);
+ void *return_value;
+ NodeTag nt;
+ int16 ntt;
- READ_DONE();
-}
+ memcpy(&ntt, read_str_ptr,sizeof(int16));
+ read_str_ptr+=sizeof(int16);
+ nt = (NodeTag) ntt;
-static TupleDescNode *
-_readTupleDescNode(void)
-{
- READ_LOCALS(TupleDescNode);
+ if (nt==0)
+ return NULL;
- READ_INT_FIELD(natts);
+ if (nt == T_List || nt == T_IntList || nt == T_OidList)
+ {
+ List *l = NIL;
+ int listsize = 0;
+ int i;
- local_node->tuple = CreateTemplateTupleDesc(local_node->natts);
+ memcpy(&listsize,read_str_ptr,sizeof(int));
+ read_str_ptr+=sizeof(int);
- READ_INT_FIELD(tuple->natts);
- if (local_node->tuple->natts > 0)
- {
- int i = 0;
- for (; i < local_node->tuple->natts; i++)
+ if (nt == T_IntList)
{
- memcpy(&local_node->tuple->attrs[i], read_str_ptr, ATTRIBUTE_FIXED_PART_SIZE);
- read_str_ptr+=ATTRIBUTE_FIXED_PART_SIZE;
+ int val;
+ for (i = 0; i < listsize; i++)
+ {
+ memcpy(&val,read_str_ptr,sizeof(int));
+ read_str_ptr+=sizeof(int);
+ l = lappend_int(l, val);
+ }
}
- }
-
- READ_OID_FIELD(tuple->tdtypeid);
- READ_INT_FIELD(tuple->tdtypmod);
- READ_INT_FIELD(tuple->tdrefcount);
-
- // Transient type don't have constraint.
- local_node->tuple->constr = NULL;
-
- Assert(local_node->tuple->tdtypeid == RECORDOID);
-
- READ_DONE();
-}
-
-static AlterExtensionStmt *
-_readAlterExtensionStmt(void)
-{
- READ_LOCALS(AlterExtensionStmt);
- READ_STRING_FIELD(extname);
- READ_NODE_FIELD(options);
- READ_ENUM_FIELD(update_ext_state, UpdateExtensionState);
- READ_DONE();
-}
-
-static AlterExtensionContentsStmt *
-_readAlterExtensionContentsStmt(void)
-{
- READ_LOCALS(AlterExtensionContentsStmt);
-
- READ_STRING_FIELD(extname);
- READ_INT_FIELD(action);
- READ_ENUM_FIELD(objtype, ObjectType);
- READ_NODE_FIELD(object);
-
- READ_DONE();
-}
-
-static AlterTSConfigurationStmt *
-_readAlterTSConfigurationStmt(void)
-{
- READ_LOCALS(AlterTSConfigurationStmt);
-
- READ_NODE_FIELD(cfgname);
- READ_NODE_FIELD(tokentype);
- READ_NODE_FIELD(dicts);
- READ_BOOL_FIELD(override);
- READ_BOOL_FIELD(replace);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static AlterTSDictionaryStmt *
-_readAlterTSDictionaryStmt(void)
-{
- READ_LOCALS(AlterTSDictionaryStmt);
-
- READ_NODE_FIELD(dictname);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static CookedConstraint *
-_readCookedConstraint(void)
-{
- READ_LOCALS(CookedConstraint);
-
- READ_ENUM_FIELD(contype,ConstrType);
- READ_STRING_FIELD(name);
- READ_INT_FIELD(attnum);
- READ_NODE_FIELD(expr);
- READ_BOOL_FIELD(is_local);
- READ_INT_FIELD(inhcount);
- READ_BOOL_FIELD(is_no_inherit);
+ else if (nt == T_OidList)
+ {
+ Oid val;
+ for (i = 0; i < listsize; i++)
+ {
+ memcpy(&val,read_str_ptr,sizeof(Oid));
+ read_str_ptr+=sizeof(Oid);
+ l = lappend_oid(l, val);
+ }
+ }
+ else
+ {
- READ_DONE();
-}
+ for (i = 0; i < listsize; i++)
+ {
+ l = lappend(l, readNodeBinary());
+ }
+ }
+ Assert(l->length==listsize);
-static AlterEnumStmt *
-_readAlterEnumStmt(void)
-{
- READ_LOCALS(AlterEnumStmt);
+ return l;
+ }
- READ_NODE_FIELD(typeName);
- READ_STRING_FIELD(oldVal);
- READ_STRING_FIELD(newVal);
- READ_STRING_FIELD(newValNeighbor);
- READ_BOOL_FIELD(newValIsAfter);
- READ_BOOL_FIELD(skipIfNewValExists);
+ switch(nt)
+ {
+ case T_Integer:
+ return_value = _readInteger();
+ break;
+ case T_Boolean:
+ return_value = _readBoolean();
+ break;
+ case T_Float:
+ return_value = _readFloat();
+ break;
+ case T_String:
+ return_value = _readString();
+ break;
+ case T_BitString:
+ return_value = _readBitString();
+ break;
+
+#include "readfast.switch.c"
- READ_DONE();
-}
-
-static CreateFdwStmt *
-_readCreateFdwStmt(void)
-{
- READ_LOCALS(CreateFdwStmt);
-
- READ_STRING_FIELD(fdwname);
- READ_NODE_FIELD(func_options);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static DistributedBy*
-_readDistributedBy(void)
-{
- READ_LOCALS(DistributedBy);
-
- READ_ENUM_FIELD(ptype, GpPolicyType);
- READ_INT_FIELD(numsegments);
- READ_NODE_FIELD(keyCols);
-
- READ_DONE();
-}
-
-static ImportForeignSchemaStmt*
-_readImportForeignSchemaStmt(void)
-{
- READ_LOCALS(ImportForeignSchemaStmt);
-
- READ_STRING_FIELD(server_name);
- READ_STRING_FIELD(remote_schema);
- READ_STRING_FIELD(local_schema);
- READ_ENUM_FIELD(list_type, ImportForeignSchemaType);
- READ_NODE_FIELD(table_list);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AlterFdwStmt *
-_readAlterFdwStmt(void)
-{
- READ_LOCALS(AlterFdwStmt);
-
- READ_STRING_FIELD(fdwname);
- READ_NODE_FIELD(func_options);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static CreateForeignServerStmt *
-_readCreateForeignServerStmt(void)
-{
- READ_LOCALS(CreateForeignServerStmt);
-
- READ_STRING_FIELD(servername);
- READ_STRING_FIELD(servertype);
- READ_STRING_FIELD(version);
- READ_STRING_FIELD(fdwname);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AddForeignSegStmt *
-_readAddForeignSegStmt(void)
-{
- READ_LOCALS(AddForeignSegStmt);
-
- READ_STRING_FIELD(servername);
- READ_STRING_FIELD(tablename);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AlterForeignServerStmt *
-_readAlterForeignServerStmt(void)
-{
- READ_LOCALS(AlterForeignServerStmt);
-
- READ_STRING_FIELD(servername);
- READ_STRING_FIELD(version);
- READ_NODE_FIELD(options);
- READ_BOOL_FIELD(has_version);
-
- READ_DONE();
-}
-
-static CreateStorageServerStmt *
-_readCreateStorageServerStmt(void)
-{
- READ_LOCALS(CreateStorageServerStmt);
-
- READ_STRING_FIELD(servername);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AlterStorageServerStmt *
-_readAlterStorageServerStmt(void)
-{
- READ_LOCALS(AlterStorageServerStmt);
-
- READ_STRING_FIELD(servername);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static DropStorageServerStmt *
-_readDropStorageServerStmt(void)
-{
- READ_LOCALS(DropStorageServerStmt);
-
- READ_STRING_FIELD(servername);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static CreateUserMappingStmt *
-_readCreateUserMappingStmt(void)
-{
- READ_LOCALS(CreateUserMappingStmt);
-
- READ_NODE_FIELD(user);
- READ_STRING_FIELD(servername);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AlterUserMappingStmt *
-_readAlterUserMappingStmt(void)
-{
- READ_LOCALS(AlterUserMappingStmt);
-
- READ_NODE_FIELD(user);
- READ_STRING_FIELD(servername);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static DropUserMappingStmt *
-_readDropUserMappingStmt(void)
-{
- READ_LOCALS(DropUserMappingStmt);
-
- READ_NODE_FIELD(user);
- READ_STRING_FIELD(servername);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static CreateStorageUserMappingStmt *
-_readCreateStorageUserMappingStmt(void)
-{
- READ_LOCALS(CreateStorageUserMappingStmt);
-
- READ_NODE_FIELD(user);
- READ_STRING_FIELD(servername);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AlterStorageUserMappingStmt *
-_readAlterStorageUserMappingStmt(void)
-{
- READ_LOCALS(AlterStorageUserMappingStmt);
-
- READ_NODE_FIELD(user);
- READ_STRING_FIELD(servername);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static DropStorageUserMappingStmt *
-_readDropStorageUserMappingStmt(void)
-{
- READ_LOCALS(DropStorageUserMappingStmt);
-
- READ_NODE_FIELD(user);
- READ_STRING_FIELD(servername);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static AccessPriv *
-_readAccessPriv(void)
-{
- READ_LOCALS(AccessPriv);
-
- READ_STRING_FIELD(priv_name);
- READ_NODE_FIELD(cols);
-
- READ_DONE();
-}
-
-static LockingClause *
-_readLockingClause(void)
-{
- READ_LOCALS(LockingClause);
-
- READ_NODE_FIELD(lockedRels);
- READ_ENUM_FIELD(strength, LockClauseStrength);
-
- READ_DONE();
-}
-
-static AggExprId *
-_readAggExprId(void)
-{
- READ_LOCALS(AggExprId);
- READ_DONE();
-}
-
-static RowIdExpr *
-_readRowIdExpr(void)
-{
- READ_LOCALS(RowIdExpr);
- READ_INT_FIELD(rowidexpr_id);
- READ_DONE();
-}
-
-static GpDropPartitionCmd *
-_readGpDropPartitionCmd(void)
-{
- READ_LOCALS(GpDropPartitionCmd);
- READ_NODE_FIELD(partid);
- READ_ENUM_FIELD(behavior, DropBehavior);
- READ_BOOL_FIELD(missing_ok);
- READ_DONE();
-}
-
-static GpSplitPartitionCmd *
-_readGpSplitPartitionCmd(void)
-{
- READ_LOCALS(GpSplitPartitionCmd);
-
- READ_NODE_FIELD(partid);
- READ_NODE_FIELD(start);
- READ_NODE_FIELD(end);
- READ_NODE_FIELD(at);
- READ_NODE_FIELD(arg2);
-
- READ_DONE();
-}
-
-static StatsElem *
-_readStatsElem(void)
-{
- READ_LOCALS(StatsElem);
-
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(expr);
-
- READ_DONE();
-}
-
-static CreateStatsStmt *
-_readCreateStatsStmt(void)
-{
- READ_LOCALS(CreateStatsStmt);
- READ_NODE_FIELD(defnames);
- READ_NODE_FIELD(stat_types);
- READ_NODE_FIELD(exprs);
- READ_NODE_FIELD(relations);
- READ_STRING_FIELD(stxcomment);
- READ_BOOL_FIELD(transformed);
- READ_BOOL_FIELD(if_not_exists);
-
- READ_DONE();
-}
-
-static CreateTaskStmt *
-_readCreateTaskStmt(void)
-{
- READ_LOCALS(CreateTaskStmt);
-
- READ_STRING_FIELD(taskname);
- READ_STRING_FIELD(schedule);
- READ_STRING_FIELD(sql);
- READ_NODE_FIELD(options);
- READ_BOOL_FIELD(if_not_exists);
-
- READ_DONE();
-}
-
-static AlterTaskStmt *
-_readAlterTaskStmt(void)
-{
- READ_LOCALS(AlterTaskStmt);
-
- READ_STRING_FIELD(taskname);
- READ_NODE_FIELD(options);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static DropTaskStmt *
-_readDropTaskStmt(void)
-{
- READ_LOCALS(DropTaskStmt);
-
- READ_STRING_FIELD(taskname);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static EphemeralNamedRelationInfo *
-_readEphemeralNamedRelationInfo(void)
-{
- READ_LOCALS(EphemeralNamedRelationInfo);
-
- READ_STRING_FIELD(name);
- READ_OID_FIELD(reliddesc);
- READ_INT_FIELD(natts);
-
- local_node->tuple = CreateTemplateTupleDesc(local_node->natts);
-
- READ_INT_FIELD(tuple->natts);
- if (local_node->tuple->natts > 0)
- {
- int i = 0;
- for (; i < local_node->tuple->natts; i++)
- {
- memcpy(&local_node->tuple->attrs[i], read_str_ptr, ATTRIBUTE_FIXED_PART_SIZE);
- read_str_ptr+=ATTRIBUTE_FIXED_PART_SIZE;
- }
- }
-
- READ_OID_FIELD(tuple->tdtypeid);
- READ_INT_FIELD(tuple->tdtypmod);
- READ_INT_FIELD(tuple->tdrefcount);
-
- READ_ENUM_FIELD(enrtype, EphemeralNameRelationType);
- READ_FLOAT_FIELD(enrtuples);
-
- READ_DONE();
-}
-
-static void *
-_readAlterDatabaseStmt(void)
-{
- READ_LOCALS(AlterDatabaseStmt);
-
- READ_STRING_FIELD(dbname);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(tags);
- READ_BOOL_FIELD(unsettag);
-
- READ_DONE();
-}
-
-static CreateDirectoryTableStmt *
-_readCreateDirectoryTableStmt(void)
-{
- READ_LOCALS(CreateDirectoryTableStmt);
-
- _readCreateStmt_common(&local_node->base);
-
- READ_STRING_FIELD(tablespacename);
- READ_STRING_FIELD(location);
-
- READ_DONE();
-}
-
-static AlterDirectoryTableStmt *
-_readAlterDirectoryTableStmt(void)
-{
- READ_LOCALS(AlterDirectoryTableStmt);
-
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(tags);
- READ_BOOL_FIELD(unsettag);
-
- READ_DONE();
-}
-
-static void *
-readNodeBinary(void)
-{
- void *return_value;
- NodeTag nt;
- int16 ntt;
-
- memcpy(&ntt, read_str_ptr,sizeof(int16));
- read_str_ptr+=sizeof(int16);
- nt = (NodeTag) ntt;
-
- if (nt==0)
- return NULL;
-
- if (nt == T_List || nt == T_IntList || nt == T_OidList)
- {
- List *l = NIL;
- int listsize = 0;
- int i;
-
- memcpy(&listsize,read_str_ptr,sizeof(int));
- read_str_ptr+=sizeof(int);
-
- if (nt == T_IntList)
- {
- int val;
- for (i = 0; i < listsize; i++)
- {
- memcpy(&val,read_str_ptr,sizeof(int));
- read_str_ptr+=sizeof(int);
- l = lappend_int(l, val);
- }
- }
- else if (nt == T_OidList)
- {
- Oid val;
- for (i = 0; i < listsize; i++)
- {
- memcpy(&val,read_str_ptr,sizeof(Oid));
- read_str_ptr+=sizeof(Oid);
- l = lappend_oid(l, val);
- }
- }
- else
- {
-
- for (i = 0; i < listsize; i++)
- {
- l = lappend(l, readNodeBinary());
- }
- }
- Assert(l->length==listsize);
-
- return l;
- }
-
- switch(nt)
- {
- case T_PlannedStmt:
- return_value = _readPlannedStmt();
- break;
- case T_QueryDispatchDesc:
- return_value = _readQueryDispatchDesc();
- break;
- case T_OidAssignment:
- return_value = _readOidAssignment();
- break;
- case T_Plan:
- return_value = _readPlan();
- break;
- case T_Result:
- return_value = _readResult();
- break;
- case T_ProjectSet:
- return_value = _readProjectSet();
- break;
- case T_Append:
- return_value = _readAppend();
- break;
- case T_MergeAppend:
- return_value = _readMergeAppend();
- break;
- case T_Sequence:
- return_value = _readSequence();
- break;
- case T_RecursiveUnion:
- return_value = _readRecursiveUnion();
- break;
- case T_BitmapAnd:
- return_value = _readBitmapAnd();
- break;
- case T_BitmapOr:
- return_value = _readBitmapOr();
- break;
- case T_Gather:
- return_value = _readGather();
- break;
- case T_GatherMerge:
- return_value = _readGatherMerge();
- break;
- case T_Scan:
- return_value = _readScan();
- break;
- case T_SeqScan:
- return_value = _readSeqScan();
- break;
- case T_DynamicSeqScan:
- return_value = _readDynamicSeqScan();
- break;
- case T_ExternalScanInfo:
- return_value = _readExternalScanInfo();
- break;
- case T_IndexScan:
- return_value = _readIndexScan();
- break;
- case T_IndexOnlyScan:
- return_value = _readIndexOnlyScan();
- break;
- case T_DynamicIndexScan:
- return_value = _readDynamicIndexScan();
- break;
- case T_DynamicIndexOnlyScan:
- return_value = _readDynamicIndexOnlyScan();
- break;
- case T_BitmapIndexScan:
- return_value = _readBitmapIndexScan();
- break;
- case T_DynamicBitmapIndexScan:
- return_value = _readDynamicBitmapIndexScan();
- break;
- case T_BitmapHeapScan:
- return_value = _readBitmapHeapScan();
- break;
- case T_DynamicBitmapHeapScan:
- return_value = _readDynamicBitmapHeapScan();
- break;
- case T_CteScan:
- return_value = _readCteScan();
- break;
- case T_NamedTuplestoreScan:
- return_value = _readNamedTuplestoreScan();
- break;
- case T_WorkTableScan:
- return_value = _readWorkTableScan();
- break;
- case T_TidScan:
- return_value = _readTidScan();
- break;
- case T_TidRangeScan:
- return_value = _readTidRangeScan();
- break;
- case T_SubqueryScan:
- return_value = _readSubqueryScan();
- break;
- case T_FunctionScan:
- return_value = _readFunctionScan();
- break;
- case T_TableFuncScan:
- return_value = _readTableFuncScan();
- break;
- case T_ValuesScan:
- return_value = _readValuesScan();
- break;
- case T_ForeignScan:
- return_value = _readForeignScan();
- break;
- case T_DynamicForeignScan:
- return_value = _readDynamicForeignScan();
- break;
- case T_CustomScan:
- return_value = _readCustomScan();
- break;
- case T_SampleScan:
- return_value = _readSampleScan();
- break;
- case T_Join:
- return_value = _readJoin();
- break;
- case T_NestLoop:
- return_value = _readNestLoop();
- break;
- case T_MergeJoin:
- return_value = _readMergeJoin();
- break;
- case T_HashJoin:
- return_value = _readHashJoin();
- break;
- case T_Agg:
- return_value = _readAgg();
- break;
- case T_TupleSplit:
- return_value = _readTupleSplit();
- break;
- case T_DQAExpr:
- return_value = _readDQAExpr();
- break;
- case T_WindowAgg:
- return_value = _readWindowAgg();
- break;
- case T_WindowHashAgg:
- return_value = _readWindowHashAgg();
- break;
- case T_TableFunctionScan:
- return_value = _readTableFunctionScan();
- break;
- case T_Material:
- return_value = _readMaterial();
- break;
- case T_Memoize:
- return_value = _readMemoize();
- break;
- case T_ShareInputScan:
- return_value = _readShareInputScan();
- break;
- case T_Sort:
- return_value = _readSort();
- break;
- case T_IncrementalSort:
- return_value = _readIncrementalSort();
- break;
- case T_Unique:
- return_value = _readUnique();
- break;
- case T_SetOp:
- return_value = _readSetOp();
- break;
- case T_RuntimeFilter:
- return_value = _readRuntimeFilter();
- break;
- case T_Limit:
- return_value = _readLimit();
- break;
- case T_NestLoopParam:
- return_value = _readNestLoopParam();
- break;
- case T_PlanRowMark:
- return_value = _readPlanRowMark();
- break;
- case T_PartitionPruneInfo:
- return_value = _readPartitionPruneInfo();
- break;
- case T_PartitionedRelPruneInfo:
- return_value = _readPartitionedRelPruneInfo();
- break;
- case T_PartitionPruneStepOp:
- return_value = _readPartitionPruneStepOp();
- break;
- case T_PartitionPruneStepCombine:
- return_value = _readPartitionPruneStepCombine();
- break;
- case T_PlanInvalItem:
- return_value = _readPlanInvalItem();
- break;
- case T_Hash:
- return_value = _readHash();
- break;
- case T_Motion:
- return_value = _readMotion();
- break;
- case T_SplitUpdate:
- return_value = _readSplitUpdate();
- break;
- case T_SplitMerge:
- return_value = _readSplitMerge();
- break;
- case T_AssertOp:
- return_value = _readAssertOp();
- break;
- case T_PartitionSelector:
- return_value = _readPartitionSelector();
- break;
- case T_GpPartDefElem:
- return_value = _readGpPartDefElem();
- break;
- case T_Alias:
- return_value = _readAlias();
- break;
- case T_RangeVar:
- return_value = _readRangeVar();
- break;
- case T_TableFunc:
- return_value = _readTableFunc();
- break;
- case T_IntoClause:
- return_value = _readIntoClause();
- break;
- case T_CopyIntoClause:
- return_value = _readCopyIntoClause();
- break;
- case T_RefreshClause:
- return_value = _readRefreshClause();
- break;
- case T_Var:
- return_value = _readVar();
- break;
- case T_Const:
- return_value = _readConst();
- break;
- case T_Param:
- return_value = _readParam();
- break;
- case T_Aggref:
- return_value = _readAggref();
- break;
- case T_GroupingFunc:
- return_value = _readGroupingFunc();
- break;
- case T_GroupId:
- return_value = _readGroupId();
- break;
- case T_GroupingSetId:
- return_value = _readGroupingSetId();
- break;
- case T_WindowFunc:
- return_value = _readWindowFunc();
- break;
- case T_SubscriptingRef:
- return_value = _readSubscriptingRef();
- break;
- case T_FuncExpr:
- return_value = _readFuncExpr();
- break;
- case T_NamedArgExpr:
- return_value = _readNamedArgExpr();
- break;
- case T_OpExpr:
- return_value = _readOpExpr();
- break;
- case T_DistinctExpr:
- return_value = _readDistinctExpr();
- break;
- case T_ScalarArrayOpExpr:
- return_value = _readScalarArrayOpExpr();
- break;
- case T_BoolExpr:
- return_value = _readBoolExpr();
- break;
- case T_SubLink:
- return_value = _readSubLink();
- break;
- case T_SubPlan:
- return_value = _readSubPlan();
- break;
- case T_AlternativeSubPlan:
- return_value = _readAlternativeSubPlan();
- break;
- case T_FieldSelect:
- return_value = _readFieldSelect();
- break;
- case T_FieldStore:
- return_value = _readFieldStore();
- break;
- case T_RelabelType:
- return_value = _readRelabelType();
- break;
- case T_CoerceViaIO:
- return_value = _readCoerceViaIO();
- break;
- case T_ArrayCoerceExpr:
- return_value = _readArrayCoerceExpr();
- break;
- case T_ConvertRowtypeExpr:
- return_value = _readConvertRowtypeExpr();
- break;
- case T_CollateExpr:
- return_value = _readCollateExpr();
- break;
- case T_CaseExpr:
- return_value = _readCaseExpr();
- break;
- case T_CaseWhen:
- return_value = _readCaseWhen();
- break;
- case T_CaseTestExpr:
- return_value = _readCaseTestExpr();
- break;
- case T_ArrayExpr:
- return_value = _readArrayExpr();
- break;
- case T_A_ArrayExpr:
- return_value = _readA_ArrayExpr();
- break;
- case T_RowExpr:
- return_value = _readRowExpr();
- break;
- case T_RowCompareExpr:
- return_value = _readRowCompareExpr();
- break;
- case T_CoalesceExpr:
- return_value = _readCoalesceExpr();
- break;
- case T_MinMaxExpr:
- return_value = _readMinMaxExpr();
- break;
- case T_NullIfExpr:
- return_value = _readNullIfExpr();
- break;
- case T_NullTest:
- return_value = _readNullTest();
- break;
- case T_BooleanTest:
- return_value = _readBooleanTest();
- break;
- case T_SQLValueFunction:
- return_value = _readSQLValueFunction();
- break;
- case T_XmlExpr:
- return_value = _readXmlExpr();
- break;
- case T_CoerceToDomain:
- return_value = _readCoerceToDomain();
- break;
- case T_CoerceToDomainValue:
- return_value = _readCoerceToDomainValue();
- break;
- case T_SetToDefault:
- return_value = _readSetToDefault();
- break;
- case T_CurrentOfExpr:
- return_value = _readCurrentOfExpr();
- break;
- case T_NextValueExpr:
- return_value = _readNextValueExpr();
- break;
- case T_InferenceElem:
- return_value = _readInferenceElem();
- break;
- case T_TargetEntry:
- return_value = _readTargetEntry();
- break;
- case T_RangeTblRef:
- return_value = _readRangeTblRef();
- break;
- case T_RangeTblFunction:
- return_value = _readRangeTblFunction();
- break;
- case T_TableSampleClause:
- return_value = _readTableSampleClause();
- break;
- case T_JoinExpr:
- return_value = _readJoinExpr();
- break;
- case T_FromExpr:
- return_value = _readFromExpr();
- break;
- case T_OnConflictExpr:
- return_value = _readOnConflictExpr();
- break;
- case T_AppendRelInfo:
- return_value = _readAppendRelInfo();
- break;
- case T_GrantStmt:
- return_value = _readGrantStmt();
- break;
- case T_AccessPriv:
- return_value = _readAccessPriv();
- break;
- case T_ObjectWithArgs:
- return_value = _readObjectWithArgs();
- break;
- case T_GrantRoleStmt:
- return_value = _readGrantRoleStmt();
- break;
- case T_LockStmt:
- return_value = _readLockStmt();
- break;
-
- case T_PartitionSpec:
- return_value = _readPartitionSpec();
- break;
- case T_PartitionElem:
- return_value = _readPartitionElem();
- break;
- case T_PartitionRangeDatum:
- return_value = _readPartitionRangeDatum();
- break;
- case T_PartitionCmd:
- return_value = _readPartitionCmd();
- break;
- case T_GpAlterPartitionId:
- return_value = _readGpAlterPartitionId();
- break;
- case T_DistributionKeyElem:
- return_value = _readDistributionKeyElem();
- break;
- case T_PartitionBoundSpec:
- return_value = _readPartitionBoundSpec();
- break;
- case T_RestrictInfo:
- return_value = _readRestrictInfo();
- break;
- case T_ExtensibleNode:
- return_value = _readExtensibleNode();
- break;
- case T_CreateStmt:
- return_value = _readCreateStmt();
- break;
- case T_CreateForeignTableStmt:
- return_value = _readCreateForeignTableStmt();
- break;
- case T_ColumnReferenceStorageDirective:
- return_value = _readColumnReferenceStorageDirective();
- break;
- case T_SegfileMapNode:
- return_value = _readSegfileMapNode();
- break;
- case T_ExtTableTypeDesc:
- return_value = _readExtTableTypeDesc();
- break;
- case T_CreateExternalStmt:
- return_value = _readCreateExternalStmt();
- break;
- case T_CreateExtensionStmt:
- return_value = _readCreateExtensionStmt();
- break;
- case T_IndexStmt:
- return_value = _readIndexStmt();
- break;
- case T_ReindexStmt:
- return_value = _readReindexStmt();
- break;
- case T_ReindexIndexInfo:
- return_value = _readReindexIndexInfo();
- break;
-
- case T_ConstraintsSetStmt:
- return_value = _readConstraintsSetStmt();
- break;
-
- case T_CreateFunctionStmt:
- return_value = _readCreateFunctionStmt();
- break;
- case T_FunctionParameter:
- return_value = _readFunctionParameter();
- break;
- case T_AlterFunctionStmt:
- return_value = _readAlterFunctionStmt();
- break;
-
- case T_DefineStmt:
- return_value = _readDefineStmt();
- break;
-
- case T_CompositeTypeStmt:
- return_value = _readCompositeTypeStmt();
- break;
- case T_CreateEnumStmt:
- return_value = _readCreateEnumStmt();
- break;
- case T_CreateRangeStmt:
- return_value = _readCreateRangeStmt();
- break;
- case T_AlterEnumStmt:
- return_value = _readAlterEnumStmt();
- break;
- case T_CreateCastStmt:
- return_value = _readCreateCastStmt();
- break;
- case T_CreateOpClassStmt:
- return_value = _readCreateOpClassStmt();
- break;
- case T_CreateOpClassItem:
- return_value = _readCreateOpClassItem();
- break;
- case T_CreateOpFamilyStmt:
- return_value = _readCreateOpFamilyStmt();
- break;
- case T_CreateStatsStmt:
- return_value = _readCreateStatsStmt();
- break;
- case T_AlterOpFamilyStmt:
- return_value = _readAlterOpFamilyStmt();
- break;
- case T_CreateConversionStmt:
- return_value = _readCreateConversionStmt();
- break;
- case T_ViewStmt:
- return_value = _readViewStmt();
- break;
- case T_RuleStmt:
- return_value = _readRuleStmt();
- break;
- case T_DropStmt:
- return_value = _readDropStmt();
- break;
-
- case T_DropOwnedStmt:
- return_value = _readDropOwnedStmt();
- break;
- case T_ReassignOwnedStmt:
- return_value = _readReassignOwnedStmt();
- break;
-
- case T_TruncateStmt:
- return_value = _readTruncateStmt();
- break;
-
- case T_ReplicaIdentityStmt:
- return_value = _readReplicaIdentityStmt();
- break;
- case T_AlterTableStmt:
- return_value = _readAlterTableStmt();
- break;
- case T_AlterTableCmd:
- return_value = _readAlterTableCmd();
- break;
- case T_AlteredTableInfo:
- return_value = _readAlteredTableInfo();
- break;
- case T_NewConstraint:
- return_value = _readNewConstraint();
- break;
- case T_NewColumnValue:
- return_value = _readNewColumnValue();
- break;
-
- case T_CreateRoleStmt:
- return_value = _readCreateRoleStmt();
- break;
- case T_DropRoleStmt:
- return_value = _readDropRoleStmt();
- break;
- case T_AlterRoleStmt:
- return_value = _readAlterRoleStmt();
- break;
- case T_AlterRoleSetStmt:
- return_value = _readAlterRoleSetStmt();
- break;
-
- case T_CreateProfileStmt:
- return_value = _readCreateProfileStmt();
- break;
- case T_AlterProfileStmt:
- return_value = _readAlterProfileStmt();
- break;
- case T_DropProfileStmt:
- return_value = _readDropProfileStmt();
- break;
-
- case T_AlterObjectDependsStmt:
- return_value = _readAlterObjectDependsStmt();
- break;
-
- case T_AlterSystemStmt:
- return_value = _readAlterSystemStmt();
- break;
-
- case T_AlterObjectSchemaStmt:
- return_value = _readAlterObjectSchemaStmt();
- break;
-
- case T_AlterOwnerStmt:
- return_value = _readAlterOwnerStmt();
- break;
-
- case T_RenameStmt:
- return_value = _readRenameStmt();
- break;
-
- case T_CreateSeqStmt:
- return_value = _readCreateSeqStmt();
- break;
- case T_AlterSeqStmt:
- return_value = _readAlterSeqStmt();
- break;
- case T_ClusterStmt:
- return_value = _readClusterStmt();
- break;
- case T_CreatedbStmt:
- return_value = _readCreatedbStmt();
- break;
- case T_DropdbStmt:
- return_value = _readDropdbStmt();
- break;
- case T_CreateDomainStmt:
- return_value = _readCreateDomainStmt();
- break;
- case T_AlterDomainStmt:
- return_value = _readAlterDomainStmt();
- break;
- case T_AlterDefaultPrivilegesStmt:
- return_value = _readAlterDefaultPrivilegesStmt();
- break;
-
- case T_NotifyStmt:
- return_value = _readNotifyStmt();
- break;
- case T_DeclareCursorStmt:
- return_value = _readDeclareCursorStmt();
- break;
-
- case T_SingleRowErrorDesc:
- return_value = _readSingleRowErrorDesc();
- break;
- case T_CopyStmt:
- return_value = _readCopyStmt();
- break;
- case T_SelectStmt:
- return_value = _readSelectStmt();
- break;
- case T_InsertStmt:
- return_value = _readInsertStmt();
- break;
- case T_DeleteStmt:
- return_value = _readDeleteStmt();
- break;
- case T_UpdateStmt:
- return_value = _readUpdateStmt();
- break;
- case T_ColumnDef:
- return_value = _readColumnDef();
- break;
- case T_TypeName:
- return_value = _readTypeName();
- break;
- case T_SortBy:
- return_value = _readSortBy();
- break;
- case T_TypeCast:
- return_value = _readTypeCast();
- break;
- case T_CollateClause:
- return_value = _readCollateClause();
- break;
- case T_IndexElem:
- return_value = _readIndexElem();
- break;
- case T_Query:
- return_value = _readQuery();
- break;
- case T_WithCheckOption:
- return_value = _readWithCheckOption();
- break;
- case T_SortGroupClause:
- return_value = _readSortGroupClause();
- break;
- case T_DMLActionExpr:
- return_value = _readDMLActionExpr();
- break;
- case T_GroupingSet:
- return_value = _readGroupingSet();
- break;
- case T_WindowClause:
- return_value = _readWindowClause();
- break;
- case T_RowMarkClause:
- return_value = _readRowMarkClause();
- break;
- case T_CTESearchClause:
- return_value = _readCTESearchClause();
- break;
- case T_CTECycleClause:
- return_value = _readCTECycleClause();
- break;
- case T_WithClause:
- return_value = _readWithClause();
- break;
- case T_CommonTableExpr:
- return_value = _readCommonTableExpr();
- break;
- case T_RoleSpec:
- return_value = _readRoleSpec();
- break;
- case T_SetOperationStmt:
- return_value = _readSetOperationStmt();
- break;
- case T_RangeTblEntry:
- return_value = _readRangeTblEntry();
- break;
- case T_A_Expr:
- return_value = _readAExpr();
- break;
- case T_ColumnRef:
- return_value = _readColumnRef();
- break;
- case T_ParamRef:
- return_value = _readParamRef();
- break;
- case T_Integer:
- return_value = _readInteger();
- break;
- case T_Boolean:
- return_value = _readBoolean();
- break;
- case T_Float:
- return_value = _readFloat();
- break;
- case T_String:
- return_value = _readString();
- break;
- case T_BitString:
- return_value = _readBitString();
- break;
- case T_A_Const:
- return_value = _readAConst();
- break;
- case T_A_Star:
- return_value = _readA_Star();
- break;
- case T_A_Indices:
- return_value = _readA_Indices();
- break;
- case T_A_Indirection:
- return_value = _readA_Indirection();
- break;
- case T_ResTarget:
- return_value = _readResTarget();
- break;
- case T_MultiAssignRef:
- return_value = _readMultiAssignRef();
- break;
- case T_Constraint:
- return_value = _readConstraint();
- break;
- case T_FuncCall:
- return_value = _readFuncCall();
- break;
- case T_DefElem:
- return_value = _readDefElem();
- break;
- case T_CreateSchemaStmt:
- return_value = _readCreateSchemaStmt();
- break;
- case T_AlterSchemaStmt:
- return_value = _readAlterSchemaStmt();
- break;
- case T_CreateTagStmt:
- return_value = _readCreateTagStmt();
- break;
- case T_AlterTagStmt:
- return_value = _readAlterTagStmt();
- break;
- case T_DropTagStmt:
- return_value = _readDropTagStmt();
- break;
- case T_CreatePLangStmt:
- return_value = _readCreatePLangStmt();
- break;
- case T_VacuumStmt:
- return_value = _readVacuumStmt();
- break;
- case T_VacuumRelation:
- return_value = _readVacuumRelation();
- break;
- case T_CdbProcess:
- return_value = _readCdbProcess();
- break;
- case T_SliceTable:
- return_value = _readSliceTable();
- break;
- case T_CursorPosInfo:
- return_value = _readCursorPosInfo();
- break;
- case T_VariableSetStmt:
- return_value = _readVariableSetStmt();
- break;
- case T_CreateTrigStmt:
- return_value = _readCreateTrigStmt();
- break;
- case T_TriggerTransition:
- return_value = _readTriggerTransition();
- break;
-
- case T_CreateTableSpaceStmt:
- return_value = _readCreateTableSpaceStmt();
- break;
- case T_AlterTableSpaceOptionsStmt:
- return_value = _readAlterTableSpaceOptionsStmt();
- break;
- case T_DropTableSpaceStmt:
- return_value = _readDropTableSpaceStmt();
- break;
-
- case T_CreateQueueStmt:
- return_value = _readCreateQueueStmt();
- break;
- case T_AlterQueueStmt:
- return_value = _readAlterQueueStmt();
- break;
- case T_DropQueueStmt:
- return_value = _readDropQueueStmt();
- break;
-
- case T_CreateResourceGroupStmt:
- return_value = _readCreateResourceGroupStmt();
- break;
- case T_DropResourceGroupStmt:
- return_value = _readDropResourceGroupStmt();
- break;
- case T_AlterResourceGroupStmt:
- return_value = _readAlterResourceGroupStmt();
- break;
-
- case T_CommentStmt:
- return_value = _readCommentStmt();
- break;
- case T_DenyLoginInterval:
- return_value = _readDenyLoginInterval();
- break;
- case T_DenyLoginPoint:
- return_value = _readDenyLoginPoint();
- break;
-
- case T_TableValueExpr:
- return_value = _readTableValueExpr();
- break;
-
- case T_AlterTypeStmt:
- return_value = _readAlterTypeStmt();
- break;
- case T_AlterExtensionStmt:
- return_value = _readAlterExtensionStmt();
- break;
- case T_AlterExtensionContentsStmt:
- return_value = _readAlterExtensionContentsStmt();
- break;
-
- case T_TupleDescNode:
- return_value = _readTupleDescNode();
- break;
- case T_SerializedParams:
- return_value = _readSerializedParams();
- break;
-
- case T_AlterTSConfigurationStmt:
- return_value = _readAlterTSConfigurationStmt();
- break;
- case T_AlterTSDictionaryStmt:
- return_value = _readAlterTSDictionaryStmt();
- break;
-
- case T_CookedConstraint:
- return_value = _readCookedConstraint();
- break;
-
- case T_DropUserMappingStmt:
- return_value = _readDropUserMappingStmt();
- break;
- case T_AlterUserMappingStmt:
- return_value = _readAlterUserMappingStmt();
- break;
- case T_CreateUserMappingStmt:
- return_value = _readCreateUserMappingStmt();
- break;
- case T_CreateStorageUserMappingStmt:
- return_value = _readCreateStorageUserMappingStmt();
- break;
- case T_AlterStorageUserMappingStmt:
- return_value = _readAlterStorageUserMappingStmt();
- break;
- case T_DropStorageUserMappingStmt:
- return_value = _readDropStorageUserMappingStmt();
- break;
- case T_AlterForeignServerStmt:
- return_value = _readAlterForeignServerStmt();
- break;
- case T_CreateForeignServerStmt:
- return_value = _readCreateForeignServerStmt();
- break;
- case T_AddForeignSegStmt:
- return_value = _readAddForeignSegStmt();
- break;
- case T_AlterFdwStmt:
- return_value = _readAlterFdwStmt();
- break;
- case T_CreateStorageServerStmt:
- return_value = _readCreateStorageServerStmt();
- break;
- case T_AlterStorageServerStmt:
- return_value = _readAlterStorageServerStmt();
- break;
- case T_DropStorageServerStmt:
- return_value = _readDropStorageServerStmt();
- break;
- case T_CreateFdwStmt:
- return_value = _readCreateFdwStmt();
- break;
- case T_ModifyTable:
- return_value = _readModifyTable();
- break;
- case T_LockRows:
- return_value = _readLockRows();
- break;
- case T_GpPolicy:
- return_value = _readGpPolicy();
- break;
- case T_DistributedBy:
- return_value = _readDistributedBy();
- break;
- case T_ImportForeignSchemaStmt:
- return_value = _readImportForeignSchemaStmt();
- break;
- case T_AlterTableMoveAllStmt:
- return_value = _readAlterTableMoveAllStmt();
- break;
-
- case T_CreatePublicationStmt:
- return_value = _readCreatePublicationStmt();
- break;
- case T_AlterPublicationStmt:
- return_value = _readAlterPublicationStmt();
- break;
- case T_CreateSubscriptionStmt:
- return_value = _readCreateSubscriptionStmt();
- break;
- case T_DropSubscriptionStmt:
- return_value = _readDropSubscriptionStmt();
- break;
- case T_AlterSubscriptionStmt:
- return_value = _readAlterSubscriptionStmt();
- break;
-
- case T_CreatePolicyStmt:
- return_value = _readCreatePolicyStmt();
- break;
- case T_AlterPolicyStmt:
- return_value = _readAlterPolicyStmt();
- break;
- case T_CreateTransformStmt:
- return_value = _readCreateTransformStmt();
- break;
- case T_CreateAmStmt:
- return_value = _readCreateAmStmt();
- break;
- case T_LockingClause:
- return_value = _readLockingClause();
- break;
- case T_AggExprId:
- return_value = _readAggExprId();
- break;
- case T_RowIdExpr:
- return_value = _readRowIdExpr();
- break;
- case T_GpDropPartitionCmd:
- return_value = _readGpDropPartitionCmd();
- break;
- case T_GpPartitionRangeSpec:
- return_value = _readGpPartitionRangeSpec();
- break;
- case T_GpPartitionRangeItem:
- return_value = _readGpPartitionRangeItem();
- break;
- case T_GpPartitionListSpec:
- return_value = _readGpPartitionListSpec();
- break;
- case T_GpAlterPartitionCmd:
- return_value = _readGpAlterPartitionCmd();
- break;
- case T_GpPartitionDefinition:
- return_value = _readGpPartitionDefinition();
- break;
- case T_GpSplitPartitionCmd:
- return_value = _readGpSplitPartitionCmd();
- break;
- case T_ReturnStmt:
- return_value = _readReturnStmt();
- break;
- case T_StatsElem:
- return_value = _readStatsElem();
- break;
- case T_EphemeralNamedRelationInfo:
- return_value = _readEphemeralNamedRelationInfo();
- break;
- case T_AlterDatabaseStmt:
- return_value = _readAlterDatabaseStmt();
- break;
- case T_CreateDirectoryTableStmt:
- return_value = _readCreateDirectoryTableStmt();
- break;
- case T_AlterDirectoryTableStmt:
- return_value = _readAlterDirectoryTableStmt();
- break;
- case T_DropDirectoryTableStmt:
- return_value = _readDropDirectoryTableStmt();
- break;
- case T_CreateTaskStmt:
- return_value = _readCreateTaskStmt();
- break;
- case T_AlterTaskStmt:
- return_value = _readAlterTaskStmt();
- break;
- case T_DropTaskStmt:
- return_value = _readDropTaskStmt();
- break;
- case T_RTEPermissionInfo:
- return_value = _readRTEPermissionInfo();
- break;
- case T_MergeAction:
- return_value = _readMergeAction();
- break;
- case T_PublicationObjSpec:
- return_value = _readPublicationObjSpec();
- break;
- case T_PublicationTable:
- return_value = _readPublicationTable();
- break;
- case T_WindowDef:
- return_value = _readWindowDef();
- break;
- case T_JsonConstructorExpr:
- return_value = _readJsonConstructorExpr();
- break;
- case T_JsonIsPredicate:
- return_value = _readJsonIsPredicate();
- break;
- case T_JsonReturning:
- return_value = _readJsonReturning();
- break;
- case T_JsonValueExpr:
- return_value = _readJsonValueExpr();
- break;
- case T_JsonFormat:
- return_value = _readJsonFormat();
- break;
- case T_PlaceHolderVar:
- return_value = _readPlaceHolderVar();
- break;
- default:
- return_value = NULL; /* keep the compiler silent */
- elog(ERROR, "could not deserialize unrecognized node type: %d",
- (int) nt);
- break;
+ default:
+ return_value = NULL; /* keep the compiler silent */
+ elog(ERROR, "could not deserialize unrecognized node type: %d",
+ (int) nt);
+ break;
}
return (Node *)return_value;
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 59612527a32..7f93c8e8e76 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -13,25 +13,12 @@
* src/backend/nodes/readfuncs.c
*
* NOTES
- * Path nodes do not have any readfuncs support, because we never
- * have occasion to read them in. (There was once code here that
- * claimed to read them, but it was broken as well as unused.) We
- * never read executor state trees, either.
- *
- * But due to the use of this routine in older version of CDB/MPP/GPDB,
- * there are routines that do read those types of nodes (unlike PostgreSQL)
- * Those routines never actually get called.
- *
- * We could go back and remove them, but they don't hurt anything.
- *
- * The purpose of these routines is to read serialized trees that were stored
- * in the catalog, and reconstruct the trees.
- *
* Parse location fields are written out by outfuncs.c, but only for
* debugging use. When reading a location field, we normally discard
* the stored value and set the location field to -1 (ie, "unknown").
* This is because nodes coming from a stored rule should not be thought
* to have a known location in the current query's text.
+ *
* However, if restore_location_fields is true, we do restore location
* fields from the string. This is currently intended only for use by the
* WRITE_READ_PARSE_PLAN_TREES test code, which doesn't want to cause
@@ -43,24 +30,12 @@
#include
-#include "fmgr.h"
#include "miscadmin.h"
-#include "nodes/extensible.h"
-#include "nodes/parsenodes.h"
-#include "nodes/plannodes.h"
-#include "nodes/readfuncs.h"
-#include "utils/builtins.h"
-
-#include "cdb/cdbgang.h"
+#include "executor/execdesc.h"
#include "nodes/altertablenodes.h"
+#include "nodes/bitmapset.h"
+#include "nodes/readfuncs.h"
-/*
- * readfuncs.c is compiled normally into readfuncs.o, but it's also
- * #included from readfast.c. When #included, readfuncs.c defines
- * COMPILING_BINARY_FUNCS, and provides replacements READ_* macros. See
- * comments at top of readfast.c.
- */
-#ifndef COMPILING_BINARY_FUNCS
/*
* Macros to simplify reading of different kinds of fields. Use these
@@ -211,13 +186,20 @@
#define strtobool(x) ((*(x) == 't') ? true : false)
-#define nullable_string(token,length) \
- ((length) == 0 ? NULL : debackslash(token, length))
-
+static char *
+nullable_string(const char *token, int length)
+{
+ /* outToken emits <> for NULL, and pg_strtok makes that an empty string */
+ if (length == 0)
+ return NULL;
+ /* outToken emits "" for empty string */
+ if (length == 2 && token[0] == '"' && token[1] == '"')
+ return pstrdup("");
+ /* otherwise, we must remove protective backslashes added by outToken */
+ return debackslash(token, length);
+}
-#endif /* COMPILING_BINARY_FUNCS */
-#ifndef COMPILING_BINARY_FUNCS
/*
* _readBitmapset
*/
@@ -260,7 +242,8 @@ _readBitmapset(void)
}
/*
- * for use by extensions which define extensible nodes
+ * We export this function for use by extensions that define extensible nodes.
+ * That's somewhat historical, though, because calling nodeRead() will work.
*/
Bitmapset *
readBitmapset(void)
@@ -268,341 +251,14 @@ readBitmapset(void)
return _readBitmapset();
}
-/*
- * _readQuery
- */
-static Query *
-_readQuery(void)
-{
- READ_LOCALS(Query);
-
- READ_ENUM_FIELD(commandType, CmdType);
- READ_ENUM_FIELD(querySource, QuerySource);
- local_node->queryId = UINT64CONST(0); /* not saved in output format */
- READ_BOOL_FIELD(canSetTag);
- READ_NODE_FIELD(utilityStmt);
- READ_INT_FIELD(resultRelation);
- READ_BOOL_FIELD(hasAggs);
- READ_BOOL_FIELD(hasWindowFuncs);
- READ_BOOL_FIELD(hasTargetSRFs);
- READ_BOOL_FIELD(hasSubLinks);
- READ_BOOL_FIELD(hasDynamicFunctions);
- READ_BOOL_FIELD(hasFuncsWithExecRestrictions);
- READ_BOOL_FIELD(hasDistinctOn);
- READ_BOOL_FIELD(hasRecursive);
- READ_BOOL_FIELD(hasModifyingCTE);
- READ_BOOL_FIELD(hasForUpdate);
- READ_BOOL_FIELD(hasRowSecurity);
- READ_BOOL_FIELD(canOptSelectLockingClause);
- READ_BOOL_FIELD(isReturn);
- READ_NODE_FIELD(cteList);
- READ_NODE_FIELD(rtable);
- READ_NODE_FIELD(rteperminfos);
- READ_NODE_FIELD(jointree);
- READ_NODE_FIELD(mergeActionList);
- READ_BOOL_FIELD(mergeUseOuterJoin);
- READ_NODE_FIELD(targetList);
- READ_ENUM_FIELD(override, OverridingKind);
- READ_NODE_FIELD(onConflict);
- READ_NODE_FIELD(returningList);
- READ_NODE_FIELD(groupClause);
- READ_BOOL_FIELD(groupDistinct);
- READ_NODE_FIELD(groupingSets);
- READ_NODE_FIELD(havingQual);
- READ_NODE_FIELD(windowClause);
- READ_NODE_FIELD(distinctClause);
- READ_NODE_FIELD(sortClause);
- READ_NODE_FIELD(scatterClause);
- READ_BOOL_FIELD(isTableValueSelect);
- READ_NODE_FIELD(limitOffset);
- READ_NODE_FIELD(limitCount);
- READ_ENUM_FIELD(limitOption, LimitOption);
- READ_NODE_FIELD(rowMarks);
- READ_NODE_FIELD(setOperations);
- READ_NODE_FIELD(constraintDeps);
- READ_NODE_FIELD(withCheckOptions);
- local_node->intoPolicy = NULL;
- READ_BOOL_FIELD(parentStmtType);
- READ_LOCATION_FIELD(stmt_location);
- READ_INT_FIELD(stmt_len);
-
- READ_DONE();
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-/*
- * _readNotifyStmt
- */
-static NotifyStmt *
-_readNotifyStmt(void)
-{
- READ_LOCALS(NotifyStmt);
-
- READ_STRING_FIELD(conditionname);
- READ_STRING_FIELD(payload);
-
- READ_DONE();
-}
-
-/*
- * _readDeclareCursorStmt
- */
-static DeclareCursorStmt *
-_readDeclareCursorStmt(void)
-{
- READ_LOCALS(DeclareCursorStmt);
-
- READ_STRING_FIELD(portalname);
- READ_INT_FIELD(options);
- READ_NODE_FIELD(query);
-
- READ_DONE();
-}
-
-/*
- * _readWithCheckOption
- */
-static WithCheckOption *
-_readWithCheckOption(void)
-{
- READ_LOCALS(WithCheckOption);
-
- READ_ENUM_FIELD(kind, WCOKind);
- READ_STRING_FIELD(relname);
- READ_STRING_FIELD(polname);
- READ_NODE_FIELD(qual);
- READ_BOOL_FIELD(cascaded);
-
- READ_DONE();
-}
-
-/*
- * _readSortGroupClause
- */
-static SortGroupClause *
-_readSortGroupClause(void)
-{
- READ_LOCALS(SortGroupClause);
-
- READ_UINT_FIELD(tleSortGroupRef);
- READ_OID_FIELD(eqop);
- READ_OID_FIELD(sortop);
- READ_BOOL_FIELD(nulls_first);
- READ_BOOL_FIELD(hashable);
-
- READ_DONE();
-}
-
-/*
- * _readGroupingSet
- */
-static GroupingSet *
-_readGroupingSet(void)
-{
- READ_LOCALS(GroupingSet);
-
- READ_ENUM_FIELD(kind, GroupingSetKind);
- READ_NODE_FIELD(content);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readWindowClause
- */
-static WindowClause *
-_readWindowClause(void)
-{
- READ_LOCALS(WindowClause);
-
- READ_STRING_FIELD(name);
- READ_STRING_FIELD(refname);
- READ_NODE_FIELD(partitionClause);
- READ_NODE_FIELD(orderClause);
- READ_INT_FIELD(frameOptions);
- READ_NODE_FIELD(startOffset);
- READ_NODE_FIELD(endOffset);
- READ_OID_FIELD(startInRangeFunc);
- READ_OID_FIELD(endInRangeFunc);
- READ_OID_FIELD(inRangeColl);
- READ_BOOL_FIELD(inRangeAsc);
- READ_BOOL_FIELD(inRangeNullsFirst);
- READ_UINT_FIELD(winref);
- READ_BOOL_FIELD(copiedOrder);
-
- READ_DONE();
-}
-
-/*
- * _readRowMarkClause
- */
-static RowMarkClause *
-_readRowMarkClause(void)
-{
- READ_LOCALS(RowMarkClause);
-
- READ_UINT_FIELD(rti);
- READ_ENUM_FIELD(strength, LockClauseStrength);
- READ_ENUM_FIELD(waitPolicy, LockWaitPolicy);
- READ_BOOL_FIELD(pushedDown);
-
- READ_DONE();
-}
-
-/*
- * _readCommonTableExpr
- */
-static CommonTableExpr *
-_readCommonTableExpr(void)
-{
- READ_LOCALS(CommonTableExpr);
-
- READ_STRING_FIELD(ctename);
- READ_NODE_FIELD(aliascolnames);
- READ_ENUM_FIELD(ctematerialized, CTEMaterialize);
- READ_NODE_FIELD(ctequery);
- READ_NODE_FIELD(search_clause);
- READ_NODE_FIELD(cycle_clause);
- READ_LOCATION_FIELD(location);
- READ_BOOL_FIELD(cterecursive);
- READ_INT_FIELD(cterefcount);
- READ_NODE_FIELD(ctecolnames);
- READ_NODE_FIELD(ctecoltypes);
- READ_NODE_FIELD(ctecoltypmods);
- READ_NODE_FIELD(ctecolcollations);
-
- READ_DONE();
-}
-
-/*
- * _readSetOperationStmt
- */
-static SetOperationStmt *
-_readSetOperationStmt(void)
-{
- READ_LOCALS(SetOperationStmt);
-
- READ_ENUM_FIELD(op, SetOperation);
- READ_BOOL_FIELD(all);
- READ_NODE_FIELD(larg);
- READ_NODE_FIELD(rarg);
- READ_NODE_FIELD(colTypes);
- READ_NODE_FIELD(colTypmods);
- READ_NODE_FIELD(colCollations);
- READ_NODE_FIELD(groupClauses);
-
- READ_DONE();
-}
-
-
-/*
- * Stuff from primnodes.h.
- */
-
-static Alias *
-_readAlias(void)
-{
- READ_LOCALS(Alias);
-
- READ_STRING_FIELD(aliasname);
- READ_NODE_FIELD(colnames);
-
- READ_DONE();
-}
-
-static RangeVar *
-_readRangeVar(void)
-{
- READ_LOCALS(RangeVar);
-
- local_node->catalogname = NULL; /* not currently saved in output format */
-
- READ_STRING_FIELD(catalogname);
- READ_STRING_FIELD(schemaname);
- READ_STRING_FIELD(relname);
- READ_BOOL_FIELD(inh);
- READ_CHAR_FIELD(relpersistence);
- READ_NODE_FIELD(alias);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readTableFunc
- */
-static TableFunc *
-_readTableFunc(void)
-{
- READ_LOCALS(TableFunc);
-
- READ_NODE_FIELD(ns_uris);
- READ_NODE_FIELD(ns_names);
- READ_NODE_FIELD(docexpr);
- READ_NODE_FIELD(rowexpr);
- READ_NODE_FIELD(colnames);
- READ_NODE_FIELD(coltypes);
- READ_NODE_FIELD(coltypmods);
- READ_NODE_FIELD(colcollations);
- READ_NODE_FIELD(colexprs);
- READ_NODE_FIELD(coldefexprs);
- READ_BITMAPSET_FIELD(notnulls);
- READ_INT_FIELD(ordinalitycol);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static IntoClause *
-_readIntoClause(void)
-{
- READ_LOCALS(IntoClause);
-
- READ_NODE_FIELD(rel);
- READ_NODE_FIELD(colNames);
- READ_STRING_FIELD(accessMethod);
- READ_NODE_FIELD(options);
- READ_ENUM_FIELD(onCommit, OnCommitAction);
- READ_STRING_FIELD(tableSpaceName);
- READ_NODE_FIELD(viewQuery);
- READ_BOOL_FIELD(skipData);
- READ_NODE_FIELD(distributedBy);
- READ_BOOL_FIELD(ivm);
- READ_OID_FIELD(matviewOid);
- READ_STRING_FIELD(enrname);
- READ_BOOL_FIELD(dynamicTbl);
- READ_STRING_FIELD(schedule);
+#include "readfuncs.funcs.c"
- READ_DONE();
-}
/*
- * _readVar
+ * Support functions for nodes with custom_read_write attribute or
+ * special_read_write attribute
*/
-static Var *
-_readVar(void)
-{
- READ_LOCALS(Var);
-
- READ_UINT_FIELD(varno);
- READ_INT_FIELD(varattno);
- READ_OID_FIELD(vartype);
- READ_INT_FIELD(vartypmod);
- READ_OID_FIELD(varcollid);
- READ_BITMAPSET_FIELD(varnullingrels);
- READ_UINT_FIELD(varlevelsup);
- READ_UINT_FIELD(varnosyn);
- READ_INT_FIELD(varattnosyn);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-#ifndef COMPILING_BINARY_FUNCS
-/*
- * _readConst
- */
static Const *
_readConst(void)
{
@@ -624,2253 +280,396 @@ _readConst(void)
READ_DONE();
}
-#endif /* COMPILING_BINARY_FUNCS */
-/*
- * _readParam
- */
-static Param *
-_readParam(void)
+static BoolExpr *
+_readBoolExpr(void)
{
- READ_LOCALS(Param);
-
- READ_ENUM_FIELD(paramkind, ParamKind);
- READ_INT_FIELD(paramid);
- READ_OID_FIELD(paramtype);
- READ_INT_FIELD(paramtypmod);
- READ_OID_FIELD(paramcollid);
- READ_LOCATION_FIELD(location);
+ READ_LOCALS(BoolExpr);
- READ_DONE();
-}
+ /* do-it-yourself enum representation */
+ token = pg_strtok(&length); /* skip :boolop */
+ token = pg_strtok(&length); /* get field value */
+ if (length == 3 && strncmp(token, "and", 3) == 0)
+ local_node->boolop = AND_EXPR;
+ else if (length == 2 && strncmp(token, "or", 2) == 0)
+ local_node->boolop = OR_EXPR;
+ else if (length == 3 && strncmp(token, "not", 3) == 0)
+ local_node->boolop = NOT_EXPR;
+ else
+ elog(ERROR, "unrecognized boolop \"%.*s\"", length, token);
-/*
- * _readAggref
- */
-static Aggref *
-_readAggref(void)
-{
- READ_LOCALS(Aggref);
-
- READ_OID_FIELD(aggfnoid);
- READ_OID_FIELD(aggtype);
- READ_OID_FIELD(aggcollid);
- READ_OID_FIELD(inputcollid);
- READ_OID_FIELD(aggtranstype);
- READ_NODE_FIELD(aggargtypes);
- READ_NODE_FIELD(aggdirectargs);
READ_NODE_FIELD(args);
- READ_NODE_FIELD(aggorder);
- READ_NODE_FIELD(aggdistinct);
- READ_NODE_FIELD(aggfilter);
- READ_BOOL_FIELD(aggstar);
- READ_BOOL_FIELD(aggvariadic);
- READ_CHAR_FIELD(aggkind);
- READ_UINT_FIELD(agglevelsup);
- READ_ENUM_FIELD(aggsplit, AggSplit);
- READ_INT_FIELD(aggno);
- READ_INT_FIELD(aggtransno);
READ_LOCATION_FIELD(location);
- READ_INT_FIELD(agg_expr_id);
READ_DONE();
}
-/*
- * _readGroupingFunc
- */
-static GroupingFunc *
-_readGroupingFunc(void)
+static A_Const *
+_readA_Const(void)
{
- READ_LOCALS(GroupingFunc);
-
- READ_NODE_FIELD(args);
- READ_NODE_FIELD(refs);
- READ_NODE_FIELD(cols);
- READ_UINT_FIELD(agglevelsup);
- READ_LOCATION_FIELD(location);
+ READ_LOCALS(A_Const);
- READ_DONE();
-}
+ /* We expect either NULL or :val here */
+ token = pg_strtok(&length);
+ if (length == 4 && strncmp(token, "NULL", 4) == 0)
+ local_node->isnull = true;
+ else
+ {
+ union ValUnion *tmp = nodeRead(NULL, 0);
-/*
- * _readWindowFunc
- */
-static WindowFunc *
-_readWindowFunc(void)
-{
- READ_LOCALS(WindowFunc);
+ /* To forestall valgrind complaints, copy only the valid data */
+ switch (nodeTag(tmp))
+ {
+ case T_Integer:
+ memcpy(&local_node->val, tmp, sizeof(Integer));
+ break;
+ case T_Float:
+ memcpy(&local_node->val, tmp, sizeof(Float));
+ break;
+ case T_Boolean:
+ memcpy(&local_node->val, tmp, sizeof(Boolean));
+ break;
+ case T_String:
+ memcpy(&local_node->val, tmp, sizeof(String));
+ break;
+ case T_BitString:
+ memcpy(&local_node->val, tmp, sizeof(BitString));
+ break;
+ default:
+ elog(ERROR, "unrecognized node type: %d",
+ (int) nodeTag(tmp));
+ break;
+ }
+ }
- READ_OID_FIELD(winfnoid);
- READ_OID_FIELD(wintype);
- READ_OID_FIELD(wincollid);
- READ_OID_FIELD(inputcollid);
- READ_NODE_FIELD(args);
- READ_NODE_FIELD(aggfilter);
- READ_UINT_FIELD(winref);
- READ_BOOL_FIELD(winstar);
- READ_BOOL_FIELD(winagg);
- READ_BOOL_FIELD(windistinct);
READ_LOCATION_FIELD(location);
READ_DONE();
}
/*
- * _readSubscriptingRef
+ * _readConstraint
*/
-static SubscriptingRef *
-_readSubscriptingRef(void)
+static Constraint *
+_readConstraint(void)
{
- READ_LOCALS(SubscriptingRef);
-
- READ_OID_FIELD(refcontainertype);
- READ_OID_FIELD(refelemtype);
- READ_OID_FIELD(refrestype);
- READ_INT_FIELD(reftypmod);
- READ_OID_FIELD(refcollid);
- READ_NODE_FIELD(refupperindexpr);
- READ_NODE_FIELD(reflowerindexpr);
- READ_NODE_FIELD(refexpr);
- READ_NODE_FIELD(refassgnexpr);
+ READ_LOCALS(Constraint);
- READ_DONE();
-}
-
-/*
- * _readFuncExpr
- */
-static FuncExpr *
-_readFuncExpr(void)
-{
- READ_LOCALS(FuncExpr);
-
- READ_OID_FIELD(funcid);
- READ_OID_FIELD(funcresulttype);
- READ_BOOL_FIELD(funcretset);
- READ_BOOL_FIELD(funcvariadic);
- READ_ENUM_FIELD(funcformat, CoercionForm);
- READ_OID_FIELD(funccollid);
- READ_OID_FIELD(inputcollid);
- READ_NODE_FIELD(args);
+ READ_STRING_FIELD(conname);
+ READ_BOOL_FIELD(deferrable);
+ READ_BOOL_FIELD(initdeferred);
READ_LOCATION_FIELD(location);
- READ_BOOL_FIELD(is_tablefunc); /* GPDB */
- READ_DONE();
-}
-/*
- * _readNamedArgExpr
- */
-static NamedArgExpr *
-_readNamedArgExpr(void)
-{
- READ_LOCALS(NamedArgExpr);
+ token = pg_strtok(&length); /* skip :contype */
+ token = pg_strtok(&length); /* get field value */
+ if (length == 4 && strncmp(token, "NULL", 4) == 0)
+ local_node->contype = CONSTR_NULL;
+ else if (length == 8 && strncmp(token, "NOT_NULL", 8) == 0)
+ local_node->contype = CONSTR_NOTNULL;
+ else if (length == 7 && strncmp(token, "DEFAULT", 7) == 0)
+ local_node->contype = CONSTR_DEFAULT;
+ else if (length == 8 && strncmp(token, "IDENTITY", 8) == 0)
+ local_node->contype = CONSTR_IDENTITY;
+ else if (length == 9 && strncmp(token, "GENERATED", 9) == 0)
+ local_node->contype = CONSTR_GENERATED;
+ else if (length == 5 && strncmp(token, "CHECK", 5) == 0)
+ local_node->contype = CONSTR_CHECK;
+ else if (length == 11 && strncmp(token, "PRIMARY_KEY", 11) == 0)
+ local_node->contype = CONSTR_PRIMARY;
+ else if (length == 6 && strncmp(token, "UNIQUE", 6) == 0)
+ local_node->contype = CONSTR_UNIQUE;
+ else if (length == 9 && strncmp(token, "EXCLUSION", 9) == 0)
+ local_node->contype = CONSTR_EXCLUSION;
+ else if (length == 11 && strncmp(token, "FOREIGN_KEY", 11) == 0)
+ local_node->contype = CONSTR_FOREIGN;
+ else if (length == 15 && strncmp(token, "ATTR_DEFERRABLE", 15) == 0)
+ local_node->contype = CONSTR_ATTR_DEFERRABLE;
+ else if (length == 19 && strncmp(token, "ATTR_NOT_DEFERRABLE", 19) == 0)
+ local_node->contype = CONSTR_ATTR_NOT_DEFERRABLE;
+ else if (length == 13 && strncmp(token, "ATTR_DEFERRED", 13) == 0)
+ local_node->contype = CONSTR_ATTR_DEFERRED;
+ else if (length == 14 && strncmp(token, "ATTR_IMMEDIATE", 14) == 0)
+ local_node->contype = CONSTR_ATTR_IMMEDIATE;
+
+ switch (local_node->contype)
+ {
+ case CONSTR_NULL:
+ case CONSTR_NOTNULL:
+ /* no extra fields */
+ break;
- READ_NODE_FIELD(arg);
- READ_STRING_FIELD(name);
- READ_INT_FIELD(argnumber);
- READ_LOCATION_FIELD(location);
+ case CONSTR_DEFAULT:
+ READ_NODE_FIELD(raw_expr);
+ READ_STRING_FIELD(cooked_expr);
+ break;
- READ_DONE();
-}
+ case CONSTR_IDENTITY:
+ READ_NODE_FIELD(options);
+ READ_CHAR_FIELD(generated_when);
+ break;
-#ifndef COMPILING_BINARY_FUNCS
-/*
- * _readOpExpr
- */
-static OpExpr *
-_readOpExpr(void)
-{
- READ_LOCALS(OpExpr);
-
- READ_OID_FIELD(opno);
- READ_OID_FIELD(opfuncid);
- READ_OID_FIELD(opresulttype);
- READ_BOOL_FIELD(opretset);
- READ_OID_FIELD(opcollid);
- READ_OID_FIELD(inputcollid);
- READ_NODE_FIELD(args);
- READ_LOCATION_FIELD(location);
+ case CONSTR_GENERATED:
+ READ_NODE_FIELD(raw_expr);
+ READ_STRING_FIELD(cooked_expr);
+ READ_CHAR_FIELD(generated_when);
+ break;
- READ_DONE();
-}
-#endif /* COMPILING_BINARY_FUNCS */
+ case CONSTR_CHECK:
+ READ_BOOL_FIELD(is_no_inherit);
+ READ_NODE_FIELD(raw_expr);
+ READ_STRING_FIELD(cooked_expr);
+ READ_BOOL_FIELD(skip_validation);
+ READ_BOOL_FIELD(initially_valid);
+ break;
-/*
- * _readDistinctExpr
- */
-static DistinctExpr *
-_readDistinctExpr(void)
-{
- READ_LOCALS(DistinctExpr);
-
- READ_OID_FIELD(opno);
- READ_OID_FIELD(opfuncid);
- READ_OID_FIELD(opresulttype);
- READ_BOOL_FIELD(opretset);
- READ_OID_FIELD(opcollid);
- READ_OID_FIELD(inputcollid);
- READ_NODE_FIELD(args);
- READ_LOCATION_FIELD(location);
+ case CONSTR_PRIMARY:
+ READ_NODE_FIELD(keys);
+ READ_NODE_FIELD(including);
+ READ_NODE_FIELD(options);
+ READ_STRING_FIELD(indexname);
+ READ_STRING_FIELD(indexspace);
+ READ_BOOL_FIELD(reset_default_tblspc);
+ /* access_method and where_clause not currently used */
+ break;
- READ_DONE();
-}
+ case CONSTR_UNIQUE:
+ READ_BOOL_FIELD(nulls_not_distinct);
+ READ_NODE_FIELD(keys);
+ READ_NODE_FIELD(including);
+ READ_NODE_FIELD(options);
+ READ_STRING_FIELD(indexname);
+ READ_STRING_FIELD(indexspace);
+ READ_BOOL_FIELD(reset_default_tblspc);
+ /* access_method and where_clause not currently used */
+ break;
-/*
- * _readNullIfExpr
- */
-static NullIfExpr *
-_readNullIfExpr(void)
-{
- READ_LOCALS(NullIfExpr);
-
- READ_OID_FIELD(opno);
- READ_OID_FIELD(opfuncid);
- READ_OID_FIELD(opresulttype);
- READ_BOOL_FIELD(opretset);
- READ_OID_FIELD(opcollid);
- READ_OID_FIELD(inputcollid);
- READ_NODE_FIELD(args);
- READ_LOCATION_FIELD(location);
+ case CONSTR_EXCLUSION:
+ READ_NODE_FIELD(exclusions);
+ READ_NODE_FIELD(including);
+ READ_NODE_FIELD(options);
+ READ_STRING_FIELD(indexname);
+ READ_STRING_FIELD(indexspace);
+ READ_BOOL_FIELD(reset_default_tblspc);
+ READ_STRING_FIELD(access_method);
+ READ_NODE_FIELD(where_clause);
+ break;
- READ_DONE();
-}
+ case CONSTR_FOREIGN:
+ READ_NODE_FIELD(pktable);
+ READ_NODE_FIELD(fk_attrs);
+ READ_NODE_FIELD(pk_attrs);
+ READ_CHAR_FIELD(fk_matchtype);
+ READ_CHAR_FIELD(fk_upd_action);
+ READ_CHAR_FIELD(fk_del_action);
+ READ_NODE_FIELD(fk_del_set_cols);
+ READ_NODE_FIELD(old_conpfeqop);
+ READ_OID_FIELD(old_pktable_oid);
+ READ_BOOL_FIELD(skip_validation);
+ READ_BOOL_FIELD(initially_valid);
+ break;
-/*
- * _readScalarArrayOpExpr
- */
-static ScalarArrayOpExpr *
-_readScalarArrayOpExpr(void)
-{
- READ_LOCALS(ScalarArrayOpExpr);
+ case CONSTR_ATTR_DEFERRABLE:
+ case CONSTR_ATTR_NOT_DEFERRABLE:
+ case CONSTR_ATTR_DEFERRED:
+ case CONSTR_ATTR_IMMEDIATE:
+ /* no extra fields */
+ break;
- READ_OID_FIELD(opno);
- READ_OID_FIELD(opfuncid);
- READ_OID_FIELD(hashfuncid);
- READ_BOOL_FIELD(useOr);
- READ_OID_FIELD(inputcollid);
- READ_NODE_FIELD(args);
- READ_LOCATION_FIELD(location);
+ default:
+ elog(ERROR, "unrecognized ConstrType: %d", (int) local_node->contype);
+ break;
+ }
READ_DONE();
}
-#ifndef COMPILING_BINARY_FUNCS
-/*
- * _readBoolExpr
- */
-static BoolExpr *
-_readBoolExpr(void)
+static RangeTblEntry *
+_readRangeTblEntry(void)
{
- READ_LOCALS(BoolExpr);
-
- /* do-it-yourself enum representation */
- token = pg_strtok(&length); /* skip :boolop */
- token = pg_strtok(&length); /* get field value */
- if (strncmp(token, "and", 3) == 0)
- local_node->boolop = AND_EXPR;
- else if (strncmp(token, "or", 2) == 0)
- local_node->boolop = OR_EXPR;
- else if (strncmp(token, "not", 3) == 0)
- local_node->boolop = NOT_EXPR;
- else
- elog(ERROR, "unrecognized boolop \"%.*s\"", length, token);
+ READ_LOCALS(RangeTblEntry);
- READ_NODE_FIELD(args);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-/*
- * _readSubLink
- */
-static SubLink *
-_readSubLink(void)
-{
- READ_LOCALS(SubLink);
-
- READ_ENUM_FIELD(subLinkType, SubLinkType);
- READ_INT_FIELD(subLinkId);
- READ_NODE_FIELD(testexpr);
- READ_NODE_FIELD(operName);
- READ_NODE_FIELD(subselect);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readFieldSelect
- */
-static FieldSelect *
-_readFieldSelect(void)
-{
- READ_LOCALS(FieldSelect);
-
- READ_NODE_FIELD(arg);
- READ_INT_FIELD(fieldnum);
- READ_OID_FIELD(resulttype);
- READ_INT_FIELD(resulttypmod);
- READ_OID_FIELD(resultcollid);
-
- READ_DONE();
-}
-
-/*
- * _readFieldStore
- */
-static FieldStore *
-_readFieldStore(void)
-{
- READ_LOCALS(FieldStore);
-
- READ_NODE_FIELD(arg);
- READ_NODE_FIELD(newvals);
- READ_NODE_FIELD(fieldnums);
- READ_OID_FIELD(resulttype);
-
- READ_DONE();
-}
-
-/*
- * _readRelabelType
- */
-static RelabelType *
-_readRelabelType(void)
-{
- READ_LOCALS(RelabelType);
-
- READ_NODE_FIELD(arg);
- READ_OID_FIELD(resulttype);
- READ_INT_FIELD(resulttypmod);
- READ_OID_FIELD(resultcollid);
- READ_ENUM_FIELD(relabelformat, CoercionForm);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCoerceViaIO
- */
-static CoerceViaIO *
-_readCoerceViaIO(void)
-{
- READ_LOCALS(CoerceViaIO);
-
- READ_NODE_FIELD(arg);
- READ_OID_FIELD(resulttype);
- READ_OID_FIELD(resultcollid);
- READ_ENUM_FIELD(coerceformat, CoercionForm);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readArrayCoerceExpr
- */
-static ArrayCoerceExpr *
-_readArrayCoerceExpr(void)
-{
- READ_LOCALS(ArrayCoerceExpr);
-
- READ_NODE_FIELD(arg);
- READ_NODE_FIELD(elemexpr);
- READ_OID_FIELD(resulttype);
- READ_INT_FIELD(resulttypmod);
- READ_OID_FIELD(resultcollid);
- READ_ENUM_FIELD(coerceformat, CoercionForm);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readConvertRowtypeExpr
- */
-static ConvertRowtypeExpr *
-_readConvertRowtypeExpr(void)
-{
- READ_LOCALS(ConvertRowtypeExpr);
-
- READ_NODE_FIELD(arg);
- READ_OID_FIELD(resulttype);
- READ_ENUM_FIELD(convertformat, CoercionForm);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCollateExpr
- */
-static CollateExpr *
-_readCollateExpr(void)
-{
- READ_LOCALS(CollateExpr);
-
- READ_NODE_FIELD(arg);
- READ_OID_FIELD(collOid);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCaseExpr
- */
-static CaseExpr *
-_readCaseExpr(void)
-{
- READ_LOCALS(CaseExpr);
-
- READ_OID_FIELD(casetype);
- READ_OID_FIELD(casecollid);
- READ_NODE_FIELD(arg);
- READ_NODE_FIELD(args);
- READ_NODE_FIELD(defresult);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCaseWhen
- */
-static CaseWhen *
-_readCaseWhen(void)
-{
- READ_LOCALS(CaseWhen);
-
- READ_NODE_FIELD(expr);
- READ_NODE_FIELD(result);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCaseTestExpr
- */
-static CaseTestExpr *
-_readCaseTestExpr(void)
-{
- READ_LOCALS(CaseTestExpr);
-
- READ_OID_FIELD(typeId);
- READ_INT_FIELD(typeMod);
- READ_OID_FIELD(collation);
-
- READ_DONE();
-}
-
-/*
- * _readArrayExpr
- */
-static ArrayExpr *
-_readArrayExpr(void)
-{
- READ_LOCALS(ArrayExpr);
-
- READ_OID_FIELD(array_typeid);
- READ_OID_FIELD(array_collid);
- READ_OID_FIELD(element_typeid);
- READ_NODE_FIELD(elements);
- READ_BOOL_FIELD(multidims);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readRowExpr
- */
-static RowExpr *
-_readRowExpr(void)
-{
- READ_LOCALS(RowExpr);
-
- READ_NODE_FIELD(args);
- READ_OID_FIELD(row_typeid);
- READ_ENUM_FIELD(row_format, CoercionForm);
- READ_NODE_FIELD(colnames);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readRowCompareExpr
- */
-static RowCompareExpr *
-_readRowCompareExpr(void)
-{
- READ_LOCALS(RowCompareExpr);
-
- READ_ENUM_FIELD(rctype, RowCompareType);
- READ_NODE_FIELD(opnos);
- READ_NODE_FIELD(opfamilies);
- READ_NODE_FIELD(inputcollids);
- READ_NODE_FIELD(largs);
- READ_NODE_FIELD(rargs);
-
- READ_DONE();
-}
-
-/*
- * _readCoalesceExpr
- */
-static CoalesceExpr *
-_readCoalesceExpr(void)
-{
- READ_LOCALS(CoalesceExpr);
-
- READ_OID_FIELD(coalescetype);
- READ_OID_FIELD(coalescecollid);
- READ_NODE_FIELD(args);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readMinMaxExpr
- */
-static MinMaxExpr *
-_readMinMaxExpr(void)
-{
- READ_LOCALS(MinMaxExpr);
-
- READ_OID_FIELD(minmaxtype);
- READ_OID_FIELD(minmaxcollid);
- READ_OID_FIELD(inputcollid);
- READ_ENUM_FIELD(op, MinMaxOp);
- READ_NODE_FIELD(args);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readSQLValueFunction
- */
-static SQLValueFunction *
-_readSQLValueFunction(void)
-{
- READ_LOCALS(SQLValueFunction);
-
- READ_ENUM_FIELD(op, SQLValueFunctionOp);
- READ_OID_FIELD(type);
- READ_INT_FIELD(typmod);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readXmlExpr
- */
-static XmlExpr *
-_readXmlExpr(void)
-{
- READ_LOCALS(XmlExpr);
-
- READ_ENUM_FIELD(op, XmlExprOp);
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(named_args);
- READ_NODE_FIELD(arg_names);
- READ_NODE_FIELD(args);
- READ_ENUM_FIELD(xmloption, XmlOptionType);
- READ_OID_FIELD(type);
- READ_INT_FIELD(typmod);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readNullTest
- */
-static NullTest *
-_readNullTest(void)
-{
- READ_LOCALS(NullTest);
-
- READ_NODE_FIELD(arg);
- READ_ENUM_FIELD(nulltesttype, NullTestType);
- READ_BOOL_FIELD(argisrow);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readBooleanTest
- */
-static BooleanTest *
-_readBooleanTest(void)
-{
- READ_LOCALS(BooleanTest);
-
- READ_NODE_FIELD(arg);
- READ_ENUM_FIELD(booltesttype, BoolTestType);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCoerceToDomain
- */
-static CoerceToDomain *
-_readCoerceToDomain(void)
-{
- READ_LOCALS(CoerceToDomain);
-
- READ_NODE_FIELD(arg);
- READ_OID_FIELD(resulttype);
- READ_INT_FIELD(resulttypmod);
- READ_OID_FIELD(resultcollid);
- READ_ENUM_FIELD(coercionformat, CoercionForm);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCoerceToDomainValue
- */
-static CoerceToDomainValue *
-_readCoerceToDomainValue(void)
-{
- READ_LOCALS(CoerceToDomainValue);
-
- READ_OID_FIELD(typeId);
- READ_INT_FIELD(typeMod);
- READ_OID_FIELD(collation);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readSetToDefault
- */
-static SetToDefault *
-_readSetToDefault(void)
-{
- READ_LOCALS(SetToDefault);
-
- READ_OID_FIELD(typeId);
- READ_INT_FIELD(typeMod);
- READ_OID_FIELD(collation);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCurrentOfExpr
- */
-static CurrentOfExpr *
-_readCurrentOfExpr(void)
-{
- READ_LOCALS(CurrentOfExpr);
-
- READ_UINT_FIELD(cvarno);
- READ_STRING_FIELD(cursor_name);
- READ_INT_FIELD(cursor_param);
- READ_OID_FIELD(target_relid);
-
- READ_DONE();
-}
-
-/*
- * _readNextValueExpr
- */
-static NextValueExpr *
-_readNextValueExpr(void)
-{
- READ_LOCALS(NextValueExpr);
-
- READ_OID_FIELD(seqid);
- READ_OID_FIELD(typeId);
-
- READ_DONE();
-}
-
-/*
- * _readInferenceElem
- */
-static InferenceElem *
-_readInferenceElem(void)
-{
- READ_LOCALS(InferenceElem);
-
- READ_NODE_FIELD(expr);
- READ_OID_FIELD(infercollid);
- READ_OID_FIELD(inferopclass);
-
- READ_DONE();
-}
-
-/*
- * _readTargetEntry
- */
-static TargetEntry *
-_readTargetEntry(void)
-{
- READ_LOCALS(TargetEntry);
-
- READ_NODE_FIELD(expr);
- READ_INT_FIELD(resno);
- READ_STRING_FIELD(resname);
- READ_UINT_FIELD(ressortgroupref);
- READ_OID_FIELD(resorigtbl);
- READ_INT_FIELD(resorigcol);
- READ_BOOL_FIELD(resjunk);
-
- READ_DONE();
-}
-
-/*
- * _readRangeTblRef
- */
-static RangeTblRef *
-_readRangeTblRef(void)
-{
- READ_LOCALS(RangeTblRef);
-
- READ_INT_FIELD(rtindex);
-
- READ_DONE();
-}
-
-/*
- * _readJoinExpr
- */
-static JoinExpr *
-_readJoinExpr(void)
-{
- READ_LOCALS(JoinExpr);
-
- READ_ENUM_FIELD(jointype, JoinType);
- READ_BOOL_FIELD(isNatural);
- READ_NODE_FIELD(larg);
- READ_NODE_FIELD(rarg);
- READ_NODE_FIELD(usingClause);
- READ_NODE_FIELD(join_using_alias);
- READ_NODE_FIELD(quals);
- READ_NODE_FIELD(alias);
- READ_INT_FIELD(rtindex);
-
- READ_DONE();
-}
-
-/*
- * _readFromExpr
- */
-static FromExpr *
-_readFromExpr(void)
-{
- READ_LOCALS(FromExpr);
-
- READ_NODE_FIELD(fromlist);
- READ_NODE_FIELD(quals);
-
- READ_DONE();
-}
-
-/*
- * _readOnConflictExpr
- */
-static OnConflictExpr *
-_readOnConflictExpr(void)
-{
- READ_LOCALS(OnConflictExpr);
-
- READ_ENUM_FIELD(action, OnConflictAction);
- READ_NODE_FIELD(arbiterElems);
- READ_NODE_FIELD(arbiterWhere);
- READ_OID_FIELD(constraint);
- READ_NODE_FIELD(onConflictSet);
- READ_NODE_FIELD(onConflictWhere);
- READ_INT_FIELD(exclRelIndex);
- READ_NODE_FIELD(exclRelTlist);
-
- READ_DONE();
-}
-
-/*
- * Stuff from pathnodes.h.
- *
- * Mostly we don't need to read planner nodes back in again, but some
- * of these also end up in plan trees.
- */
-
-/*
- * _readAppendRelInfo
- */
-static AppendRelInfo *
-_readAppendRelInfo(void)
-{
- READ_LOCALS(AppendRelInfo);
-
- READ_UINT_FIELD(parent_relid);
- READ_UINT_FIELD(child_relid);
- READ_OID_FIELD(parent_reltype);
- READ_OID_FIELD(child_reltype);
- READ_NODE_FIELD(translated_vars);
- READ_INT_FIELD(num_child_cols);
- READ_ATTRNUMBER_ARRAY(parent_colnos, local_node->num_child_cols);
- READ_OID_FIELD(parent_reloid);
-
- READ_DONE();
-}
-
-/*
- * Stuff from parsenodes.h.
- */
-
-/*
- * _readRangeTblEntry
- */
-static RangeTblEntry *
-_readRangeTblEntry(void)
-{
- READ_LOCALS(RangeTblEntry);
-
- /* put alias + eref first to make dump more legible */
- READ_NODE_FIELD(alias);
- READ_NODE_FIELD(eref);
- READ_ENUM_FIELD(rtekind, RTEKind);
- READ_BOOL_FIELD(relisivm);
-
- switch (local_node->rtekind)
- {
- case RTE_RELATION:
- READ_OID_FIELD(relid);
- READ_CHAR_FIELD(relkind);
- READ_INT_FIELD(rellockmode);
- READ_NODE_FIELD(tablesample);
- READ_UINT_FIELD(perminfoindex);
- break;
- case RTE_SUBQUERY:
- READ_NODE_FIELD(subquery);
- READ_BOOL_FIELD(security_barrier);
- READ_OID_FIELD(relid);
- READ_CHAR_FIELD(relkind);
- READ_INT_FIELD(rellockmode);
- READ_UINT_FIELD(perminfoindex);
- break;
- case RTE_JOIN:
- READ_ENUM_FIELD(jointype, JoinType);
- READ_INT_FIELD(joinmergedcols);
- READ_NODE_FIELD(joinaliasvars);
- READ_NODE_FIELD(joinleftcols);
- READ_NODE_FIELD(joinrightcols);
- READ_NODE_FIELD(join_using_alias);
- break;
- case RTE_FUNCTION:
- READ_NODE_FIELD(functions);
- READ_BOOL_FIELD(funcordinality);
- break;
- case RTE_TABLEFUNCTION:
- READ_NODE_FIELD(subquery);
- READ_NODE_FIELD(functions);
- READ_BOOL_FIELD(funcordinality);
- break;
- case RTE_TABLEFUNC:
- READ_NODE_FIELD(tablefunc);
- /* The RTE must have a copy of the column type info, if any */
- if (local_node->tablefunc)
- {
- TableFunc *tf = local_node->tablefunc;
-
- local_node->coltypes = tf->coltypes;
- local_node->coltypmods = tf->coltypmods;
- local_node->colcollations = tf->colcollations;
- }
- break;
- case RTE_VALUES:
- READ_NODE_FIELD(values_lists);
- READ_NODE_FIELD(coltypes);
- READ_NODE_FIELD(coltypmods);
- READ_NODE_FIELD(colcollations);
- break;
- case RTE_CTE:
- READ_STRING_FIELD(ctename);
- READ_UINT_FIELD(ctelevelsup);
- READ_BOOL_FIELD(self_reference);
- READ_NODE_FIELD(coltypes);
- READ_NODE_FIELD(coltypmods);
- READ_NODE_FIELD(colcollations);
- break;
- case RTE_NAMEDTUPLESTORE:
- READ_STRING_FIELD(enrname);
- READ_FLOAT_FIELD(enrtuples);
- READ_OID_FIELD(relid);
- READ_NODE_FIELD(coltypes);
- READ_NODE_FIELD(coltypmods);
- READ_NODE_FIELD(colcollations);
- break;
- case RTE_RESULT:
- /* no extra fields */
- break;
- case RTE_VOID: /*CDB*/
- break;
- default:
- elog(ERROR, "unrecognized RTE kind: %d",
- (int) local_node->rtekind);
- break;
- }
-
- READ_BOOL_FIELD(lateral);
- READ_BOOL_FIELD(inh);
- READ_BOOL_FIELD(inFromCl);
- READ_NODE_FIELD(securityQuals);
-
- READ_BOOL_FIELD(forceDistRandom);
-
- READ_DONE();
-}
-
-/*
- * _readRangeTblFunction
- */
-static RangeTblFunction *
-_readRangeTblFunction(void)
-{
- READ_LOCALS(RangeTblFunction);
-
- READ_NODE_FIELD(funcexpr);
- READ_INT_FIELD(funccolcount);
- READ_NODE_FIELD(funccolnames);
- READ_NODE_FIELD(funccoltypes);
- READ_NODE_FIELD(funccoltypmods);
- READ_NODE_FIELD(funccolcollations);
- /* funcuserdata is only serialized in binary out/read functions */
-#ifdef COMPILING_BINARY_FUNCS
- READ_BYTEA_FIELD(funcuserdata);
-#endif
- READ_BITMAPSET_FIELD(funcparams);
-
- READ_DONE();
-}
-
-/*
- * Apache Cloudberry additions for serialization support
- * These are currently not used (see outfastc ad readfast.c)
- */
-#include "nodes/plannodes.h"
-
-/*
- * _readTableSampleClause
- */
-static TableSampleClause *
-_readTableSampleClause(void)
-{
- READ_LOCALS(TableSampleClause);
-
- READ_OID_FIELD(tsmhandler);
- READ_NODE_FIELD(args);
- READ_NODE_FIELD(repeatable);
-
- READ_DONE();
-}
-
-/*
- * _readDefElem
- */
-static DefElem *
-_readDefElem(void)
-{
- READ_LOCALS(DefElem);
-
- READ_STRING_FIELD(defnamespace);
- READ_STRING_FIELD(defname);
- READ_NODE_FIELD(arg);
- READ_ENUM_FIELD(defaction, DefElemAction);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * Stuff from plannodes.h.
- */
-
-/*
- * _readPlannedStmt
- */
-static PlannedStmt *
-_readPlannedStmt(void)
-{
- READ_LOCALS(PlannedStmt);
-
- READ_ENUM_FIELD(commandType, CmdType);
- READ_ENUM_FIELD(planGen, PlanGenerator);
- READ_UINT64_FIELD(queryId);
- READ_BOOL_FIELD(hasReturning);
- READ_BOOL_FIELD(hasModifyingCTE);
- READ_BOOL_FIELD(canSetTag);
- READ_BOOL_FIELD(transientPlan);
- READ_BOOL_FIELD(oneoffPlan);
- READ_OID_FIELD(simplyUpdatableRel);
- READ_BOOL_FIELD(dependsOnRole);
- READ_BOOL_FIELD(parallelModeNeeded);
- READ_INT_FIELD(jitFlags);
- READ_NODE_FIELD(planTree);
- READ_NODE_FIELD(rtable);
- READ_NODE_FIELD(permInfos);
- READ_NODE_FIELD(resultRelations);
- READ_NODE_FIELD(appendRelations);
- READ_NODE_FIELD(subplans);
- READ_BITMAPSET_FIELD(rewindPlanIDs);
- READ_NODE_FIELD(rowMarks);
- READ_NODE_FIELD(relationOids);
- /* invalItems not serialized in binary mode */
-#ifndef COMPILING_BINARY_FUNCS
- READ_NODE_FIELD(invalItems);
-#endif /* COMPILING_BINARY_FUNCS */
- READ_NODE_FIELD(paramExecTypes);
- READ_NODE_FIELD(utilityStmt);
- READ_LOCATION_FIELD(stmt_location);
- READ_INT_FIELD(stmt_len);
-
- READ_INT_ARRAY(subplan_sliceIds, list_length(local_node->subplans));
-
- READ_INT_FIELD(numSlices);
- local_node->slices = palloc(local_node->numSlices * sizeof(PlanSlice));
- for (int i = 0; i < local_node->numSlices; i++)
- {
- READ_INT_FIELD(slices[i].sliceIndex);
- READ_INT_FIELD(slices[i].parentIndex);
- READ_INT_FIELD(slices[i].gangType);
- READ_INT_FIELD(slices[i].numsegments);
- READ_INT_FIELD(slices[i].parallel_workers);
- READ_INT_FIELD(slices[i].segindex);
- READ_BOOL_FIELD(slices[i].directDispatch.isDirectDispatch);
- READ_NODE_FIELD(slices[i].directDispatch.contentIds);
- }
-
- READ_BITMAPSET_FIELD(rewindPlanIDs);
-
- READ_NODE_FIELD(intoPolicy);
-
- READ_UINT64_FIELD(query_mem);
-
- READ_NODE_FIELD(intoClause);
- READ_NODE_FIELD(copyIntoClause);
- READ_NODE_FIELD(refreshClause);
- READ_INT_FIELD(metricsQueryType);
- READ_NODE_FIELD(extensionContext);
-
- READ_DONE();
-}
-
-/*
- * ReadCommonPlan
- * Assign the basic stuff of all nodes that inherit from Plan
- */
-static void
-ReadCommonPlan(Plan *local_node)
-{
- READ_TEMP_LOCALS();
-
- READ_FLOAT_FIELD(startup_cost);
- READ_FLOAT_FIELD(total_cost);
- READ_FLOAT_FIELD(plan_rows);
- READ_INT_FIELD(plan_width);
- READ_BOOL_FIELD(parallel_aware);
- READ_BOOL_FIELD(parallel_safe);
- READ_BOOL_FIELD(async_capable);
- READ_INT_FIELD(plan_node_id);
- READ_NODE_FIELD(targetlist);
- READ_NODE_FIELD(qual);
- READ_NODE_FIELD(lefttree);
- READ_NODE_FIELD(righttree);
- READ_NODE_FIELD(initPlan);
- READ_BITMAPSET_FIELD(extParam);
- READ_BITMAPSET_FIELD(allParam);
-
-#ifndef COMPILING_BINARY_FUNCS
- READ_NODE_FIELD(flow);
-#endif /* COMPILING_BINARY_FUNCS */
-
- READ_UINT64_FIELD(operatorMemKB);
-}
-
-/*
- * _readPlan
- */
-static Plan *
-_readPlan(void)
-{
- READ_LOCALS_NO_FIELDS(Plan);
-
- ReadCommonPlan(local_node);
-
- READ_DONE();
-}
-
-/*
- * _readResult
- */
-static Result *
-_readResult(void)
-{
- READ_LOCALS(Result);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_NODE_FIELD(resconstantqual);
-
- READ_INT_FIELD(numHashFilterCols);
- READ_ATTRNUMBER_ARRAY(hashFilterColIdx, local_node->numHashFilterCols);
- READ_OID_ARRAY(hashFilterFuncs, local_node->numHashFilterCols);
-
- READ_DONE();
-}
-
-/*
- * _readProjectSet
- */
-static ProjectSet *
-_readProjectSet(void)
-{
- READ_LOCALS_NO_FIELDS(ProjectSet);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_DONE();
-}
-
-/*
- * _readModifyTable
- */
-static ModifyTable *
-_readModifyTable(void)
-{
- READ_LOCALS(ModifyTable);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_ENUM_FIELD(operation, CmdType);
- READ_BOOL_FIELD(canSetTag);
- READ_UINT_FIELD(nominalRelation);
- READ_UINT_FIELD(rootRelation);
- READ_BOOL_FIELD(partColsUpdated);
- READ_BOOL_FIELD(splitUpdate);
- READ_NODE_FIELD(resultRelations);
- READ_NODE_FIELD(updateColnosLists);
- READ_NODE_FIELD(withCheckOptionLists);
- READ_NODE_FIELD(returningLists);
- READ_NODE_FIELD(fdwPrivLists);
- READ_BITMAPSET_FIELD(fdwDirectModifyPlans);
- READ_NODE_FIELD(rowMarks);
- READ_INT_FIELD(epqParam);
- READ_ENUM_FIELD(onConflictAction, OnConflictAction);
- READ_NODE_FIELD(arbiterIndexes);
- READ_NODE_FIELD(onConflictSet);
- READ_NODE_FIELD(onConflictCols);
- READ_NODE_FIELD(onConflictWhere);
- READ_UINT_FIELD(exclRelRTI);
- READ_NODE_FIELD(exclRelTlist);
- READ_BOOL_FIELD(forceTupleRouting);
- READ_NODE_FIELD(mergeActionLists);
-
- READ_DONE();
-}
-
-/*
- * _readAppend
- */
-static Append *
-_readAppend(void)
-{
- READ_LOCALS(Append);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_BITMAPSET_FIELD(apprelids);
- READ_NODE_FIELD(appendplans);
- READ_INT_FIELD(nasyncplans);
- READ_INT_FIELD(first_partial_plan);
- READ_NODE_FIELD(part_prune_info);
- READ_NODE_FIELD(join_prune_paramids);
-
- READ_DONE();
-}
-
-/*
- * _readMergeAppend
- */
-static MergeAppend *
-_readMergeAppend(void)
-{
- READ_LOCALS(MergeAppend);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_BITMAPSET_FIELD(apprelids);
- READ_NODE_FIELD(mergeplans);
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(sortColIdx, local_node->numCols);
- READ_OID_ARRAY(sortOperators, local_node->numCols);
- READ_OID_ARRAY(collations, local_node->numCols);
- READ_BOOL_ARRAY(nullsFirst, local_node->numCols);
- READ_NODE_FIELD(part_prune_info);
- READ_NODE_FIELD(join_prune_paramids);
-
- READ_DONE();
-}
-
-/*
- * _readRecursiveUnion
- */
-static RecursiveUnion *
-_readRecursiveUnion(void)
-{
- READ_LOCALS(RecursiveUnion);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_INT_FIELD(wtParam);
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(dupColIdx, local_node->numCols);
- READ_OID_ARRAY(dupOperators, local_node->numCols);
- READ_OID_ARRAY(dupCollations, local_node->numCols);
- READ_LONG_FIELD(numGroups);
-
- READ_DONE();
-}
-
-/*
- * _readBitmapAnd
- */
-static BitmapAnd *
-_readBitmapAnd(void)
-{
- READ_LOCALS(BitmapAnd);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_NODE_FIELD(bitmapplans);
-
- READ_DONE();
-}
-
-/*
- * _readBitmapOr
- */
-static BitmapOr *
-_readBitmapOr(void)
-{
- READ_LOCALS(BitmapOr);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_BOOL_FIELD(isshared);
- READ_NODE_FIELD(bitmapplans);
-
- READ_DONE();
-}
-
-/*
- * ReadCommonScan
- * Assign the basic stuff of all nodes that inherit from Scan
- */
-static void
-ReadCommonScan(Scan *local_node)
-{
- READ_TEMP_LOCALS();
-
- ReadCommonPlan(&local_node->plan);
-
- READ_UINT_FIELD(scanrelid);
-}
-
-/*
- * _readScan
- */
-static Scan *
-_readScan(void)
-{
- READ_LOCALS_NO_FIELDS(Scan);
-
- ReadCommonScan(local_node);
-
- READ_DONE();
-}
-
-/*
- * _readSeqScan
- */
-static SeqScan *
-_readSeqScan(void)
-{
- READ_LOCALS_NO_FIELDS(SeqScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_DONE();
-}
-
-/*
- * _readSampleScan
- */
-static SampleScan *
-_readSampleScan(void)
-{
- READ_LOCALS(SampleScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(tablesample);
-
- READ_DONE();
-}
-
-/*
- * _readIndexScan
- */
-
-static void readIndexScanFields(IndexScan *local_node);
-
-static IndexScan *
-_readIndexScan(void)
-{
- READ_LOCALS_NO_FIELDS(IndexScan);
-
- readIndexScanFields(local_node);
-
- READ_DONE();
-}
-
-static DynamicIndexScan *
-_readDynamicIndexScan(void)
-{
- READ_LOCALS(DynamicIndexScan);
- /* DynamicIndexScan has some content from IndexScan. */
- readIndexScanFields(&local_node->indexscan);
- READ_NODE_FIELD(partOids);
- READ_NODE_FIELD(part_prune_info);
- READ_NODE_FIELD(join_prune_paramids);
- READ_DONE();
-}
-static void
-readIndexScanFields(IndexScan *local_node)
-{
- READ_TEMP_LOCALS();
-
- ReadCommonScan(&local_node->scan);
-
- READ_OID_FIELD(indexid);
- READ_NODE_FIELD(indexqual);
- READ_NODE_FIELD(indexqualorig);
- READ_NODE_FIELD(indexorderby);
- READ_NODE_FIELD(indexorderbyorig);
- READ_NODE_FIELD(indexorderbyops);
- READ_ENUM_FIELD(indexorderdir, ScanDirection);
-}
-
-/*
- * _readIndexOnlyScan
- */
-static void readIndexOnlyScanFields(IndexOnlyScan *local_node);
-
-static IndexOnlyScan *
-_readIndexOnlyScan(void)
-{
- READ_LOCALS_NO_FIELDS(IndexOnlyScan);
- readIndexOnlyScanFields(local_node);
- READ_DONE();
-}
-
-static void
-readIndexOnlyScanFields(IndexOnlyScan *local_node)
-{
- READ_TEMP_LOCALS();
-
- ReadCommonScan(&local_node->scan);
-
- READ_OID_FIELD(indexid);
- READ_NODE_FIELD(indexqual);
- READ_NODE_FIELD(recheckqual);
- READ_NODE_FIELD(indexorderby);
- READ_NODE_FIELD(indextlist);
- READ_ENUM_FIELD(indexorderdir, ScanDirection);
-}
-
-static DynamicIndexOnlyScan *
-_readDynamicIndexOnlyScan(void)
-{
- READ_LOCALS(DynamicIndexOnlyScan);
-
- /* DynamicIndexScan has some content from IndexScan. */
- readIndexOnlyScanFields(&local_node->indexscan);
- READ_NODE_FIELD(partOids);
- READ_NODE_FIELD(part_prune_info);
- READ_NODE_FIELD(join_prune_paramids);
- READ_DONE();
-}
-
-static void
-readBitmapIndexScanFields(BitmapIndexScan *local_node)
-{
- READ_TEMP_LOCALS();
-
- ReadCommonScan(&local_node->scan);
-
- READ_OID_FIELD(indexid);
- READ_BOOL_FIELD(isshared);
- READ_NODE_FIELD(indexqual);
- READ_NODE_FIELD(indexqualorig);
-}
-
-/*
- * _readBitmapIndexScan
- */
-static BitmapIndexScan *
-_readBitmapIndexScan(void)
-{
- READ_LOCALS_NO_FIELDS(BitmapIndexScan);
-
- readBitmapIndexScanFields(local_node);
-
- READ_DONE();
-}
-
-static DynamicBitmapIndexScan *
-_readDynamicBitmapIndexScan(void)
-{
- READ_LOCALS_NO_FIELDS(DynamicBitmapIndexScan);
-
- /* DynamicBitmapIndexScan has some content from BitmapIndexScan. */
- readBitmapIndexScanFields(&local_node->biscan);
-
- READ_DONE();
-}
-
-static void
-readBitmapHeapScanFields(BitmapHeapScan *local_node)
-{
- READ_TEMP_LOCALS();
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(bitmapqualorig);
-}
-
-/*
- * _readBitmapHeapScan
- */
-static BitmapHeapScan *
-_readBitmapHeapScan(void)
-{
- READ_LOCALS_NO_FIELDS(BitmapHeapScan);
-
- readBitmapHeapScanFields(local_node);
-
- READ_DONE();
-}
-
-
-static DynamicBitmapHeapScan *
-_readDynamicBitmapHeapScan(void)
-{
- READ_LOCALS(DynamicBitmapHeapScan);
-
- /* DynamicBitmapHeapScan has some content from BitmapHeapScan. */
- readBitmapHeapScanFields(&local_node->bitmapheapscan);
-
- READ_NODE_FIELD(partOids);
- READ_NODE_FIELD(part_prune_info);
- READ_NODE_FIELD(join_prune_paramids);
-
- READ_DONE();
-}
-
-/*
- * _readTidScan
- */
-static TidScan *
-_readTidScan(void)
-{
- READ_LOCALS(TidScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(tidquals);
-
- READ_DONE();
-}
-
-/*
- * _readSubqueryScan
- */
-static SubqueryScan *
-_readSubqueryScan(void)
-{
- READ_LOCALS(SubqueryScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(subplan);
-
- READ_DONE();
-}
-
-/*
- * _readFunctionScan
- */
-static FunctionScan *
-_readFunctionScan(void)
-{
- READ_LOCALS(FunctionScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(functions);
- READ_BOOL_FIELD(funcordinality);
- READ_NODE_FIELD(param);
- READ_BOOL_FIELD(resultInTupleStore);
- READ_INT_FIELD(initplanId);
-
- READ_DONE();
-}
-
-/*
- * _readValuesScan
- */
-static ValuesScan *
-_readValuesScan(void)
-{
- READ_LOCALS(ValuesScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(values_lists);
-
- READ_DONE();
-}
-
-/*
- * _readTableFuncScan
- */
-static TableFuncScan *
-_readTableFuncScan(void)
-{
- READ_LOCALS(TableFuncScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(tablefunc);
-
- READ_DONE();
-}
-
-/*
- * _readCteScan
- */
-static CteScan *
-_readCteScan(void)
-{
- READ_LOCALS(CteScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_INT_FIELD(ctePlanId);
- READ_INT_FIELD(cteParam);
-
- READ_DONE();
-}
-
-/*
- * _readNamedTuplestoreScan
- */
-static NamedTuplestoreScan *
-_readNamedTuplestoreScan(void)
-{
- READ_LOCALS(NamedTuplestoreScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_STRING_FIELD(enrname);
-
- READ_DONE();
-}
-
-/*
- * _readWorkTableScan
- */
-static WorkTableScan *
-_readWorkTableScan(void)
-{
- READ_LOCALS(WorkTableScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_INT_FIELD(wtParam);
-
- READ_DONE();
-}
-
-
-static void readForeignScanFields(ForeignScan *local_node);
-
-/*
- * _readForeignScan
- */
-static ForeignScan *
-_readForeignScan(void)
-{
- READ_LOCALS_NO_FIELDS(ForeignScan);
- readForeignScanFields(local_node);
- READ_DONE();
-}
-
-static DynamicForeignScan *
-_readDynamicForeignScan(void)
-{
- READ_LOCALS(DynamicForeignScan);
- /* DynamicForeignScan has some content from ForeignScan. */
- readForeignScanFields(&local_node->foreignscan);
- READ_NODE_FIELD(partOids);
- READ_NODE_FIELD(part_prune_info);
- READ_NODE_FIELD(join_prune_paramids);
- READ_NODE_FIELD(fdw_private_list);
- READ_DONE();
-}
-
-static void
-readForeignScanFields(ForeignScan *local_node)
-{
- READ_TEMP_LOCALS();
-
- ReadCommonScan(&local_node->scan);
-
- READ_ENUM_FIELD(operation, CmdType);
- READ_UINT_FIELD(resultRelation);
- READ_OID_FIELD(fs_server);
- READ_NODE_FIELD(fdw_exprs);
- READ_NODE_FIELD(fdw_private);
- READ_NODE_FIELD(fdw_scan_tlist);
- READ_NODE_FIELD(fdw_recheck_quals);
- READ_BITMAPSET_FIELD(fs_relids);
- READ_BOOL_FIELD(fsSystemCol);
-}
-
-
-#ifndef COMPILING_BINARY_FUNCS
-/*
- * _readCustomScan
- */
-static CustomScan *
-_readCustomScan(void)
-{
- READ_LOCALS(CustomScan);
- char *custom_name;
- const CustomScanMethods *methods;
-
- ReadCommonScan(&local_node->scan);
-
- READ_UINT_FIELD(flags);
- READ_NODE_FIELD(custom_plans);
- READ_NODE_FIELD(custom_exprs);
- READ_NODE_FIELD(custom_private);
- READ_NODE_FIELD(custom_scan_tlist);
- READ_BITMAPSET_FIELD(custom_relids);
-
- /* Lookup CustomScanMethods by CustomName */
- token = pg_strtok(&length); /* skip methods: */
- token = pg_strtok(&length); /* CustomName */
- custom_name = nullable_string(token, length);
- methods = GetCustomScanMethods(custom_name, false);
- local_node->methods = methods;
-
- READ_DONE();
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-/*
- * ReadCommonJoin
- * Assign the basic stuff of all nodes that inherit from Join
- */
-static void
-ReadCommonJoin(Join *local_node)
-{
- READ_TEMP_LOCALS();
-
- ReadCommonPlan(&local_node->plan);
-
- READ_BOOL_FIELD(prefetch_inner);
- READ_BOOL_FIELD(prefetch_joinqual);
- READ_BOOL_FIELD(prefetch_qual);
-
- READ_ENUM_FIELD(jointype, JoinType);
- READ_BOOL_FIELD(inner_unique);
- READ_NODE_FIELD(joinqual);
-}
-
-/*
- * _readJoin
- */
-static Join *
-_readJoin(void)
-{
- READ_LOCALS_NO_FIELDS(Join);
-
- ReadCommonJoin(local_node);
-
- READ_DONE();
-}
-
-/*
- * _readNestLoop
- */
-static NestLoop *
-_readNestLoop(void)
-{
- READ_LOCALS(NestLoop);
-
- ReadCommonJoin(&local_node->join);
-
- READ_NODE_FIELD(nestParams);
-
- READ_BOOL_FIELD(shared_outer);
- READ_BOOL_FIELD(singleton_outer); /*CDB-OLAP*/
-
- READ_DONE();
-}
-
-/*
- * _readMergeJoin
- */
-static MergeJoin *
-_readMergeJoin(void)
-{
- int numCols;
-
- READ_LOCALS(MergeJoin);
-
- ReadCommonJoin(&local_node->join);
-
- READ_BOOL_FIELD(skip_mark_restore);
- READ_NODE_FIELD(mergeclauses);
-
- numCols = list_length(local_node->mergeclauses);
-
- READ_OID_ARRAY(mergeFamilies, numCols);
- READ_OID_ARRAY(mergeCollations, numCols);
- READ_INT_ARRAY(mergeStrategies, numCols);
- READ_BOOL_ARRAY(mergeNullsFirst, numCols);
- READ_BOOL_FIELD(unique_outer);
-
- READ_DONE();
-}
-
-/*
- * _readHashJoin
- */
-static HashJoin *
-_readHashJoin(void)
-{
- READ_LOCALS(HashJoin);
-
- ReadCommonJoin(&local_node->join);
-
- READ_NODE_FIELD(hashclauses);
- READ_NODE_FIELD(hashoperators);
- READ_NODE_FIELD(hashcollations);
- READ_NODE_FIELD(hashkeys);
- READ_NODE_FIELD(hashqualclauses);
- READ_BOOL_FIELD(batch0_barrier);
- READ_BOOL_FIELD(outer_motionhazard);
-
- READ_DONE();
-}
-
-/*
- * _readMaterial
- */
-static Material *
-_readMaterial(void)
-{
- READ_LOCALS(Material);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_BOOL_FIELD(cdb_strict);
- READ_BOOL_FIELD(cdb_shield_child_from_rescans);
-
- READ_DONE();
-}
-
-/*
- * ReadCommonSort
- * Assign the basic stuff of all nodes that inherit from Sort
- */
-static void
-ReadCommonSort(Sort *local_node)
-{
- READ_TEMP_LOCALS();
-
- ReadCommonPlan(&local_node->plan);
-
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(sortColIdx, local_node->numCols);
- READ_OID_ARRAY(sortOperators, local_node->numCols);
- READ_OID_ARRAY(collations, local_node->numCols);
- READ_BOOL_ARRAY(nullsFirst, local_node->numCols);
-}
-
-/*
- * _readSort
- */
-static Sort *
-_readSort(void)
-{
- READ_LOCALS_NO_FIELDS(Sort);
-
- ReadCommonSort(local_node);
-
- READ_DONE();
-}
-
-/*
- * _readIncrementalSort
- */
-static IncrementalSort *
-_readIncrementalSort(void)
-{
- READ_LOCALS(IncrementalSort);
-
- ReadCommonSort(&local_node->sort);
-
- READ_INT_FIELD(nPresortedCols);
-
- READ_DONE();
-}
-
-#ifndef COMPILING_BINARY_FUNCS
-/*
- * _readGroup
- */
-static Group *
-_readGroup(void)
-{
- READ_LOCALS(Group);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(grpColIdx, local_node->numCols);
- READ_OID_ARRAY(grpOperators, local_node->numCols);
- READ_OID_ARRAY(grpCollations, local_node->numCols);
-
- READ_DONE();
-}
-#endif /* COMPILING_BINARY_FUNCS */
-
-/*
- * _readAgg
- */
-static Agg *
-_readAgg(void)
-{
- READ_LOCALS(Agg);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_ENUM_FIELD(aggstrategy, AggStrategy);
- READ_ENUM_FIELD(aggsplit, AggSplit);
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(grpColIdx, local_node->numCols);
- READ_OID_ARRAY(grpOperators, local_node->numCols);
- READ_OID_ARRAY(grpCollations, local_node->numCols);
- READ_LONG_FIELD(numGroups);
- READ_UINT64_FIELD(transitionSpace);
- READ_BITMAPSET_FIELD(aggParams);
- READ_NODE_FIELD(groupingSets);
- READ_NODE_FIELD(chain);
- READ_BOOL_FIELD(streaming);
- READ_UINT_FIELD(agg_expr_id);
-
- READ_DONE();
-}
-
-/*
- * _readWindowAgg
- */
-static WindowAgg *
-_readWindowAgg(void)
-{
- READ_LOCALS(WindowAgg);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_UINT_FIELD(winref);
- READ_INT_FIELD(partNumCols);
- READ_ATTRNUMBER_ARRAY(partColIdx, local_node->partNumCols);
- READ_OID_ARRAY(partOperators, local_node->partNumCols);
- READ_OID_ARRAY(partCollations, local_node->partNumCols);
- READ_INT_FIELD(ordNumCols);
- READ_ATTRNUMBER_ARRAY(ordColIdx, local_node->ordNumCols);
- READ_OID_ARRAY(ordOperators, local_node->ordNumCols);
- READ_OID_ARRAY(ordCollations, local_node->ordNumCols);
- READ_INT_FIELD(firstOrderCol);
- READ_OID_FIELD(firstOrderCmpOperator);
- READ_BOOL_FIELD(firstOrderNullsFirst);
- READ_INT_FIELD(frameOptions);
- READ_NODE_FIELD(startOffset);
- READ_NODE_FIELD(endOffset);
- READ_NODE_FIELD(runCondition);
- READ_NODE_FIELD(runConditionOrig);
- READ_OID_FIELD(startInRangeFunc);
- READ_OID_FIELD(endInRangeFunc);
- READ_OID_FIELD(inRangeColl);
- READ_BOOL_FIELD(inRangeAsc);
- READ_BOOL_FIELD(inRangeNullsFirst);
- READ_BOOL_FIELD(topWindow);
-
- READ_DONE();
-}
-
-static WindowHashAgg *
-_readWindowHashAgg(void)
-{
- READ_LOCALS(WindowHashAgg);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_UINT_FIELD(winref);
- READ_INT_FIELD(partNumCols);
- READ_ATTRNUMBER_ARRAY(partColIdx, local_node->partNumCols);
- READ_OID_ARRAY(partOperators, local_node->partNumCols);
- READ_OID_ARRAY(partCollations, local_node->partNumCols);
- READ_INT_FIELD(ordNumCols);
- READ_ATTRNUMBER_ARRAY(ordColIdx, local_node->ordNumCols);
- READ_OID_ARRAY(ordOperators, local_node->ordNumCols);
- READ_OID_ARRAY(ordCollations, local_node->ordNumCols);
- READ_BOOL_ARRAY(ordNullsFirst, local_node->ordNumCols);
- READ_INT_FIELD(frameOptions);
- READ_NODE_FIELD(startOffset);
- READ_NODE_FIELD(endOffset);
- READ_OID_FIELD(startInRangeFunc);
- READ_OID_FIELD(endInRangeFunc);
- READ_OID_FIELD(inRangeColl);
- READ_BOOL_FIELD(inRangeAsc);
- READ_BOOL_FIELD(inRangeNullsFirst);
-
- READ_DONE();
-}
-
-/*
- * _readUnique
- */
-static Unique *
-_readUnique(void)
-{
- READ_LOCALS(Unique);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(uniqColIdx, local_node->numCols);
- READ_OID_ARRAY(uniqOperators, local_node->numCols);
- READ_OID_ARRAY(uniqCollations, local_node->numCols);
-
- READ_DONE();
-}
-
-/*
- * _readGather
- */
-static Gather *
-_readGather(void)
-{
- READ_LOCALS(Gather);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_INT_FIELD(num_workers);
- READ_INT_FIELD(rescan_param);
- READ_BOOL_FIELD(single_copy);
- READ_BOOL_FIELD(invisible);
- READ_BITMAPSET_FIELD(initParam);
-
- READ_DONE();
-}
-
-/*
- * _readGatherMerge
- */
-static GatherMerge *
-_readGatherMerge(void)
-{
- READ_LOCALS(GatherMerge);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_INT_FIELD(num_workers);
- READ_INT_FIELD(rescan_param);
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(sortColIdx, local_node->numCols);
- READ_OID_ARRAY(sortOperators, local_node->numCols);
- READ_OID_ARRAY(collations, local_node->numCols);
- READ_BOOL_ARRAY(nullsFirst, local_node->numCols);
- READ_BITMAPSET_FIELD(initParam);
-
- READ_DONE();
-}
-
-/*
- * _readHash
- */
-static Hash *
-_readHash(void)
-{
- READ_LOCALS(Hash);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_NODE_FIELD(hashkeys);
- READ_OID_FIELD(skewTable);
- READ_INT_FIELD(skewColumn);
- READ_BOOL_FIELD(skewInherit);
- READ_FLOAT_FIELD(rows_total);
- READ_BOOL_FIELD(rescannable); /*CDB*/
- READ_BOOL_FIELD(sync_barrier);
-
- READ_DONE();
-}
-
-/*
- * _readSetOp
- */
-static SetOp *
-_readSetOp(void)
-{
- READ_LOCALS(SetOp);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_ENUM_FIELD(cmd, SetOpCmd);
- READ_ENUM_FIELD(strategy, SetOpStrategy);
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(dupColIdx, local_node->numCols);
- READ_OID_ARRAY(dupOperators, local_node->numCols);
- READ_OID_ARRAY(dupCollations, local_node->numCols);
- READ_INT_FIELD(flagColIdx);
- READ_INT_FIELD(firstFlag);
- READ_LONG_FIELD(numGroups);
-
- READ_DONE();
-}
-
-/*
- * _readLockRows
- */
-static LockRows *
-_readLockRows(void)
-{
- READ_LOCALS(LockRows);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_NODE_FIELD(rowMarks);
- READ_INT_FIELD(epqParam);
-
- READ_DONE();
-}
-
-static RuntimeFilter *
-_readRuntimeFilter(void)
-{
- READ_LOCALS_NO_FIELDS(RuntimeFilter);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_DONE();
-}
-
-/*
- * _readLimit
- */
-static Limit *
-_readLimit(void)
-{
- READ_LOCALS(Limit);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_NODE_FIELD(limitOffset);
- READ_NODE_FIELD(limitCount);
- READ_ENUM_FIELD(limitOption, LimitOption);
- READ_INT_FIELD(uniqNumCols);
- READ_ATTRNUMBER_ARRAY(uniqColIdx, local_node->uniqNumCols);
- READ_OID_ARRAY(uniqOperators, local_node->uniqNumCols);
- READ_OID_ARRAY(uniqCollations, local_node->uniqNumCols);
-
- READ_DONE();
-}
-
-/*
- * _readNestLoopParam
- */
-static NestLoopParam *
-_readNestLoopParam(void)
-{
- READ_LOCALS(NestLoopParam);
-
- READ_INT_FIELD(paramno);
- READ_NODE_FIELD(paramval);
-
- READ_DONE();
-}
-
-/*
- * _readPlanRowMark
- */
-static PlanRowMark *
-_readPlanRowMark(void)
-{
- READ_LOCALS(PlanRowMark);
-
- READ_UINT_FIELD(rti);
- READ_UINT_FIELD(prti);
- READ_UINT_FIELD(rowmarkId);
- READ_ENUM_FIELD(markType, RowMarkType);
- READ_INT_FIELD(allMarkTypes);
- READ_ENUM_FIELD(strength, LockClauseStrength);
- READ_ENUM_FIELD(waitPolicy, LockWaitPolicy);
- READ_BOOL_FIELD(isParent);
-
- READ_DONE();
-}
-
-static PartitionPruneInfo *
-_readPartitionPruneInfo(void)
-{
- READ_LOCALS(PartitionPruneInfo);
-
- READ_NODE_FIELD(prune_infos);
- READ_BITMAPSET_FIELD(other_subplans);
-
- READ_DONE();
-}
-
-static PartitionedRelPruneInfo *
-_readPartitionedRelPruneInfo(void)
-{
- READ_LOCALS(PartitionedRelPruneInfo);
-
- READ_UINT_FIELD(rtindex);
- READ_BITMAPSET_FIELD(present_parts);
- READ_INT_FIELD(nparts);
- READ_INT_ARRAY(subplan_map, local_node->nparts);
- READ_INT_ARRAY(subpart_map, local_node->nparts);
- READ_OID_ARRAY(relid_map, local_node->nparts);
- READ_NODE_FIELD(initial_pruning_steps);
- READ_NODE_FIELD(exec_pruning_steps);
- READ_BITMAPSET_FIELD(execparamids);
-
- READ_DONE();
-}
-
-static PartitionPruneStepOp *
-_readPartitionPruneStepOp(void)
-{
- READ_LOCALS(PartitionPruneStepOp);
-
- READ_INT_FIELD(step.step_id);
- READ_INT_FIELD(opstrategy);
- READ_NODE_FIELD(exprs);
- READ_NODE_FIELD(cmpfns);
- READ_BITMAPSET_FIELD(nullkeys);
-
- READ_DONE();
-}
-
-static PartitionPruneStepCombine *
-_readPartitionPruneStepCombine(void)
-{
- READ_LOCALS(PartitionPruneStepCombine);
-
- READ_INT_FIELD(step.step_id);
- READ_ENUM_FIELD(combineOp, PartitionPruneCombineOp);
- READ_NODE_FIELD(source_stepids);
+ /* put alias + eref first to make dump more legible */
+ READ_NODE_FIELD(alias);
+ READ_NODE_FIELD(eref);
+ READ_ENUM_FIELD(rtekind, RTEKind);
+ READ_BOOL_FIELD(relisivm);
- READ_DONE();
-}
+ switch (local_node->rtekind)
+ {
+ case RTE_RELATION:
+ READ_OID_FIELD(relid);
+ READ_CHAR_FIELD(relkind);
+ READ_INT_FIELD(rellockmode);
+ READ_NODE_FIELD(tablesample);
+ READ_UINT_FIELD(perminfoindex);
+ break;
+ case RTE_SUBQUERY:
+ READ_NODE_FIELD(subquery);
+ READ_BOOL_FIELD(security_barrier);
+ /* we re-use these RELATION fields, too: */
+ READ_OID_FIELD(relid);
+ READ_CHAR_FIELD(relkind);
+ READ_INT_FIELD(rellockmode);
+ READ_UINT_FIELD(perminfoindex);
+ break;
+ case RTE_JOIN:
+ READ_ENUM_FIELD(jointype, JoinType);
+ READ_INT_FIELD(joinmergedcols);
+ READ_NODE_FIELD(joinaliasvars);
+ READ_NODE_FIELD(joinleftcols);
+ READ_NODE_FIELD(joinrightcols);
+ READ_NODE_FIELD(join_using_alias);
+ break;
+ case RTE_FUNCTION:
+ READ_NODE_FIELD(functions);
+ READ_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNCTION:
+ READ_NODE_FIELD(subquery);
+ READ_NODE_FIELD(functions);
+ READ_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNC:
+ READ_NODE_FIELD(tablefunc);
+ /* The RTE must have a copy of the column type info, if any */
+ if (local_node->tablefunc)
+ {
+ TableFunc *tf = local_node->tablefunc;
-/*
- * _readPlanInvalItem
- */
-static PlanInvalItem *
-_readPlanInvalItem(void)
-{
- READ_LOCALS(PlanInvalItem);
+ local_node->coltypes = tf->coltypes;
+ local_node->coltypmods = tf->coltypmods;
+ local_node->colcollations = tf->colcollations;
+ }
+ break;
+ case RTE_VALUES:
+ READ_NODE_FIELD(values_lists);
+ READ_NODE_FIELD(coltypes);
+ READ_NODE_FIELD(coltypmods);
+ READ_NODE_FIELD(colcollations);
+ break;
+ case RTE_CTE:
+ READ_STRING_FIELD(ctename);
+ READ_UINT_FIELD(ctelevelsup);
+ READ_BOOL_FIELD(self_reference);
+ READ_NODE_FIELD(coltypes);
+ READ_NODE_FIELD(coltypmods);
+ READ_NODE_FIELD(colcollations);
+ break;
+ case RTE_NAMEDTUPLESTORE:
+ READ_STRING_FIELD(enrname);
+ READ_FLOAT_FIELD(enrtuples);
+ READ_NODE_FIELD(coltypes);
+ READ_NODE_FIELD(coltypmods);
+ READ_NODE_FIELD(colcollations);
+ /* we re-use these RELATION fields, too: */
+ READ_OID_FIELD(relid);
+ break;
+ case RTE_RESULT:
+ /* no extra fields */
+ break;
+ default:
+ elog(ERROR, "unrecognized RTE kind: %d",
+ (int) local_node->rtekind);
+ break;
+ }
- READ_INT_FIELD(cacheId);
- READ_UINT_FIELD(hashValue);
+ READ_BOOL_FIELD(lateral);
+ READ_BOOL_FIELD(inh);
+ READ_BOOL_FIELD(inFromCl);
+ READ_NODE_FIELD(securityQuals);
+
+ READ_BOOL_FIELD(forceDistRandom);
READ_DONE();
}
-/*
- * _readSubPlan
- */
-static SubPlan *
-_readSubPlan(void)
+static A_Expr *
+_readA_Expr(void)
{
- READ_LOCALS(SubPlan);
-
- READ_ENUM_FIELD(subLinkType, SubLinkType);
- READ_NODE_FIELD(testexpr);
- READ_NODE_FIELD(paramIds);
- READ_INT_FIELD(plan_id);
- READ_STRING_FIELD(plan_name);
- READ_OID_FIELD(firstColType);
- READ_INT_FIELD(firstColTypmod);
- READ_OID_FIELD(firstColCollation);
- READ_BOOL_FIELD(useHashTable);
- READ_BOOL_FIELD(unknownEqFalse);
- READ_BOOL_FIELD(parallel_safe);
- READ_BOOL_FIELD(is_initplan); /*CDB*/
- READ_BOOL_FIELD(is_multirow); /*CDB*/
- READ_NODE_FIELD(setParam);
- READ_NODE_FIELD(parParam);
- READ_NODE_FIELD(args);
- READ_NODE_FIELD(extParam);
- READ_FLOAT_FIELD(startup_cost);
- READ_FLOAT_FIELD(per_call_cost);
+ READ_LOCALS(A_Expr);
- READ_DONE();
-}
+ token = pg_strtok(&length);
-/*
- * _readAlternativeSubPlan
- */
-static AlternativeSubPlan *
-_readAlternativeSubPlan(void)
-{
- READ_LOCALS(AlternativeSubPlan);
+ if (length == 3 && strncmp(token, "ANY", 3) == 0)
+ {
+ local_node->kind = AEXPR_OP_ANY;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 3 && strncmp(token, "ALL", 3) == 0)
+ {
+ local_node->kind = AEXPR_OP_ALL;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 8 && strncmp(token, "DISTINCT", 8) == 0)
+ {
+ local_node->kind = AEXPR_DISTINCT;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 12 && strncmp(token, "NOT_DISTINCT", 12) == 0)
+ {
+ local_node->kind = AEXPR_NOT_DISTINCT;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 6 && strncmp(token, "NULLIF", 6) == 0)
+ {
+ local_node->kind = AEXPR_NULLIF;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 2 && strncmp(token, "IN", 2) == 0)
+ {
+ local_node->kind = AEXPR_IN;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 4 && strncmp(token, "LIKE", 4) == 0)
+ {
+ local_node->kind = AEXPR_LIKE;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 5 && strncmp(token, "ILIKE", 5) == 0)
+ {
+ local_node->kind = AEXPR_ILIKE;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 7 && strncmp(token, "SIMILAR", 7) == 0)
+ {
+ local_node->kind = AEXPR_SIMILAR;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 7 && strncmp(token, "BETWEEN", 7) == 0)
+ {
+ local_node->kind = AEXPR_BETWEEN;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 11 && strncmp(token, "NOT_BETWEEN", 11) == 0)
+ {
+ local_node->kind = AEXPR_NOT_BETWEEN;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 11 && strncmp(token, "BETWEEN_SYM", 11) == 0)
+ {
+ local_node->kind = AEXPR_BETWEEN_SYM;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 15 && strncmp(token, "NOT_BETWEEN_SYM", 15) == 0)
+ {
+ local_node->kind = AEXPR_NOT_BETWEEN_SYM;
+ READ_NODE_FIELD(name);
+ }
+ else if (length == 5 && strncmp(token, ":name", 5) == 0)
+ {
+ local_node->kind = AEXPR_OP;
+ local_node->name = nodeRead(NULL, 0);
+ }
+ else
+ elog(ERROR, "unrecognized A_Expr kind: \"%.*s\"", length, token);
- READ_NODE_FIELD(subplans);
+ READ_NODE_FIELD(lexpr);
+ READ_NODE_FIELD(rexpr);
+ READ_LOCATION_FIELD(location);
READ_DONE();
}
-#ifndef COMPILING_BINARY_FUNCS
-/*
- * _readExtensibleNode
- */
static ExtensibleNode *
_readExtensibleNode(void)
{
@@ -2897,204 +696,332 @@ _readExtensibleNode(void)
READ_DONE();
}
-#endif /* COMPILING_BINARY_FUNCS */
-/*
- * _readPartitionBoundSpec
- */
-static PartitionBoundSpec *
-_readPartitionBoundSpec(void)
+static ColumnDef *
+_readColumnDef(void)
{
- READ_LOCALS(PartitionBoundSpec);
-
- READ_CHAR_FIELD(strategy);
- READ_BOOL_FIELD(is_default);
- READ_INT_FIELD(modulus);
- READ_INT_FIELD(remainder);
- READ_NODE_FIELD(listdatums);
- READ_NODE_FIELD(lowerdatums);
- READ_NODE_FIELD(upperdatums);
+ READ_LOCALS(ColumnDef);
+
+ READ_STRING_FIELD(colname);
+ READ_NODE_FIELD(typeName);
+ READ_STRING_FIELD(compression);
+ READ_INT_FIELD(inhcount);
+ READ_BOOL_FIELD(is_local);
+ READ_BOOL_FIELD(is_not_null);
+ READ_BOOL_FIELD(is_from_type);
+ READ_INT_FIELD(attnum);
+ READ_INT_FIELD(storage);
+ READ_STRING_FIELD(storage_name);
+ READ_NODE_FIELD(raw_default);
+ READ_NODE_FIELD(cooked_default);
+
+ READ_BOOL_FIELD(hasCookedMissingVal);
+ READ_BOOL_FIELD(missingIsNull);
+ if (local_node->hasCookedMissingVal && !local_node->missingIsNull)
+ local_node->missingVal = readDatum(false);
+
+ READ_CHAR_FIELD(identity);
+ READ_NODE_FIELD(identitySequence);
+ READ_CHAR_FIELD(generated);
+ READ_NODE_FIELD(collClause);
+ READ_OID_FIELD(collOid);
+ READ_NODE_FIELD(constraints);
+ READ_NODE_FIELD(encoding);
+ READ_NODE_FIELD(fdwoptions);
READ_LOCATION_FIELD(location);
READ_DONE();
}
-/*
- * _readPartitionRangeDatum
- */
-static PartitionRangeDatum *
-_readPartitionRangeDatum(void)
+static SerializedParams *
+_readSerializedParams(void)
{
- READ_LOCALS(PartitionRangeDatum);
+ READ_LOCALS(SerializedParams);
- READ_ENUM_FIELD(kind, PartitionRangeDatumKind);
- READ_NODE_FIELD(value);
- READ_LOCATION_FIELD(location);
+ READ_INT_FIELD(nExternParams);
+ local_node->externParams = palloc0(local_node->nExternParams * sizeof(SerializedParamExternData));
+ for (int i = 0; i < local_node->nExternParams; i++)
+ {
+ READ_BOOL_FIELD(externParams[i].isnull);
+ READ_INT_FIELD(externParams[i].pflags);
+ READ_OID_FIELD(externParams[i].ptype);
+ READ_INT_FIELD(externParams[i].plen);
+ READ_BOOL_FIELD(externParams[i].pbyval);
+
+ if (!local_node->externParams[i].isnull)
+ local_node->externParams[i].value = readDatum(local_node->externParams[i].pbyval);
+ }
+
+ READ_INT_FIELD(nExecParams);
+ local_node->execParams = palloc0(local_node->nExecParams * sizeof(SerializedParamExecData));
+ for (int i = 0; i < local_node->nExecParams; i++)
+ {
+ READ_BOOL_FIELD(execParams[i].isnull);
+ READ_BOOL_FIELD(execParams[i].isvalid);
+ READ_INT_FIELD(execParams[i].plen);
+ READ_BOOL_FIELD(execParams[i].pbyval);
+
+ if (local_node->execParams[i].isvalid && !local_node->execParams[i].isnull)
+ local_node->execParams[i].value = readDatum(local_node->execParams[i].pbyval);
+ READ_BOOL_FIELD(execParams[i].pbyval);
+ }
READ_DONE();
}
-static RTEPermissionInfo *
-_readRTEPermissionInfo(void)
+static SliceTable *
+_readSliceTable(void)
{
- READ_LOCALS(RTEPermissionInfo);
+ READ_LOCALS(SliceTable);
- READ_OID_FIELD(relid);
- READ_BOOL_FIELD(inh);
- READ_UINT64_FIELD(requiredPerms);
- READ_OID_FIELD(checkAsUser);
- READ_BITMAPSET_FIELD(selectedCols);
- READ_BITMAPSET_FIELD(insertedCols);
- READ_BITMAPSET_FIELD(updatedCols);
+ READ_INT_FIELD(localSlice);
+ READ_INT_FIELD(numSlices);
+ local_node->slices = palloc0(local_node->numSlices * sizeof(ExecSlice));
+ for (int i = 0; i < local_node->numSlices; i++)
+ {
+ READ_INT_FIELD(slices[i].sliceIndex);
+ READ_INT_FIELD(slices[i].rootIndex);
+ READ_INT_FIELD(slices[i].parentIndex);
+ READ_INT_FIELD(slices[i].planNumSegments);
+ READ_NODE_FIELD(slices[i].children); /* List of int index */
+ READ_ENUM_FIELD(slices[i].gangType, GangType);
+ READ_NODE_FIELD(slices[i].segments); /* List of int index */
+ READ_BOOL_FIELD(slices[i].useMppParallelMode);
+ READ_INT_FIELD(slices[i].parallel_workers);
+ local_node->slices[i].primaryGang = NULL;
+ READ_NODE_FIELD(slices[i].primaryProcesses); /* List of (CDBProcess *) */
+ READ_BITMAPSET_FIELD(slices[i].processesMap);
+ }
+ READ_BOOL_FIELD(hasMotions);
+
+ READ_INT_FIELD(instrument_options);
+ READ_INT_FIELD(ic_instance_id);
READ_DONE();
}
-/*
- * _readGpPolicy
- */
-static GpPolicy *
-_readGpPolicy(void)
+
+static TupleDescNode *
+_readTupleDescNode(void)
{
- READ_LOCALS(GpPolicy);
+ READ_LOCALS(TupleDescNode);
- READ_ENUM_FIELD(ptype, GpPolicyType);
+ READ_INT_FIELD(natts);
- READ_INT_FIELD(numsegments);
+ local_node->tuple = CreateTemplateTupleDesc(local_node->natts);
- READ_INT_FIELD(nattrs);
- READ_ATTRNUMBER_ARRAY(attrs, local_node->nattrs);
- READ_OID_ARRAY(opclasses, local_node->nattrs);
+ READ_INT_FIELD(tuple->natts);
- READ_DONE();
-}
+ READ_OID_FIELD(tuple->tdtypeid);
+ READ_INT_FIELD(tuple->tdtypmod);
+ READ_INT_FIELD(tuple->tdrefcount);
-static MergeAction *
-_readMergeAction(void)
-{
- READ_LOCALS(MergeAction);
+ // Transient type don't have constraint.
+ local_node->tuple->constr = NULL;
- READ_BOOL_FIELD(matched);
- READ_ENUM_FIELD(commandType, CmdType);
- READ_ENUM_FIELD(override, OverridingKind);
- READ_NODE_FIELD(qual);
- READ_NODE_FIELD(targetList);
- READ_NODE_FIELD(updateColnos);
+ Assert(local_node->tuple->tdtypeid == RECORDOID);
READ_DONE();
}
-static PublicationObjSpec *
-_readPublicationObjSpec(void)
+static void
+unwrapStringList(List *list)
{
- READ_LOCALS(PublicationObjSpec);
+ ListCell *lc;
- READ_ENUM_FIELD(pubobjtype, PublicationObjSpecType);
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(pubtable);
- READ_LOCATION_FIELD(location);
+ foreach(lc, list)
+ {
+ String *val = lfirst(lc);
- READ_DONE();
+ lfirst(lc) = strVal(val);
+ pfree(val);
+ }
}
-static PublicationTable *
-_readPublicationTable(void)
+static AlteredTableInfo *
+_readAlteredTableInfo(void)
{
- READ_LOCALS(PublicationTable);
+ READ_LOCALS(AlteredTableInfo);
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(whereClause);
- READ_NODE_FIELD(columns);
+ READ_OID_FIELD(relid);
+ READ_CHAR_FIELD(relkind);
+ /* oldDesc is omitted */
- READ_DONE();
-}
+ for (int i = 0; i < AT_NUM_PASSES; i++)
+ {
+ READ_NODE_FIELD(subcmds[i]);
+ }
-static WindowDef *
-_readWindowDef(void)
-{
- READ_LOCALS(WindowDef);
+ READ_NODE_FIELD(constraints);
+ READ_NODE_FIELD(newvals);
+ READ_NODE_FIELD(afterStmts);
+ READ_BOOL_FIELD(verify_new_notnull);
+ READ_INT_FIELD(rewrite);
+ READ_OID_FIELD(newAccessMethod);
+ READ_BOOL_FIELD(dist_opfamily_changed);
+ READ_OID_FIELD(new_opclass);
+ READ_BOOL_FIELD(chgPersistence);
+ READ_CHAR_FIELD(newrelpersistence);
+ READ_NODE_FIELD(partition_constraint);
+ READ_BOOL_FIELD(validate_default);
+ READ_NODE_FIELD(changedConstraintOids);
+ READ_NODE_FIELD(changedConstraintDefs);
+ /* The QD sends changedConstraintDefs wrapped in Values. Unwrap them. */
+ unwrapStringList(local_node->changedConstraintDefs);
+ READ_NODE_FIELD(changedIndexOids);
+ READ_NODE_FIELD(changedIndexDefs);
+ unwrapStringList(local_node->changedIndexDefs);
+ READ_NODE_FIELD(beforeStmtLists);
+ READ_NODE_FIELD(constraintLists);
+
+ READ_DONE();
+}
+
+static NewConstraint *
+_readNewConstraint(void)
+{
+ READ_LOCALS(NewConstraint);
READ_STRING_FIELD(name);
- READ_STRING_FIELD(refname);
- READ_NODE_FIELD(partitionClause);
- READ_NODE_FIELD(orderClause);
- READ_INT_FIELD(frameOptions);
- READ_NODE_FIELD(startOffset);
- READ_NODE_FIELD(endOffset);
- READ_LOCATION_FIELD(location);
+ READ_ENUM_FIELD(contype, ConstrType);
+ READ_OID_FIELD(refrelid);
+ READ_OID_FIELD(refindid);
+ READ_OID_FIELD(conid);
+ READ_NODE_FIELD(qual);
+ /* can't serialize qualstate */
READ_DONE();
}
-static JsonConstructorExpr *
-_readJsonConstructorExpr(void)
+static PlannedStmt *
+_readPlannedStmt(void)
{
- READ_LOCALS(JsonConstructorExpr);
+ READ_LOCALS(PlannedStmt);
- READ_ENUM_FIELD(type, JsonConstructorType);
- READ_NODE_FIELD(args);
- READ_NODE_FIELD(func);
- READ_NODE_FIELD(coercion);
- READ_NODE_FIELD(returning);
- READ_BOOL_FIELD(absent_on_null);
- READ_BOOL_FIELD(unique);
- READ_LOCATION_FIELD(location);
+ READ_ENUM_FIELD(commandType, CmdType);
+ READ_ENUM_FIELD(planGen, PlanGenerator);
+ READ_UINT64_FIELD(queryId);
+ READ_BOOL_FIELD(hasReturning);
+ READ_BOOL_FIELD(hasModifyingCTE);
+ READ_BOOL_FIELD(canSetTag);
+ READ_BOOL_FIELD(transientPlan);
+ READ_BOOL_FIELD(oneoffPlan);
+ READ_OID_FIELD(simplyUpdatableRel);
+ READ_BOOL_FIELD(dependsOnRole);
+ READ_BOOL_FIELD(parallelModeNeeded);
+ READ_INT_FIELD(jitFlags);
+ READ_NODE_FIELD(planTree);
+ READ_NODE_FIELD(rtable);
+ READ_NODE_FIELD(permInfos);
+ READ_NODE_FIELD(resultRelations);
+ READ_NODE_FIELD(appendRelations);
+ READ_NODE_FIELD(subplans);
+ READ_BITMAPSET_FIELD(rewindPlanIDs);
+ READ_NODE_FIELD(rowMarks);
+ READ_NODE_FIELD(relationOids);
+ READ_NODE_FIELD(invalItems);
+ READ_NODE_FIELD(paramExecTypes);
+ READ_NODE_FIELD(utilityStmt);
+ READ_LOCATION_FIELD(stmt_location);
+ READ_INT_FIELD(stmt_len);
- READ_DONE();
-}
+ READ_INT_ARRAY(subplan_sliceIds, list_length(local_node->subplans));
-static JsonIsPredicate *
-_readJsonIsPredicate(void)
-{
- READ_LOCALS(JsonIsPredicate);
+ READ_INT_FIELD(numSlices);
+ local_node->slices = palloc(local_node->numSlices * sizeof(PlanSlice));
+ for (int i = 0; i < local_node->numSlices; i++)
+ {
+ READ_INT_FIELD(slices[i].sliceIndex);
+ READ_INT_FIELD(slices[i].parentIndex);
+ READ_INT_FIELD(slices[i].gangType);
+ READ_INT_FIELD(slices[i].numsegments);
+ READ_INT_FIELD(slices[i].parallel_workers);
+ READ_INT_FIELD(slices[i].segindex);
+ READ_BOOL_FIELD(slices[i].directDispatch.isDirectDispatch);
+ READ_NODE_FIELD(slices[i].directDispatch.contentIds);
+ }
- READ_NODE_FIELD(expr);
- READ_NODE_FIELD(format);
- READ_ENUM_FIELD(item_type, JsonValueType);
- READ_BOOL_FIELD(unique_keys);
- READ_LOCATION_FIELD(location);
+ READ_BITMAPSET_FIELD(rewindPlanIDs);
- READ_DONE();
-}
+ READ_NODE_FIELD(intoPolicy);
-static JsonReturning *
-_readJsonReturning(void)
-{
- READ_LOCALS(JsonReturning);
+ READ_UINT64_FIELD(query_mem);
- READ_NODE_FIELD(format);
- READ_OID_FIELD(typid);
- READ_INT_FIELD(typmod);
+ READ_NODE_FIELD(intoClause);
+ READ_NODE_FIELD(copyIntoClause);
+ READ_NODE_FIELD(refreshClause);
+ READ_INT_FIELD(metricsQueryType);
+ READ_NODE_FIELD(extensionContext);
READ_DONE();
}
-static JsonValueExpr *
-_readJsonValueExpr(void)
+static Motion *
+_readMotion(void)
{
- READ_LOCALS(JsonValueExpr);
+ READ_LOCALS(Motion);
- READ_NODE_FIELD(raw_expr);
- READ_NODE_FIELD(formatted_expr);
- READ_NODE_FIELD(format);
+ READ_FLOAT_FIELD(plan.startup_cost);
+ READ_FLOAT_FIELD(plan.total_cost);
+ READ_FLOAT_FIELD(plan.plan_rows);
+ READ_INT_FIELD(plan.plan_width);
+ READ_BOOL_FIELD(plan.parallel_aware);
+ READ_BOOL_FIELD(plan.parallel_safe);
+ READ_BOOL_FIELD(plan.async_capable);
+ READ_INT_FIELD(plan.plan_node_id);
+ READ_NODE_FIELD(plan.targetlist);
+ READ_NODE_FIELD(plan.qual);
+ READ_NODE_FIELD(plan.lefttree);
+ READ_NODE_FIELD(plan.righttree);
+ READ_NODE_FIELD(plan.initPlan);
+ READ_BITMAPSET_FIELD(plan.extParam);
+ READ_BITMAPSET_FIELD(plan.allParam);
+ READ_NODE_FIELD(plan.flow);
+ READ_UINT_FIELD(plan.locustype);
+ READ_INT_FIELD(plan.parallel);
+ READ_UINT64_FIELD(plan.operatorMemKB);
+
+ READ_INT_FIELD(motionID);
+ READ_ENUM_FIELD(motionType, MotionType);
+ Assert(local_node->motionType == MOTIONTYPE_GATHER ||
+ local_node->motionType == MOTIONTYPE_GATHER_SINGLE ||
+ local_node->motionType == MOTIONTYPE_HASH ||
+ local_node->motionType == MOTIONTYPE_BROADCAST ||
+ local_node->motionType == MOTIONTYPE_BROADCAST_WORKERS ||
+ local_node->motionType == MOTIONTYPE_EXPLICIT);
+
+ READ_BOOL_FIELD(sendSorted);
+
+ READ_NODE_FIELD(hashExprs);
+ READ_OID_ARRAY(hashFuncs, list_length(local_node->hashExprs));
+
+ READ_INT_FIELD(numSortCols);
+ READ_ATTRNUMBER_ARRAY(sortColIdx, local_node->numSortCols);
+ READ_OID_ARRAY(sortOperators, local_node->numSortCols);
+ READ_OID_ARRAY(collations, local_node->numSortCols);
+ READ_BOOL_ARRAY(nullsFirst, local_node->numSortCols);
+
+ READ_INT_FIELD(segidColIdx);
+ READ_INT_FIELD(numHashSegments);
+
READ_DONE();
}
-static JsonFormat *
-_readJsonFormat(void)
+static OidAssignment *
+_readOidAssignment(void)
{
- READ_LOCALS(JsonFormat);
-
- READ_ENUM_FIELD(format_type, JsonFormatType);
- READ_ENUM_FIELD(encoding, JsonEncoding);
- READ_LOCATION_FIELD(location);
+ READ_LOCALS(OidAssignment);
+ READ_OID_FIELD(catalog);
+ READ_STRING_FIELD(objname);
+ READ_OID_FIELD(namespaceOid);
+ READ_OID_FIELD(keyOid1);
+ READ_OID_FIELD(keyOid2);
+ READ_OID_FIELD(oid);
READ_DONE();
}
-#include "readfuncs_common.c"
-#ifndef COMPILING_BINARY_FUNCS
/*
* parseNodeString
*
@@ -3106,8 +1033,6 @@ _readJsonFormat(void)
Node *
parseNodeString(void)
{
- void *return_value;
-
READ_TEMP_LOCALS();
/* Guard against stack overflow due to overly complex expressions */
@@ -3118,534 +1043,10 @@ parseNodeString(void)
#define MATCH(tokname, namelen) \
(length == namelen && memcmp(token, tokname, namelen) == 0)
- /*
- * Same as MATCH, but we make our life a bit easier by relying on the
- * compiler to be smart, and evaluate the strlen("") at
- * compilation time for us.
- */
-#define MATCHX(tokname) \
- (length == strlen(tokname) && strncmp(token, tokname, strlen(tokname)) == 0)
-
- if (MATCH("QUERY", 5))
- return_value = _readQuery();
- else if (MATCH("WITHCHECKOPTION", 15))
- return_value = _readWithCheckOption();
- else if (MATCH("SORTGROUPCLAUSE", 15))
- return_value = _readSortGroupClause();
- else if (MATCH("GROUPINGSET", 11))
- return_value = _readGroupingSet();
- else if (MATCH("WINDOWCLAUSE", 12))
- return_value = _readWindowClause();
- else if (MATCH("ROWMARKCLAUSE", 13))
- return_value = _readRowMarkClause();
- else if (MATCH("CTESEARCHCLAUSE", 15))
- return_value = _readCTESearchClause();
- else if (MATCH("CTECYCLECLAUSE", 14))
- return_value = _readCTECycleClause();
- else if (MATCH("COMMONTABLEEXPR", 15))
- return_value = _readCommonTableExpr();
- else if (MATCH("SETOPERATIONSTMT", 16))
- return_value = _readSetOperationStmt();
- else if (MATCH("ALIAS", 5))
- return_value = _readAlias();
- else if (MATCH("RANGEVAR", 8))
- return_value = _readRangeVar();
- else if (MATCH("INTOCLAUSE", 10))
- return_value = _readIntoClause();
- else if (MATCH("COPYINTOCLAUSE", 14))
- return_value = _readCopyIntoClause();
- else if (MATCH("REFRESHCLAUSE", 13))
- return_value = _readRefreshClause();
- else if (MATCH("TABLEFUNC", 9))
- return_value = _readTableFunc();
- else if (MATCH("VAR", 3))
- return_value = _readVar();
- else if (MATCH("CONST", 5))
- return_value = _readConst();
- else if (MATCH("PARAM", 5))
- return_value = _readParam();
- else if (MATCH("AGGREF", 6))
- return_value = _readAggref();
- else if (MATCH("GROUPINGFUNC", 12))
- return_value = _readGroupingFunc();
- else if (MATCH("GROUPID", 7))
- return_value = _readGroupId();
- else if (MATCH("GROUPINGSETID", 13))
- return_value = _readGroupingSetId();
- else if (MATCH("WINDOWFUNC", 10))
- return_value = _readWindowFunc();
- else if (MATCH("SUBSCRIPTINGREF", 15))
- return_value = _readSubscriptingRef();
- else if (MATCH("FUNCEXPR", 8))
- return_value = _readFuncExpr();
- else if (MATCH("NAMEDARGEXPR", 12))
- return_value = _readNamedArgExpr();
- else if (MATCH("OPEXPR", 6))
- return_value = _readOpExpr();
- else if (MATCH("DISTINCTEXPR", 12))
- return_value = _readDistinctExpr();
- else if (MATCH("NULLIFEXPR", 10))
- return_value = _readNullIfExpr();
- else if (MATCH("SCALARARRAYOPEXPR", 17))
- return_value = _readScalarArrayOpExpr();
- else if (MATCH("BOOLEXPR", 8))
- return_value = _readBoolExpr();
- else if (MATCH("SUBLINK", 7))
- return_value = _readSubLink();
- else if (MATCH("FIELDSELECT", 11))
- return_value = _readFieldSelect();
- else if (MATCH("FIELDSTORE", 10))
- return_value = _readFieldStore();
- else if (MATCH("RELABELTYPE", 11))
- return_value = _readRelabelType();
- else if (MATCH("COERCEVIAIO", 11))
- return_value = _readCoerceViaIO();
- else if (MATCH("ARRAYCOERCEEXPR", 15))
- return_value = _readArrayCoerceExpr();
- else if (MATCH("CONVERTROWTYPEEXPR", 18))
- return_value = _readConvertRowtypeExpr();
- else if (MATCH("COLLATE", 7))
- return_value = _readCollateExpr();
- else if (MATCH("CASE", 4))
- return_value = _readCaseExpr();
- else if (MATCH("WHEN", 4))
- return_value = _readCaseWhen();
- else if (MATCH("CASETESTEXPR", 12))
- return_value = _readCaseTestExpr();
- else if (MATCH("ARRAY", 5))
- return_value = _readArrayExpr();
- else if (MATCH("ROW", 3))
- return_value = _readRowExpr();
- else if (MATCH("ROWCOMPARE", 10))
- return_value = _readRowCompareExpr();
- else if (MATCH("COALESCE", 8))
- return_value = _readCoalesceExpr();
- else if (MATCH("MINMAX", 6))
- return_value = _readMinMaxExpr();
- else if (MATCH("SQLVALUEFUNCTION", 16))
- return_value = _readSQLValueFunction();
- else if (MATCH("XMLEXPR", 7))
- return_value = _readXmlExpr();
- else if (MATCH("NULLTEST", 8))
- return_value = _readNullTest();
- else if (MATCH("BOOLEANTEST", 11))
- return_value = _readBooleanTest();
- else if (MATCH("COERCETODOMAIN", 14))
- return_value = _readCoerceToDomain();
- else if (MATCH("COERCETODOMAINVALUE", 19))
- return_value = _readCoerceToDomainValue();
- else if (MATCH("SETTODEFAULT", 12))
- return_value = _readSetToDefault();
- else if (MATCH("CURRENTOFEXPR", 13))
- return_value = _readCurrentOfExpr();
- else if (MATCH("NEXTVALUEEXPR", 13))
- return_value = _readNextValueExpr();
- else if (MATCH("INFERENCEELEM", 13))
- return_value = _readInferenceElem();
- else if (MATCH("TARGETENTRY", 11))
- return_value = _readTargetEntry();
- else if (MATCH("RANGETBLREF", 11))
- return_value = _readRangeTblRef();
- else if (MATCH("JOINEXPR", 8))
- return_value = _readJoinExpr();
- else if (MATCH("FROMEXPR", 8))
- return_value = _readFromExpr();
- else if (MATCH("ONCONFLICTEXPR", 14))
- return_value = _readOnConflictExpr();
- else if (MATCH("APPENDRELINFO", 13))
- return_value = _readAppendRelInfo();
- else if (MATCH("RTE", 3))
- return_value = _readRangeTblEntry();
- else if (MATCH("RANGETBLFUNCTION", 16))
- return_value = _readRangeTblFunction();
- else if (MATCH("TABLESAMPLECLAUSE", 17))
- return_value = _readTableSampleClause();
- else if (MATCH("NOTIFY", 6))
- return_value = _readNotifyStmt();
- else if (MATCH("DEFELEM", 7))
- return_value = _readDefElem();
- else if (MATCH("DECLARECURSOR", 13))
- return_value = _readDeclareCursorStmt();
- else if (MATCH("PLANNEDSTMT", 11))
- return_value = _readPlannedStmt();
- else if (MATCH("PLAN", 4))
- return_value = _readPlan();
- else if (MATCH("RESULT", 6))
- return_value = _readResult();
- else if (MATCH("PROJECTSET", 10))
- return_value = _readProjectSet();
- else if (MATCH("MODIFYTABLE", 11))
- return_value = _readModifyTable();
- else if (MATCH("APPEND", 6))
- return_value = _readAppend();
- else if (MATCH("MERGEAPPEND", 11))
- return_value = _readMergeAppend();
- else if (MATCH("RECURSIVEUNION", 14))
- return_value = _readRecursiveUnion();
- else if (MATCH("BITMAPAND", 9))
- return_value = _readBitmapAnd();
- else if (MATCH("BITMAPOR", 8))
- return_value = _readBitmapOr();
- else if (MATCH("SCAN", 4))
- return_value = _readScan();
- else if (MATCH("SEQSCAN", 7))
- return_value = _readSeqScan();
- else if (MATCH("SAMPLESCAN", 10))
- return_value = _readSampleScan();
- else if (MATCH("INDEXSCAN", 9))
- return_value = _readIndexScan();
- else if (MATCH("DYNAMICINDEXSCAN", 16))
- return_value = _readDynamicIndexScan();
- else if (MATCH("DYNAMICINDEXONLYSCAN", 20))
- return_value = _readDynamicIndexOnlyScan();
- else if (MATCH("INDEXONLYSCAN", 13))
- return_value = _readIndexOnlyScan();
- else if (MATCH("BITMAPINDEXSCAN", 15))
- return_value = _readBitmapIndexScan();
- else if (MATCH("DYNAMICBITMAPINDEXSCAN", 23))
- return_value = _readDynamicBitmapIndexScan();
- else if (MATCH("BITMAPHEAPSCAN", 14))
- return_value = _readBitmapHeapScan();
- else if (MATCH("DYNAMICBITMAPHEAPSCAN", 21))
- return_value = _readDynamicBitmapHeapScan();
- else if (MATCH("TIDSCAN", 7))
- return_value = _readTidScan();
- else if (MATCH("TIDRANGESCAN", 12))
- return_value = _readTidRangeScan();
- else if (MATCH("SUBQUERYSCAN", 12))
- return_value = _readSubqueryScan();
- else if (MATCH("TABLEFUNCTIONSCAN", 17))
- return_value = _readTableFunctionScan();
- else if (MATCH("FUNCTIONSCAN", 12))
- return_value = _readFunctionScan();
- else if (MATCH("VALUESSCAN", 10))
- return_value = _readValuesScan();
- else if (MATCH("TABLEFUNCSCAN", 13))
- return_value = _readTableFuncScan();
- else if (MATCH("CTESCAN", 7))
- return_value = _readCteScan();
- else if (MATCH("NAMEDTUPLESTORESCAN", 19))
- return_value = _readNamedTuplestoreScan();
- else if (MATCH("WORKTABLESCAN", 13))
- return_value = _readWorkTableScan();
- else if (MATCH("FOREIGNSCAN", 11))
- return_value = _readForeignScan();
- else if (MATCH("DYNAMICFOREIGNSCAN", 18))
- return_value = _readDynamicForeignScan();
- else if (MATCH("CUSTOMSCAN", 10))
- return_value = _readCustomScan();
- else if (MATCH("JOIN", 4))
- return_value = _readJoin();
- else if (MATCH("NESTLOOP", 8))
- return_value = _readNestLoop();
- else if (MATCH("MERGEJOIN", 9))
- return_value = _readMergeJoin();
- else if (MATCH("HASHJOIN", 8))
- return_value = _readHashJoin();
- else if (MATCH("MATERIAL", 8))
- return_value = _readMaterial();
- else if (MATCH("MEMOIZE", 7))
- return_value = _readMemoize();
- else if (MATCH("SORT", 4))
- return_value = _readSort();
- else if (MATCH("INCREMENTALSORT", 15))
- return_value = _readIncrementalSort();
- else if (MATCH("GROUP", 5))
- return_value = _readGroup();
- else if (MATCH("AGG", 3))
- return_value = _readAgg();
- else if (MATCH("TupleSplit", 10))
- return_value = _readTupleSplit();
- else if (MATCH("DQAExpr", 7))
- return_value = _readDQAExpr();
- else if (MATCH("WINDOWAGG", 9))
- return_value = _readWindowAgg();
- else if (MATCH("WINDOWHASHAGG", 13))
- return_value = _readWindowHashAgg();
- else if (MATCH("UNIQUE", 6))
- return_value = _readUnique();
- else if (MATCH("GATHER", 6))
- return_value = _readGather();
- else if (MATCH("GATHERMERGE", 11))
- return_value = _readGatherMerge();
- else if (MATCH("HASH", 4))
- return_value = _readHash();
- else if (MATCH("SETOP", 5))
- return_value = _readSetOp();
- else if (MATCH("LOCKROWS", 8))
- return_value = _readLockRows();
- else if (MATCH("RUNTIMEFILTER", 13))
- return_value = _readRuntimeFilter();
- else if (MATCH("LIMIT", 5))
- return_value = _readLimit();
- else if (MATCH("NESTLOOPPARAM", 13))
- return_value = _readNestLoopParam();
- else if (MATCH("PLANROWMARK", 11))
- return_value = _readPlanRowMark();
- else if (MATCH("PARTITIONPRUNEINFO", 18))
- return_value = _readPartitionPruneInfo();
- else if (MATCH("PARTITIONEDRELPRUNEINFO", 23))
- return_value = _readPartitionedRelPruneInfo();
- else if (MATCH("PARTITIONPRUNESTEPOP", 20))
- return_value = _readPartitionPruneStepOp();
- else if (MATCH("PARTITIONPRUNESTEPCOMBINE", 25))
- return_value = _readPartitionPruneStepCombine();
- else if (MATCH("PLANINVALITEM", 13))
- return_value = _readPlanInvalItem();
- else if (MATCH("SUBPLAN", 7))
- return_value = _readSubPlan();
- else if (MATCH("ALTERNATIVESUBPLAN", 18))
- return_value = _readAlternativeSubPlan();
- else if (MATCH("RESTRICTINFO", 12))
- return_value = _readRestrictInfo();
- else if (MATCH("EXTENSIBLENODE", 14))
- return_value = _readExtensibleNode();
- else if (MATCH("PARTITIONBOUNDSPEC", 18))
- return_value = _readPartitionBoundSpec();
- else if (MATCH("PARTITIONRANGEDATUM", 19))
- return_value = _readPartitionRangeDatum();
- else if (MATCH("PARTITIONSPEC", 13))
- return_value = _readPartitionSpec();
- else if (MATCH("PARTITIONELEM", 13))
- return_value = _readPartitionElem();
- else if (MATCHX("PARTITIONCMD"))
- return_value = _readPartitionCmd();
-
- /* GPDB additions */
- else if (MATCHX("A_ARRAYEXPR"))
- return_value = _readA_ArrayExpr();
- else if (MATCHX("A_CONST"))
- return_value = _readAConst();
- else if (MATCHX("AEXPR"))
- return_value = _readAExpr();
- else if (MATCHX("ALTERDOMAINSTMT"))
- return_value = _readAlterDomainStmt();
- else if (MATCHX("ALTERFUNCTIONSTMT"))
- return_value = _readAlterFunctionStmt();
- else if (MATCHX("ALTEROBJECTSCHEMASTMT"))
- return_value = _readAlterObjectSchemaStmt();
- else if (MATCHX("ALTEROWNERSTMT"))
- return_value = _readAlterOwnerStmt();
- else if (MATCHX("ALTEROPFAMILYSTMT"))
- return_value = _readAlterOpFamilyStmt();
- else if (MATCHX("ALTERPOLICYSTMT"))
- return_value = _readAlterPolicyStmt();
- else if (MATCHX("ALTERROLESETSTMT"))
- return_value = _readAlterRoleSetStmt();
- else if (MATCHX("ALTERSYSTEMSTMT"))
- return_value = _readAlterSystemStmt();
- else if (MATCHX("ALTERROLESTMT"))
- return_value = _readAlterRoleStmt();
- else if (MATCHX("ALTERPROFILESTMT"))
- return_value = _readAlterProfileStmt();
- else if (MATCHX("ALTERSEQSTMT"))
- return_value = _readAlterSeqStmt();
- else if (MATCHX("ALTERTABLECMD"))
- return_value = _readAlterTableCmd();
- else if (MATCHX("ALTEREDTABLEINFO"))
- return_value = _readAlteredTableInfo();
- else if (MATCHX("NEWCONSTRAINT"))
- return_value = _readNewConstraint();
- else if (MATCHX("NEWCOLUMNVALUE"))
- return_value = _readNewColumnValue();
- else if (MATCHX("ALTERTABLESTMT"))
- return_value = _readAlterTableStmt();
- else if (MATCHX("ALTERTYPESTMT"))
- return_value = _readAlterTypeStmt();
- else if (MATCHX("CDBPROCESS"))
- return_value = _readCdbProcess();
- else if (MATCHX("CLUSTERSTMT"))
- return_value = _readClusterStmt();
- else if (MATCHX("COLUMNDEF"))
- return_value = _readColumnDef();
- else if (MATCHX("COLUMNREF"))
- return_value = _readColumnRef();
- else if (MATCHX("PARAMREF"))
- return_value = _readParamRef();
- else if (MATCHX("COMMONTABLEEXPR"))
- return_value = _readCommonTableExpr();
- else if (MATCHX("COMPTYPESTMT"))
- return_value = _readCompositeTypeStmt();
- else if (MATCHX("CONSTRAINT"))
- return_value = _readConstraint();
- else if (MATCHX("CONSTRAINTSSETSTMT"))
- return_value = _readConstraintsSetStmt();
- else if (MATCHX("CREATECAST"))
- return_value = _readCreateCastStmt();
- else if (MATCHX("CREATECONVERSION"))
- return_value = _readCreateConversionStmt();
- else if (MATCHX("CREATEDBSTMT"))
- return_value = _readCreatedbStmt();
- else if (MATCHX("CREATEDOMAINSTMT"))
- return_value = _readCreateDomainStmt();
- else if (MATCHX("CREATEENUMSTMT"))
- return_value = _readCreateEnumStmt();
- else if (MATCHX("CREATEEXTERNALSTMT"))
- return_value = _readCreateExternalStmt();
- else if (MATCHX("CREATEFUNCSTMT"))
- return_value = _readCreateFunctionStmt();
- else if (MATCHX("CREATEOPCLASS"))
- return_value = _readCreateOpClassStmt();
- else if (MATCHX("CREATEOPCLASSITEM"))
- return_value = _readCreateOpClassItem();
- else if (MATCHX("CREATEOPFAMILYSTMT"))
- return_value = _readCreateOpFamilyStmt();
- else if (MATCHX("CREATEPLANGSTMT"))
- return_value = _readCreatePLangStmt();
- else if (MATCHX("CREATEPUBLICATIONSTMT"))
- return_value = _readCreatePublicationStmt();
- else if (MATCHX("ALTERPUBLICATIONSTMT"))
- return_value = _readAlterPublicationStmt();
- else if (MATCHX("CREATESUBSCRIPTIONSTMT"))
- return_value = _readCreateSubscriptionStmt();
- else if (MATCHX("DROPSUBSCRIPTIONSTMT"))
- return_value = _readDropSubscriptionStmt();
- else if (MATCHX("ALTERSUBSCRIPTIONSTMT"))
- return_value = _readAlterSubscriptionStmt();
- else if (MATCHX("CREATEPOLICYSTMT"))
- return_value = _readCreatePolicyStmt();
- else if (MATCHX("CREATEROLESTMT"))
- return_value = _readCreateRoleStmt();
- else if (MATCHX("CREATEPROFILESTMT"))
- return_value = _readCreateProfileStmt();
- else if (MATCHX("CREATESCHEMASTMT"))
- return_value = _readCreateSchemaStmt();
- else if (MATCHX("ALTERSCHEMASTMT"))
- return_value = _readAlterSchemaStmt();
- else if (MATCHX("CREATETAGSTMT"))
- return_value = _readCreateTagStmt();
- else if (MATCHX("ALTERTAGSTMT"))
- return_value = _readAlterTagStmt();
- else if (MATCHX("DROPTAGSTMT"))
- return_value = _readDropTagStmt();
- else if (MATCHX("CREATESEQSTMT"))
- return_value = _readCreateSeqStmt();
- else if (MATCHX("CREATETRANSFORMSTMT"))
- return_value = _readCreateTransformStmt();
- else if (MATCHX("CURSORPOSINFO"))
- return_value = _readCursorPosInfo();
- else if (MATCHX("DEFELEM"))
- return_value = _readDefElem();
- else if (MATCHX("DEFINESTMT"))
- return_value = _readDefineStmt();
- else if (MATCHX("DENYLOGININTERVAL"))
- return_value = _readDenyLoginInterval();
- else if (MATCHX("DENYLOGINPOINT"))
- return_value = _readDenyLoginPoint();
- else if (MATCHX("DROPDBSTMT"))
- return_value = _readDropdbStmt();
- else if (MATCHX("DROPROLESTMT"))
- return_value = _readDropRoleStmt();
- else if (MATCHX("DROPPROFILESTMT"))
- return_value = _readDropProfileStmt();
- else if (MATCHX("DROPSTMT"))
- return_value = _readDropStmt();
- else if (MATCHX("DISTRIBUTIONKEYELEM"))
- return_value = _readDistributionKeyElem();
- else if (MATCHX("EXTTABLETYPEDESC"))
- return_value = _readExtTableTypeDesc();
- else if (MATCHX("FUNCCALL"))
- return_value = _readFuncCall();
- else if (MATCHX("FUNCTIONPARAMETER"))
- return_value = _readFunctionParameter();
- else if (MATCHX("OBJECTWITHARGS"))
- return_value = _readObjectWithArgs();
- else if (MATCHX("GRANTROLESTMT"))
- return_value = _readGrantRoleStmt();
- else if (MATCHX("GRANTSTMT"))
- return_value = _readGrantStmt();
- else if (MATCHX("INDEXELEM"))
- return_value = _readIndexElem();
- else if (MATCHX("INDEXSTMT"))
- return_value = _readIndexStmt();
- else if (MATCHX("LOCKSTMT"))
- return_value = _readLockStmt();
- else if (MATCHX("REINDEXSTMT"))
- return_value = _readReindexStmt();
- else if (MATCHX("REINDEXINDEXINFO"))
- return_value = _readReindexIndexInfo();
- else if (MATCHX("RENAMESTMT"))
- return_value = _readRenameStmt();
- else if (MATCHX("REPLICAIDENTITYSTMT"))
- return_value = _readReplicaIdentityStmt();
- else if (MATCHX("RULESTMT"))
- return_value = _readRuleStmt();
- else if (MATCHX("SEGFILEMAPNODE"))
- return_value = _readSegfileMapNode();
- else if (MATCHX("SINGLEROWERRORDESC"))
- return_value = _readSingleRowErrorDesc();
- else if (MATCHX("SLICETABLE"))
- return_value = _readSliceTable();
- else if (MATCHX("SORTBY"))
- return_value = _readSortBy();
- else if (MATCHX("TABLEVALUEEXPR"))
- return_value = _readTableValueExpr();
- else if (MATCHX("TRUNCATESTMT"))
- return_value = _readTruncateStmt();
- else if (MATCHX("TYPECAST"))
- return_value = _readTypeCast();
- else if (MATCHX("TYPENAME"))
- return_value = _readTypeName();
- else if (MATCHX("VACUUMSTMT"))
- return_value = _readVacuumStmt();
- else if (MATCHX("VACUUMRELATION"))
- return_value = _readVacuumRelation();
- else if (MATCHX("VARIABLESETSTMT"))
- return_value = _readVariableSetStmt();
- else if (MATCHX("VIEWSTMT"))
- return_value = _readViewStmt();
- else if (MATCHX("WITHCLAUSE"))
- return_value = _readWithClause();
- else if (MATCHX("GPPARTITIONDEFINITION"))
- return_value = _readGpPartitionDefinition();
- else if (MATCHX("GPPARTDEFELEM"))
- return_value = _readGpPartDefElem();
- else if (MATCHX("GPPARTITIONRANGEITEM"))
- return_value = _readGpPartitionRangeItem();
- else if (MATCHX("GPPARTITIONRANGESPEC"))
- return_value = _readGpPartitionRangeSpec();
- else if (MATCHX("GPPARTITIONLISTSPEC"))
- return_value = _readGpPartitionListSpec();
- else if (MATCHX("COLUMNREFERENCESTORAGEDIRECTIVE"))
- return_value = _readColumnReferenceStorageDirective();
- else if (MATCHX("RETURN"))
- return_value = _readReturnStmt();
- else if (MATCHX("DROPDIRECTORYTABLESTMT"))
- return_value = _readDropDirectoryTableStmt();
- else if (MATCHX("RTEPERMISSIONINFO"))
- return_value = _readRTEPermissionInfo();
- else if (MATCHX("GPPOLICY"))
- return_value = _readGpPolicy();
- else if (MATCHX("MERGEACTION"))
- return_value = _readMergeAction();
- else if (MATCHX("PUBLICATIONOBJSPEC"))
- return_value = _readPublicationObjSpec();
- else if (MATCHX("PUBLICATIONTABLE"))
- return_value = _readPublicationTable();
- else if (MATCHX("WINDOWDEF"))
- return_value = _readWindowDef();
- else if (MATCHX("JSONCONSTRUCTOREXPR"))
- return_value = _readJsonConstructorExpr();
- else if (MATCHX("JSONISPREDICATE"))
- return_value = _readJsonIsPredicate();
- else if (MATCHX("JSONRETURNING"))
- return_value = _readJsonReturning();
- else if (MATCHX("JSONVALUEEXPR"))
- return_value = _readJsonValueExpr();
- else if (MATCHX("JSONFORMAT"))
- return_value = _readJsonFormat();
- else
- {
- ereport(ERROR,
- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("This operation involves an internal data item "
- "of a type called \"%.*s\" which is not "
- "supported in this version of %s.",
- length, token, PACKAGE_NAME)));
- return_value = NULL; /* keep compiler quiet */
- }
+#include "readfuncs.switch.c"
- return (Node *) return_value;
+ elog(ERROR, "badly formatted node string \"%.32s\"...", token);
+ return NULL; /* keep compiler quiet */
}
@@ -3711,98 +1112,47 @@ readDatum(bool typbyval)
}
/*
- * readAttrNumberCols
- */
-AttrNumber *
-readAttrNumberCols(int numCols)
-{
- int tokenLength,
- i;
- const char *token;
- AttrNumber *attr_vals;
-
- if (numCols <= 0)
- return NULL;
-
- attr_vals = (AttrNumber *) palloc(numCols * sizeof(AttrNumber));
- for (i = 0; i < numCols; i++)
- {
- token = pg_strtok(&tokenLength);
- attr_vals[i] = atoi(token);
- }
-
- return attr_vals;
-}
-
-/*
- * readOidCols
- */
-Oid *
-readOidCols(int numCols)
-{
- int tokenLength,
- i;
- const char *token;
- Oid *oid_vals;
-
- if (numCols <= 0)
- return NULL;
-
- oid_vals = (Oid *) palloc(numCols * sizeof(Oid));
- for (i = 0; i < numCols; i++)
- {
- token = pg_strtok(&tokenLength);
- oid_vals[i] = atooid(token);
- }
-
- return oid_vals;
-}
-
-/*
- * readIntCols
- */
-int *
-readIntCols(int numCols)
-{
- int tokenLength,
- i;
- const char *token;
- int *int_vals;
-
- if (numCols <= 0)
- return NULL;
-
- int_vals = (int *) palloc(numCols * sizeof(int));
- for (i = 0; i < numCols; i++)
- {
- token = pg_strtok(&tokenLength);
- int_vals[i] = atoi(token);
- }
-
- return int_vals;
-}
-
-/*
- * readBoolCols
- */
-bool *
-readBoolCols(int numCols)
-{
- int tokenLength,
- i;
- const char *token;
- bool *bool_vals;
-
- if (numCols <= 0)
- return NULL;
-
- bool_vals = (bool *) palloc(numCols * sizeof(bool));
- for (i = 0; i < numCols; i++)
- {
- token = pg_strtok(&tokenLength);
- bool_vals[i] = strtobool(token);
- }
-
- return bool_vals;
-}
-#endif
+ * common implementation for scalar-array-reading functions
+ *
+ * The data format is either "<>" for a NULL pointer (in which case numCols
+ * is ignored) or "(item item item)" where the number of items must equal
+ * numCols. The convfunc must be okay with stopping at whitespace or a
+ * right parenthesis, since pg_strtok won't null-terminate the token.
+ */
+#define READ_SCALAR_ARRAY(fnname, datatype, convfunc) \
+datatype * \
+fnname(int numCols) \
+{ \
+ datatype *vals; \
+ READ_TEMP_LOCALS(); \
+ token = pg_strtok(&length); \
+ if (token == NULL) \
+ elog(ERROR, "incomplete scalar array"); \
+ if (length == 0) \
+ return NULL; /* it was "<>", so return NULL pointer */ \
+ if (length != 1 || token[0] != '(') \
+ elog(ERROR, "unrecognized token: \"%.*s\"", length, token); \
+ vals = (datatype *) palloc(numCols * sizeof(datatype)); \
+ for (int i = 0; i < numCols; i++) \
+ { \
+ token = pg_strtok(&length); \
+ if (token == NULL || token[0] == ')') \
+ elog(ERROR, "incomplete scalar array"); \
+ vals[i] = convfunc(token); \
+ } \
+ token = pg_strtok(&length); \
+ if (token == NULL || length != 1 || token[0] != ')') \
+ elog(ERROR, "incomplete scalar array"); \
+ return vals; \
+}
+
+/*
+ * Note: these functions are exported in nodes.h for possible use by
+ * extensions, so don't mess too much with their names or API.
+ */
+READ_SCALAR_ARRAY(readAttrNumberCols, int16, atoi)
+READ_SCALAR_ARRAY(readOidCols, Oid, atooid)
+/* outfuncs.c has writeIndexCols, but we don't yet need that here */
+/* READ_SCALAR_ARRAY(readIndexCols, Index, atoui) */
+READ_SCALAR_ARRAY(readIntCols, int, atoi)
+READ_SCALAR_ARRAY(readBoolCols, bool, strtobool)
diff --git a/src/backend/nodes/readfuncs_common.c b/src/backend/nodes/readfuncs_common.c
deleted file mode 100644
index f895e4a4468..00000000000
--- a/src/backend/nodes/readfuncs_common.c
+++ /dev/null
@@ -1,1916 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * readfuncs_common.c
- * Common de-serialization functions for Postgres tree nodes.
- *
- * Portions Copyright (c) 2005-2010, Greenplum inc
- * Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates.
- * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
- *
- *
- * NOTES
- * This file contains all common de-serialization functions for both
- * binary and text representations, and de-serialization functions
- * that are Cloudberry-specific for text representation.
- *
- * All text-representation only functions are guarded by the macro
- * `COMPILING_BINARY_FUNCS`, they appear first in this file.
- *
- * This C source file SHOULD not be compiled alone, it MUST be
- * only be included by readfuncs.c, so we intended to not complete
- * the header files.
- *
- * When you consider adding new de-serialization functions, you should
- * folow these rules:
- * 1. Do not add any functions(Cloudberry-specific) to readfuncs.c
- * 2. Add functions to readfuncs_common.c that can be used for both
- * binary and text representations.
- * 3. Add functions to readfast.c if these functions can only be used
- * for binary representation.
- * 4. Add functions to readfuncs_common.c if these functions can only
- * be used for text representation.
- *
- *-------------------------------------------------------------------------
- */
-
-static void unwrapStringList(List *list);
-
-/* functions only used for text representation */
-#ifndef COMPILING_BINARY_FUNCS
-
-
-
-static A_Const *
-_readAConst(void)
-{
- READ_LOCALS(A_Const);
-
- /* We expect either NULL or :val here */
- token = pg_strtok(&length);
- if (length == 4 && strncmp(token, "NULL", 4) == 0)
- local_node->isnull = true;
- else
- {
- union ValUnion *tmp = nodeRead(NULL, 0);
-
- /* To forestall valgrind complaints, copy only the valid data */
- switch (nodeTag(tmp))
- {
- case T_Integer:
- memcpy(&local_node->val, tmp, sizeof(Integer));
- break;
- case T_Float:
- memcpy(&local_node->val, tmp, sizeof(Float));
- break;
- case T_Boolean:
- memcpy(&local_node->val, tmp, sizeof(Boolean));
- break;
- case T_String:
- memcpy(&local_node->val, tmp, sizeof(String));
- break;
- case T_BitString:
- memcpy(&local_node->val, tmp, sizeof(BitString));
- break;
- default:
- elog(ERROR, "unrecognized node type: %d",
- (int) nodeTag(tmp));
- break;
- }
- }
-
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static A_Expr *
-_readAExpr(void)
-{
- READ_LOCALS(A_Expr);
-
- token = pg_strtok(&length);
-
- if (strncmp(token,"OPER",length)==0)
- {
- local_node->kind = AEXPR_OP;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"ANY",length)==0)
- {
- local_node->kind = AEXPR_OP_ANY;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"ALL",length)==0)
- {
- local_node->kind = AEXPR_OP_ALL;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"DISTINCT",length)==0)
- {
- local_node->kind = AEXPR_DISTINCT;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"NOT_DISTINCT",length)==0)
- {
- local_node->kind = AEXPR_NOT_DISTINCT;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"NULLIF",length)==0)
- {
- local_node->kind = AEXPR_NULLIF;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"IN",length)==0)
- {
- local_node->kind = AEXPR_IN;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"LIKE",length)==0)
- {
- local_node->kind = AEXPR_LIKE;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"ILIKE",length)==0)
- {
- local_node->kind = AEXPR_ILIKE;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"SIMILAR",length)==0)
- {
- local_node->kind = AEXPR_SIMILAR;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"BETWEEN",length)==0)
- {
- local_node->kind = AEXPR_BETWEEN;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"NOT_BETWEEN",length)==0)
- {
- local_node->kind = AEXPR_NOT_BETWEEN;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"BETWEEN_SYM",length)==0)
- {
- local_node->kind = AEXPR_BETWEEN_SYM;
- READ_NODE_FIELD(name);
- }
- else if (strncmp(token,"NOT_BETWEEN_SYM",length)==0)
- {
- local_node->kind = AEXPR_NOT_BETWEEN_SYM;
- READ_NODE_FIELD(name);
- }
- else
- {
- elog(ERROR,"Unable to understand A_Expr node %.30s",token);
- }
-
- READ_NODE_FIELD(lexpr);
- READ_NODE_FIELD(rexpr);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-#endif
-
-/* common functions for both formats */
-
-static GpPartDefElem *
-_readGpPartDefElem(void)
-{
- READ_LOCALS(GpPartDefElem);
-
- READ_STRING_FIELD(partName);
- READ_NODE_FIELD(boundSpec);
- READ_NODE_FIELD(subSpec);
- READ_BOOL_FIELD(isDefault);
- READ_NODE_FIELD(options);
- READ_STRING_FIELD(accessMethod);
- READ_STRING_FIELD(tablespacename);
- READ_NODE_FIELD(colencs);
-
- READ_DONE();
-}
-
-static GpPartitionRangeItem *
-_readGpPartitionRangeItem(void)
-{
- READ_LOCALS(GpPartitionRangeItem);
-
- READ_NODE_FIELD(val);
- READ_ENUM_FIELD(edge, GpPartitionEdgeBounding);
-
- READ_DONE();
-}
-
-static GpPartitionRangeSpec *
-_readGpPartitionRangeSpec(void)
-{
- READ_LOCALS(GpPartitionRangeSpec);
-
- READ_NODE_FIELD(partStart);
- READ_NODE_FIELD(partEnd);
- READ_NODE_FIELD(partEvery);
-
- READ_DONE();
-}
-
-static GpPartitionListSpec *
-_readGpPartitionListSpec(void)
-{
- READ_LOCALS(GpPartitionListSpec);
-
- READ_NODE_FIELD(partValues);
-
- READ_DONE();
-}
-
-static GpPartitionDefinition *
-_readGpPartitionDefinition(void)
-{
- READ_LOCALS(GpPartitionDefinition);
-
- READ_NODE_FIELD(partDefElems);
- READ_NODE_FIELD(encClauses);
- READ_BOOL_FIELD(isTemplate);
-
- READ_DONE();
-}
-
-/*
- * _readA_ArrayExpr
- */
-static A_ArrayExpr *
-_readA_ArrayExpr(void)
-{
- READ_LOCALS(A_ArrayExpr);
-
- READ_NODE_FIELD(elements);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static AlterDomainStmt *
-_readAlterDomainStmt(void)
-{
- READ_LOCALS(AlterDomainStmt);
-
- READ_CHAR_FIELD(subtype);
- READ_NODE_FIELD(typeName);
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(def);
- READ_ENUM_FIELD(behavior, DropBehavior);
- Assert(local_node->behavior <= DROP_CASCADE);
-
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static AlterFunctionStmt *
-_readAlterFunctionStmt(void)
-{
- READ_LOCALS(AlterFunctionStmt);
- READ_ENUM_FIELD(objtype,ObjectType);
- READ_NODE_FIELD(func);
- READ_NODE_FIELD(actions);
-
- READ_DONE();
-}
-
-static AlterObjectSchemaStmt *
-_readAlterObjectSchemaStmt(void)
-{
- READ_LOCALS(AlterObjectSchemaStmt);
-
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(object);
- READ_STRING_FIELD(newschema);
- READ_BOOL_FIELD(missing_ok);
- READ_ENUM_FIELD(objectType,ObjectType);
-
- READ_DONE();
-}
-
-static AlterOpFamilyStmt *
-_readAlterOpFamilyStmt(void)
-{
- READ_LOCALS(AlterOpFamilyStmt);
- READ_NODE_FIELD(opfamilyname);
- READ_STRING_FIELD(amname);
- READ_BOOL_FIELD(isDrop);
- READ_NODE_FIELD(items);
-
- READ_DONE();
-}
-
-static AlterOwnerStmt *
-_readAlterOwnerStmt(void)
-{
- READ_LOCALS(AlterOwnerStmt);
-
- READ_ENUM_FIELD(objectType,ObjectType);
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(object);
- READ_NODE_FIELD(newowner);
-
- READ_DONE();
-}
-
-static AlterPolicyStmt *
-_readAlterPolicyStmt()
-{
- READ_LOCALS(AlterPolicyStmt);
-
- READ_STRING_FIELD(policy_name);
- READ_NODE_FIELD(table);
- READ_NODE_FIELD(roles);
- READ_NODE_FIELD(qual);
- READ_NODE_FIELD(with_check);
-
- READ_DONE();
-}
-
-static AlterPublicationStmt *
-_readAlterPublicationStmt()
-{
- READ_LOCALS(AlterPublicationStmt);
-
- READ_STRING_FIELD(pubname);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(pubobjects);
- READ_BOOL_FIELD(for_all_tables);
- READ_ENUM_FIELD(action, AlterPublicationAction);
-
- READ_DONE();
-}
-
-static AlterRoleSetStmt *
-_readAlterRoleSetStmt(void)
-{
- READ_LOCALS(AlterRoleSetStmt);
-
- READ_NODE_FIELD(role);
- READ_NODE_FIELD(setstmt);
-
- READ_DONE();
-}
-
-static AlterRoleStmt *
-_readAlterRoleStmt(void)
-{
- READ_LOCALS(AlterRoleStmt);
-
- READ_NODE_FIELD(role);
- READ_NODE_FIELD(options);
- READ_INT_FIELD(action);
- READ_NODE_FIELD(tags);
- READ_BOOL_FIELD(unsettag);
-
- READ_DONE();
-}
-
-static AlterProfileStmt *
-_readAlterProfileStmt(void)
-{
- READ_LOCALS(AlterProfileStmt);
-
- READ_STRING_FIELD(profile_name);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AlterSeqStmt *
-_readAlterSeqStmt(void)
-{
- READ_LOCALS(AlterSeqStmt);
-
- READ_NODE_FIELD(sequence);
- READ_NODE_FIELD(options);
- READ_BOOL_FIELD(for_identity);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static AlterSubscriptionStmt *
-_readAlterSubscriptionStmt()
-{
- READ_LOCALS(AlterSubscriptionStmt);
-
- READ_ENUM_FIELD(kind, AlterSubscriptionType);
- READ_STRING_FIELD(subname);
- READ_STRING_FIELD(conninfo);
- READ_NODE_FIELD(publication);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AlterSystemStmt *
-_readAlterSystemStmt(void)
-{
- READ_LOCALS(AlterSystemStmt);
-
- READ_NODE_FIELD(setstmt);
-
- READ_DONE();
-}
-
-static AlterTableCmd *
-_readAlterTableCmd(void)
-{
- READ_LOCALS(AlterTableCmd);
-
- READ_ENUM_FIELD(subtype, AlterTableType);
- READ_STRING_FIELD(name);
- READ_INT_FIELD(num);
- READ_NODE_FIELD(newowner);
- READ_NODE_FIELD(def);
- READ_NODE_FIELD(transform);
- READ_ENUM_FIELD(behavior, DropBehavior);
- READ_BOOL_FIELD(missing_ok);
- READ_BOOL_FIELD(recurse);
-
- READ_INT_FIELD(backendId);
- READ_NODE_FIELD(policy);
- READ_NODE_FIELD(tags);
- READ_BOOL_FIELD(unsettag);
-
- READ_DONE();
-}
-
-static AlterTableStmt *
-_readAlterTableStmt(void)
-{
- READ_LOCALS(AlterTableStmt);
-
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(cmds);
- READ_ENUM_FIELD(objtype, ObjectType);
- READ_INT_FIELD(lockmode);
- READ_NODE_FIELD(wqueue);
-
- READ_DONE();
-}
-
-static AlterTypeStmt *
-_readAlterTypeStmt(void)
-{
- READ_LOCALS(AlterTypeStmt);
-
- READ_NODE_FIELD(typeName);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static AlteredTableInfo *
-_readAlteredTableInfo(void)
-{
- READ_LOCALS(AlteredTableInfo);
-
- READ_OID_FIELD(relid);
- READ_CHAR_FIELD(relkind);
- /* oldDesc is omitted */
-
- for (int i = 0; i < AT_NUM_PASSES; i++)
- {
- READ_NODE_FIELD(subcmds[i]);
- }
-
- READ_NODE_FIELD(constraints);
- READ_NODE_FIELD(newvals);
- READ_NODE_FIELD(afterStmts);
- READ_BOOL_FIELD(verify_new_notnull);
- READ_INT_FIELD(rewrite);
- READ_OID_FIELD(newAccessMethod);
- READ_BOOL_FIELD(dist_opfamily_changed);
- READ_OID_FIELD(new_opclass);
- READ_BOOL_FIELD(chgPersistence);
- READ_CHAR_FIELD(newrelpersistence);
- READ_NODE_FIELD(partition_constraint);
- READ_BOOL_FIELD(validate_default);
- READ_NODE_FIELD(changedConstraintOids);
- READ_NODE_FIELD(changedConstraintDefs);
- /* The QD sends changedConstraintDefs wrapped in Values. Unwrap them. */
- unwrapStringList(local_node->changedConstraintDefs);
- READ_NODE_FIELD(changedIndexOids);
- READ_NODE_FIELD(changedIndexDefs);
- unwrapStringList(local_node->changedIndexDefs);
- READ_NODE_FIELD(beforeStmtLists);
- READ_NODE_FIELD(constraintLists);
-
- READ_DONE();
-}
-
-static CdbProcess *
-_readCdbProcess(void)
-{
- READ_LOCALS(CdbProcess);
-
- READ_STRING_FIELD(listenerAddr);
- READ_INT_FIELD(listenerPort);
- READ_INT_FIELD(pid);
- READ_INT_FIELD(contentid);
- READ_INT_FIELD(dbid);
-
- READ_DONE();
-}
-
-static ColumnDef *
-_readColumnDef(void)
-{
- READ_LOCALS(ColumnDef);
-
- READ_STRING_FIELD(colname);
- READ_NODE_FIELD(typeName);
- READ_STRING_FIELD(compression);
- READ_INT_FIELD(inhcount);
- READ_BOOL_FIELD(is_local);
- READ_BOOL_FIELD(is_not_null);
- READ_BOOL_FIELD(is_from_type);
- READ_INT_FIELD(attnum);
- READ_INT_FIELD(storage);
- READ_STRING_FIELD(storage_name);
- READ_NODE_FIELD(raw_default);
- READ_NODE_FIELD(cooked_default);
-
- READ_BOOL_FIELD(hasCookedMissingVal);
- READ_BOOL_FIELD(missingIsNull);
- if (local_node->hasCookedMissingVal && !local_node->missingIsNull)
- local_node->missingVal = readDatum(false);
-
- READ_CHAR_FIELD(identity);
- READ_NODE_FIELD(identitySequence);
- READ_CHAR_FIELD(generated);
- READ_NODE_FIELD(collClause);
- READ_OID_FIELD(collOid);
- READ_NODE_FIELD(constraints);
- READ_NODE_FIELD(encoding);
- READ_NODE_FIELD(fdwoptions);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static ColumnRef *
-_readColumnRef(void)
-{
- READ_LOCALS(ColumnRef);
-
- READ_NODE_FIELD(fields);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static ParamRef *
-_readParamRef(void)
-{
- READ_LOCALS(ParamRef);
-
- READ_INT_FIELD(number);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static ClusterStmt *
-_readClusterStmt(void)
-{
- READ_LOCALS(ClusterStmt);
-
- READ_NODE_FIELD(relation);
- READ_STRING_FIELD(indexname);
-
- READ_DONE();
-}
-
-
-static ColumnReferenceStorageDirective *
-_readColumnReferenceStorageDirective(void)
-{
- READ_LOCALS(ColumnReferenceStorageDirective);
-
- READ_STRING_FIELD(column);
- READ_BOOL_FIELD(deflt);
- READ_NODE_FIELD(encoding);
-
- READ_DONE();
-}
-
-static CompositeTypeStmt *
-_readCompositeTypeStmt(void)
-{
- READ_LOCALS(CompositeTypeStmt);
-
- READ_NODE_FIELD(typevar);
- READ_NODE_FIELD(coldeflist);
-
- READ_DONE();
-}
-
-/*
- * _readConstraint
- */
-static Constraint *
-_readConstraint(void)
-{
- READ_LOCALS(Constraint);
-
- READ_ENUM_FIELD(contype, ConstrType);
- READ_STRING_FIELD(conname); /* name, or NULL if unnamed */
- READ_BOOL_FIELD(deferrable);
- READ_BOOL_FIELD(initdeferred);
- READ_LOCATION_FIELD(location);
-
- READ_BOOL_FIELD(is_no_inherit);
- READ_NODE_FIELD(raw_expr);
- READ_STRING_FIELD(cooked_expr);
- READ_CHAR_FIELD(generated_when);
- READ_BOOL_FIELD(nulls_not_distinct);
-
- READ_NODE_FIELD(keys);
- READ_NODE_FIELD(including);
-
- READ_NODE_FIELD(exclusions);
-
- READ_NODE_FIELD(options);
- READ_STRING_FIELD(indexname);
- READ_STRING_FIELD(indexspace);
- READ_BOOL_FIELD(reset_default_tblspc);
-
- READ_STRING_FIELD(access_method);
- READ_NODE_FIELD(where_clause);
-
- READ_NODE_FIELD(pktable);
- READ_NODE_FIELD(fk_attrs);
- READ_NODE_FIELD(pk_attrs);
- READ_CHAR_FIELD(fk_matchtype);
- READ_CHAR_FIELD(fk_upd_action);
- READ_CHAR_FIELD(fk_del_action);
- READ_NODE_FIELD(old_conpfeqop);
- READ_OID_FIELD(old_pktable_oid);
-
- READ_BOOL_FIELD(skip_validation);
- READ_BOOL_FIELD(initially_valid);
-
- READ_DONE();
-}
-
-static ConstraintsSetStmt *
-_readConstraintsSetStmt(void)
-{
- READ_LOCALS(ConstraintsSetStmt);
-
- READ_NODE_FIELD(constraints);
- READ_BOOL_FIELD(deferred);
-
- READ_DONE();
-}
-
-static CopyIntoClause *
-_readCopyIntoClause(void)
-{
- READ_LOCALS(CopyIntoClause);
-
- READ_NODE_FIELD(attlist);
- READ_BOOL_FIELD(is_program);
- READ_STRING_FIELD(filename);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static CreateCastStmt *
-_readCreateCastStmt(void)
-{
- READ_LOCALS(CreateCastStmt);
-
- READ_NODE_FIELD(sourcetype);
- READ_NODE_FIELD(targettype);
- READ_NODE_FIELD(func);
- READ_ENUM_FIELD(context, CoercionContext);
- READ_BOOL_FIELD(inout);
-
- READ_DONE();
-}
-
-static CreateConversionStmt *
-_readCreateConversionStmt(void)
-{
- READ_LOCALS(CreateConversionStmt);
-
- READ_NODE_FIELD(conversion_name);
- READ_STRING_FIELD(for_encoding_name);
- READ_STRING_FIELD(to_encoding_name);
- READ_NODE_FIELD(func_name);
- READ_BOOL_FIELD(def);
-
- READ_DONE();
-}
-
-static CreateDomainStmt *
-_readCreateDomainStmt(void)
-{
- READ_LOCALS(CreateDomainStmt);
-
- READ_NODE_FIELD(domainname);
- READ_NODE_FIELD(typeName);
- READ_NODE_FIELD(collClause);
- READ_NODE_FIELD(constraints);
-
- READ_DONE();
-}
-
-static void
-_readDropStmt_common(DropStmt *local_node)
-{
- READ_TEMP_LOCALS();
-
- READ_NODE_FIELD(objects);
- READ_ENUM_FIELD(removeType,ObjectType);
- READ_ENUM_FIELD(behavior,DropBehavior);
- READ_BOOL_FIELD(missing_ok);
- READ_BOOL_FIELD(concurrent);
- READ_BOOL_FIELD(isdynamic);
-
- /* Force 'missing_ok' in QEs */
-#ifdef COMPILING_BINARY_FUNCS
- local_node->missing_ok=true;
-#endif /* COMPILING_BINARY_FUNCS */
-}
-
-static DropDirectoryTableStmt *
-_readDropDirectoryTableStmt(void)
-{
- READ_LOCALS(DropDirectoryTableStmt);
-
- _readDropStmt_common(&local_node->base);
-
- READ_BOOL_FIELD(with_content);
-
- READ_DONE();
-}
-
-static CreateEnumStmt *
-_readCreateEnumStmt(void)
-{
- READ_LOCALS(CreateEnumStmt);
-
- READ_NODE_FIELD(typeName);
- READ_NODE_FIELD(vals);
-
- READ_DONE();
-}
-
-static CreateExternalStmt *
-_readCreateExternalStmt(void)
-{
- READ_LOCALS(CreateExternalStmt);
-
- READ_NODE_FIELD(relation);
- READ_NODE_FIELD(tableElts);
- READ_NODE_FIELD(exttypedesc);
- READ_STRING_FIELD(format);
- READ_NODE_FIELD(formatOpts);
- READ_BOOL_FIELD(isweb);
- READ_BOOL_FIELD(iswritable);
- READ_NODE_FIELD(sreh);
- READ_NODE_FIELD(extOptions);
- READ_NODE_FIELD(encoding);
- READ_NODE_FIELD(distributedBy);
- READ_NODE_FIELD(tags);
-
- READ_DONE();
-}
-
-static CreateFunctionStmt *
-_readCreateFunctionStmt(void)
-{
- READ_LOCALS(CreateFunctionStmt);
-
- READ_BOOL_FIELD(is_procedure);
- READ_BOOL_FIELD(replace);
- READ_NODE_FIELD(funcname);
- READ_NODE_FIELD(parameters);
- READ_NODE_FIELD(returnType);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(sql_body);
-
- READ_DONE();
-}
-
-static CreateOpClassItem *
-_readCreateOpClassItem(void)
-{
- READ_LOCALS(CreateOpClassItem);
- READ_INT_FIELD(itemtype);
- READ_NODE_FIELD(name);
- READ_INT_FIELD(number);
- READ_NODE_FIELD(order_family);
- READ_NODE_FIELD(class_args);
- READ_NODE_FIELD(storedtype);
-
- READ_DONE();
-}
-
-
-static CreateOpClassStmt *
-_readCreateOpClassStmt(void)
-{
- READ_LOCALS(CreateOpClassStmt);
-
- READ_NODE_FIELD(opclassname);
- READ_NODE_FIELD(opfamilyname);
- READ_STRING_FIELD(amname);
- READ_NODE_FIELD(datatype);
- READ_NODE_FIELD(items);
- READ_BOOL_FIELD(isDefault);
-
- READ_DONE();
-}
-
-static CreateOpFamilyStmt *
-_readCreateOpFamilyStmt(void)
-{
- READ_LOCALS(CreateOpFamilyStmt);
- READ_NODE_FIELD(opfamilyname);
- READ_STRING_FIELD(amname);
-
- READ_DONE();
-}
-
-static CreatePLangStmt *
-_readCreatePLangStmt(void)
-{
- READ_LOCALS(CreatePLangStmt);
-
- READ_BOOL_FIELD(replace);
- READ_STRING_FIELD(plname);
- READ_NODE_FIELD(plhandler);
- READ_NODE_FIELD(plinline);
- READ_NODE_FIELD(plvalidator);
- READ_BOOL_FIELD(pltrusted);
-
- READ_DONE();
-}
-
-static CreatePolicyStmt *
-_readCreatePolicyStmt()
-{
- READ_LOCALS(CreatePolicyStmt);
-
- READ_STRING_FIELD(policy_name);
- READ_NODE_FIELD(table);
- READ_STRING_FIELD(cmd_name);
- READ_BOOL_FIELD(permissive);
- READ_NODE_FIELD(roles);
- READ_NODE_FIELD(qual);
- READ_NODE_FIELD(with_check);
-
- READ_DONE();
-}
-
-static CreatePublicationStmt *
-_readCreatePublicationStmt()
-{
- READ_LOCALS(CreatePublicationStmt);
-
- READ_STRING_FIELD(pubname);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(pubobjects);
- READ_BOOL_FIELD(for_all_tables);
-
- READ_DONE();
-}
-
-static CreateRoleStmt *
-_readCreateRoleStmt(void)
-{
- READ_LOCALS(CreateRoleStmt);
-
- READ_ENUM_FIELD(stmt_type, RoleStmtType);
- READ_STRING_FIELD(role);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(tags);
-
- READ_DONE();
-}
-
-static CreateProfileStmt *
-_readCreateProfileStmt(void)
-{
- READ_LOCALS(CreateProfileStmt);
-
- READ_STRING_FIELD(profile_name);
- READ_NODE_FIELD(options);
-
- READ_DONE();
-}
-
-static CreateSchemaStmt *
-_readCreateSchemaStmt(void)
-{
- READ_LOCALS(CreateSchemaStmt);
-
- READ_STRING_FIELD(schemaname);
- READ_NODE_FIELD(authrole);
- local_node->schemaElts = 0;
- READ_BOOL_FIELD(istemp);
- READ_BOOL_FIELD(pop_search_path);
- READ_NODE_FIELD(tags);
-
- READ_DONE();
-}
-
-static AlterSchemaStmt *
-_readAlterSchemaStmt(void)
-{
- READ_LOCALS(AlterSchemaStmt);
-
- READ_STRING_FIELD(schemaname);
- READ_NODE_FIELD(tags);
- READ_BOOL_FIELD(unsettag);
-
- READ_DONE();
-}
-
-static CreateTagStmt *
-_readCreateTagStmt(void)
-{
- READ_LOCALS(CreateTagStmt);
-
- READ_STRING_FIELD(tag_name);
- READ_BOOL_FIELD(missing_ok);
- READ_NODE_FIELD(allowed_values);
-
- READ_DONE();
-}
-
-static AlterTagStmt *
-_readAlterTagStmt(void)
-{
- READ_LOCALS(AlterTagStmt);
-
- READ_STRING_FIELD(tag_name);
- READ_INT_FIELD(action);
- READ_NODE_FIELD(tag_values);
- READ_BOOL_FIELD(missing_ok);
- READ_BOOL_FIELD(unset);
-
- READ_DONE();
-}
-
-static DropTagStmt *
-_readDropTagStmt(void)
-{
- READ_LOCALS(DropTagStmt);
-
- READ_NODE_FIELD(tags);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static CreateSeqStmt *
-_readCreateSeqStmt(void)
-{
- READ_LOCALS(CreateSeqStmt);
- READ_NODE_FIELD(sequence);
- READ_NODE_FIELD(options);
- READ_OID_FIELD(ownerId);
- READ_BOOL_FIELD(for_identity);
- READ_BOOL_FIELD(if_not_exists);
- READ_NODE_FIELD(tags);
-
- READ_DONE();
-}
-
-static CreateSubscriptionStmt *
-_readCreateSubscriptionStmt()
-{
- READ_LOCALS(CreateSubscriptionStmt);
-
- READ_STRING_FIELD(subname);
- READ_STRING_FIELD(conninfo);
- READ_NODE_FIELD(publication);
- READ_NODE_FIELD(options);
-
- /*
- * conninfo can be an empty string, but the serialization
- * doesn't distinguish an empty string from NULL. The
- * code that executes the command in't prepared for a NULL.
- */
- if (local_node->conninfo == NULL)
- local_node->conninfo = pstrdup("");
-
- READ_DONE();
-}
-
-static CreateTransformStmt *
-_readCreateTransformStmt()
-{
- READ_LOCALS(CreateTransformStmt);
-
- READ_BOOL_FIELD(replace);
- READ_NODE_FIELD(type_name);
- READ_STRING_FIELD(lang);
- READ_NODE_FIELD(fromsql);
- READ_NODE_FIELD(tosql);
-
- READ_DONE();
-}
-
-static CreatedbStmt *
-_readCreatedbStmt(void)
-{
- READ_LOCALS(CreatedbStmt);
-
- READ_STRING_FIELD(dbname);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(tags);
-
- READ_DONE();
-}
-
-static CursorPosInfo *
-_readCursorPosInfo(void)
-{
- READ_LOCALS(CursorPosInfo);
-
- READ_STRING_FIELD(cursor_name);
- READ_INT_FIELD(gp_segment_id);
- READ_UINT_FIELD(ctid.ip_blkid.bi_hi);
- READ_UINT_FIELD(ctid.ip_blkid.bi_lo);
- READ_UINT_FIELD(ctid.ip_posid);
- READ_OID_FIELD(table_oid);
-
- READ_DONE();
-}
-
-static DQAExpr*
-_readDQAExpr(void)
-{
- READ_LOCALS(DQAExpr);
-
- READ_INT_FIELD(agg_expr_id);
- READ_BITMAPSET_FIELD(agg_args_id_bms);
- READ_NODE_FIELD(agg_filter);
-
- READ_DONE();
-}
-
-static DefineStmt *
-_readDefineStmt(void)
-{
- READ_LOCALS(DefineStmt);
- READ_ENUM_FIELD(kind, ObjectType);
- READ_BOOL_FIELD(oldstyle);
- READ_NODE_FIELD(defnames);
- READ_NODE_FIELD(args);
- READ_NODE_FIELD(definition);
- READ_BOOL_FIELD(if_not_exists);
- READ_BOOL_FIELD(replace);
- READ_BOOL_FIELD(trusted); /* CDB */
-
- READ_DONE();
-}
-
-static DenyLoginInterval *
-_readDenyLoginInterval(void)
-{
- READ_LOCALS(DenyLoginInterval);
-
- READ_NODE_FIELD(start);
- READ_NODE_FIELD(end);
-
- READ_DONE();
-}
-
-static DenyLoginPoint *
-_readDenyLoginPoint(void)
-{
- READ_LOCALS(DenyLoginPoint);
-
- READ_NODE_FIELD(day);
- READ_NODE_FIELD(time);
-
- READ_DONE();
-}
-
-static DistributionKeyElem *
-_readDistributionKeyElem(void)
-{
- READ_LOCALS(DistributionKeyElem);
-
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(opclass);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static DropRoleStmt *
-_readDropRoleStmt(void)
-{
- READ_LOCALS(DropRoleStmt);
-
- READ_NODE_FIELD(roles);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static DropProfileStmt *
-_readDropProfileStmt(void)
-{
- READ_LOCALS(DropProfileStmt);
-
- READ_NODE_FIELD(profiles);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static DropStmt *
-_readDropStmt(void)
-{
- READ_LOCALS(DropStmt);
-
- READ_NODE_FIELD(objects);
- READ_ENUM_FIELD(removeType,ObjectType);
- READ_ENUM_FIELD(behavior,DropBehavior);
- READ_BOOL_FIELD(missing_ok);
- READ_BOOL_FIELD(concurrent);
- READ_BOOL_FIELD(isdynamic);
-
- /* Force 'missing_ok' in QEs */
-#ifdef COMPILING_BINARY_FUNCS
- local_node->missing_ok=true;
-#endif /* COMPILING_BINARY_FUNCS */
-
- READ_DONE();
-}
-
-static DropSubscriptionStmt *
-_readDropSubscriptionStmt()
-{
- READ_LOCALS(DropSubscriptionStmt);
-
- READ_STRING_FIELD(subname);
- READ_BOOL_FIELD(missing_ok);
- READ_ENUM_FIELD(behavior, DropBehavior);
-
- READ_DONE();
-}
-
-static DropdbStmt *
-_readDropdbStmt(void)
-{
- READ_LOCALS(DropdbStmt);
-
- READ_STRING_FIELD(dbname);
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static ExtTableTypeDesc *
-_readExtTableTypeDesc(void)
-{
- READ_LOCALS(ExtTableTypeDesc);
-
- READ_ENUM_FIELD(exttabletype, ExtTableType);
- READ_NODE_FIELD(location_list);
- READ_NODE_FIELD(on_clause);
- READ_STRING_FIELD(command_string);
-
- READ_DONE();
-}
-
-/*
- * _readFuncCall
- *
- * This parsenode is transformed during parse_analyze.
- * It not stored in views = no upgrade implication for changes
- */
-static FuncCall *
-_readFuncCall(void)
-{
- READ_LOCALS(FuncCall);
-
- READ_NODE_FIELD(funcname);
- READ_NODE_FIELD(args);
- READ_NODE_FIELD(agg_order);
- READ_NODE_FIELD(agg_filter);
- READ_NODE_FIELD(over);
- READ_BOOL_FIELD(agg_within_group);
- READ_BOOL_FIELD(agg_star);
- READ_BOOL_FIELD(agg_distinct);
- READ_BOOL_FIELD(func_variadic);
- READ_ENUM_FIELD(funcformat, CoercionForm);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static FunctionParameter *
-_readFunctionParameter(void)
-{
- READ_LOCALS(FunctionParameter);
-
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(argType);
- READ_ENUM_FIELD(mode, FunctionParameterMode);
- READ_NODE_FIELD(defexpr);
-
- READ_DONE();
-}
-
-static GrantRoleStmt *
-_readGrantRoleStmt(void)
-{
- READ_LOCALS(GrantRoleStmt);
-
- READ_NODE_FIELD(granted_roles);
- READ_NODE_FIELD(grantee_roles);
- READ_BOOL_FIELD(is_grant);
- READ_NODE_FIELD(opt);
- READ_NODE_FIELD(grantor);
- READ_ENUM_FIELD(behavior, DropBehavior);
- Assert(local_node->behavior <= DROP_CASCADE);
-
- READ_DONE();
-}
-
-static GrantStmt *
-_readGrantStmt(void)
-{
- READ_LOCALS(GrantStmt);
-
- READ_BOOL_FIELD(is_grant);
- READ_ENUM_FIELD(targtype,GrantTargetType);
- READ_ENUM_FIELD(objtype,ObjectType);
- READ_NODE_FIELD(objects);
- READ_NODE_FIELD(privileges);
- READ_NODE_FIELD(grantees);
- READ_BOOL_FIELD(grant_option);
- READ_ENUM_FIELD(behavior, DropBehavior);
-
- READ_DONE();
-}
-
-/*
- * _readGroupId
- */
-static GroupId *
-_readGroupId(void)
-{
- READ_LOCALS(GroupId);
-
- READ_INT_FIELD(agglevelsup);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readGroupingSetId
- */
-static GroupingSetId *
-_readGroupingSetId(void)
-{
- READ_LOCALS(GroupingSetId);
-
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static IndexElem *
-_readIndexElem(void)
-{
- READ_LOCALS(IndexElem);
-
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(expr);
- READ_STRING_FIELD(indexcolname);
- READ_NODE_FIELD(collation);
- READ_NODE_FIELD(opclass);
- READ_NODE_FIELD(opclassopts);
- READ_ENUM_FIELD(ordering, SortByDir);
- READ_ENUM_FIELD(nulls_ordering, SortByNulls);
-
- READ_DONE();
-}
-
-static IndexStmt *
-_readIndexStmt(void)
-{
- READ_LOCALS(IndexStmt);
-
- READ_STRING_FIELD(idxname);
- READ_NODE_FIELD(relation);
- READ_OID_FIELD(relationOid);
- READ_STRING_FIELD(accessMethod);
- READ_STRING_FIELD(tableSpace);
- READ_NODE_FIELD(indexParams);
- READ_NODE_FIELD(indexIncludingParams);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(whereClause);
- READ_NODE_FIELD(excludeOpNames);
- READ_STRING_FIELD(idxcomment);
- READ_OID_FIELD(indexOid);
- READ_OID_FIELD(oldNumber);
- READ_UINT_FIELD(oldCreateSubid);
- READ_UINT_FIELD(oldFirstRelfilelocatorSubid);
- READ_BOOL_FIELD(unique);
- READ_BOOL_FIELD(nulls_not_distinct);
- READ_BOOL_FIELD(primary);
- READ_BOOL_FIELD(isconstraint);
- READ_BOOL_FIELD(deferrable);
- READ_BOOL_FIELD(initdeferred);
- READ_BOOL_FIELD(transformed);
- READ_BOOL_FIELD(concurrent);
- READ_BOOL_FIELD(if_not_exists);
- READ_BOOL_FIELD(reset_default_tblspc);
- READ_ENUM_FIELD(concurrentlyPhase,IndexConcurrentlyPhase);
- READ_OID_FIELD(indexRelationOid);
- READ_NODE_FIELD(tags);
-
- READ_DONE();
-}
-
-static LockStmt *
-_readLockStmt(void)
-{
- READ_LOCALS(LockStmt);
-
- READ_NODE_FIELD(relations);
- READ_INT_FIELD(mode);
- READ_BOOL_FIELD(nowait);
-
- READ_DONE();
-}
-
-static NewColumnValue *
-_readNewColumnValue(void)
-{
- READ_LOCALS(NewColumnValue);
-
- READ_INT_FIELD(attnum);
- READ_NODE_FIELD(expr);
- /* can't serialize exprstate */
- READ_BOOL_FIELD(is_generated);
-
- READ_DONE();
-}
-
-static NewConstraint *
-_readNewConstraint(void)
-{
- READ_LOCALS(NewConstraint);
-
- READ_STRING_FIELD(name);
- READ_ENUM_FIELD(contype, ConstrType);
- READ_OID_FIELD(refrelid);
- READ_OID_FIELD(refindid);
- READ_OID_FIELD(conid);
- READ_NODE_FIELD(qual);
- /* can't serialize qualstate */
-
- READ_DONE();
-}
-
-static ObjectWithArgs *
-_readObjectWithArgs(void)
-{
- READ_LOCALS(ObjectWithArgs);
-
- READ_NODE_FIELD(objname);
- READ_NODE_FIELD(objargs);
- READ_BOOL_FIELD(args_unspecified);
-
- READ_DONE();
-}
-
-static PartitionCmd *
-_readPartitionCmd(void)
-{
- READ_LOCALS(PartitionCmd);
-
- READ_NODE_FIELD(name);
- READ_NODE_FIELD(bound);
-
- READ_DONE();
-}
-
-#ifdef COMPILING_BINARY_FUNCS
-static GpAlterPartitionId *
-_readGpAlterPartitionId(void)
-{
- READ_LOCALS(GpAlterPartitionId);
-
- READ_ENUM_FIELD(idtype, GpAlterPartitionIdType);
- READ_NODE_FIELD(partiddef);
-
- READ_DONE();
-}
-
-static GpAlterPartitionCmd *
-_readGpAlterPartitionCmd(void)
-{
- READ_LOCALS(GpAlterPartitionCmd);
-
- READ_NODE_FIELD(partid);
- READ_NODE_FIELD(arg);
-
- READ_DONE();
-}
-#endif
-
-static PartitionElem *
-_readPartitionElem(void)
-{
- READ_LOCALS(PartitionElem);
-
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(expr);
- READ_NODE_FIELD(collation);
- READ_NODE_FIELD(opclass);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static PartitionSpec *
-_readPartitionSpec(void)
-{
- READ_LOCALS(PartitionSpec);
-
- READ_ENUM_FIELD(strategy, PartitionStrategy);
- READ_NODE_FIELD(partParams);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static RefreshClause *
-_readRefreshClause(void)
-{
- READ_LOCALS(RefreshClause);
-
- READ_BOOL_FIELD(concurrent);
- READ_BOOL_FIELD(skipData);
- READ_NODE_FIELD(relation);
-
- READ_DONE();
-}
-
-static ReindexStmt *
-_readReindexStmt(void)
-{
- READ_LOCALS(ReindexStmt);
-
- READ_ENUM_FIELD(kind,ReindexObjectType);
- READ_NODE_FIELD(relation);
- READ_STRING_FIELD(name);
- READ_NODE_FIELD(params);
- READ_OID_FIELD(relid);
- READ_ENUM_FIELD(concurrentlyPhase,ReindexConcurrentlyPhase);
- READ_NODE_FIELD(newIndexInfo);
- READ_NODE_FIELD(oldIndexInfo);
-
- READ_DONE();
-}
-
-static ReindexIndexInfo *
-_readReindexIndexInfo(void)
-{
- READ_LOCALS(ReindexIndexInfo);
-
- READ_OID_FIELD(indexId);
- READ_OID_FIELD(tableId);
- READ_OID_FIELD(amId);
- READ_BOOL_FIELD(safe);
- READ_STRING_FIELD(ccNewName);
- READ_STRING_FIELD(ccOldName);
-
- READ_DONE();
-}
-
-static RenameStmt *
-_readRenameStmt(void)
-{
- READ_LOCALS(RenameStmt);
-
- READ_ENUM_FIELD(renameType, ObjectType);
- READ_ENUM_FIELD(relationType, ObjectType);
- READ_NODE_FIELD(relation);
- READ_OID_FIELD(objid);
- READ_NODE_FIELD(object);
- READ_STRING_FIELD(subname);
- READ_STRING_FIELD(newname);
- READ_ENUM_FIELD(behavior,DropBehavior);
-
- READ_BOOL_FIELD(missing_ok);
-
- READ_DONE();
-}
-
-static ReplicaIdentityStmt *
-_readReplicaIdentityStmt(void)
-{
- READ_LOCALS(ReplicaIdentityStmt);
-
- READ_CHAR_FIELD(identity_type);
- READ_STRING_FIELD(name);
-
- READ_DONE();
-}
-
-static RestrictInfo *
-_readRestrictInfo(void)
-{
- READ_LOCALS(RestrictInfo);
-
- /* NB: this isn't a complete set of fields */
- READ_NODE_FIELD(clause);
- READ_BOOL_FIELD(is_pushed_down);
- READ_BOOL_FIELD(can_join);
- READ_BOOL_FIELD(pseudoconstant);
- READ_BOOL_FIELD(has_clone);
- READ_BOOL_FIELD(is_clone);
- READ_BOOL_FIELD(leakproof);
- READ_ENUM_FIELD(has_volatile, VolatileFunctionStatus);
- READ_UINT_FIELD(security_level);
- READ_INT_FIELD(num_base_rels);
- READ_BOOL_FIELD(contain_outer_query_references);
- READ_BITMAPSET_FIELD(clause_relids);
- READ_BITMAPSET_FIELD(required_relids);
- READ_BITMAPSET_FIELD(incompatible_relids);
- READ_BITMAPSET_FIELD(outer_relids);
- READ_BITMAPSET_FIELD(left_relids);
- READ_BITMAPSET_FIELD(right_relids);
- READ_NODE_FIELD(orclause);
-
- READ_INT_FIELD(rinfo_serial);
- READ_FLOAT_FIELD(eval_cost.startup);
- READ_FLOAT_FIELD(eval_cost.per_tuple);
- READ_FLOAT_FIELD(norm_selec);
- READ_FLOAT_FIELD(outer_selec);
- READ_NODE_FIELD(mergeopfamilies);
-
- READ_NODE_FIELD(left_em);
- READ_NODE_FIELD(right_em);
- READ_BOOL_FIELD(outer_is_left);
- READ_OID_FIELD(hashjoinoperator);
- READ_FLOAT_FIELD(left_bucketsize);
- READ_FLOAT_FIELD(left_mcvfreq);
- READ_FLOAT_FIELD(right_mcvfreq);
- READ_OID_FIELD(left_hasheqoperator);
- READ_OID_FIELD(right_hasheqoperator);
- READ_OID_FIELD(hasheqoperator);
-
- READ_DONE();
-}
-
-static RuleStmt *
-_readRuleStmt(void)
-{
- READ_LOCALS(RuleStmt);
-
- READ_NODE_FIELD(relation);
- READ_STRING_FIELD(rulename);
- READ_NODE_FIELD(whereClause);
- READ_ENUM_FIELD(event,CmdType);
- READ_BOOL_FIELD(instead);
- READ_NODE_FIELD(actions);
- READ_BOOL_FIELD(replace);
-
- READ_DONE();
-}
-
-static SegfileMapNode *
-_readSegfileMapNode(void)
-{
- READ_LOCALS(SegfileMapNode);
-
- READ_OID_FIELD(relid);
- READ_INT_FIELD(segno);
-
- READ_DONE();
-}
-
-/*
- * _readSingleRowErrorDesc
- */
-static SingleRowErrorDesc *
-_readSingleRowErrorDesc(void)
-{
- READ_LOCALS(SingleRowErrorDesc);
-
- READ_INT_FIELD(rejectlimit);
- READ_BOOL_FIELD(is_limit_in_rows);
- READ_CHAR_FIELD(log_error_type);
-
- READ_DONE();
-}
-
-static SliceTable *
-_readSliceTable(void)
-{
- READ_LOCALS(SliceTable);
-
- READ_INT_FIELD(localSlice);
- READ_INT_FIELD(numSlices);
- local_node->slices = palloc0(local_node->numSlices * sizeof(ExecSlice));
- for (int i = 0; i < local_node->numSlices; i++)
- {
- READ_INT_FIELD(slices[i].sliceIndex);
- READ_INT_FIELD(slices[i].rootIndex);
- READ_INT_FIELD(slices[i].parentIndex);
- READ_INT_FIELD(slices[i].planNumSegments);
- READ_NODE_FIELD(slices[i].children); /* List of int index */
- READ_ENUM_FIELD(slices[i].gangType, GangType);
- READ_NODE_FIELD(slices[i].segments); /* List of int index */
- READ_BOOL_FIELD(slices[i].useMppParallelMode);
- READ_INT_FIELD(slices[i].parallel_workers);
- local_node->slices[i].primaryGang = NULL;
- READ_NODE_FIELD(slices[i].primaryProcesses); /* List of (CDBProcess *) */
- READ_BITMAPSET_FIELD(slices[i].processesMap);
- }
- READ_BOOL_FIELD(hasMotions);
-
- READ_INT_FIELD(instrument_options);
- READ_INT_FIELD(ic_instance_id);
-
- READ_DONE();
-}
-
-static SortBy *
-_readSortBy(void)
-{
- READ_LOCALS(SortBy);
-
- READ_NODE_FIELD(node);
- READ_ENUM_FIELD(sortby_dir, SortByDir);
- READ_ENUM_FIELD(sortby_nulls, SortByNulls);
- READ_NODE_FIELD(useOp);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readTableFunctionScan
- */
-static TableFunctionScan *
-_readTableFunctionScan(void)
-{
- READ_LOCALS(TableFunctionScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(function);
-
- READ_DONE();
-}
-
-static TableValueExpr *
-_readTableValueExpr(void)
-{
- READ_LOCALS(TableValueExpr);
-
- READ_NODE_FIELD(subquery);
-
- READ_DONE();
-}
-
-static TruncateStmt *
-_readTruncateStmt(void)
-{
- READ_LOCALS(TruncateStmt);
-
- READ_NODE_FIELD(relations);
- READ_ENUM_FIELD(behavior,DropBehavior);
-
- READ_DONE();
-}
-
-static TupleSplit *
-_readTupleSplit(void)
-{
- READ_LOCALS(TupleSplit);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_INT_FIELD(numCols);
- READ_ATTRNUMBER_ARRAY(grpColIdx, local_node->numCols);
-
- READ_NODE_FIELD(dqa_expr_lst);
-
- READ_DONE();
-}
-
-static TypeCast *
-_readTypeCast(void)
-{
- READ_LOCALS(TypeCast);
-
- READ_NODE_FIELD(arg);
- READ_NODE_FIELD(typeName);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static TypeName *
-_readTypeName(void)
-{
- READ_LOCALS(TypeName);
-
- READ_NODE_FIELD(names);
- READ_OID_FIELD(typeOid);
- READ_BOOL_FIELD(setof);
- READ_BOOL_FIELD(pct_type);
- READ_NODE_FIELD(typmods);
- READ_INT_FIELD(typemod);
- READ_NODE_FIELD(arrayBounds);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static VacuumRelation *
-_readVacuumRelation(void)
-{
- READ_LOCALS(VacuumRelation);
-
- READ_NODE_FIELD(relation);
- READ_OID_FIELD(oid);
- READ_NODE_FIELD(va_cols);
-
- READ_DONE();
-}
-
-
-/*
- * _readVacuumStmt
- */
-static VacuumStmt *
-_readVacuumStmt(void)
-{
- READ_LOCALS(VacuumStmt);
-
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(rels);
- READ_BOOL_FIELD(is_vacuumcmd);
-
- READ_DONE();
-}
-
-
-static VariableSetStmt *
-_readVariableSetStmt(void)
-{
- READ_LOCALS(VariableSetStmt);
-
- READ_STRING_FIELD(name);
- READ_ENUM_FIELD(kind, VariableSetKind);
- READ_NODE_FIELD(args);
- READ_BOOL_FIELD(is_local);
-
- READ_DONE();
-}
-
-static ViewStmt *
-_readViewStmt(void)
-{
- READ_LOCALS(ViewStmt);
-
- READ_NODE_FIELD(view);
- READ_NODE_FIELD(aliases);
- READ_NODE_FIELD(query);
- READ_BOOL_FIELD(replace);
- READ_NODE_FIELD(options);
- READ_NODE_FIELD(tags);
-
- READ_DONE();
-}
-
-static WithClause *
-_readWithClause(void)
-{
- READ_LOCALS(WithClause);
-
- READ_NODE_FIELD(ctes);
- READ_BOOL_FIELD(recursive);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-static void
-unwrapStringList(List *list)
-{
- ListCell *lc;
-
- foreach(lc, list)
- {
- String *val = lfirst(lc);
-
- lfirst(lc) = strVal(val);
- pfree(val);
- }
-}
-
-/*
- * _readMemoize
- */
-static Memoize *
-_readMemoize(void)
-{
- READ_LOCALS(Memoize);
-
- ReadCommonPlan(&local_node->plan);
-
- READ_INT_FIELD(numKeys);
- READ_OID_ARRAY(hashOperators, local_node->numKeys);
- READ_OID_ARRAY(collations, local_node->numKeys);
- READ_NODE_FIELD(param_exprs);
- READ_BOOL_FIELD(singlerow);
- READ_BOOL_FIELD(binary_mode);
- READ_UINT_FIELD(est_entries);
- READ_BITMAPSET_FIELD(keyparamids);
-
- READ_DONE();
-}
-
-/*
- * _readTidRangeScan
- */
-static TidRangeScan *
-_readTidRangeScan(void)
-{
- READ_LOCALS(TidRangeScan);
-
- ReadCommonScan(&local_node->scan);
-
- READ_NODE_FIELD(tidrangequals);
-
- READ_DONE();
-}
-
-/*
- * _readCTESearchClause
- */
-static CTESearchClause *
-_readCTESearchClause(void)
-{
- READ_LOCALS(CTESearchClause);
-
- READ_NODE_FIELD(search_col_list);
- READ_BOOL_FIELD(search_breadth_first);
- READ_STRING_FIELD(search_seq_column);
- READ_LOCATION_FIELD(location);
-
- READ_DONE();
-}
-
-/*
- * _readCTECycleClause
- */
-static CTECycleClause *
-_readCTECycleClause(void)
-{
- READ_LOCALS(CTECycleClause);
-
- READ_NODE_FIELD(cycle_col_list);
- READ_STRING_FIELD(cycle_mark_column);
- READ_NODE_FIELD(cycle_mark_value);
- READ_NODE_FIELD(cycle_mark_default);
- READ_STRING_FIELD(cycle_path_column);
- READ_LOCATION_FIELD(location);
- READ_OID_FIELD(cycle_mark_type);
- READ_INT_FIELD(cycle_mark_typmod);
- READ_OID_FIELD(cycle_mark_collation);
- READ_OID_FIELD(cycle_mark_neop);
-
- READ_DONE();
-}
-
-static ReturnStmt *
-_readReturnStmt(void)
-{
- READ_LOCALS(ReturnStmt);
-
- READ_NODE_FIELD(returnval);
-
- READ_DONE();
-}
diff --git a/src/include/Makefile b/src/include/Makefile
index d6cbf9a063d..f6639834c59 100644
--- a/src/include/Makefile
+++ b/src/include/Makefile
@@ -46,6 +46,7 @@ install: all installdirs
$(INSTALL_DATA) pg_config.h '$(DESTDIR)$(includedir_server)'
$(INSTALL_DATA) pg_config_ext.h '$(DESTDIR)$(includedir_server)'
$(INSTALL_DATA) pg_config_os.h '$(DESTDIR)$(includedir_server)'
+ $(INSTALL_DATA) nodes/nodetags.h '$(DESTDIR)$(includedir_server)/nodes'
$(INSTALL_DATA) utils/errcodes.h '$(DESTDIR)$(includedir_server)/utils'
$(INSTALL_DATA) utils/fmgroids.h '$(DESTDIR)$(includedir_server)/utils'
$(INSTALL_DATA) utils/fmgrprotos.h '$(DESTDIR)$(includedir_server)/utils'
@@ -78,6 +79,7 @@ clean:
rm -f storage/lwlocknames.h utils/probes.h
rm -f catalog/schemapg.h catalog/system_fk_info.h
rm -f catalog/pg_*_d.h catalog/gp_*_d.h catalog/header-stamp
+ rm -f nodes/nodetags.h nodes/header-stamp
distclean maintainer-clean: clean
rm -f pg_config.h pg_config_ext.h pg_config_os.h stamp-h stamp-ext-h
diff --git a/src/include/access/tupdesc.h b/src/include/access/tupdesc.h
index e20bc30ca3f..8ad9577555e 100644
--- a/src/include/access/tupdesc.h
+++ b/src/include/access/tupdesc.h
@@ -97,8 +97,10 @@ typedef struct TupleDescData *TupleDesc;
* These are never serialized on disk, only in the read/outfast protocol,
* as part of PlannedStmts.
*/
-typedef struct tupleDescNode
+typedef struct TupleDescNode
{
+ pg_node_attr(no_copy_equal, custom_read_write)
+
NodeTag type;
int natts;
TupleDesc tuple;
diff --git a/src/include/catalog/heap.h b/src/include/catalog/heap.h
index 3e6ae6f688e..071a93d9223 100644
--- a/src/include/catalog/heap.h
+++ b/src/include/catalog/heap.h
@@ -48,11 +48,11 @@ typedef struct CookedConstraint
*/
NodeTag type;
ConstrType contype; /* CONSTR_DEFAULT or CONSTR_CHECK */
- Oid conoid; /* constr OID if created, otherwise Invalid */
+ Oid conoid pg_node_attr(read_as(InvalidOid), read_write_ignore); /* constr OID if created, otherwise Invalid */
char *name; /* name, or NULL if none */
AttrNumber attnum; /* which attr (only for DEFAULT) */
Node *expr; /* transformed default or check expr */
- bool skip_validation; /* skip validation? (only for CHECK) */
+ bool skip_validation pg_node_attr(read_as(false), read_write_ignore); /* skip validation? (only for CHECK) */
bool is_local; /* constraint has local (non-inherited) def */
int inhcount; /* number of times constraint is inherited */
bool is_no_inherit; /* constraint has local def and cannot be
diff --git a/src/include/commands/explain_gp.h b/src/include/commands/explain_gp.h
new file mode 100644
index 00000000000..016e5449543
--- /dev/null
+++ b/src/include/commands/explain_gp.h
@@ -0,0 +1,91 @@
+/*-------------------------------------------------------------------------
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * explain_gp.h
+ *
+ * src/include/commands/explain_gp.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef EXPLAIN_GP_H
+#define EXPLAIN_GP_H
+
+
+/* EXPLAIN ANALYZE statistics for one plan node of a slice */
+typedef struct CdbExplain_StatInst
+{
+ NodeTag pstype; /* PlanState node type */
+
+ /* fields from Instrumentation struct */
+ instr_time starttime; /* Start time of current iteration of node */
+ instr_time counter; /* Accumulated runtime for this node */
+ double firsttuple; /* Time for first tuple of this cycle */
+ double startup; /* Total startup time (in seconds) */
+ double total; /* Total total time (in seconds) */
+ double ntuples; /* Total tuples produced */
+ double ntuples2;
+ double nloops; /* # of run cycles for this node */
+ double nfiltered1;
+ double nfiltered2;
+ bool prf_work;
+ double nfilteredPRF;
+ double execmemused; /* executor memory used (bytes) */
+ double workmemused; /* work_mem actually used (bytes) */
+ double workmemwanted; /* work_mem to avoid workfile i/o (bytes) */
+ bool workfileCreated; /* workfile created in this node */
+ instr_time firststart; /* Start time of first iteration of node */
+ int numPartScanned; /* Number of part tables scanned */
+
+ TuplesortInstrumentation sortstats; /* Sort stats, if this is a Sort node */
+ HashInstrumentation hashstats; /* Hash stats, if this is a Hash node */
+ IncrementalSortGroupInfo fullsortGroupInfo; /* Full sort group info for Incremental Sort node */
+ IncrementalSortGroupInfo prefixsortGroupInfo; /* Prefix sort group info for Incremental Sort node */
+ int bnotes; /* Offset to beginning of node's extra text */
+ int enotes; /* Offset to end of node's extra text */
+ int nworkers_launched; /* Number of workers launched for this node */
+ WalUsage walusage; /* add WAL usage */
+} CdbExplain_StatInst;
+
+
+/* EXPLAIN ANALYZE statistics for one process working on one slice */
+typedef struct CdbExplain_SliceWorker
+{
+ double peakmemused; /* bytes alloc in per-query mem context tree */
+ double vmem_reserved; /* vmem reserved by a QE */
+ int nworkers_launched; /* Number of workers launched for this slice */
+} CdbExplain_SliceWorker;
+
+
+/* Header of EXPLAIN ANALYZE statistics message sent from qExec to qDisp */
+typedef struct CdbExplain_StatHdr
+{
+ NodeTag type; /* T_CdbExplain_StatHdr */
+ int segindex; /* segment id */
+ int nInst; /* num of StatInst entries following StatHdr */
+ int bnotes; /* offset to extra text area */
+ int enotes; /* offset to end of extra text area */
+
+ CdbExplain_SliceWorker worker; /* qExec's overall stats for slice */
+
+ /*
+ * During serialization, we use this as a temporary StatInst and save
+ * "one-at-a-time" StatInst into this variable. We then write this
+ * variable into buffer (serialize it) and then "recycle" the same inst
+ * for next plan node's StatInst. During deserialization, an Array
+ * [0..nInst-1] of StatInst entries is appended starting here.
+ */
+ CdbExplain_StatInst inst[1];
+
+ /* extra text is appended after that */
+} CdbExplain_StatHdr;
+
+#endif //EXPLAIN_GP_H
diff --git a/src/include/executor/execdesc.h b/src/include/executor/execdesc.h
index bcf9dbd6cd8..0a3e50522aa 100644
--- a/src/include/executor/execdesc.h
+++ b/src/include/executor/execdesc.h
@@ -65,6 +65,8 @@ typedef struct SerializedParamExecData
typedef struct SerializedParams
{
+ pg_node_attr(custom_read_write, no_copy, no_equal)
+
NodeTag type;
int nExternParams;
@@ -163,6 +165,8 @@ typedef struct ExecSlice
*/
typedef struct SliceTable
{
+ pg_node_attr(custom_read_write, custom_copy_equal)
+
NodeTag type;
int localSlice; /* Index of the slice to execute. */
@@ -181,6 +185,8 @@ typedef struct SliceTable
*/
typedef struct CursorPosInfo
{
+ pg_node_attr(no_equal)
+
NodeTag type;
char *cursor_name;
@@ -201,6 +207,8 @@ typedef struct CursorPosInfo
*/
typedef struct QueryDispatchDesc
{
+ pg_node_attr(no_copy, no_equal)
+
NodeTag type;
/*
@@ -267,8 +275,10 @@ typedef struct QueryDispatchDesc
* When a CREATE command is dispatched to segments, the OIDs used for the
* new objects are sent in a list of OidAssignments.
*/
-typedef struct
+typedef struct OidAssignment
{
+ pg_node_attr(no_equal, custom_read_write)
+
NodeTag type;
/*
diff --git a/src/include/nodes/altertablenodes.h b/src/include/nodes/altertablenodes.h
index b919179b8db..f79859674b1 100644
--- a/src/include/nodes/altertablenodes.h
+++ b/src/include/nodes/altertablenodes.h
@@ -55,6 +55,8 @@
typedef struct AlteredTableInfo
{
+ pg_node_attr(no_equal, custom_copy_equal, custom_read_write)
+
NodeTag type;
/* Information saved before any work commences: */
@@ -129,6 +131,8 @@ typedef struct ExprState ExprState;
/* Note: new NOT NULL constraints are handled elsewhere */
typedef struct NewConstraint
{
+ pg_node_attr(no_equal, no_copy, custom_read_write)
+
NodeTag type;
char *name; /* Constraint name, or NULL if none */
@@ -150,11 +154,12 @@ typedef struct NewConstraint
*/
typedef struct NewColumnValue
{
+ pg_node_attr(no_equal, no_copy)
NodeTag type;
AttrNumber attnum; /* which column */
Expr *expr; /* expression to compute */
- ExprState *exprstate; /* execution state */
+ ExprState *exprstate pg_node_attr(read_as(NULL), read_write_ignore); /* execution state */
bool is_generated; /* is it a GENERATED expression? */
} NewColumnValue;
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h
index bd2c1bcf58c..a7fc0d02d67 100644
--- a/src/include/nodes/nodes.h
+++ b/src/include/nodes/nodes.h
@@ -29,703 +29,12 @@ typedef enum NodeTag
{
T_Invalid = 0,
- /*
- * TAGS FOR EXECUTOR NODES (execnodes.h)
- */
- T_IndexInfo,
- T_ExprContext,
- T_ProjectionInfo,
- T_JunkFilter,
- T_OnConflictSetState,
- T_MergeActionState,
- T_ResultRelInfo,
- T_EState,
- T_TupleTableSlot,
- T_CdbProcess,
- T_SliceTable,
- T_CursorPosInfo,
- T_PartitionState,
- T_QueryDispatchDesc,
- T_OidAssignment,
-
- /*
- * TAGS FOR PLAN NODES (plannodes.h)
- */
- T_Plan,
- T_Scan,
- T_Join,
-
- /* Real plan node starts below. Scan and Join are "Virtual nodes",
- * It will take the form of IndexScan, SeqScan, etc.
- * CteScan will take the form of SubqueryScan.
- */
- T_Result,
- T_Plan_Start = T_Result,
- T_ProjectSet,
- T_ModifyTable,
- T_Append,
- T_MergeAppend,
- T_RecursiveUnion,
- T_Sequence,
- T_BitmapAnd,
- T_BitmapOr,
- T_SeqScan,
- T_DynamicSeqScan,
- T_SampleScan,
- T_IndexScan,
- T_DynamicIndexScan,
- T_DynamicIndexOnlyScan,
- T_IndexOnlyScan,
- T_BitmapIndexScan,
- T_DynamicBitmapIndexScan,
- T_BitmapHeapScan,
- T_DynamicBitmapHeapScan,
- T_TidScan,
- T_TidRangeScan,
- T_SubqueryScan,
- T_FunctionScan,
- T_TableFunctionScan,
- T_ValuesScan,
- T_TableFuncScan,
- T_CteScan,
- T_NamedTuplestoreScan,
- T_WorkTableScan,
- T_ForeignScan,
- T_DynamicForeignScan,
- T_CustomScan,
- T_NestLoop,
- T_MergeJoin,
- T_HashJoin,
- T_Material,
- T_Memoize,
- T_Sort,
- T_IncrementalSort,
- T_Group,
- T_Agg,
- T_TupleSplit,
- T_WindowAgg,
- T_WindowHashAgg,
- T_Unique,
- T_Gather,
- T_GatherMerge,
- T_Hash,
- T_RuntimeFilter,
- T_SetOp,
- T_LockRows,
- T_Limit,
- T_Motion,
- T_ShareInputScan,
- T_SplitUpdate,
- T_SplitMerge,
- T_AssertOp,
- T_PartitionSelector,
- T_Plan_End,
- /* these aren't subclasses of Plan: */
- T_NestLoopParam,
- T_PlanRowMark,
- T_PartitionPruneInfo,
- T_PartitionedRelPruneInfo,
- T_PartitionPruneStepOp,
- T_PartitionPruneStepCombine,
- T_PlanInvalItem,
-
- /*
- * TAGS FOR PLAN STATE NODES (execnodes.h)
- *
- * These should correspond one-to-one with Plan node types.
- */
- T_PlanState,
- T_ScanState,
- T_JoinState,
-
- /* Real plan node starts below. Scan and Join are "Virtal nodes",
- * It will take the form of IndexScan, SeqScan, etc.
- */
- T_ResultState,
- T_ProjectSetState,
- T_ModifyTableState,
- T_AppendState,
- T_MergeAppendState,
- T_RecursiveUnionState,
- T_SequenceState,
- T_BitmapAndState,
- T_BitmapOrState,
- T_SeqScanState,
- T_DynamicSeqScanState,
- T_SampleScanState,
- T_IndexScanState,
- T_DynamicIndexScanState,
- T_DynamicIndexOnlyScanState,
- T_IndexOnlyScanState,
- T_BitmapIndexScanState,
- T_DynamicBitmapIndexScanState,
- T_BitmapHeapScanState,
- T_DynamicBitmapHeapScanState,
- T_TidScanState,
- T_TidRangeScanState,
- T_SubqueryScanState,
- T_FunctionScanState,
- T_TableFunctionState,
- T_TableFuncScanState,
- T_ValuesScanState,
- T_CteScanState,
- T_NamedTuplestoreScanState,
- T_WorkTableScanState,
- T_ForeignScanState,
- T_DynamicForeignScanState,
- T_CustomScanState,
- T_NestLoopState,
- T_MergeJoinState,
- T_HashJoinState,
- T_MaterialState,
- T_MemoizeState,
- T_SortState,
- T_IncrementalSortState,
- T_GroupState,
- T_AggState,
- T_TupleSplitState,
- T_WindowAggState,
- T_UniqueState,
- T_GatherState,
- T_GatherMergeState,
- T_HashState,
- T_RuntimeFilterState,
- T_SetOpState,
- T_LockRowsState,
- T_LimitState,
- T_MotionState,
- T_ShareInputScanState,
- T_SplitUpdateState,
- T_SplitMergeState,
- T_AssertOpState,
- T_PartitionSelectorState,
-
- /*
- * TupleDesc and ParamListInfo are not Nodes as such, but you can wrap
- * them in TupleDescNode and SerializedParams structs for serialization.
- */
- T_TupleDescNode,
- T_SerializedParams,
-
- /*
- * TAGS FOR PRIMITIVE NODES (primnodes.h)
- */
- T_Alias,
- T_RangeVar,
- T_TableFunc,
- T_Expr,
- T_Var,
- T_Const,
- T_Param,
- T_DQAExpr,
- T_Aggref,
- T_GroupingFunc,
- T_WindowFunc,
- T_SubscriptingRef,
- T_FuncExpr,
- T_NamedArgExpr,
- T_OpExpr,
- T_DistinctExpr,
- T_NullIfExpr,
- T_ScalarArrayOpExpr,
- T_BoolExpr,
- T_SubLink,
- T_SubPlan,
- T_AlternativeSubPlan,
- T_FieldSelect,
- T_FieldStore,
- T_RelabelType,
- T_CoerceViaIO,
- T_ArrayCoerceExpr,
- T_ConvertRowtypeExpr,
- T_CollateExpr,
- T_CaseExpr,
- T_CaseWhen,
- T_CaseTestExpr,
- T_ArrayExpr,
- T_RowExpr,
- T_RowCompareExpr,
- T_CoalesceExpr,
- T_MinMaxExpr,
- T_SQLValueFunction,
- T_XmlExpr,
- T_JsonFormat,
- T_JsonReturning,
- T_JsonValueExpr,
- T_JsonConstructorExpr,
- T_JsonIsPredicate,
- T_NullTest,
- T_BooleanTest,
- T_CoerceToDomain,
- T_CoerceToDomainValue,
- T_SetToDefault,
- T_CurrentOfExpr,
- T_NextValueExpr,
- T_InferenceElem,
- T_TargetEntry,
- T_RangeTblRef,
- T_JoinExpr,
- T_FromExpr,
- T_OnConflictExpr,
- T_IntoClause,
- T_CopyIntoClause,
- T_RefreshClause,
- T_Flow,
- T_GroupId,
- T_GroupingSetId,
- T_AggExprId,
- T_RowIdExpr,
- T_DistributedBy,
- T_DMLActionExpr,
-
- /*
- * TAGS FOR EXPRESSION STATE NODES (execnodes.h)
- *
- * ExprState represents the evaluation state for a whole expression tree.
- * Most Expr-based plan nodes do not have a corresponding expression state
- * node, they're fully handled within execExpr* - but sometimes the state
- * needs to be shared with other parts of the executor, as for example
- * with SubPlanState, which nodeSubplan.c has to modify.
- */
- T_ExprState,
- T_WindowFuncExprState,
- T_SetExprState,
- T_SubPlanState,
- T_DomainConstraintState,
- T_AggExprIdState,
- T_RowIdExprState,
-
- /*
- * TAGS FOR PLANNER NODES (pathnodes.h)
- */
- T_PlannerInfo,
- T_PlannerGlobal,
- T_RelOptInfo,
- T_IndexOptInfo,
- T_ForeignKeyOptInfo,
- T_ParamPathInfo,
- T_RelAggInfo,
- T_Path,
- T_AppendOnlyPath,
- T_AOCSPath,
- T_ExternalPath,
- T_CtePath,
- T_IndexPath,
- T_BitmapHeapPath,
- T_BitmapAndPath,
- T_BitmapOrPath,
- T_TidPath,
- T_TidRangePath,
- T_SubqueryScanPath,
- T_TableFunctionScanPath,
- T_ForeignPath,
- T_CustomPath,
- T_NestPath,
- T_MergePath,
- T_HashPath,
- T_RuntimeFilterPath,
- T_AppendPath,
- T_MergeAppendPath,
- T_GroupResultPath,
- T_MaterialPath,
- T_MemoizePath,
- T_UniquePath,
- T_GatherPath,
- T_GatherMergePath,
- T_ProjectionPath,
- T_ProjectSetPath,
- T_SortPath,
- T_IncrementalSortPath,
- T_GroupPath,
- T_UpperUniquePath,
- T_AggPath,
- T_GroupingSetsPath,
- T_MinMaxAggPath,
- T_WindowAggPath,
- T_TupleSplitPath,
- T_SetOpPath,
- T_RecursiveUnionPath,
- T_LockRowsPath,
- T_ModifyTablePath,
- T_LimitPath,
- /* these aren't subclasses of Path: */
- T_EquivalenceClass,
- T_EquivalenceMember,
- T_PathKey,
- T_PathTarget,
- T_RestrictInfo,
- T_IndexClause,
- T_PlaceHolderVar,
- T_SpecialJoinInfo,
- T_OuterJoinClauseInfo,
- T_AppendRelInfo,
- T_RowIdentityVarInfo,
- T_PlaceHolderInfo,
- T_GroupedVarInfo,
- T_MinMaxAggInfo,
- T_SegfileMapNode,
- T_PlannerParamItem,
- T_AggInfo,
- T_AggTransInfo,
- T_RollupData,
- T_GroupingSetData,
- T_StatisticExtInfo,
- T_JoinDomain,
-
- /* Tags for MPP planner nodes (relation.h) */
- T_CdbMotionPath = 580,
- T_PartitionSelectorPath,
- T_SplitUpdatePath,
- T_SplitMergePath,
- T_CdbRelColumnInfo,
- T_DistributionKey,
-
- /*
- * TAGS FOR MEMORY NODES (memnodes.h)
- */
- T_MemoryContext,
- T_AllocSetContext,
- T_SlabContext,
- T_GenerationContext,
- T_MemoryAccount,
-
- /*
- * TAGS FOR VALUE NODES (value.h)
- */
- T_Value,
- T_Integer,
- T_Float,
- T_Boolean,
- T_String,
- T_BitString,
- T_Null,
-
- /*
- * TAGS FOR LIST NODES (pg_list.h)
- */
- T_List,
- T_IntList,
- T_OidList,
- T_XidList,
-
- /*
- * TAGS FOR EXTENSIBLE NODES (extensible.h)
- */
- T_ExtensibleNode,
- T_ErrorSaveContext,
-
- /*
- * TAGS FOR STATEMENT NODES (mostly in parsenodes.h)
- */
- T_RawStmt,
- T_Query,
- T_PlannedStmt,
- T_InsertStmt,
- T_DeleteStmt,
- T_UpdateStmt,
- T_MergeStmt,
- T_SelectStmt,
- T_ReturnStmt,
- T_PLAssignStmt,
- T_AlterTableStmt,
- T_AlterTableCmd,
- T_AlterDomainStmt,
- T_SetOperationStmt,
- T_GrantStmt,
- T_GrantRoleStmt,
- T_AlterDefaultPrivilegesStmt,
- T_ClosePortalStmt,
- T_ClusterStmt,
- T_CopyStmt,
- T_CreateStmt,
- T_SingleRowErrorDesc,
- T_ExtTableTypeDesc,
- T_CreateExternalStmt,
- T_DefineStmt,
- T_DropStmt,
- T_TruncateStmt,
- T_CommentStmt,
- T_FetchStmt,
- T_IndexStmt,
- T_CreateFunctionStmt,
- T_AlterFunctionStmt,
- T_DoStmt,
- T_RenameStmt,
- T_RuleStmt,
- T_NotifyStmt,
- T_ListenStmt,
- T_UnlistenStmt,
- T_TransactionStmt,
- T_ViewStmt,
- T_LoadStmt,
- T_CreateDomainStmt,
- T_CreatedbStmt,
- T_DropdbStmt,
- T_VacuumStmt,
- T_ExplainStmt,
- T_CreateTableAsStmt,
- T_CreateSeqStmt,
- T_AlterSeqStmt,
- T_VariableSetStmt,
- T_VariableShowStmt,
- T_DiscardStmt,
- T_CreateTrigStmt,
- T_CreatePLangStmt,
- T_CreateRoleStmt,
- T_AlterRoleStmt,
- T_DropRoleStmt,
- T_CreateProfileStmt,
- T_AlterProfileStmt,
- T_DropProfileStmt,
- T_CreateQueueStmt,
- T_AlterQueueStmt,
- T_DropQueueStmt,
- T_CreateResourceGroupStmt,
- T_DropResourceGroupStmt,
- T_AlterResourceGroupStmt,
- T_LockStmt,
- T_ConstraintsSetStmt,
- T_ReindexStmt,
- T_CheckPointStmt,
- T_CreateSchemaStmt,
- T_AlterSchemaStmt,
- T_CreateTagStmt,
- T_AlterTagStmt,
- T_DropTagStmt,
- T_AlterDatabaseStmt,
- T_AlterDatabaseRefreshCollStmt,
- T_AlterDatabaseSetStmt,
- T_AlterRoleSetStmt,
- T_CreateConversionStmt,
- T_CreateCastStmt,
- T_CreateOpClassStmt,
- T_CreateOpFamilyStmt,
- T_AlterOpFamilyStmt,
- T_PrepareStmt,
- T_ExecuteStmt,
- T_DeallocateStmt,
- T_DeclareCursorStmt,
- T_CreateTableSpaceStmt,
- T_DropTableSpaceStmt,
- T_AlterObjectDependsStmt,
- T_AlterObjectSchemaStmt,
- T_AlterOwnerStmt,
- T_AlterOperatorStmt,
- T_AlterTypeStmt,
- T_DropOwnedStmt,
- T_ReassignOwnedStmt,
- T_CompositeTypeStmt,
- T_CreateEnumStmt,
- T_CreateRangeStmt,
- T_AlterEnumStmt,
- T_AlterTSDictionaryStmt,
- T_AlterTSConfigurationStmt,
- T_PublicationTable,
- T_PublicationObjSpec,
- T_CreateFdwStmt,
- T_AlterFdwStmt,
- T_CreateForeignServerStmt,
- T_AlterForeignServerStmt,
- T_CreateStorageServerStmt,
- T_AlterStorageServerStmt,
- T_DropStorageServerStmt,
- T_CreateUserMappingStmt,
- T_AlterUserMappingStmt,
- T_DropUserMappingStmt,
- T_CreateStorageUserMappingStmt,
- T_AlterStorageUserMappingStmt,
- T_DropStorageUserMappingStmt,
- T_AlterTableSpaceOptionsStmt,
- T_AlterTableMoveAllStmt,
- T_SecLabelStmt,
- T_CreateForeignTableStmt,
- T_ImportForeignSchemaStmt,
- T_CreateExtensionStmt,
- T_AlterExtensionStmt,
- T_AlterExtensionContentsStmt,
- T_CreateEventTrigStmt,
- T_AlterEventTrigStmt,
- T_RefreshMatViewStmt,
- T_ReplicaIdentityStmt,
- T_AlterSystemStmt,
- T_CreatePolicyStmt,
- T_AlterPolicyStmt,
- T_CreateTransformStmt,
- T_CreateAmStmt,
- T_CreatePublicationStmt,
- T_AlterPublicationStmt,
- T_CreateSubscriptionStmt,
- T_AlterSubscriptionStmt,
- T_DropSubscriptionStmt,
- T_CreateStatsStmt,
- T_AlterCollationStmt,
- T_CallStmt,
- T_AlterStatsStmt,
- T_CreateTaskStmt,
- T_AlterTaskStmt,
- T_DropTaskStmt,
-
- /* GPDB additions */
- T_PartitionBy,
- T_PartitionRangeItem,
- T_PartitionValuesSpec,
- T_CreateDirectoryTableStmt,
- T_AlterDirectoryTableStmt,
- T_DropDirectoryTableStmt,
- T_CreateFileSpaceStmt,
- T_FileSpaceEntry,
- T_DropFileSpaceStmt,
- T_TableValueExpr,
- T_DenyLoginInterval,
- T_DenyLoginPoint,
- T_AlteredTableInfo,
- T_NewConstraint,
- T_NewColumnValue,
- T_GpPartitionDefinition,
- T_GpPartDefElem,
- T_GpPartitionRangeItem,
- T_GpPartitionRangeSpec,
- T_GpPartitionListSpec,
- T_GpAlterPartitionId,
- T_GpDropPartitionCmd,
- T_GpSplitPartitionCmd,
- T_GpAlterPartitionCmd,
- T_CreateWarehouseStmt,
- T_DropWarehouseStmt,
- T_AddForeignSegStmt,
-
- /*
- * TAGS FOR PARSE TREE NODES (parsenodes.h)
- */
- T_A_Expr,
- T_ColumnRef,
- T_ParamRef,
- T_A_Const,
- T_FuncCall,
- T_A_Star,
- T_A_Indices,
- T_A_Indirection,
- T_A_ArrayExpr,
- T_ResTarget,
- T_MultiAssignRef,
- T_TypeCast,
- T_CollateClause,
- T_SortBy,
- T_WindowDef,
- T_RangeSubselect,
- T_RangeFunction,
- T_RangeTableSample,
- T_RangeTableFunc,
- T_RangeTableFuncCol,
- T_TypeName,
- T_ColumnDef,
- T_IndexElem,
- T_StatsElem,
- T_Constraint,
- T_DefElem,
- T_RangeTblEntry,
- T_RTEPermissionInfo,
- T_RangeTblFunction,
- T_TableSampleClause,
- T_WithCheckOption,
- T_SortGroupClause,
- T_GroupingSet,
- T_WindowClause,
- T_ObjectWithArgs,
- T_AccessPriv,
- T_CreateOpClassItem,
- T_TableLikeClause,
- T_FunctionParameter,
- T_LockingClause,
- T_RowMarkClause,
- T_XmlSerialize,
- T_WithClause,
- T_InferClause,
- T_OnConflictClause,
- T_CTESearchClause,
- T_CTECycleClause,
- T_CommonTableExpr,
- T_MergeWhenClause,
- T_MergeAction,
- T_ColumnReferenceStorageDirective,
- T_DistributionKeyElem,
- T_RoleSpec,
- T_TriggerTransition,
- T_JsonOutput,
- T_JsonKeyValue,
- T_JsonObjectConstructor,
- T_JsonArrayConstructor,
- T_JsonArrayQueryConstructor,
- T_JsonAggConstructor,
- T_JsonObjectAgg,
- T_JsonArrayAgg,
- T_PartitionElem,
- T_PartitionSpec,
- T_PartitionBoundSpec,
- T_PartitionRangeDatum,
- T_PartitionCmd,
- T_VacuumRelation,
-
- T_Bitmapset,
-
- /*
- * TAGS FOR REPLICATION GRAMMAR PARSE NODES (replnodes.h)
- */
- T_IdentifySystemCmd,
- T_BaseBackupCmd,
- T_CreateReplicationSlotCmd,
- T_DropReplicationSlotCmd,
- T_StartReplicationCmd,
- T_ReadReplicationSlotCmd,
- T_TimeLineHistoryCmd,
- T_SQLCmd,
-
- /*
- * TAGS FOR RANDOM OTHER STUFF
- *
- * These are objects that aren't part of parse/plan/execute node tree
- * structures, but we give them NodeTags anyway for identification
- * purposes (usually because they are involved in APIs where we want to
- * pass multiple object types through the same pointer).
- */
- T_TriggerData, /* in commands/trigger.h */
- T_EventTriggerData, /* in commands/event_trigger.h */
- T_ReturnSetInfo, /* in nodes/execnodes.h */
- T_WindowObjectData, /* private in nodeWindowAgg.c */
- T_TIDBitmap, /* in nodes/tidbitmap.h */
- T_InlineCodeBlock, /* in nodes/parsenodes.h */
- T_FdwRoutine, /* in foreign/fdwapi.h */
- T_IndexAmRoutine, /* in access/amapi.h */
- T_TableAmRoutine, /* in access/tableam.h */
- T_TsmRoutine, /* in access/tsmapi.h */
- T_ForeignKeyCacheInfo, /* in utils/rel.h */
- T_CallContext, /* in nodes/parsenodes.h */
- T_SupportRequestSimplify, /* in nodes/supportnodes.h */
- T_SupportRequestSelectivity, /* in nodes/supportnodes.h */
- T_SupportRequestCost, /* in nodes/supportnodes.h */
- T_SupportRequestRows, /* in nodes/supportnodes.h */
- T_SupportRequestIndexCondition, /* in nodes/supportnodes.h */
- T_SupportRequestWFuncMonotonic,
- T_SupportRequestOptimizeWindowClause,
-
- T_StreamBitmap, /* in nodes/tidbitmap.h */
- T_FormatterData, /* in access/formatter.h */
- T_ExtProtocolData, /* in access/extprotocol.h */
- T_ExtProtocolValidatorData, /* in access/extprotocol.h */
- T_ExternalScanInfo, /* in access/plannodes.h */
- T_CookedConstraint, /* in catalog/heap.h */
-
- /* CDB: tags for random other stuff */
- T_CdbExplain_StatHdr = 1000, /* in cdb/cdbexplain.c */
- T_GpPolicy, /* in catalog/gp_distribution_policy.h */
- T_RetrieveStmt,
- T_ReindexIndexInfo, /* in nodes/parsenodes.h */
- T_EphemeralNamedRelationInfo, /* utils/queryenvironment.h */
- T_CompoundUtilityStmt,
- T_CreateForeignStmt,
-
+#include "nodes/nodetags.h"
} NodeTag;
+#define T_Plan_Start T_Plan
+#define T_Plan_End T_PlanRowMark
+
/*
* pg_node_attr() - Used in node definitions to set extra information for
* gen_node_support.pl
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index b79846b3d6d..999934bc1e0 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -768,6 +768,8 @@ typedef struct RangeTableSample
*/
typedef struct ColumnDef
{
+ pg_node_attr(custom_copy_equal, custom_read_write)
+
NodeTag type;
char *colname; /* name of column */
TypeName *typeName; /* type of column */
@@ -966,8 +968,8 @@ typedef struct PartitionSpec
PartitionStrategy strategy;
List *partParams; /* List of PartitionElems */
- struct GpPartitionDefinition *gpPartDef;
- struct PartitionSpec *subPartSpec; /* subpartition specification */
+ struct GpPartitionDefinition *gpPartDef pg_node_attr(read_as(NULL), read_write_ignore);
+ struct PartitionSpec *subPartSpec pg_node_attr(read_as(NULL), read_write_ignore); /* subpartition specification */
int location; /* token location, or -1 if unknown */
} PartitionSpec;
@@ -1208,7 +1210,7 @@ typedef struct RangeTblEntry
/* These are for pre-planned sub-queries only. They are internal to
* window planning.
*/
- struct PlannerInfo *subquery_root; /* merge16_delete_temp */
+ struct PlannerInfo *subquery_root pg_node_attr(equal_ignore, copy_ignore); /* merge16_delete_temp */
List *subquery_rtable;
List *subquery_pathkeys;
@@ -1420,7 +1422,7 @@ typedef struct RangeTblFunction
List *funccoltypmods pg_node_attr(query_jumble_ignore);
/* OID list of column collation OIDs */
List *funccolcollations pg_node_attr(query_jumble_ignore);
- bytea *funcuserdata; /* merge16_delete_temp */ /* describe function user data. assume bytea */
+ bytea *funcuserdata pg_node_attr(array_size(funccolcount)); /* merge16_delete_temp */ /* describe function user data. assume bytea */
/* This is set during planning for use by the executor: */
/* PARAM_EXEC Param IDs affecting this func */
@@ -2321,8 +2323,8 @@ typedef struct CreateSchemaStmt
NodeTag type;
char *schemaname; /* the name of the schema to create */
RoleSpec *authrole; /* the owner of the created schema */
- List *schemaElts; /* schema components (list of parsenodes) */
- bool if_not_exists; /* just do nothing if schema already exists? */
+ List *schemaElts pg_node_attr(read_as(NIL), read_write_ignore); /* schema components (list of parsenodes) */
+ bool if_not_exists pg_node_attr(read_as(false), read_write_ignore); /* just do nothing if schema already exists? */
/*
* In GPDB, when a CreateSchemaStmt is dispatched to executor nodes, the
@@ -2885,7 +2887,7 @@ typedef enum ExtTableType
EXTTBL_TYPE_EXECUTE /* table defined with EXECUTE clause */
} ExtTableType;
-typedef struct
+typedef struct ExtTableTypeDesc
{
NodeTag type;
ExtTableType exttabletype;
@@ -3938,7 +3940,8 @@ typedef struct FetchStmt
* properties are empty.
* ----------------------
*/
-typedef enum IndexConcurrentlyPhase {
+typedef enum IndexConcurrentlyPhase
+{
CONCURRENTLY_INIT,
CONCURRENTLY_BUILD_INDEX,
CONCURRENTLY_VALIDATE_INDEX,
@@ -4347,7 +4350,7 @@ typedef struct ViewStmt
Node *query; /* the SELECT query (as a raw parse tree) */
bool replace; /* replace an existing view? */
List *options; /* options from WITH clause */
- ViewCheckOption withCheckOption; /* WITH CHECK OPTION */
+ ViewCheckOption withCheckOption pg_node_attr(read_as(NO_CHECK_OPTION), read_write_ignore); /* WITH CHECK OPTION */
List *tags; /* List of tags DefElem nodes */
} ViewStmt;
diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h
index d5556d66c4b..d9311233747 100644
--- a/src/include/nodes/pathnodes.h
+++ b/src/include/nodes/pathnodes.h
@@ -156,7 +156,7 @@ typedef struct ApplyShareInputContext
*/
typedef struct PlannerGlobal
{
- pg_node_attr(no_copy_equal, no_read, no_query_jumble)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble, custom_read_write)
NodeTag type;
@@ -169,7 +169,7 @@ typedef struct PlannerGlobal
/* PlannerInfos for SubPlan nodes */
List *subroots pg_node_attr(read_write_ignore);
- int *subplan_sliceIds; /* slice IDs for SubPlan nodes. */
+ int *subplan_sliceIds pg_node_attr(array_size(subplans)); /* slice IDs for SubPlan nodes. */
/* indices of subplans that require REWIND */
Bitmapset *rewindPlanIDs;
@@ -270,7 +270,7 @@ typedef struct PlannerInfo PlannerInfo;
struct PlannerInfo
{
- pg_node_attr(no_copy_equal, no_read, no_query_jumble)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble, custom_read_write)
NodeTag type;
@@ -1297,7 +1297,7 @@ typedef struct RelOptInfo
*/
typedef struct RelAggInfo
{
- pg_node_attr(custom_copy_equal)
+ pg_node_attr(no_copy_equal, no_read)
NodeTag type;
@@ -1792,7 +1792,7 @@ typedef enum VolatileFunctionStatus
*/
typedef struct PathTarget
{
- pg_node_attr(no_copy_equal, no_read, no_query_jumble)
+ pg_node_attr(no_read, no_query_jumble)
NodeTag type;
@@ -1934,7 +1934,7 @@ typedef struct Path
Cost startup_cost; /* cost expended before fetching any tuples */
Cost total_cost; /* total cost (assuming all tuples fetched) */
- EstimatedBytes memory; /* executor RAM needed for Path + kids */
+ EstimatedBytes memory pg_node_attr(read_write_ignore); /* executor RAM needed for Path + kids */
CdbPathLocus locus; /* distribution of the result tuples */
diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h
index f759a976ec6..56bc51ba7d2 100644
--- a/src/include/nodes/plannodes.h
+++ b/src/include/nodes/plannodes.h
@@ -77,7 +77,7 @@ typedef enum DMLAction
*/
typedef struct PlannedStmt
{
- pg_node_attr(no_equal, no_query_jumble)
+ pg_node_attr(no_equal, no_query_jumble, custom_copy_equal, custom_read_write)
NodeTag type;
@@ -122,7 +122,7 @@ typedef struct PlannedStmt
List *subplans; /* Plan trees for SubPlan expressions; note
* that some could be NULL */
- int *subplan_sliceIds; /* merge16_delete_temp */ /* slice IDs containing SubPlans; size equals 'subplans' */
+ int *subplan_sliceIds pg_node_attr(array_size(subplans)); /* merge16_delete_temp */ /* slice IDs containing SubPlans; size equals 'subplans' */
Bitmapset *rewindPlanIDs; /* indices of subplans that require REWIND */
@@ -272,7 +272,7 @@ typedef struct PlanSlice
*/
typedef struct Plan
{
- pg_node_attr(abstract, no_equal, no_query_jumble)
+ pg_node_attr(no_equal, no_query_jumble)
NodeTag type;
@@ -328,7 +328,7 @@ typedef struct Plan
* MPP needs to keep track of the characteristics of flow of output
* tuple of Plan nodes.
*/
- Flow *flow; /* Flow description. Initially NULL.
+ Flow *flow pg_node_attr(read_as(NULL), read_write_ignore); /* Flow description. Initially NULL.
* Set during parallelization.
*/
@@ -339,8 +339,8 @@ typedef struct Plan
* Field flow has the locus info only in the top Plan nodes,
* other nodes couldn't be set that.
*/
- uint8 locustype;
- int parallel; /* parallel workers of this plan if there was */
+ uint8 locustype pg_node_attr(read_as(0), read_write_ignore);
+ int parallel pg_node_attr(read_as(0), read_write_ignore); /* parallel workers of this plan if there was */
/**
* How much memory (in KB) should be used to execute this plan node?
@@ -381,7 +381,7 @@ typedef struct Result
Node *resconstantqual;
int numHashFilterCols;
- int16 *hashFilterColIdx pg_node_attr(array_size(numHashFilterCols));
+ AttrNumber *hashFilterColIdx pg_node_attr(array_size(numHashFilterCols));
Oid *hashFilterFuncs pg_node_attr(array_size(numHashFilterCols));
} Result;
@@ -595,8 +595,6 @@ typedef struct BitmapOr
*/
typedef struct Scan
{
- pg_node_attr(abstract)
-
Plan plan;
Index scanrelid; /* relid is index into the range table */
} Scan;
@@ -1188,8 +1186,6 @@ typedef struct CustomScan
*/
typedef struct Join
{
- pg_node_attr(abstract)
-
Plan plan;
JoinType jointype;
bool inner_unique;
@@ -1648,22 +1644,22 @@ typedef struct WindowHashAgg
Plan plan;
Index winref; /* ID referenced by window functions */
int partNumCols; /* number of columns in partition clause */
- AttrNumber *partColIdx; /* their indexes in the target list */
- Oid *partOperators; /* equality operators for partition columns */
- Oid *partCollations; /* collations for partition columns */
+ AttrNumber *partColIdx pg_node_attr(array_size(partNumCols)); /* their indexes in the target list */
+ Oid *partOperators pg_node_attr(array_size(partNumCols)); /* equality operators for partition columns */
+ Oid *partCollations pg_node_attr(array_size(partNumCols)); /* collations for partition columns */
/*
* Different with `WindowAgg`, WindowHashAgg may use the
* `order by` information.
*/
int ordNumCols; /* number of sort-key columns */
- AttrNumber *ordColIdx; /* their indexes in the target list */
- Oid *ordOperators; /* OIDs of operators to sort them by */
- Oid *ordCollations; /* OIDs of collations */
- bool *ordNullsFirst; /* NULLS FIRST/LAST directions */
+ AttrNumber *ordColIdx pg_node_attr(array_size(ordNumCols)); /* their indexes in the target list */
+ Oid *ordOperators pg_node_attr(array_size(ordNumCols)); /* OIDs of operators to sort them by */
+ Oid *ordCollations pg_node_attr(array_size(ordNumCols)); /* OIDs of collations */
+ bool *ordNullsFirst pg_node_attr(array_size(ordNumCols)); /* NULLS FIRST/LAST directions */
int frameOptions; /* frame_clause options, see WindowDef */
- Node *startOffset; /* expression for starting bound, if any */
- Node *endOffset; /* expression for ending bound, if any */
+ Node *startOffset pg_node_attr(array_size(frameOptions)); /* expression for starting bound, if any */
+ Node *endOffset pg_node_attr(array_size(frameOptions)); /* expression for ending bound, if any */
/* these fields are used with RANGE offset PRECEDING/FOLLOWING: */
Oid startInRangeFunc; /* in_range function for startOffset */
Oid endInRangeFunc; /* in_range function for endOffset */
@@ -1892,6 +1888,7 @@ typedef enum MotionType
*/
typedef struct Motion
{
+ pg_node_attr(no_equal, custom_read_write, custom_copy_equal)
Plan plan;
MotionType motionType;
@@ -1900,7 +1897,7 @@ typedef struct Motion
/* For Hash */
List *hashExprs; /* list of hash expressions */
- Oid *hashFuncs; /* merge16_delete_temp */ /* corresponding hash functions */
+ Oid *hashFuncs pg_node_attr(array_size(hashExprs)); /* merge16_delete_temp */ /* corresponding hash functions */
int numHashSegments; /* the module number of the hash function */
/* For Explicit */
diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h
index 15a96a7b28a..1a6b7b3de92 100644
--- a/src/include/nodes/primnodes.h
+++ b/src/include/nodes/primnodes.h
@@ -195,8 +195,6 @@ typedef struct RefreshClause
*/
typedef struct Expr
{
- pg_node_attr(abstract)
-
NodeTag type;
} Expr;
@@ -520,7 +518,7 @@ typedef struct Aggref
} Aggref;
-typedef struct
+typedef struct DQAExpr
{
Expr xpr;
diff --git a/src/include/nodes/tidbitmap.h b/src/include/nodes/tidbitmap.h
index 7e4db94d0e6..9b6c1876f02 100644
--- a/src/include/nodes/tidbitmap.h
+++ b/src/include/nodes/tidbitmap.h
@@ -97,13 +97,15 @@ typedef enum StreamType
* lossy storage for any page in the chunk's range, since the same
* hashtable entry has to serve both purposes.
*/
+#define PagetableEntryWordNumber Max(WORDS_PER_PAGE, WORDS_PER_CHUNK)
+
typedef struct PagetableEntry
{
BlockNumber blockno; /* page number (hashtable key) */
char status; /* hash entry status */
bool ischunk; /* T = lossy storage, F = exact */
bool recheck; /* should the tuples be rechecked? */
- tbm_bitmapword words[Max(WORDS_PER_PAGE, WORDS_PER_CHUNK)];
+ tbm_bitmapword words[PagetableEntryWordNumber];
} PagetableEntry;
/*
diff --git a/src/include/utils/queryenvironment.h b/src/include/utils/queryenvironment.h
index a25efe883c7..5c1d363271a 100644
--- a/src/include/utils/queryenvironment.h
+++ b/src/include/utils/queryenvironment.h
@@ -58,6 +58,8 @@ typedef EphemeralNamedRelationData *EphemeralNamedRelation;
typedef struct EphemeralNamedRelationInfo
{
+ pg_node_attr(no_copy_equal)
+
NodeTag type;
char *name; /* name used to identify the relation */
Oid reliddesc; /* oid of relation to get tupdesc */
diff --git a/src/test/regress/expected/expressions.out b/src/test/regress/expected/expressions.out
index 2bb3fbf11c1..667c54833bb 100644
--- a/src/test/regress/expected/expressions.out
+++ b/src/test/regress/expected/expressions.out
@@ -509,14 +509,12 @@ select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6
select * from inttest where a not in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null);
a
---
-
-(1 row)
+(0 rows)
select * from inttest where a not in (0::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null);
a
---
-
-(1 row)
+(0 rows)
-- ensure the result matched with the non-hashed version. We simply remove
-- some array elements so that we don't reach the hashing threshold.
diff --git a/src/test/regress/expected/partition_append.out b/src/test/regress/expected/partition_append.out
index 9154c7d5a6b..134dbe685b0 100755
--- a/src/test/regress/expected/partition_append.out
+++ b/src/test/regress/expected/partition_append.out
@@ -2447,17 +2447,17 @@ select relid::regclass, level from gp_partition_template where relid = 'rank_set
alter table rank_settemp set subpartition template (default subpartition def2);
-- def2 is there
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
alter table rank_settemp set subpartition template (default subpartition def2);
-- Should still be there
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
alter table rank_settemp set subpartition template (start (date '2006-01-01') with (appendonly=true));
@@ -2465,9 +2465,9 @@ alter table rank_settemp add partition f1 values ('N');
alter table rank_settemp set subpartition template (start (date '2007-01-01') with (appendonly=true, compresslevel=5));
alter table rank_settemp add partition f2 values ('C');
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1} :partEnd <> :partEvery <>} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1 :location 52} :partEnd <> :partEvery <> :location 52} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
drop table rank_settemp;
@@ -3603,11 +3603,11 @@ alter table mpp5992
set subpartition template (subpartition l1 values (1,2,3),
subpartition l2 values (4,5,6), subpartition l3 values (7,8,9,10));
select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass;
- relid | level | template
----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133})) :location 125} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 107} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165})) :location 157} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 139}) :encClauses <> :isTemplate true :fromCatalog false :location 105}
+ mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108})) :location 100} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 83} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149})) :location 141} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 124}) :encClauses <> :isTemplate true :fromCatalog false :location 81}
+ mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76})) :location 64} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 48} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109})) :location 97} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 81} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143})) :location 129} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 113}) :encClauses <> :isTemplate true :fromCatalog false :location 47}
(3 rows)
-- Now we can add a new partition
@@ -3857,11 +3857,11 @@ select relname, relam, pg_get_expr(relpartbound, oid) from pg_class where relnam
(112 rows)
select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass;
- relid | level | template
----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133})) :location 125} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 107} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165})) :location 157} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 139}) :encClauses <> :isTemplate true :fromCatalog false :location 105}
+ mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108})) :location 100} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 83} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149})) :location 141} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 124}) :encClauses <> :isTemplate true :fromCatalog false :location 81}
+ mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76})) :location 64} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 48} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109})) :location 97} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 81} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143})) :location 129} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 113}) :encClauses <> :isTemplate true :fromCatalog false :location 47}
(3 rows)
-- MPP-10223: split subpartitions
@@ -4061,9 +4061,9 @@ subpartition template (start (1) end (10) every (1))
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
select relid::regclass, level, template from gp_partition_template where relid = 'MPP10480'::regclass;
- relid | level | template
-----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2} :partEvery ({A_CONST :val 1 :location 141})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1 :location 115} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2 :location 125} :partEvery ({A_CONST :val 1 :location 141}) :location 115} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 115}) :encClauses <> :isTemplate true :fromCatalog false :location 114}
(1 row)
-- MPP-10421: fix SPLIT of partitions with PRIMARY KEY constraint/indexes
diff --git a/src/test/regress/expected/xml.out b/src/test/regress/expected/xml.out
index 658b8fcbf24..8eb4294d264 100644
--- a/src/test/regress/expected/xml.out
+++ b/src/test/regress/expected/xml.out
@@ -829,7 +829,7 @@ SELECT table_name, view_definition FROM information_schema.views
table_name | view_definition
------------+---------------------------------------------------------------------------------------------------------------------------------------
xmlview1 | SELECT xmlcomment('test'::text) AS xmlcomment;
- xmlview10 | SELECT XMLSERIALIZE(DOCUMENT '42'::xml AS text NO INDENT) AS "xmlserialize";
+ xmlview10 | SELECT XMLSERIALIZE(DOCUMENT '42'::xml AS text INDENT) AS "xmlserialize";
xmlview11 | SELECT (XMLSERIALIZE(DOCUMENT '42'::xml AS character varying NO INDENT))::character varying AS "xmlserialize";
xmlview2 | SELECT XMLCONCAT('hello'::xml, 'you'::xml) AS "xmlconcat";
xmlview3 | SELECT XMLELEMENT(NAME element, XMLATTRIBUTES(1 AS ":one:", 'deuce' AS two), 'content&') AS "xmlelement";
diff --git a/src/test/singlenode_regress/expected/partition.out b/src/test/singlenode_regress/expected/partition.out
index c510a220c2f..dc98c658805 100755
--- a/src/test/singlenode_regress/expected/partition.out
+++ b/src/test/singlenode_regress/expected/partition.out
@@ -2203,17 +2203,17 @@ select relid::regclass, level from gp_partition_template where relid = 'rank_set
alter table rank_settemp set subpartition template (default subpartition def2);
-- def2 is there
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
alter table rank_settemp set subpartition template (default subpartition def2);
-- Should still be there
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
alter table rank_settemp set subpartition template (start (date '2006-01-01') with (appendonly=true));
@@ -2221,9 +2221,9 @@ alter table rank_settemp add partition f1 values ('N');
alter table rank_settemp set subpartition template (start (date '2007-01-01') with (appendonly=true, compresslevel=5));
alter table rank_settemp add partition f2 values ('C');
select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass;
- relid | level | template
---------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1} :partEnd <> :partEvery <>} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+--------------+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1 :location 52} :partEnd <> :partEvery <> :location 52} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <> :location 52}) :encClauses <> :isTemplate true :fromCatalog false :location 51}
(1 row)
drop table rank_settemp;
@@ -3297,11 +3297,11 @@ alter table mpp5992
set subpartition template (subpartition l1 values (1,2,3),
subpartition l2 values (4,5,6), subpartition l3 values (7,8,9,10));
select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass;
- relid | level | template
----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133})) :location 125} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 107} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165})) :location 157} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 139}) :encClauses <> :isTemplate true :fromCatalog false :location 105}
+ mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108})) :location 100} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 83} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149})) :location 141} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 124}) :encClauses <> :isTemplate true :fromCatalog false :location 81}
+ mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76})) :location 64} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 48} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109})) :location 97} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 81} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143})) :location 129} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 113}) :encClauses <> :isTemplate true :fromCatalog false :location 47}
(3 rows)
-- Now we can add a new partition
@@ -3551,11 +3551,11 @@ select relname, relam, pg_get_expr(relpartbound, oid) from pg_class where relnam
(112 rows)
select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass;
- relid | level | template
----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
- mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+---------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133})) :location 125} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 107} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165})) :location 157} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 139}) :encClauses <> :isTemplate true :fromCatalog false :location 105}
+ mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108})) :location 100} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 83} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149})) :location 141} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 124}) :encClauses <> :isTemplate true :fromCatalog false :location 81}
+ mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76})) :location 64} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 48} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109})) :location 97} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 81} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143})) :location 129} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 113}) :encClauses <> :isTemplate true :fromCatalog false :location 47}
(3 rows)
-- MPP-10223: split subpartitions
@@ -3749,9 +3749,9 @@ subpartition by range(d)
subpartition template (start (1) end (10) every (1))
(start (20) end (30) every (1));
select relid::regclass, level, template from gp_partition_template where relid = 'MPP10480'::regclass;
- relid | level | template
-----------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2} :partEvery ({A_CONST :val 1 :location 141})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true}
+ relid | level | template
+----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1 :location 115} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2 :location 125} :partEvery ({A_CONST :val 1 :location 141}) :location 115} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <> :location 115}) :encClauses <> :isTemplate true :fromCatalog false :location 114}
(1 row)
-- MPP-10421: fix SPLIT of partitions with PRIMARY KEY constraint/indexes