Bump Buildroot to 2021.02-rc3 (#1260)
* Rebase patches to Buildroot 2021.02-rc3 * Update Buildroot to 2021.02-rc3 * Declare Kernel headers to be Linux version 5.10 (since they are, and new Buildroot knows about 5.10)
This commit is contained in:
@@ -0,0 +1,259 @@
|
||||
From 5c17cb0aa7f06bb3ac15d4ca72a37f59a10fa59e Mon Sep 17 00:00:00 2001
|
||||
From: Sven Klemm <sven@timescale.com>
|
||||
Date: Thu, 24 Sep 2020 15:21:04 +0200
|
||||
Subject: [PATCH] Adjust code to PG13 tuple conversion changes
|
||||
|
||||
PG13 changes the way attribute mappings are done and uses AttrMap
|
||||
instead of AttrNumber[] in the new function signatures. This patch
|
||||
changes ChunkInsertState to use TupleConversionMap which abstracts
|
||||
this change.
|
||||
|
||||
https://github.com/postgres/postgres/commit/e1551f96e6
|
||||
|
||||
Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
|
||||
Fetch from: https://github.com/timescale/timescaledb/commit/2cb7c41276c8f8112bd225a020fef709a8e776ff.patch
|
||||
---
|
||||
src/chunk_insert_state.c | 92 +++++++++++++++++++++------------------
|
||||
src/compat.h | 15 +++++++
|
||||
tsl/src/fdw/modify_exec.c | 4 ++
|
||||
3 files changed, 69 insertions(+), 42 deletions(-)
|
||||
|
||||
diff --git a/src/chunk_insert_state.c b/src/chunk_insert_state.c
|
||||
index 5dc294df..f8200dd8 100644
|
||||
--- a/src/chunk_insert_state.c
|
||||
+++ b/src/chunk_insert_state.c
|
||||
@@ -120,7 +120,7 @@ create_chunk_result_relation_info(ChunkDispatch *dispatch, Relation rel)
|
||||
|
||||
static ProjectionInfo *
|
||||
get_adjusted_projection_info_returning(ProjectionInfo *orig, List *returning_clauses,
|
||||
- AttrNumber *map, int map_size, Index varno, Oid rowtype,
|
||||
+ TupleConversionMap *map, Index varno, Oid rowtype,
|
||||
TupleDesc chunk_desc)
|
||||
{
|
||||
bool found_whole_row;
|
||||
@@ -128,14 +128,15 @@ get_adjusted_projection_info_returning(ProjectionInfo *orig, List *returning_cla
|
||||
Assert(returning_clauses != NIL);
|
||||
|
||||
/* map hypertable attnos -> chunk attnos */
|
||||
- returning_clauses = castNode(List,
|
||||
- map_variable_attnos((Node *) returning_clauses,
|
||||
- varno,
|
||||
- 0,
|
||||
- map,
|
||||
- map_size,
|
||||
- rowtype,
|
||||
- &found_whole_row));
|
||||
+ if (map != NULL)
|
||||
+ returning_clauses = castNode(List,
|
||||
+ map_variable_attnos_compat((Node *) returning_clauses,
|
||||
+ varno,
|
||||
+ 0,
|
||||
+ map->attrMap,
|
||||
+ map->outdesc->natts,
|
||||
+ rowtype,
|
||||
+ &found_whole_row));
|
||||
|
||||
return ExecBuildProjectionInfo(returning_clauses,
|
||||
orig->pi_exprContext,
|
||||
@@ -145,7 +146,7 @@ get_adjusted_projection_info_returning(ProjectionInfo *orig, List *returning_cla
|
||||
}
|
||||
|
||||
static List *
|
||||
-translate_clause(List *inclause, AttrNumber *chunk_attnos, Index varno, Relation hyper_rel,
|
||||
+translate_clause(List *inclause, TupleConversionMap *chunk_map, Index varno, Relation hyper_rel,
|
||||
Relation chunk_rel)
|
||||
{
|
||||
List *clause = copyObject(inclause);
|
||||
@@ -153,23 +154,23 @@ translate_clause(List *inclause, AttrNumber *chunk_attnos, Index varno, Relation
|
||||
|
||||
/* map hypertable attnos -> chunk attnos for the "excluded" table */
|
||||
clause = castNode(List,
|
||||
- map_variable_attnos((Node *) clause,
|
||||
- INNER_VAR,
|
||||
- 0,
|
||||
- chunk_attnos,
|
||||
- RelationGetDescr(hyper_rel)->natts,
|
||||
- RelationGetForm(chunk_rel)->reltype,
|
||||
- &found_whole_row));
|
||||
+ map_variable_attnos_compat((Node *) clause,
|
||||
+ INNER_VAR,
|
||||
+ 0,
|
||||
+ chunk_map->attrMap,
|
||||
+ RelationGetDescr(hyper_rel)->natts,
|
||||
+ RelationGetForm(chunk_rel)->reltype,
|
||||
+ &found_whole_row));
|
||||
|
||||
/* map hypertable attnos -> chunk attnos for the hypertable */
|
||||
clause = castNode(List,
|
||||
- map_variable_attnos((Node *) clause,
|
||||
- varno,
|
||||
- 0,
|
||||
- chunk_attnos,
|
||||
- RelationGetDescr(hyper_rel)->natts,
|
||||
- RelationGetForm(chunk_rel)->reltype,
|
||||
- &found_whole_row));
|
||||
+ map_variable_attnos_compat((Node *) clause,
|
||||
+ varno,
|
||||
+ 0,
|
||||
+ chunk_map->attrMap,
|
||||
+ RelationGetDescr(hyper_rel)->natts,
|
||||
+ RelationGetForm(chunk_rel)->reltype,
|
||||
+ &found_whole_row));
|
||||
|
||||
return clause;
|
||||
}
|
||||
@@ -193,7 +194,11 @@ adjust_hypertable_tlist(List *tlist, TupleConversionMap *map)
|
||||
{
|
||||
List *new_tlist = NIL;
|
||||
TupleDesc chunk_tupdesc = map->outdesc;
|
||||
+#if PG13_GE
|
||||
+ AttrNumber *attrMap = map->attrMap->attnums;
|
||||
+#else
|
||||
AttrNumber *attrMap = map->attrMap;
|
||||
+#endif
|
||||
AttrNumber chunk_attrno;
|
||||
|
||||
for (chunk_attrno = 1; chunk_attrno <= chunk_tupdesc->natts; chunk_attrno++)
|
||||
@@ -351,7 +356,8 @@ get_default_existing_slot(ChunkInsertState *state, ChunkDispatch *dispatch)
|
||||
* columns, etc.
|
||||
*/
|
||||
static void
|
||||
-setup_on_conflict_state(ChunkInsertState *state, ChunkDispatch *dispatch, AttrNumber *chunk_attnos)
|
||||
+setup_on_conflict_state(ChunkInsertState *state, ChunkDispatch *dispatch,
|
||||
+ TupleConversionMap *chunk_map)
|
||||
{
|
||||
TupleConversionMap *map = state->hyper_to_chunk_map;
|
||||
ResultRelInfo *chunk_rri = get_chunk_rri(state);
|
||||
@@ -377,16 +383,17 @@ setup_on_conflict_state(ChunkInsertState *state, ChunkDispatch *dispatch, AttrNu
|
||||
|
||||
Assert(map->outdesc == RelationGetDescr(chunk_rel));
|
||||
|
||||
- if (NULL == chunk_attnos)
|
||||
- chunk_attnos = convert_tuples_by_name_map(RelationGetDescr(chunk_rel),
|
||||
- RelationGetDescr(first_rel)
|
||||
+ if (NULL == chunk_map)
|
||||
+ chunk_map = convert_tuples_by_name(RelationGetDescr(chunk_rel),
|
||||
+ RelationGetDescr(first_rel)
|
||||
#if PG13_LT
|
||||
- , gettext_noop("could not convert row type")
|
||||
+ ,
|
||||
+ gettext_noop("could not convert row type")
|
||||
#endif
|
||||
- );
|
||||
+ );
|
||||
|
||||
onconflset = translate_clause(ts_chunk_dispatch_get_on_conflict_set(dispatch),
|
||||
- chunk_attnos,
|
||||
+ chunk_map,
|
||||
hyper_rri->ri_RangeTableIndex,
|
||||
hyper_rel,
|
||||
chunk_rel);
|
||||
@@ -412,7 +419,7 @@ setup_on_conflict_state(ChunkInsertState *state, ChunkDispatch *dispatch, AttrNu
|
||||
if (NULL != onconflict_where)
|
||||
{
|
||||
List *clause = translate_clause(castNode(List, onconflict_where),
|
||||
- chunk_attnos,
|
||||
+ chunk_map,
|
||||
hyper_rri->ri_RangeTableIndex,
|
||||
hyper_rel,
|
||||
chunk_rel);
|
||||
@@ -476,7 +483,7 @@ adjust_projections(ChunkInsertState *cis, ChunkDispatch *dispatch, Oid rowtype)
|
||||
ResultRelInfo *chunk_rri = cis->result_relation_info;
|
||||
Relation hyper_rel = dispatch->hypertable_result_rel_info->ri_RelationDesc;
|
||||
Relation chunk_rel = cis->rel;
|
||||
- AttrNumber *chunk_attnos = NULL;
|
||||
+ TupleConversionMap *chunk_map = NULL;
|
||||
OnConflictAction onconflict_action = ts_chunk_dispatch_get_on_conflict_action(dispatch);
|
||||
|
||||
if (ts_chunk_dispatch_has_returning(dispatch))
|
||||
@@ -486,19 +493,19 @@ adjust_projections(ChunkInsertState *cis, ChunkDispatch *dispatch, Oid rowtype)
|
||||
* to have the hypertable_desc in the out spot for map_variable_attnos
|
||||
* to work correctly in mapping hypertable attnos->chunk attnos.
|
||||
*/
|
||||
- chunk_attnos = convert_tuples_by_name_map(RelationGetDescr(chunk_rel),
|
||||
- RelationGetDescr(hyper_rel)
|
||||
+ chunk_map = convert_tuples_by_name(RelationGetDescr(chunk_rel),
|
||||
+ RelationGetDescr(hyper_rel)
|
||||
#if PG13_LT
|
||||
- ,gettext_noop("could not convert row type")
|
||||
+ ,
|
||||
+ gettext_noop("could not convert row type")
|
||||
#endif
|
||||
- );
|
||||
+ );
|
||||
|
||||
chunk_rri->ri_projectReturning =
|
||||
get_adjusted_projection_info_returning(chunk_rri->ri_projectReturning,
|
||||
ts_chunk_dispatch_get_returning_clauses(
|
||||
dispatch),
|
||||
- chunk_attnos,
|
||||
- RelationGetDescr(hyper_rel)->natts,
|
||||
+ chunk_map,
|
||||
dispatch->hypertable_result_rel_info
|
||||
->ri_RangeTableIndex,
|
||||
rowtype,
|
||||
@@ -511,7 +518,7 @@ adjust_projections(ChunkInsertState *cis, ChunkDispatch *dispatch, Oid rowtype)
|
||||
set_arbiter_indexes(cis, dispatch);
|
||||
|
||||
if (onconflict_action == ONCONFLICT_UPDATE)
|
||||
- setup_on_conflict_state(cis, dispatch, chunk_attnos);
|
||||
+ setup_on_conflict_state(cis, dispatch, chunk_map);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -598,9 +605,10 @@ ts_chunk_insert_state_create(Chunk *chunk, ChunkDispatch *dispatch)
|
||||
convert_tuples_by_name(RelationGetDescr(parent_rel),
|
||||
RelationGetDescr(rel)
|
||||
#if PG13_LT
|
||||
- ,gettext_noop("could not convert row type")
|
||||
+ ,
|
||||
+ gettext_noop("could not convert row type")
|
||||
#endif
|
||||
- );
|
||||
+ );
|
||||
|
||||
adjust_projections(state, dispatch, RelationGetForm(rel)->reltype);
|
||||
|
||||
diff --git a/src/compat.h b/src/compat.h
|
||||
index 51c1c181..1b2ed8e5 100644
|
||||
--- a/src/compat.h
|
||||
+++ b/src/compat.h
|
||||
@@ -374,4 +374,19 @@ get_vacuum_options(const VacuumStmt *stmt)
|
||||
#define for_each_cell_compat(cell, list, initcell) for_each_cell ((cell), (list), (initcell))
|
||||
#endif
|
||||
|
||||
+/* PG13 removes the natts parameter from map_variable_attnos */
|
||||
+#if PG13_LT
|
||||
+#define map_variable_attnos_compat(node, varno, sublevels_up, map, natts, rowtype, found_wholerow) \
|
||||
+ map_variable_attnos((node), \
|
||||
+ (varno), \
|
||||
+ (sublevels_up), \
|
||||
+ (map), \
|
||||
+ (natts), \
|
||||
+ (rowtype), \
|
||||
+ (found_wholerow))
|
||||
+#else
|
||||
+#define map_variable_attnos_compat(node, varno, sublevels_up, map, natts, rowtype, found_wholerow) \
|
||||
+ map_variable_attnos((node), (varno), (sublevels_up), (map), (rowtype), (found_wholerow))
|
||||
+#endif
|
||||
+
|
||||
#endif /* TIMESCALEDB_COMPAT_H */
|
||||
diff --git a/tsl/src/fdw/modify_exec.c b/tsl/src/fdw/modify_exec.c
|
||||
index 38d0e0c6..5307079d 100644
|
||||
--- a/tsl/src/fdw/modify_exec.c
|
||||
+++ b/tsl/src/fdw/modify_exec.c
|
||||
@@ -202,7 +202,11 @@ convert_attrs(TupleConversionMap *map, List *attrs)
|
||||
|
||||
for (i = 0; i < map->outdesc->natts; i++)
|
||||
{
|
||||
+#if PG13_GE
|
||||
+ if (map->attrMap->attnums[i] == attnum)
|
||||
+#else
|
||||
if (map->attrMap[i] == attnum)
|
||||
+#endif
|
||||
{
|
||||
new_attrs = lappend_int(new_attrs, AttrOffsetGetAttrNumber(i));
|
||||
break;
|
||||
--
|
||||
2.29.2
|
||||
|
||||
Reference in New Issue
Block a user