blob: 9e615134bae1d2aa69e136f3d848cfebd7264ae3 [file] [log] [blame]
From 8cf647f2995afbd594d67abb1e6556b97096a1c6 Mon Sep 17 00:00:00 2001
From: Sven Klemm <sven@timescale.com>
Date: Thu, 24 Sep 2020 04:42:45 +0200
Subject: [PATCH] Adjust hypertable expansion to PG13 changes
PG13 merges setup_append_rel_array into setup_simple_rel_arrays
which we use to build the append_rel_array.
https://github.com/postgres/postgres/commit/1661a40505
Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
Fetch from: https://github.com/timescale/timescaledb/pull/2735/commits/e6e2711d8e00958cb0a35c23f4e81a75f273113a.patch
---
src/plan_expand_hypertable.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/src/plan_expand_hypertable.c b/src/plan_expand_hypertable.c
index 2b99c93b..4baa1b4c 100644
--- a/src/plan_expand_hypertable.c
+++ b/src/plan_expand_hypertable.c
@@ -95,6 +95,24 @@ is_time_bucket_function(Expr *node)
return false;
}
+#if PG13_GE
+/* PG13 merged setup_append_rel_array with setup_simple_rel_arrays */
+static void
+setup_append_rel_array(PlannerInfo *root)
+{
+ root->append_rel_array =
+ repalloc(root->append_rel_array, root->simple_rel_array_size * sizeof(AppendRelInfo *));
+ ListCell *lc;
+ foreach (lc, root->append_rel_list)
+ {
+ AppendRelInfo *appinfo = lfirst_node(AppendRelInfo, lc);
+ int child_relid = appinfo->child_relid;
+
+ root->append_rel_array[child_relid] = appinfo;
+ }
+}
+#endif
+
/*
* Pre-check to determine if an expression is eligible for constification.
* A more thorough check is in constify_timestamptz_op_interval.
@@ -1146,7 +1164,6 @@ ts_plan_expand_hypertable_chunks(Hypertable *ht, PlannerInfo *root, RelOptInfo *
.join_conditions = NIL,
.propagate_conditions = NIL,
};
- Size old_rel_array_len;
Index first_chunk_index = 0;
#if PG12_GE
Index i;
@@ -1178,6 +1195,11 @@ ts_plan_expand_hypertable_chunks(Hypertable *ht, PlannerInfo *root, RelOptInfo *
propagate_join_quals(root, rel, &ctx);
inh_oids = get_chunk_oids(&ctx, root, rel, ht);
+
+ /* nothing to do here if we have no chunks and no data nodes */
+ if (list_length(inh_oids) + list_length(ht->data_nodes) == 0)
+ return;
+
oldrelation = table_open(parent_oid, NoLock);
/*
@@ -1185,7 +1207,10 @@ ts_plan_expand_hypertable_chunks(Hypertable *ht, PlannerInfo *root, RelOptInfo *
* children to them. We include potential data node rels we might need to
* create in case of a distributed hypertable.
*/
- old_rel_array_len = root->simple_rel_array_size;
+#if PG12_GE
+ expand_planner_arrays(root, list_length(inh_oids) + list_length(ht->data_nodes));
+#else
+ Size old_rel_array_len = root->simple_rel_array_size;
root->simple_rel_array_size += (list_length(inh_oids) + list_length(ht->data_nodes));
root->simple_rel_array =
repalloc(root->simple_rel_array, root->simple_rel_array_size * sizeof(RelOptInfo *));
@@ -1200,6 +1225,7 @@ ts_plan_expand_hypertable_chunks(Hypertable *ht, PlannerInfo *root, RelOptInfo *
memset(root->simple_rte_array + old_rel_array_len,
0,
list_length(inh_oids) * sizeof(*root->simple_rte_array));
+#endif
/* Adding partition info will make PostgreSQL consider the inheritance
* children as part of a partitioned relation. This will enable
--
2.29.2