blob: 30ee3cda9c230ac6afdf8e2cf103611e6540b05b [file] [log] [blame]
/* ----------------------------------------------------------------------- *//**
*
* @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
);
---------------------------------------------------------------------------