#!/bin/bash
InsertOrUpdate() {
#InsertOrUpdate table set_key set_value [set_key set_value […]] <	where_key where_value
#									[where_key where_value
#									[…]]
	local			\
		table="$1"	\
		argument	\
		key		\
		keys		\
		set_keys	\
		set_values	\
		value		\
		values		\
		what		\
		results
	shift
	what=key
	for argument
	do
		case $what in
			key)
				set_keys+=( "$argument" )
				what=value
			;;
			value)
				set_values+=( "$argument" )
				what=key
			;;
		esac
	done
	while read key value
	do
		keys+=( "$key" )
		values+=( "$value" )
	done
	if results=$(
		Select "$table" ${keys[0]} < <(
			for key in ${!keys[@]}
			do
				echo "${keys[$key]}" = "${values[$key]}"
			done
		)
	)
	then
		Update "$table" "$@" < <(
			for key in ${!keys[@]}
			do
				echo "${keys[$key]}" = "${values[$key]}"
			done
		)
	else
		results=$(
			Insert "$table" < <(
				for key in ${!set_keys[@]}
				do
					echo "${set_keys[$key]}" "${set_values[$key]}"
				done
				for key in ${!keys[@]}
				do
					echo "${keys[$key]}" "${values[$key]}"
				done
			)
		)
	fi
	echo "$results"
}
