/* ----------------------------------------------------------------------- *//** * * @file distribution.sql_in * * @brief SQL functions for collecting distributions * *//* ----------------------------------------------------------------------- */ m4_include(`SQLCommon.m4') CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.vectorized_distribution_transition( distribution double precision[][], indices integer[], levels integer[] ) RETURNS double precision[][] AS 'MODULE_PATHNAME' LANGUAGE c IMMUTABLE m4_ifdef(`__HAS_FUNCTION_PROPERTIES__',`NO SQL', `'); CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.vectorized_distribution_final( state double precision[][] ) RETURNS double precision[][] AS 'MODULE_PATHNAME' LANGUAGE c IMMUTABLE STRICT m4_ifdef(`__HAS_FUNCTION_PROPERTIES__',`NO SQL', `'); DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.vectorized_distribution_agg( integer[], integer[]) CASCADE; CREATE AGGREGATE MADLIB_SCHEMA.vectorized_distribution_agg( /* indices */ integer[], /* levels */ integer[] ) ( STYPE = double precision[][], SFUNC = MADLIB_SCHEMA.vectorized_distribution_transition, m4_ifdef(`__POSTGRESQL__', `', `PREFUNC = MADLIB_SCHEMA.array_add,') FINALFUNC = MADLIB_SCHEMA.vectorized_distribution_final -- default: INITCOND = NULL ); --------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.discrete_distribution_transition( distribution double precision[], ind integer, weight double precision, level integer ) RETURNS double precision[] AS 'MODULE_PATHNAME' LANGUAGE c IMMUTABLE m4_ifdef(`__HAS_FUNCTION_PROPERTIES__',`NO SQL', `'); CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.discrete_distribution_final( state double precision[] ) RETURNS double precision[] AS 'MODULE_PATHNAME' LANGUAGE c IMMUTABLE STRICT m4_ifdef(`__HAS_FUNCTION_PROPERTIES__',`NO SQL', `'); DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.discrete_distribution_agg( integer, double precision, integer) CASCADE; CREATE AGGREGATE MADLIB_SCHEMA.discrete_distribution_agg( /* ind */ integer, /* weight */ double precision, /* level */ integer ) ( STYPE = double precision[], SFUNC = MADLIB_SCHEMA.discrete_distribution_transition, m4_ifdef(`__POSTGRESQL__', `', `PREFUNC = MADLIB_SCHEMA.array_add,') FINALFUNC = MADLIB_SCHEMA.discrete_distribution_final -- default: INITCOND = NULL ); ---------------------------------------------------------------------------