#!/bin/bash set -e html=0 output="" prefix="" time="" local=0 verbose=0 filter="cat" pager="${QDB_PAGER:-${PAGER:-cat}}" # Table output mode by default sep="〠" output="-list -separator $sep" filter="column -t -s $sep" while getopts "lcheqtv" opt; do case "$opt" in l) local=1 ;; h) html=1 output="-html" filter="cat" pager="${HTML_VIEWER:-$pager}" ;; e) prefix="EXPLAIN " ;; q) prefix="EXPLAIN QUERY PLAN " ;; t) # Run with the time command. time="time" ;; v) verbose=1 ;; *) exit 1 esac done shift $(($OPTIND - 1)) db="$1" shift if ! [[ -t 1 ]] ; then pager="cat" fi if (( $verbose )) ; then echo "DB: $db" 1>&2 fi query="$*" run_query() { if (( $local )) ; then test -f "$db" && $time sqlite3 $output -nullvalue "[NULL]" -header "$db" "$prefix$query" else query=$(sed -e "s!'!\'\\\'\'!g" <<<"$query") # Escape for shell adb shell -T "(" test -f "$db" "&&" $time sqlite3 $output -nullvalue "[NULL]" -header "$db" \'"$prefix$query"\' ")" "2>&1" fi } { if (( $html )) ; then cat < EOF run_query cat < EOF else run_query fi } | $filter | $pager