#!/bin/ksh

# DumpDB.ksh
# Dump DataBase

# set -x


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

function Usage {
cat <<-USAGE_END

	usage:  $TOOL  [-h] [-v ] [-c "catalog"]

	-v              Verbose
	-c catalog      Override VIOS catalog and use 'catalog' for table lookup

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 vioscm -U vpgadmin >${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_CM_DB_PORT  6080)
DB_PORT=6080

#if [ -z "$DB_CATALOG" ]; then
#    QueryDB  "VIOS"  "owner from sys_schemas" "name='VIOS'" | read DB_CATALOG rem
#    [ "$DB_CATALOG" = "ERROR" ] && { echo "*ERROR* Database query problem"; exit 1; }
#fi


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 ""
}

#if [ -z "$TABLE" ]; then
#    DB_CATALOG="VIOSCM"
#    DumpTable vioscm.object_sequence_id
#    DumpTable vioscm.path_sequence_id
#
#    DumpTable viosdr.client
#    DumpTable viosdr.wwpn
#    DumpTable viosdr.disk
#    DumpTable viosdr.vmax_disk
#    DumpTable viosdr.ds8k_disk
#    DumpTable viosdr.svc_disk 
#    DumpTable viosdr.hitachi_disk
#    DumpTable viosdr.disk_mapping
#    DumpTable viosdr.op_status
#    DumpTable viosdr.sys_disks
#    DumpTable viosdr.vios_partition
#
#else
#    DumpTable  $TABLE
#fi

CM_TABLE_LIST=`/usr/ios/db/bin/pg_dump -d vioscm -p 6080 --schema=vioscm --username=viosadmin | grep "CREATE TABLE" | awk '{print $3}'`
DR_TABLE_LIST=`/usr/ios/db/bin/pg_dump -d vioscm -p 6080 --schema=viosdr --username=viosadmin | grep "CREATE TABLE" | awk '{print $3}'`

if [ -z "$TABLE" ]; then
    DB_CATALOG="VIOSCM"
    for i in $CM_TABLE_LIST; do
       #DumpTable vioscm.$i
       DumpTable $i
    done
    for i in $DR_TABLE_LIST; do
       #DumpTable viosdr.$i
       DumpTable $i
    done
else
    DumpTable  vioscm.$TABLE
fi

