--freemarker template select sp_table_exists('zul_antr_aggr') from xdummy; select name from sx_tables where name ='zul_antr_aggr' select 10::smallint as sortnr, name, trim(name) ||'_' as prefix, caption, 'zul_antr_aggr.stg=zul_k_stg.apnr' as joinclause from sx_tables where name in ('zul_k_stg') union select 20::smallint as sortnr, name, trim(name) ||'_' as prefix, caption, 'zul_antr_aggr.abschl=zul_k_abint.apnr' as joinclause from sx_tables where name in ('zul_k_abint') union select 30::smallint as sortnr, name, trim(name) ||'_' as prefix, caption, 'zul_antr_aggr.stort=zul_k_stort.apnr' as joinclause from sx_tables where name in ('zul_k_stort') select tid, table_name, name, name as targetname from sx_fields where table_name ='${fact_table_source}' and currentlyused=1 <#foreach added_table in added_tables> union select tid,table_name, name, '${added_table.prefix}' || name as targetname from sx_fields where table_name ='${added_table.name}' and currentlyused=1 order by 1 ]]> <#if zul_antr_aggr_exists==1 && fact_table_source?exists > <#assign fact_table_target = {"name":"rpta_zul_antr_aggr", "caption":"Bewerbungen und Zulassungen"} /> CREATE temp table tmp_tables( name CHAR(255) , caption CHAR(255) , description CHAR(255) , table_type CHAR(255) , systeminfo_id INTEGER , systeminfo_orig INTEGER , thema CHAR(255) , sachgebiete_id CHAR(255) ); CREATE temp TABLE tmp_fields( tid serial NOT NULL, table_name VARCHAR(255) not null, name VARCHAR(255) not null, caption VARCHAR(255) , description VARCHAR(255) , field_type VARCHAR(255) not null, field_size VARCHAR(255) , field_not_null smallint, currentlyused SMALLINT , is_primarykey SMALLINT default 0 , foreignkey_tab VARCHAR(255) , foreignkey_col VARCHAR(255) , foreignkey_int VARCHAR(255) , foreignkey_cap VARCHAR(255) , foreignkey_cond VARCHAR(255) , foreignkey_func VARCHAR(255) , check_integrity SMALLINT, is_sum SMALLINT default 1, foreignkey_uniquename VARCHAR(255) ); --Vorbereitung: UPDATE sx_tables SET caption = 'Abschlüsse' WHERE name='zul_k_abint'; update sx_fields set caption='Schlüssel Abschluss' where table_name='zul_k_abint' and name='apnr'; update sx_fields set caption='Bezeichnung Abschluss' where table_name='zul_k_abint' and name='druck'; update sx_fields set caption='Amtlicher Schlüssel Abschluss' where table_name='zul_k_abint' and name='astat'; update sx_fields set currentlyused=0 where table_name='zul_k_abint' and name='tid'; UPDATE sx_tables SET caption = 'Standorte' WHERE name='zul_k_stort'; update sx_fields set caption='Schlüssel Standort' where table_name='zul_k_stort' and name='apnr'; update sx_fields set caption='Bezeichnung Standort' where table_name='zul_k_stort' and name='druck'; update sx_fields set caption='Kurztext Abschluss' where table_name='zul_k_stort' and name='kurz'; update sx_fields set currentlyused=0 where table_name='zul_k_stort' and name='tid'; --drop view if exists sos_stud_astat; update sx_fields set is_sum=0 where table_name='zul_antr_aggr' and name not in ('summe'); update sx_fields set is_sum=1 where table_name='zul_antr_aggr' and name in ('summe'); insert into tmp_tables ( name, caption, description, table_type, systeminfo_id, thema, sachgebiete_id ) select '${fact_table_target.name}', '${fact_table_target.caption}', description, table_type, systeminfo_id, thema, sachgebiete_id from sx_tables where name='${fact_table_source}' ; insert into tmp_fields (table_name, name, caption, description, field_type, field_size, field_not_null, currentlyused, is_primarykey, foreignkey_tab, foreignkey_col, foreignkey_int, foreignkey_cap, foreignkey_cond, foreignkey_func, check_integrity, is_sum, foreignkey_uniquename) select '${fact_table_target.name}' as table_name, name, caption, description, field_type, field_size, field_not_null, currentlyused, is_primarykey, foreignkey_tab, foreignkey_col, foreignkey_int, foreignkey_cap, foreignkey_cond, foreignkey_func, check_integrity, is_sum, foreignkey_uniquename from sx_fields where table_name ='${fact_table_source}' and currentlyused=1; <#foreach added_table in added_tables> insert into tmp_fields (table_name, name, caption, description, field_type, field_size, field_not_null, currentlyused, is_primarykey, foreignkey_tab, foreignkey_col, foreignkey_int, foreignkey_cap, foreignkey_cond, foreignkey_func, check_integrity, is_sum, foreignkey_uniquename) select '${fact_table_target.name}' as table_name, '${added_table.prefix}' || name, '${added_table.caption}: ' || caption, description, field_type, field_size, field_not_null, currentlyused, is_primarykey, foreignkey_tab, foreignkey_col, foreignkey_int, foreignkey_cap, foreignkey_cond, foreignkey_func, check_integrity, is_sum, foreignkey_uniquename from sx_fields where table_name ='${added_table.name}' and currentlyused=1; CREATE temp TABLE tmp_rpta_resultset ( caption varchar(255), uniquename varchar(255), fieldclause text, joinclause text, whereclause text, systeminfo_id integer ); insert into tmp_rpta_resultset(caption, uniquename, systeminfo_id) select '${fact_table_target.caption}', '${fact_table_target.name}', 130 ; update tmp_rpta_resultset set fieldclause=' <#foreach field_target in fields_target> ${field_target.table_name}.${field_target.name} as ${field_target.targetname}, null::varchar as dummy', joinclause='${fact_table_source} <#foreach added_table in added_tables> left outer join ${added_table.name} on (${added_table.joinclause}) '; select * into temp tmp_rs1 from rpta_resultset ; update rpta_resultset set caption=T.caption, fieldclause=T.fieldclause, joinclause=T.joinclause, whereclause=T.whereclause from tmp_rpta_resultset T where T.systeminfo_id=rpta_resultset.systeminfo_id and T.uniquename=rpta_resultset.uniquename ; insert into rpta_resultset(caption, uniquename, fieldclause, joinclause, whereclause, systeminfo_id) select caption, uniquename, fieldclause, joinclause, whereclause, systeminfo_id from tmp_rpta_resultset where 0=(select count(*) from tmp_rs1 T where T.systeminfo_id=tmp_rpta_resultset.systeminfo_id and T.uniquename=tmp_rpta_resultset.uniquename) ; drop table tmp_rpta_resultset; drop table tmp_rs1; delete from sx_tables where name in (select T.name from tmp_tables T); insert into sx_tables (name,caption,description,table_type,systeminfo_id,systeminfo_orig,thema,sachgebiete_id) select name,caption,description,table_type,systeminfo_id,systeminfo_orig,thema,sachgebiete_id from tmp_tables; delete from sx_fields where table_name in (select T.table_name from tmp_fields T); insert into sx_fields (table_name,name,caption,description,field_type, field_size, field_not_null, currentlyUsed, foreignkey_tab, foreignkey_col, foreignkey_cap, foreignkey_int, foreignkey_cond, foreignkey_func, check_integrity, is_sum, foreignkey_uniquename ) select F.table_name,F.name,F.caption,F.description,F.field_type, F.field_size, F.field_not_null, F.currentlyUsed, F.foreignkey_tab, F.foreignkey_col, F.foreignkey_cap, F.foreignkey_int, F.foreignkey_cond, F.foreignkey_func, F.check_integrity, F.is_sum, F.foreignkey_uniquename from tmp_fields F; drop table tmp_fields; drop table tmp_tables; --rpta_column füllen: select * into temp tmp_rc1 from rpta_column; create temp table tmp_rpta_column( uniquename varchar(255) NOT NULL, caption varchar(255), srcfieldname varchar(255), column_type integer, col_function text, is_aggregate smallint, resultset_id integer, description text, custom integer default 0 ); insert into tmp_rpta_column( uniquename, caption, srcfieldname, column_type, col_function, is_aggregate, resultset_id, description) select F.name as uniquename, coalesce(T.caption,T.name) || ' - ' || F.caption, F.name as srcfieldname, 1 as column_type, (case when F.is_sum=1 then 'sum' else null::varchar end) as col_function, (case when F.is_sum=1 then 1 else 0 end) as is_aggregate, R.tid as resultset_id, F.description from rpta_resultset R, sx_fields F left outer join sx_tables T on (T.name=F.table_name) where F.table_name='${fact_table_target.name}' and R.uniquename='${fact_table_target.name}' and F.currentlyused=1 ; update rpta_column set caption=T.caption, srcfieldname=T.srcfieldname, column_type=T.column_type, col_function=T.col_function, is_aggregate=T.is_aggregate, resultset_id=R.tid, description=T.description, custom=T.custom from tmp_rpta_column T, rpta_resultset R where T.uniquename=rpta_column.uniquename and rpta_column.resultset_id=R.tid and R.uniquename='${fact_table_target.name}' ; insert into rpta_column( uniquename, caption, srcfieldname, column_type, col_function, is_aggregate, resultset_id, description, custom) select T.uniquename, T.caption, T.srcfieldname, T.column_type, T.col_function, T.is_aggregate, R.tid as resultset_id, T.description, T.custom from tmp_rpta_column T, rpta_resultset R where R.uniquename='${fact_table_target.name}' and 0=(select count(*) from tmp_rc1 C where C.uniquename=T.uniquename and C.resultset_id=R.tid) ; drop table tmp_rpta_column; drop table tmp_rc1; --wenn zul_antr_aggr_exists=1