#!/bin/bash
# filename : gbasecli
# function : build .netrc and invoke dbaccess connect
# write by : liaosnet@gbasedbt.com  2025-07-31

Usage(){
  cat <<EOF

  gbasecli 

      [-hHost] [-PPort] [-uUser] [-pPassword]
      [-sServername] [-dDbname] [-lLocale] [-gUseGLU] [-DDelimident]
      [-f]

      Servername: default 'gbase01'
      User      : default 'gbasedbt'
      Password  : default 'GBase123'  
      Host      : default '0.0.0.0'
      Port      : default '9088'
      Dbname    : default 'testdb'
      Locale    : default 'zh_CN.utf8'
      UseGLU    : default '0', accept '1','0'
      Delimident: default '0', accept '1','0'
      CleanCache: default false

EOF
  exit 1
}

if [ x"${GBASEDBTDIR}" = x ]; then
  echo "\$GBASEDBTDIR not set !"
  exit 1
fi

while [[ $# -gt 0 ]]
do
  key="$1"
  case ${key:0:2} in
    -s) SERVERNAME="${key:2}"; shift ;;
    -p) PASSWORD="${key:2}";   shift ;;
    -u) USERNAME="${key:2}";   shift ;;
    -P) PORT="${key:2}";       shift ;;
    -h) HOST="${key:2}";       shift ;;
    -d) DBNAME="${key:2}";     shift ;;
    -l) LOCALE="${key:2}";     shift ;;
    -g) USEGLU="${key:2}";     shift ;;
    -D) DELIMIDENT="${key:2}"; shift ;;
    -f) REBUILD="1";           shift ;;
    *)
        Usage
        ;;
  esac
done

SERVERNAME=${SERVERNAME:-gbase01}
USERNAME=${USERNAME:-gbasedbt}
PASSWORD=${PASSWORD:-GBase123}
PORT=${PORT:-9088}
HOST=${HOST:-0.0.0.0}
DBNAME=${DBNAME:-testdb}
USEGLU=${USEGLU:-0}
LOCALE=${LOCALE:-zh_CN.utf8}
DELIMIDENT=${DELIMIDENT:-0}
REBUILD=${REBUILD:-0}

# sqlhosts
if [ ! -f ${GBASEDBTDIR}/etc/sqlhosts ]; then
  cat <<EOF > ${GBASEDBTDIR}/etc/sqlhosts
${SERVERNAME} onsoctcp ${HOST} ${PORT}
EOF
else
  ISEXISTS=$(grep "^${SERVERNAME}" ${GBASEDBTDIR}/etc/sqlhosts | wc -l)
  if [ ${ISEXISTS} -eq 0 ]; then
    cat <<EOF >> ${GBASEDBTDIR}/etc/sqlhosts
${SERVERNAME} onsoctcp ${HOST} ${PORT}
EOF
  else
    ISEXISTS=$(grep "^${SERVERNAME}.*${HOST}.*${PORT}" ${GBASEDBTDIR}/etc/sqlhosts | wc -l)
    if [ ${ISEXISTS} -eq 0 ]; then
      sed -i "s#^${SERVERNAME}.*#${SERVERNAME} onsoctcp ${HOST} ${PORT}#g" ${GBASEDBTDIR}/etc/sqlhosts
    fi
  fi
fi

# .netrc
if [ ! -f ${HOME}/.netrc ]; then
  cat <<EOF > ${HOME}/.netrc
machine ${HOST} login ${USERNAME} password ${PASSWORD}
EOF
  chmod 600 ${HOME}/.netrc
else
  ISEXISTS=$(grep "^machine.*${HOST}" ${HOME}/.netrc | wc -l)
  if [ ${ISEXISTS} -eq 0 ]; then
    cat <<EOF >> ${HOME}/.netrc
machine $HOST login $USERNAME password $PASSWORD
EOF
  else
    LASTMT=$(stat -c %Y ${HOME}/.netrc)
    CURRTM=$(date +%s)
    TIMEDIFF=$(expr ${CURRTM} - ${LASTMT:-0})
    if [ x"${REBUILD}" = x1 -o ${TIMEDIFF} -gt 300 ]; then
      sed -i "s#machine ${HOST}.*#machine ${HOST} login ${USERNAME} password ${PASSWORD}#g" ${HOME}/.netrc
    fi
  fi
fi

# dbaccess
export DB_LOCALE=${LOCALE}
export CLIENT_LOCALE=${LOCALE}
if [ x"${USEGLU}" = x0 ]; then
  unset GL_USEGLU
else
  export GL_USEGLU=1
fi
if [ x"${DELIMIDENT}" = x0 ]; then
  unset DELIMIDENT
else
  export DELIMIDENT=y
fi

dbaccess ${DBNAME}@${SERVERNAME} - 
