-- This file and its contents are licensed under the Apache License 2.0. -- Please see the included NOTICE for copyright information and -- LICENSE-APACHE for a copy of the license. CREATE OR REPLACE FUNCTION _timescaledb_functions.hist_sfunc (state INTERNAL, val DOUBLE PRECISION, MIN DOUBLE PRECISION, MAX DOUBLE PRECISION, nbuckets INTEGER) RETURNS INTERNAL AS '@MODULE_PATHNAME@', 'ts_hist_sfunc' LANGUAGE C IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION _timescaledb_functions.hist_combinefunc(state1 INTERNAL, state2 INTERNAL) RETURNS INTERNAL AS '@MODULE_PATHNAME@', 'ts_hist_combinefunc' LANGUAGE C IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION _timescaledb_functions.hist_serializefunc(INTERNAL) RETURNS bytea AS '@MODULE_PATHNAME@', 'ts_hist_serializefunc' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION _timescaledb_functions.hist_deserializefunc(bytea, INTERNAL) RETURNS INTERNAL AS '@MODULE_PATHNAME@', 'ts_hist_deserializefunc' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION _timescaledb_functions.hist_finalfunc(state INTERNAL, val DOUBLE PRECISION, MIN DOUBLE PRECISION, MAX DOUBLE PRECISION, nbuckets INTEGER) RETURNS INTEGER[] AS '@MODULE_PATHNAME@', 'ts_hist_finalfunc' LANGUAGE C IMMUTABLE PARALLEL SAFE; -- We started using CREATE OR REPLACE AGGREGATE for aggregate creation once the syntax was fully supported -- as it is easier to support idempotent changes this way. This will allow for changes to functions supporting -- the aggregate, and, for instance, the definition and inclusion of inverse functions for window function -- support. However, it should still be noted that changes to the data structures used for the internal -- state of the aggregate must be backwards compatible and the old format must be accepted by any new functions -- in order for them to continue working with Continuous Aggregates, where old states may have been materialized. -- This aggregate partitions the dataset into a specified number of buckets (nbuckets) ranging -- from the inputted min to max values. CREATE OR REPLACE AGGREGATE @extschema@.histogram (DOUBLE PRECISION, DOUBLE PRECISION, DOUBLE PRECISION, INTEGER) ( SFUNC = _timescaledb_functions.hist_sfunc, STYPE = INTERNAL, COMBINEFUNC = _timescaledb_functions.hist_combinefunc, SERIALFUNC = _timescaledb_functions.hist_serializefunc, DESERIALFUNC = _timescaledb_functions.hist_deserializefunc, PARALLEL = SAFE, FINALFUNC = _timescaledb_functions.hist_finalfunc, FINALFUNC_EXTRA );