summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZim <zezeozue@google.com>2020-03-30 17:59:00 +0100
committerZimuzo Ezeozue <zezeozue@google.com>2020-03-31 13:04:56 +0000
commit351b4d0f032f99422183929fb358e39e076d6b8c (patch)
tree3fce4b71684b15965f146f6aeb414595aaa797ef
parent2e3fa394229fcafb06c7f056aef55f1bad438575 (diff)
downloadMediaProvider-351b4d0f032f99422183929fb358e39e076d6b8c.tar.gz
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
-rw-r--r--sqlite3.sh69
1 files changed, 69 insertions, 0 deletions
diff --git a/sqlite3.sh b/sqlite3.sh
new file mode 100644
index 000000000..7f7780bd7
--- /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
+}