#!/usr/bin/ksh


m() {			# decorated monitor output

	ret=0
	monitor -Q -c "$*" $db
	ret=$?
}

ms() {			# terse monitor output - strip leading space

#	monitor -N -T -Q -c "$*" $db |
	ret=0
	tmp=/tmp/ms$$
	rm -f /tmp/ms$$
	monitor -N -T -Q -c "$*" $db 2> /dev/null > $tmp 
	ret=$?
	sed 's/^ //' < $tmp ; rm -f $tmp
}
 

listdbs() {		# terse list of all db's
	db=template1
	ms 'retrieve(pg_database.datname)'
}

classes(){		# return all classes in $db except those which start
			# with pg_ (assumed owned by postgres) or Xin 
			# (assumed LO)
	setdb
	ms "retrieve(pg_class.relname)" | egrep -v '^Xin|^pg_|class_info'
}

attributes(){
	setclass
	ms 'retrieve(pg_attribute.attname,pg_type.typname)
		where pg_attribute.attrelid = pg_class.oid
		and   pg_attribute.atttypid = pg_type.oid
		and   pg_attribute.attnum   > 0
		and   pg_class.relname      = "'"$class"'"' 
}

atttypes(){
	setclass
	attributes | awk '{print $2}' | sed 's/^_/array of /'
}

attnames(){
	setclass
	attributes | awk '{print $1}'
}


selecta() {
	var=$1
	name=$2
	selector=$3
	PS3="Select a $name: "
	select selected in `$selector`
	do
		case $REPLY in
		[0-9]|[0-9]*[0-9])
			;;
		*)
			selected="$REPLY"
			;;
		esac
		echo Using $name $selected...
		break
	done
	eval "$var=$selected"
}
	


setdb(){
	[ "$db" ] || selecta db database listdbs
}
setatt(){
	[ "$att" ] || {
		setclass
		selecta att attribute attnames
	}
}
setclass(){
	[ "$class" ] || {
		setdb
		selecta class class classes
	}
}

attdescrip(){
	setatt
	ms 'retrieve (class_info.attdescrip)
		where class_info.class = "'$class'"
		and   class_info.attname = "'$att'"'
}


addclass(){
	setdb
	setclass
	while read aline
	do
		set $aline
		if [ "x$line" != "x" ]
		then
			line="$line,$1=$2"
		else
			line="$1=$2"
		fi
	done 
	line='create '"$class"'('"$line"')'
	ms $line
}

delclass(){
	setdb
	setclass
	ms "destroy $class"
}
