Skip to content

Commit

Permalink
Encapsulate the TimestampTz output behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
fabriziomello committed Oct 5, 2024
1 parent 7dfe6b8 commit ca1e8c4
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 31 deletions.
18 changes: 9 additions & 9 deletions .github/workflows/abi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -125,15 +125,15 @@ jobs:
# Force tzdata 2024a for PG17 because PST8PDT is broken on 2024b
# https://github.com/postgres/postgres/commit/b8ea0f67
apk list --installed tzdata | grep '2024b' > /dev/null
if [ $? -eq 0 ] && [ ${{matrix.pg}} -eq 17 ]; then
apk add lzip
cd /root
wget https://data.iana.org/time-zones/releases/tzdb-2024a.tar.lz
lzip -d -c tzdb-2024a.tar.lz | tar -xvf -
cd tzdb-2024a
make TZDIR="/usr/share/zoneinfo" install
fi
# apk list --installed tzdata | grep '2024b' > /dev/null
# if [ $? -eq 0 ] && [ ${{matrix.pg}} -eq 17 ]; then
# apk add lzip
# cd /root
# wget https://data.iana.org/time-zones/releases/tzdb-2024a.tar.lz
# lzip -d -c tzdb-2024a.tar.lz | tar -xvf -
# cd tzdb-2024a
# make TZDIR="/usr/share/zoneinfo" install
# fi
cd /mnt
cp build_abi/install_ext/* `pg_config --sharedir`/extension/
Expand Down
52 changes: 30 additions & 22 deletions tsl/src/continuous_aggs/materialize.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,23 +369,34 @@ spi_update_watermark(Hypertable *mat_ht, SchemaAndName materialization_table,
}
}

static int SavedDateStyle;
static int SavedDateOrder;

static inline void
set_date_config(int newDateStyle, int newDateOrder)
static char *
OidSafeTimestampTzOutputFunctionCall(Oid type, Datum val)
{
SavedDateStyle = DateStyle;
SavedDateOrder = DateOrder;
DateStyle = newDateStyle;
DateOrder = newDateOrder;
}
char *result;
int SavedDateStyle, SavedDateOrder;
Oid functionId;
bool type_is_varlena;

static inline void
unset_date_config()
{
DateStyle = SavedDateStyle;
DateOrder = SavedDateOrder;
/* Save DateStyle and DateOrder and force it to use ISO dates and YMD order */
if (type == TIMESTAMPTZOID)
{
SavedDateStyle = DateStyle;
SavedDateOrder = DateOrder;
DateStyle = USE_ISO_DATES;
DateOrder = DATEORDER_YMD;
}

getTypeOutputInfo(type, &functionId, &type_is_varlena);
result = OidOutputFunctionCall(functionId, val);

/* Restore previous date style and order configuration */
if (type == TIMESTAMPTZOID)
{
DateStyle = SavedDateStyle;
DateOrder = SavedDateOrder;
}

return result;
}

static void
Expand All @@ -394,18 +405,15 @@ spi_update_materializations(Hypertable *mat_ht, const ContinuousAgg *cagg,
const NameData *time_column_name, TimeRange invalidation_range,
const int32 chunk_id)
{
Oid out_fn;
bool type_is_varlena;
char *invalidation_start;
char *invalidation_end;
StringInfo chunk_condition = makeStringInfo();
uint64 rows_processed = 0;

getTypeOutputInfo(invalidation_range.type, &out_fn, &type_is_varlena);
set_date_config(USE_ISO_DATES, DATEORDER_YMD);
invalidation_start = OidOutputFunctionCall(out_fn, invalidation_range.start);
invalidation_end = OidOutputFunctionCall(out_fn, invalidation_range.end);
unset_date_config();
invalidation_start =
OidSafeTimestampTzOutputFunctionCall(invalidation_range.type, invalidation_range.start);
invalidation_end =
OidSafeTimestampTzOutputFunctionCall(invalidation_range.type, invalidation_range.end);

/* MERGE statement is available starting on PG15 and we'll support it only in the new format of
* CAggs and for non-compressed hypertables */
Expand Down

0 comments on commit ca1e8c4

Please sign in to comment.