#!/bin/bash
#
# mkcgdb
# ------
# Utility script to build up a cego database with one tableset
#
# (C)opyright 2010 by Bjoern Lemke
#
# The database and tableset parameters defined below
# should be edited and customized to appropriate values
#
#

DEFCEGOROOT=/usr/local/cego

printUsage()
{
    echo "Usage : $0 [ -r <root path>] [ -t <tableset> ] <dbname>" 
}

args=`getopt r:t: $*`

if [ $? != 0 ]
then
    printUsage
    exit 2
fi

set -- $args

for i
do
    case "$i"
        in
        -r)
	    CEGOROOT=$2; shift;
            shift;;
        -t)
	    CEGOTABLESET=$2;shift;
            shift;;
        --)
	    DBNAME=$2
            shift; break;;
    esac
done

# path to the database root path, where the database should be created

if [ -z "$CEGOROOT" ]
then
    CEGOROOT=$DEFCEGOROOT
fi


if [ ! -d $CEGOROOT ]
then
    echo "Root directory $CEGOROOT must exist"
    exit 1
fi

DBROOT=$CEGOROOT/$DBNAME

if [ -d $DBROOT ]
then
    echo "Root directory $DBROOT/$DBNAME already exists"
    echo "Must be removed manually to create database"
    exit 1
fi

if [ -z "$CEGOTABLESET" ]
then
    TS=${DBNAME}
else
    TS=${CEGOTABLESET}
fi

echo "Creating database in directory $DBROOT ..."

# path to the cego executable
CEGO=cego
# name of the database xml file
DBXML=${DBROOT}/${DBNAME}.xml
# several database parameters
PAGESIZE=16384
ADMPORT=2000
DBPORT=2200
LOGPORT=3000
PIDFILE=${DBROOT}/pid
ADMINUSER=cgadm
ADMINPWD=cgadm
LOGFILE=${DBROOT}/cego.log

# DEBUGLEVEL=DEBUG
DEBUGLEVEL=NOTICE

# tableset defs
TSROOT=${DBROOT}/data
TSTICKET=${TSROOT}/tsticket.xml
SYSSIZE=100
TMPSIZE=3000
LOGFILESIZE=1000000
LOGFILENUM=3
SORTAREASIZE=10000000
APPFILE=${TSROOT}/${TS}data01.dbf
APPSIZE=3000
DBUSER=${DBNAME}
DBPWD=${DBNAME}

##########################
### end of customizing ###
##########################

# rm -rf ${TSROOT}

mkdir ${DBROOT}
mkdir ${TSROOT}

echo "Creating xml ..."
cat > $DBXML <<EOF
<?xml version="1.0" ?>
<!DOCTYPE CEGO_DB_SPEC>
<DATABASE NAME="$DBNAME" PAGESIZE="$PAGESIZE" 
ADMINPORT="$ADMPORT" LOGPORT="$LOGPORT" DATAPORT="$DBPORT"
PIDFILE="$PIDFILE" MAXFID="1" MAXTSID="1"
NUMRECSEMA="1000" NUMSYSPAGESEMA="43" NUMDATAPAGESEMA="43" 
NUMIDXPAGESEMA="43" NUMRBPAGESEMA="43" NUMDATAFILESEMA="11" 
NUMBUFFERPOOLSEMA="11" MAXFIXTRIES="30"
CSMODE="ON" QESCMODE="ON" LOGMNGPROG="./cglogmng">
<MODULE NAME="ALL" LEVEL="$DEBUGLEVEL"></MODULE>
</DATABASE> 
EOF

# <MODULE NAME="CegoTableManager" LEVEL="NOTICE"></MODULE>
# <MODULE NAME="CegoAdminThreadPool" LEVEL="NOTICE"></MODULE>
# <MODULE NAME="CegoSelect" LEVEL="NOTICE"></MODULE>

/bin/echo -n "Creating admin user ..."
${CEGO} --mode=setadminuser --dbxml=${DBXML} --user=${ADMINUSER}/${ADMINPWD} --logfile=${LOGFILE}
if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

/bin/echo -n "Defining tableset $TS1..."
${CEGO} --mode=define --tableset=${TS} -dbxml=${DBXML} --tsdef=tsroot:${TSROOT},tsticket:${TSTICKET},syssize:${SYSSIZE},tmpsize:${TMPSIZE},logfilesize:${LOGFILESIZE},logfilenum:${LOGFILENUM},appfile:${APPFILE},appsize:${APPSIZE},sortareasize=${SORTAREASIZE} --logfile=${LOGFILE}
if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

/bin/echo -n "Creating database user for $TS1 ..."
${CEGO} --mode=setdbuser --tableset=${TS} --dbxml=${DBXML} --user=${DBUSER}/${DBPWD} --role=ALL --logfile=${LOGFILE}
if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

/bin/echo -n "Creating tableset $TS1..."
${CEGO} --mode=create --dbxml=${DBXML} --tableset=${TS} --logfile=${LOGFILE}
if [ $? -eq 0 ]
then
    echo "... operation ok"
else
    echo "... operation failed"
    exit 1
fi

