#!/bin/sh
#v12.1.13
# Script for create or upgrade SQLite tables by known scheme from sh file
# Usage: ./updatesql <dbfile> <schema_file> <tablename>
NOCOLOR=0
# get CBSD path
. /usr/local/cbsd/cbsd.conf
. ${subrdir}/nc.subr

create_table()
{
	local _newtable _n _i _val

	_newtable="CREATE TABLE IF NOT EXISTS ${MYTABLE} ( "
	_n=0

	for _i in ${MYCOL}; do
		eval _val=\$$_i
		[ ${_n} -ne 0 ] && _newtable="${_newtable},"
		_newtable="${_newtable} ${_i} ${_val}"
		_n=$(( _n + 1 ))
	done

	_newtable="${_newtable} ${CONSTRAINT} )"

#	echo "${miscdir}/sqlcli ${MYFILE} \"${_newtable}\""
	${miscdir}/sqlcli ${MYFILE} "${_newtable}"
}

update_table()
{
	local _i= _val= _res=

	for _i in ${MYCOL}; do
		eval _val=\$$_i
		_res=$( ${miscdir}/sqlcli ${MYFILE} "SELECT COUNT(*) FROM pragma_table_info('${MYTABLE}') WHERE name = '${_i}';" )
		[ "${_res}" != "1" ] && ${miscdir}/sqlcli ${MYFILE} ALTER TABLE ${MYTABLE} ADD COLUMN ${_i} ${_val}
	done

	[ -n "${INITDB}" ] && ${miscdir}/sqlcli ${MYFILE} ${INITDB}
}

## MAIN ##
[ $# -ne 3 ] && err 1 "Usage $0 <dbfile> <path_to_schema> <tablename>"

MYFILE="${1}"
SCHEMA="${2}"
MYTABLE="${3}"

DIRNAME_CMD=$( which dirname )
[ -z "${DIRNAME_CMD}" ] && err 1 "updatesql: no such dirname"
CHMOD_CMD=$( which chmod )
[ -z "${CHMOD_CMD}" ] && err 1 "updatesql: no such chmod"
CHOWN_CMD=$( which chown )
[ -z "${CHOWN_CMD}" ] && err 1 "updatesql: no such chown"

# cbsd macros ?
DIRNAME=$( ${DIRNAME_CMD} ${MYFILE} )
[ ! -d ${DIRNAME} ] && err 1 "updatesql: no such dir: ${DIRNAME}"

[ ! -f ${MYFILE} ] && touch ${MYFILE}
${CHMOD_CMD} 0660 ${MYFILE} && ${CHOWN_CMD} ${cbsduser}:${cbsduser} ${MYFILE}

[ ! -f ${SCHEMA} ] && err 1 echo "File ${SCHEMA} not found"

. ${SCHEMA}

[ -z "${MYTABLE}" ] && err 1 "No MYTABLE variable"

create_table
update_table

exit 0
