#!/bin/sh set -eu input_to_db() { local input= local db= input="$(mktemp)" || return 1 cat - 1>"${input}" || { rm -f "${input}"; return 1; } if file "${input}" | grep -Fq SQLite; then # Input still a database: use it directly. db="${input}" else # Input already dumped to SQL: enter it into temporary database. db="$(mktemp)" || { rm -f "${input}"; return 1; } sqlite3 "${db}" 0<"${input}" || { rm -f "${input}"; return 1; } rm -f "${input}" || { rm -f "${db}"; return 1; } fi printf '%s' "${db}" return 0 } clean() { local db="${1}" shift 1 sqlite3 "${db}" "UPDATE account_settings SET $(: \ )settings = edit(settings, \"${0}-sub-account-settings\");" || \ return 1 return 0 } db_to_sql() { local db="${1}" shift 1 sqlite3 "${db}" '.dump' || return 1 return 0 } usage() { printf 'Usage: %s [.= ...]\n' "${0}" return 0 } main() { local arg= local db= for arg in "${@}"; do case "${arg}" in ?*.?*=?*);; *) usage 1>&2; return 1;; esac done db="$(input_to_db)" || return 1 clean "${db}" || { rm -f "${db}"; return 1; } db_to_sql "${db}" || { rm -f "${db}"; return 1; } rm -f "${db}" || return 1 return 0 } main "${@}"