#! /bin/sh
#
# Inserts all data in the Database.
# Works from scratch and assumes the standard 
# directory layout of the IFA corpus.
# Should be run from 
# 'SLcorpus/DatabaseFiles/scripts/Dbmscripts'
# This takes a loooooong time.
#
# You can give mnemonic arguments to indicate what
# should be inserted. See --help for a complete list
# of arguments.
#
# The address and name of the the database.
# Is used by the SQL commands, should be the
# same as that used by the perl scripts,
# i.e., the address and name in Links.pl.
#
# What to do?
TABLELIST="Basicdata PhonemeData chunk WordLists \
ContextDist CelexData PosData AutoProminence AudioData Semitones PhInfo"
TABLES=${@:-${TABLELIST}}

case $TABLES in (*--help*)
    echo InsertAllData '[' $TABLELIST ']'
    exit
esac

#
# The IP address (Domain Name) of the DBserver.
# Either address in the highest Links.pl file or localhost.
SQLHOST=$(perl -e '$L="../../../../Links.pl";$L=~s!^\.\./!!g unless -s $L;require $L;print $DBMSaddress;')||localhost;export SQLHOST
# The name of the database. The script will use 'ifacorpus' if $DBNAME does not exist.
DBNAME=$(perl -e '$L="../../../../Links.pl";$L=~s@^\.\./@@g unless -s $L;require $L; print $DBMSname;')||ifacorpus;export DBNAME
#
# Note that LOCALDBHOST takes precedence if it exists
# e.g.,
# >LOCALDBHOST=localhost;export LOCALDBHOST
# overrules SQLHOST with a locally running DB
# Uncomment the following if your DB always runs locally
# SQLHOST=${1:-localhost};export SQLHOST

case $TABLES in (*Basicdata*)
    echo InsertRecordingLog: `date`
    ./InsertRecordingLog.pl 2>>InsertError.log

    echo InsertSpeakerInfo: `date`
    ./InsertSpeakerInfo.pl 2>>InsertError.log

    echo InsertTexts: `date`
    ./InsertTexts.pl 2>>InsertError.log

    echo InsertRawSentences: `date`
    ./InsertRawSentences.pl 2>>InsertError.log

    echo SQL Fill Translit sentence numbers: `date` 
    cd ../SQL
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f FillTranslitSentenceNumbers.sql 2>>InsertError.log
    cd -
esac

case $TABLES in (*PhonemeData*)
    echo InsertPhonemeData: `date`
    for Tier in phonemes syllparts syllables lexsyll words cgn lexcgn translit ; do
	    echo $Tier
        ./InsertPhonemeData.pl $Tier 2>>InsertError.log
    done
    
    echo SQL Compile Sentence Numbers: `date` 
    cd ../SQL
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f FillTranslitSentenceNumbers.sql 2>>InsertError.log
    cd -
    
    echo 'Insert Given New occurences (word occurence counts)'
    ./InsertGenericList.pl ../../PhInfo givennew 'GivenNewWordsTable*' id 2>>InsertError.log
esac

# Chunk lists
case $TABLES in (*chunk*)
    echo Insert Chunk lists `date`
    ./InsertGenericList.pl '../../phoneme/' 'chunk' '*CHUNKtranslit.txt.gz' 'id' 2>>InsertError.log
esac

case $TABLES in (*WordLists*)
    echo InsertWordList: `date`
    echo WordLists: `date`
    ./InsertWordList.pl ../../wordlists/CorpusWordList.txt.gz ../../../scripts/CelexWordList.txt.gz 2>>InsertError.log
    echo SQL Convert Word Lists: `date` 
    cd ../SQL
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f convertWordLists.sql 2>>InsertError.log
    cd -
esac

case $TABLES in (*ContextDist*)
    echo LemmaLists: `date`
    ./InsertWordList.pl ../../wordlists/LemmaContextDist.txt.gz 2>>InsertError.log
    echo PlainLists: `date`
    ./InsertWordList.pl ../../wordlists/PlainContextDist.txt.gz 2>>InsertError.log
esac

case $TABLES in (*CelexData*)
    echo InsertCelexData: `date`
    ./InsertCelexData.pl POS WORDFREQ LEXSYLLFREQ SYLLFREQ 2>>InsertError.log
esac

case $TABLES in (*PosData*)
    echo InsertPosData: `date`
    ./InsertPosData.pl POS POSspec POSfit LEMMA 2>>InsertError.log
esac

case $TABLES in (*AutoProminence*)
    echo SQL Create Auto Prominence: `date` 
    cd ../SQL
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f CreateAutoProminence.sql 2>>InsertError.log
    cd -
esac

case $TABLES in (*AudioData*)
    echo InsertAudioData: `date`
    for Tier in Pitch FormantsF1 FormantsF2 FormantsF3 cog Intensity; do
	    echo $Tier
	    ./InsertAudioData.pl $Tier 2>>InsertError.log
    done;
esac

case $TABLES in (*Semitones*)
    echo SQL Create FormantSemitones, Microphone Difference, Pitch Range: `date` 
    cd ../SQL
    echo PitchSemitones: `date` 
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f CreatePitchSemitones.sql 2>>InsertError.log
    echo FormantSemitones: `date` 
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f CreateFormantSemitones.sql 2>>InsertError.log
    echo Update F1/2 distance: `date`
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f UpdateF12SemitoneDistance.sql 2>>InsertError.log
    echo Microphone Difference: `date` 
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f CreateMicrophoneDifference.sql 2>>InsertError.log
    echo Pitch Range: `date` 
    psql -h ${LOCALDBHOST:-${SQLHOST}} -d ${DBNAME:-ifacorpus} -f CreatePitchRange.sql 2>>InsertError.log
    cd -
esac

case $TABLES in (*PhInfo*)
    echo Insert Phoneme Information: `date`
    echo Lexical information: `date`
    ./InsertGenericList.pl '../../PhInfo/' 'PhLxInfo' '*PhonLexInformation.PhLxInfo.gz' 'id' 2>>InsertError.log
    echo Context Distinctiveness: `date`
    ./InsertGenericList.pl '../../PhInfo/' 'PhInfo' '*PhonemeInformation.PhInfo.gz' 'id' 2>>InsertError.log
    echo Twente Corpus: `date`
    ./InsertGenericList.pl '../../PhInfo/' 'PhTwInf' '*PhonemeTwenteCorpusInfo.PhTwInf.gz' 'id' 2>>InsertError.log
esac
