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