#!/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