#!/bin/sh

# Build summaries for speeding up interactive interface

.  _PATH_TO_INSTALL_/bin/Definitions

echo "Building database summaries and shortcuts..."

$PSQL -qtA '' -F '	' -U $PGUSER -d $PGDB << EOF

select '* Vacuum/analyze database...';

vacuum analyze;

EOF


echo "* Counting tickets in database..."

COUNT=`SqlQuery "select count(*) from taxdata;" | tr -c '[0-9]' ' '`
COUNT=`expr 0$COUNT + 0`

if [ "$COUNT" = 0 ]
then
   echo "ERROR: no data available !"
   exit 1
fi


$PSQL -qtA '' -F '	' -U $PGUSER -d $PGDB << EOF

begin transaction;

truncate table summaries;

select '* Storing ticket count';
insert into summaries ( name, value ) values ( 'TicketCount', '$COUNT' );

select '* Start date';
insert into summaries ( name, value ) ( select 'MinDate', min(EndDateTime - (duration * interval '1 second')) from taxdata );

select '* End date';
insert into summaries ( name, value ) ( select 'MaxDate', max(EndDateTime) from taxdata );

select '* Call types';

drop table if exists calltypes_menu;

select
   distinct calltype,
   1 as valid,
   'Unkown (' || calltype || ')' as name
into
   calltypes_menu
from
   taxdata;

insert into summaries (name, value) (select 'CallType', calltype from calltypes_menu );

insert into calltypes_menu
(
   select calltype, 0, 'x'
   from calltypes c
   where c.calltype not in ( select calltype from calltypes_menu)
);

update calltypes_menu m 
set name = (
                select c.description || ' (' || c.calltype || ')'
                from calltypes c
                where m.calltype = c.calltype
           );

select '* Computing raw Erlang data';

select '  - Drop old table';
drop table if exists erlang_rawdata;

select '  - Starts';
select
   calltype,
   EndDateTime - (duration * interval '1 second') as date,
   EndDateTime - (duration * interval '1 second') as EventStart,
   EndDateTime as EventEnd,
   1 as inc
into erlang_rawdata
from taxdata;

select '  - Ends';
insert into erlang_rawdata
(
   select
      calltype,
      EndDateTime,
      EndDateTime - (duration * interval '1 second'),
      EndDateTime,
      -1 
   from taxdata
);

select '  - Index 1/8';
create index i_erlang_rd_1 on erlang_rawdata ( date );

select '  - Index 2/8';
create index i_erlang_rd_2 on erlang_rawdata ( eventstart );

select '  - Index 3/8';
create index i_erlang_rd_3 on erlang_rawdata ( eventend );

select '  - Index 4/8';
create index i_erlang_rd_4 on erlang_rawdata ( eventstart, eventend );

select '  - Index 5/8';
create index i_erlang_rd_5 on erlang_rawdata ( calltype, date );

select '  - Index 6/8';
create index i_erlang_rd_6 on erlang_rawdata ( calltype, eventstart );

select '  - Index 7/8';
create index i_erlang_rd_7 on erlang_rawdata ( calltype, eventend );

select '  - Index 8/8';
create index i_erlang_rd_8 on erlang_rawdata ( calltype, eventstart, eventend );

select '  - Clustering data';
cluster i_erlang_rd_1 on erlang_rawdata;

select '* User table';
drop table if exists user_list;

select distinct chargedusername, chargednumber into user_list from taxdata;

select '* Commiting changes...';
commit;

select '* Analyzing new tables';
vacuum analyze erlang_rawdata;

EOF

echo "All done !"
