);
+DROP FUNCTION IF EXISTS STRFTIME(format text,sdate text);
+CREATE OR REPLACE FUNCTION STRFTIME(format text,sdate text)
+RETURNS text AS $$
+SELECT to_char(sdate::date,format)
+$$ LANGUAGE sql;
+
DROP FUNCTION IF EXISTS DATE(sdate text, sinterval text);
CREATE OR REPLACE FUNCTION DATE(sdate text DEFAULT 'now', sinterval text DEFAULT '0 seconds')
-RETURNS text AS $$
-SELECT to_char(sdate::date + sinterval::interval,'YYYY-MM-DD');
+RETURNS date AS $$
+SELECT to_char(sdate::date + sinterval::interval,'YYYY-MM-DD')::date;
$$ LANGUAGE sql;
-CREATE OR REPLACE FUNCTION GROUP_CONCAT(anyarray, sep text DEFAULT ',', nullstr text DEFAULT '')
+-- NB 22.06.16 CREATE OR REPLACE FUNCTION GROUP_CONCAT(anyarray, sep text DEFAULT ',', nullstr text DEFAULT '')
+-- NB 22.06.16 RETURNS text AS $$
+-- NB 22.06.16 SELECT array_to_string( ARRAY( SELECT coalesce(v::text, $3) FROM unnest($1) g(v) ), $2 )
+-- NB 22.06.16 $$ LANGUAGE sql;
+
+CREATE OR REPLACE FUNCTION GROUP_CONCAT(str text,sep text DEFAULT ',', nullstr text DEFAULT '')
RETURNS text AS $$
-SELECT array_to_string( ARRAY( SELECT coalesce(v::text, $3) FROM unnest($1) g(v) ), $2 )
+SELECT array_to_string(array_agg(coalesce(str,nullstr)),sep)
$$ LANGUAGE sql;
DROP FUNCTION IF EXISTS CIDR_RANGE(cidr text, ip text);