Add sqlite3 debug scripts
Running sqlite3 CLI on the device can be tedious to use because it
doesn't allow repeating/editing commands or history.
This change adds 2 useful functions:
1. sqlite3-pull: Pulls db along with WAL journal file to get the
latest rows that might not have been committed to the db file.
Additionally, this commands deletes the insert/update/delete triggers
from the pulled db. Otherwise, the corresponding db operations would
fail because the requisite _insert/_update/_delete functions would be
unavailable
2. sqlite3-push: Pushes the (possibly modified) db and WAL journal
file to the device. Additionally trigering the db update flow so that
triggers can be recreated
Test: Manual
Bug: 151076202
Change-Id: Id8f218310ae5a41400812b42e4bd0db89aff58d4
diff --git a/sqlite3.sh b/sqlite3.sh
new file mode 100644
index 0000000..7f7780b
--- /dev/null
+++ b/sqlite3.sh
@@ -0,0 +1,69 @@
+# sudo apt-get install rlwrap to have a more fully featured sqlite CLI
+set -x
+
+function sqlite3-pull () {
+ adb root
+ if [ -z "$1" ]
+ then
+ dir=$(pwd)
+ else
+ dir=$1
+ fi
+ package=$(get-package)
+
+ rm $dir/external.db
+ rm $dir/external.db-wal
+
+ adb pull /data/user/0/$package/databases/external.db $dir/external.db
+ adb pull /data/user/0/$package/databases/external.db-wal "$dir/external.db-wal"
+
+ sqlite3 $dir/external.db "drop trigger files_insert"
+ sqlite3 $dir/external.db "drop trigger files_update"
+ sqlite3 $dir/external.db "drop trigger files_delete"
+
+ rlwrap sqlite3 $dir/external.db
+}
+
+function sqlite3-push () {
+ adb root
+ if [ -z "$1" ]
+ then
+ dir=$(pwd)
+ else
+ dir=$1
+ fi
+ package=$(get-package)
+
+ adb push $dir/external.db /data/user/0/$package/databases/external.db
+ adb push $dir/external.db-wal /data/user/0/$package/databases/external.db-wal
+
+ sqlite3-trigger-upgrade
+}
+
+function sqlite3-trigger-upgrade () {
+ package=$(get-package)
+
+ # Doesn't actually upgrade the db because db version is hardcoded in code
+ # It however triggers upgrade path
+ check_string="/data/user/0/$package/databases/external.db \"pragma user_version\""
+ version=$(adb shell sqlite3 $check_string)
+ echo "Old version: $version"
+
+ version=$((version+1))
+ upgrade_string="/data/user/0/$package/databases/external.db \"pragma user_version=$version\""
+ adb shell sqlite3 $upgrade_string
+
+ version=$(adb shell sqlite3 $check_string)
+ echo "New version: $version"
+
+ adb shell am force-stop $package
+}
+
+function get-package() {
+ if [ -z "$(adb shell pm list package com.android.providers.media.module)" ]
+ then
+ echo "com.google.android.providers.media.module"
+ else
+ echo "com.android.providers.media.module"
+ fi
+}