13 m4_include(`SQLCommon.m4
')
266 -- Begin of argmax definition
268 CREATE TYPE MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE AS (
270 value DOUBLE PRECISION
273 CREATE FUNCTION MADLIB_SCHEMA.argmax_transition(
274 oldmax MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE,
276 newvalue DOUBLE PRECISION)
277 RETURNS MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE AS
279 SELECT CASE WHEN $3 < $1.value OR $2 IS NULL OR ($3 IS NULL AND NOT $1.value IS NULL) THEN $1
280 WHEN $3 = $1.value OR ($3 IS NULL AND $1.value IS NULL AND NOT $1.args IS NULL)
281 THEN ($1.args || $2, $3)::MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE
282 ELSE (array[$2], $3)::MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE
285 LANGUAGE sql IMMUTABLE;
287 CREATE FUNCTION MADLIB_SCHEMA.argmax_combine(
288 max1 MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE,
289 max2 MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE)
290 RETURNS MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE AS
292 -- If SQL guaranteed short-circuit evaluation, the following could become
293 -- shorter. Unfortunately, this is not the case.
294 -- Section 6.3.3.3 of ISO/IEC 9075-1:2008 Framework (SQL/Framework):
296 -- "However, it is implementation-dependent whether expressions are
297 -- actually evaluated left to right, particularly when operands or
298 -- operators might cause conditions to be raised or if the results of the
299 -- expressions can be determined without completely evaluating all parts
300 -- of the expression."
302 -- Again, the optimizer does its job hopefully.
303 SELECT CASE WHEN $1 IS NULL THEN $2
304 WHEN $2 IS NULL THEN $1
305 WHEN ($1.value = $2.value) OR ($1.value IS NULL AND $2.value IS NULL)
306 THEN ($1.args || $2.args, $1.value)::MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE
307 WHEN $1.value IS NULL OR $1.value < $2.value THEN $2
311 LANGUAGE sql IMMUTABLE;
313 CREATE FUNCTION MADLIB_SCHEMA.argmax_final(
314 finalstate MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE)
319 LANGUAGE sql IMMUTABLE;
336 CREATE AGGREGATE MADLIB_SCHEMA.argmax(/*+ key */ INTEGER, /*+ value */ DOUBLE PRECISION) (
337 SFUNC=MADLIB_SCHEMA.argmax_transition,
338 STYPE=MADLIB_SCHEMA.ARGS_AND_VALUE_DOUBLE,
339 m4_ifdef(`__GREENPLUM__',`prefunc=MADLIB_SCHEMA.argmax_combine,
')
340 FINALFUNC=MADLIB_SCHEMA.argmax_final
380 CREATE FUNCTION MADLIB_SCHEMA.create_nb_prepared_data_tables(
381 "trainingSource" VARCHAR,
382 "trainingClassColumn" VARCHAR,
383 "trainingAttrColumn" VARCHAR,
385 "featureProbsDestName" VARCHAR,
386 "classPriorsDestName" VARCHAR)
388 AS $$PythonFunction(bayes, bayes, create_prepared_data_table)$$
389 LANGUAGE plpythonu VOLATILE;
429 CREATE FUNCTION MADLIB_SCHEMA.create_nb_classify_view(
430 "featureProbsSource" VARCHAR,
431 "classPriorsSource" VARCHAR,
432 "classifySource" VARCHAR,
433 "classifyKeyColumn" VARCHAR,
434 "classifyAttrColumn" VARCHAR,
438 AS $$PythonFunction(bayes, bayes, create_classification_view)$$
439 LANGUAGE plpythonu VOLATILE;
441 CREATE FUNCTION MADLIB_SCHEMA.create_nb_classify_view(
442 "trainingSource" VARCHAR,
443 "trainingClassColumn" VARCHAR,
444 "trainingAttrColumn" VARCHAR,
445 "classifySource" VARCHAR,
446 "classifyKeyColumn" VARCHAR,
447 "classifyAttrColumn" VARCHAR,
451 AS $$PythonFunction(bayes, bayes, create_classification_view)$$
452 LANGUAGE plpythonu VOLATILE;
496 CREATE FUNCTION MADLIB_SCHEMA.create_nb_probs_view(
497 "featureProbsSource" VARCHAR,
498 "classPriorsSource" VARCHAR,
499 "classifySource" VARCHAR,
500 "classifyKeyColumn" VARCHAR,
501 "classifyAttrColumn" VARCHAR,
505 AS $$PythonFunction(bayes, bayes, create_bayes_probabilities_view)$$
506 LANGUAGE plpythonu VOLATILE;
508 CREATE FUNCTION MADLIB_SCHEMA.create_nb_probs_view(
509 "trainingSource" VARCHAR,
510 "trainingClassColumn" VARCHAR,
511 "trainingAttrColumn" VARCHAR,
512 "classifySource" VARCHAR,
513 "classifyKeyColumn" VARCHAR,
514 "classifyAttrColumn" VARCHAR,
518 AS $$PythonFunction(bayes, bayes, create_bayes_probabilities_view)$$
519 LANGUAGE plpythonu VOLATILE;
563 CREATE FUNCTION MADLIB_SCHEMA.create_nb_classify_fn(
564 "featureProbsSource" VARCHAR,
565 "classPriorsSource" VARCHAR,
569 AS $$PythonFunction(bayes, bayes, create_classification_function)$$
570 LANGUAGE plpythonu VOLATILE;
572 CREATE FUNCTION MADLIB_SCHEMA.create_nb_classify_fn(
573 "trainingSource" VARCHAR,
574 "trainingClassColumn" VARCHAR,
575 "trainingAttrColumn" VARCHAR,
579 AS $$PythonFunction(bayes, bayes, create_classification_function)$$
580 LANGUAGE plpythonu VOLATILE;