Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions build/environment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,22 @@

export BUILD=`dirname $0`
export APP_ROOT=`dirname $BUILD`
export PGOPTIONS="--client-min-messages=warning"

export PSQL_CMD="psql -q -P pager=off "
export PSQL="$PSQL_CMD -v VERBOSITY=terse -v ON_ERROR_STOP=on"
if [ "x$DEBUG" = "x" ]; then
# Production & Default Options.
export PGOPTIONS="--client-min-messages=warning"
VERBOSE=terse
Q=-q
else
# Debug enabled
echo "Enabling Debug"
export PGOPTIONS="--client-min-messages=notice"
VERBOSE=verbose
Q=""
fi

export PSQL_CMD="psql $Q -P pager=off "
export PSQL="$PSQL_CMD -v VERBOSITY=$VERBOSE -v ON_ERROR_STOP=on"

export PGHOST=${PGHOST:-localhost}
export PGPORT=${PGPORT:-5432}
Expand Down
1 change: 0 additions & 1 deletion build/test_database.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ PGTAP_TEST=$?

echo "Test if load_all is reloadable."
# TODO: make new 'create type" reloadable
echo "There will be an ERROR for type bitemporal_pg_constraint"
echo "\\set CI $CI %\\ir $D/_load_all.sql" |tr '%' '\n' | $PSQL
RELOAD_TEST=$?

Expand Down
92 changes: 57 additions & 35 deletions sql/ll_create_bitemporal_table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,61 @@ CREATE OR REPLACE FUNCTION bitemporal_internal.ll_create_bitemporal_table(
p_business_key text)
RETURNS boolean AS
$BODY$
DECLARE
v_business_key_name text;
v_business_key_gist text;
v_serial_key_name text;
v_serial_key text;
v_pk_constraint_name text;
v_table_definition text;
v_error text;
v_business_key_array text[];
i int;
DECLARE
v_sql text;
v_error text;
BEGIN
v_serial_key :=p_table||'_key';
v_serial_key_name :=v_serial_key ||' serial';
v_pk_constraint_name:= p_table||'_pk';
v_business_key_name :=p_table||'_'||translate(p_business_key, ', ','_')||'_assert_eff_excl';
v_business_key_gist :=replace(p_business_key, ',',' WITH =,')||' WITH =, asserted WITH &&, effective WITH &&';
--raise notice 'gist %',v_business_key_gist;
v_table_definition :=replace (p_table_definition, ' serial', ' integer');
v_business_key_array :=string_to_array(p_business_key, ',');
v_sql := bitemporal_internal.ll_create_bitemporal_table_sql(
p_schema,
p_table,
p_table_definition,
p_business_key );
EXECUTE v_sql;
RETURN ('true');
EXCEPTION WHEN OTHERS THEN
GET STACKED DIAGNOSTICS v_error = MESSAGE_TEXT;
RAISE NOTICE '%', v_error;
RETURN ('false');
END;
$BODY$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION bitemporal_internal.ll_create_bitemporal_table_sql(
p_schema text,
p_table text,
p_table_definition text,
p_business_key text)
RETURNS text AS
$BODY$
DECLARE
v_business_key_name text;
v_business_key_gist text;
v_serial_key_name text;
v_serial_key text;
v_pk_constraint_name text;
v_table_definition text;
v_business_key_array text[];
i int;
v_sql text DEFAULT '';
BEGIN
v_serial_key :=p_table||'_key';
v_serial_key_name :=v_serial_key ||' serial';
v_pk_constraint_name:= p_table||'_pk';
v_business_key_name :=p_table||'_'||translate(p_business_key, ', ','_')||'_assert_eff_excl';
v_business_key_gist :=replace(p_business_key, ',',' WITH =,')||' WITH =, asserted WITH &&, effective WITH &&';

EXECUTE format($create$
v_table_definition :=replace (p_table_definition, ' serial', ' integer');
v_business_key_array :=string_to_array(p_business_key, ',');

v_sql := format($create$
CREATE TABLE %s.%s (
%s
,%s
,effective temporal_relationships.timeperiod NOT NULL
,asserted temporal_relationships.timeperiod NOT NULL
,row_created_at timestamptz NOT NULL DEFAULT now()
,CONSTRAINT %s PRIMARY KEY (%s)
,CONSTRAINT %s EXCLUDE
,CONSTRAINT %s EXCLUDE
USING gist (%s)
)
$create$
Expand All @@ -47,22 +73,18 @@ CREATE TABLE %s.%s (
,v_business_key_name
,v_business_key_gist
) ;
i:=1;
while v_business_key_array[i] is not null loop
execute format($alter$
ALTER TABLE %s.%s ALTER %s SET NOT NULL
$alter$
i:=1;
while v_business_key_array[i] is not null loop
v_sql := v_sql || ';' ||
format($alter$
ALTER TABLE %s.%s ALTER %s SET NOT NULL $alter$
,p_schema
,p_table
,p_table
,v_business_key_array[i]
) ;
i:=i+1;
end loop;
RETURN ('true');
EXCEPTION WHEN OTHERS THEN
GET STACKED DIAGNOSTICS v_error = MESSAGE_TEXT;
raise notice '%', v_error;
RETURN ('false');
) ;
i:=i+1;
end loop;
return v_sql;
END;
$BODY$
LANGUAGE plpgsql;
LANGUAGE plpgsql;
1 change: 1 addition & 0 deletions sql/metadata.sql
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ BEGIN
END;
$f$;

drop type if exists bitemporal_internal.bitemporal_pg_constraint cascade;
create
type bitemporal_internal.bitemporal_pg_constraint
as
Expand Down