#!/bin/ksh

# DumpDB.ksh
# Dump DataBase

# set -x


TOOL="${0##/}"
TOOLDIR=`dirname $0`

function Usage {
cat <<-USAGE_END

	usage:  $TOOL  [-h] [-v ] 

	-v              Verbose

USAGE_END
}


TMP="/tmp/ddb$$."
trap 'rm -f "" ${TMP}*'  EXIT
trap 'echo "*ABORTED*"; exit 2'  HUP INT QUIT BUS SEGV TERM


export VERBOSE=${VERBOSE:-0}
TABLE=""
WHERE=""
export DB_CATALOG=""

while [ $# != 0 ]; do
    case $1 in
    -h|-help|--help|-\?)
        Usage
        exit 0
        ;;
    -v)
        VERBOSE=1
        ;;
    -c)
        DB_CATALOG="$2"
        shift
        ;;
    -*)
        echo "*ERROR* bad option '$1'"
        exit 1
        ;;
    *)
        if [ -z "$TABLE" ]; then
            TABLE="$1"
        elif [ -z "$WHERE" ]; then
            WHERE=" where $1"
        else
            echo "*ERROR* Invalid argument '$1'"
            exit 1
        fi
        ;;
    esac
    shift
done
[ $VERBOSE = 1 ] && set -x


function QueryDB {
    # arg1: [-r]  raw output
    # arg2: catalog
    # arg3: select statement
    # arg4: [optional] query filter
    [ $VERBOSE = 1 ] && set -x

    cd /usr/ios/db/bin
    typeset  RAW=0
    typeset  SOL_OPT="-x onlyresults"
    [ "$1" = "-r" ] && { RAW=1; SOL_OPT=""; shift; }

    typeset  DBOUT="${TMP}dbout"
    typeset  CAT="$1"
    typeset  SELECT="select $2"
    typeset  FILTER=""
    [ -n "$3" ] && FILTER=" WHERE $3"

    cat <<QDB_END | ./psql -p ${DB_PORT} -d vios -U viosadmin -h ${DBNIP} >${DBOUT}
		${SELECT}${FILTER};
QDB_END
    [ $? != 0 ] && { echo "ERROR"; rm -f ${DBOUT}; return 1; }

    grep -q 'Error' ${DBOUT}
    [ $? = 0 ] && { echo "ERROR"; rm -f ${DBOUT}; return 1; }

    cat ${DBOUT} | sed \
        -e '/psql (10.2)/d' \
        -e '/Type "help" for help./d' \
        -e 's/vios=#> //g' \
        -e '/^$/d'

    rm -f ${DBOUT}
    return 0
}



# DATABASE TCP Port (violibCommon.h: #define VIO_SSP_DB_PORT  6003 -> 6090)
DB_PORT=6090
export CLUSTER_NAME=`/usr/ios/cli/ioscli cluster -list -field name -fmt :`
export CLUSTER_ID=`/usr/ios/cli/ioscli cluster -list -field id -fmt :`
export DBNIP=`/usr/lib/methods/vioscmd -getDBNip -remote -clustername $CLUSTER_NAME |grep VIODbnIp |cut -d'=' -f2`
export PGPASSWORD=_${CLUSTER_ID}

function DumpTable {
    # arg1:     Table name
    typeset -u  table="$1"
    echo ""
    echo "=== Table $table in ${DB_CATALOG} ===\n"
    QueryDB  -r  "${DB_CATALOG}" "* from $table" "$WHERE"
    echo ""
}

TABLE_LIST=`/usr/ios/db/bin/pg_dump -d vios -p 6090 -h ${DBNIP} --schema=vios --username=viosadmin | grep "CREATE TABLE" | awk '{print $3}'`

if [ -z "$TABLE" ]; then
    DB_CATALOG="VIOS"
    for i in $TABLE_LIST; do 
       DumpTable vios.$i
    done
    DumpTable vios.fileview
else
    DumpTable  vios.$TABLE
fi

