diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c index 57d12e4cda2..7e6a3c3508a 100644 --- a/contrib/btree_gist/btree_utils_var.c +++ b/contrib/btree_gist/btree_utils_var.c @@ -233,14 +233,13 @@ gbt_var_node_truncate(const GBT_VARKEY *node, int32 cpf_length, const gbtree_vin void gbt_var_bin_union(Datum *u, GBT_VARKEY *e, const gbtree_vinfo *tinfo) { - - GBT_VARKEY *nk = NULL; - GBT_VARKEY *tmp = NULL; - GBT_VARKEY_R nr; GBT_VARKEY_R eo = gbt_var_key_readable(e); + GBT_VARKEY_R nr; if (eo.lower == eo.upper) /* leaf */ { + GBT_VARKEY *tmp; + tmp = gbt_var_leaf2node(e, tinfo); if (tmp != e) eo = gbt_var_key_readable(tmp); @@ -248,25 +247,26 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY *e, const gbtree_vinfo *tinfo) if (DatumGetPointer(*u)) { - GBT_VARKEY_R ro = gbt_var_key_readable((GBT_VARKEY *) DatumGetPointer(*u)); + bool update = false; + + nr.lower = ro.lower; + nr.upper = ro.upper; if ((*tinfo->f_cmp) ((bytea *) ro.lower, (bytea *) eo.lower) > 0) { nr.lower = eo.lower; - nr.upper = ro.upper; - nk = gbt_var_key_copy(&nr, TRUE); + update = true; } if ((*tinfo->f_cmp) ((bytea *) ro.upper, (bytea *) eo.upper) < 0) { nr.upper = eo.upper; - nr.lower = ro.lower; - nk = gbt_var_key_copy(&nr, TRUE); + update = true; } - if (nk) - *u = PointerGetDatum(nk); + if (update) + *u = PointerGetDatum(gbt_var_key_copy(&nr, TRUE)); } else {