1#!/bin/bash 2 3set -e 4 5html=0 6output="" 7prefix="" 8time="" 9local=0 10 11verbose=0 12 13filter="cat" 14pager="${QDB_PAGER:-${PAGER:-cat}}" 15 16# Table output mode by default 17sep="〠" 18output="-list -separator $sep" 19filter="column -t -s $sep" 20 21while getopts "lcheqtv" opt; do 22 case "$opt" in 23 l) 24 local=1 25 ;; 26 h) 27 html=1 28 output="-html" 29 filter="cat" 30 pager="${HTML_VIEWER:-$pager}" 31 ;; 32 e) 33 prefix="EXPLAIN " 34 ;; 35 q) 36 prefix="EXPLAIN QUERY PLAN " 37 ;; 38 t) # Run with the time command. 39 time="time" 40 ;; 41 v) 42 verbose=1 43 ;; 44 *) 45 exit 1 46 esac 47done 48shift $(($OPTIND - 1)) 49 50db="$1" 51shift 52 53if ! [[ -t 1 ]] ; then 54 pager="cat" 55fi 56 57if (( $verbose )) ; then 58 echo "DB: $db" 1>&2 59fi 60 61query="$*" 62 63run_query() { 64 if (( $local )) ; then 65 test -f "$db" && $time sqlite3 $output -nullvalue "[NULL]" -header "$db" "$prefix$query" 66 else 67 query=$(sed -e "s!'!\'\\\'\'!g" <<<"$query") # Escape for shell 68 adb shell -T "(" test -f "$db" "&&" $time sqlite3 $output -nullvalue "[NULL]" -header "$db" \'"$prefix$query"\' ")" "2>&1" 69 fi 70} 71 72{ 73 if (( $html )) ; then 74 cat <<EOF 75<head> 76<style> 77body { 78 font:8pt monospace; 79} 80 81table { 82 border: 1px solid black; 83 border-collapse: collapse; 84} 85</style> 86</head> 87<body> 88<table border="1"> 89EOF 90 91 run_query 92 93 cat <<EOF 94</table> 95<body> 96EOF 97 else 98 run_query 99 fi 100} | $filter | $pager 101