12 m4_include(`SQLCommon.m4
') --'
42 CREATE FUNCTION MADLIB_SCHEMA.version()
48 'MADlib version: __MADLIB_VERSION__, '
49 'git revision: __MADLIB_GIT_REVISION__, '
50 'cmake configuration time: __MADLIB_BUILD_TIME__, '
51 'build type: __MADLIB_BUILD_TYPE__, '
52 'build system: __MADLIB_BUILD_SYSTEM__, '
53 'C compiler: __MADLIB_C_COMPILER__, '
54 'C++ compiler: __MADLIB_CXX_COMPILER__')::TEXT
61 CREATE FUNCTION MADLIB_SCHEMA.assert(condition BOOLEAN, msg VARCHAR)
68 RAISE EXCEPTION
'Failed assertion: %', msg;
73 ------------------------------------------------------------------------
78 CREATE FUNCTION MADLIB_SCHEMA.relative_error(
79 approx DOUBLE PRECISION,
80 value DOUBLE PRECISION
81 ) RETURNS DOUBLE PRECISION
84 SELECT abs(($1 - $2)/$2)
87 ------------------------------------------------------------------------
92 CREATE FUNCTION MADLIB_SCHEMA.relative_error(
93 approx DOUBLE PRECISION[],
94 value DOUBLE PRECISION[]
95 ) RETURNS DOUBLE PRECISION
98 SELECT MADLIB_SCHEMA.dist_norm2($1, $2) / MADLIB_SCHEMA.norm2($2)
101 ------------------------------------------------------------------------
110 CREATE FUNCTION MADLIB_SCHEMA.check_if_raises_error(
124 ------------------------------------------------------------------------
133 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.check_if_col_exists(
137 RETURNS BOOLEAN AS $$
140 input_table_name VARCHAR[];
141 actual_table_name VARCHAR;
145 input_table_name = regexp_split_to_array(source_table, E
'\\.');
146 IF array_upper(input_table_name, 1) = 1 THEN
147 actual_table_name = input_table_name[1];
148 schema_name := current_schema();
149 ELSIF array_upper(input_table_name, 1) = 2 THEN
150 actual_table_name = input_table_name[2];
151 schema_name = input_table_name[1];
153 RAISE EXCEPTION
'Incorrect input source table name provided';
155 sql :=
'SELECT MADLIB_SCHEMA.assert(count( column_name )>0, ''Error'') FROM information_schema.columns WHERE table_schema = ''' || schema_name ||
''' AND table_name =
''' || actual_table_name ||
''' AND column_name=
''' || column_name ||
'''';
156 raise notice '%
', sql;
158 RETURN NOT MADLIB_SCHEMA.check_if_raises_error(sql);
160 $$ LANGUAGE plpgsql VOLATILE;
161 ------------------------------------------------------------------------
176 CREATE FUNCTION MADLIB_SCHEMA.isnan(
177 number DOUBLE PRECISION
181 SELECT $1 = 'NaN
'::DOUBLE PRECISION;
184 ------------------------------------------------------------------------
189 CREATE FUNCTION MADLIB_SCHEMA.create_schema_pg_temp()
195 -- pg_my_temp_schema() is a built-in function
196 IF pg_my_temp_schema() = 0 THEN
197 -- The pg_temp schema does not exist, yet. Creating a temporary table
198 -- will create it. Note: There is *no* race condition here, because
199 -- every session has its own temp schema.
200 EXECUTE 'CREATE TEMPORARY TABLE _madlib_temp_table AS SELECT 1;
201 DROP TABLE pg_temp._madlib_temp_table CASCADE;
';
206 ------------------------------------------------------------------------
215 CREATE FUNCTION MADLIB_SCHEMA.noop()
219 AS 'MODULE_PATHNAME
';
221 ------------------------------------------------------------------------
224 * Create type bytea8 with 8-byte alignment.
226 CREATE TYPE MADLIB_SCHEMA.bytea8;
228 CREATE FUNCTION MADLIB_SCHEMA.bytea8in(cstring)
229 RETURNS MADLIB_SCHEMA.bytea8 AS 'byteain
'
230 LANGUAGE internal IMMUTABLE STRICT;
232 CREATE FUNCTION MADLIB_SCHEMA.bytea8out(MADLIB_SCHEMA.bytea8)
233 RETURNS cstring AS 'byteaout
'
234 LANGUAGE internal IMMUTABLE STRICT;
236 CREATE FUNCTION MADLIB_SCHEMA.bytea8recv(internal)
237 RETURNS MADLIB_SCHEMA.bytea8 AS 'bytearecv
'
238 LANGUAGE internal IMMUTABLE STRICT;
240 CREATE FUNCTION MADLIB_SCHEMA.bytea8send(MADLIB_SCHEMA.bytea8)
241 RETURNS bytea AS 'byteasend
'
242 LANGUAGE internal IMMUTABLE STRICT;
244 CREATE TYPE MADLIB_SCHEMA.bytea8(
245 INPUT = MADLIB_SCHEMA.bytea8in,
246 OUTPUT = MADLIB_SCHEMA.bytea8out,
247 RECEIVE = MADLIB_SCHEMA.bytea8recv,
248 SEND = MADLIB_SCHEMA.bytea8send,
255 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__internal_get_col_names_except_dep_variable(
256 source_table VARCHAR -- name of input table
257 , dependent_varname VARCHAR -- name of dependent variable
259 RETURNS VARCHAR AS $$
263 EXECUTE 'SELECT ARRAY(SELECT DISTINCT column_name::varchar from
' ||
264 ' information_schema.columns WHERE
' ||
265 'column_name NOT LIKE
''' || dependent_varname ||
'''' ||
266 'AND table_name LIKE
''' || source_table ||
''')
'
268 RETURN 'ARRAY[
' || array_to_string(col_names, ',
') || ']
';
270 $$ LANGUAGE plpgsql VOLATILE;
272 ------------------------------------------------------------------------
276 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__unique_string ()
277 RETURNS VARCHAR AS $$
278 PythonFunction(utilities, utilities, __unique_string)
279 $$ LANGUAGE plpythonu;
281 ------------------------------------------------------------------------
285 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA._string_to_array (
288 RETURNS VARCHAR[] AS $$
289 PythonFunction(utilities, utilities, _string_to_sql_array)
290 $$ LANGUAGE plpythonu;
292 ------------------------------------------------------------------------
296 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.bool_to_text (BOOLEAN)
306 m4_ifdef(`__GREENPLUM__', `
307 CREATE CAST (BOOLEAN AS TEXT)
308 WITH FUNCTION MADLIB_SCHEMA.bool_to_text(BOOLEAN)
313 ------------------------------------------------------------------------
316 * An array_agg() function is defined in module array_ops (to compatibility with
320 m4_changequote(<!`!>,<!'!>)