diff options
author | Zim <zezeozue@google.com> | 2020-03-30 17:59:00 +0100 |
---|---|---|
committer | Zimuzo Ezeozue <zezeozue@google.com> | 2020-03-31 13:04:56 +0000 |
commit | 351b4d0f032f99422183929fb358e39e076d6b8c (patch) | |
tree | 3fce4b71684b15965f146f6aeb414595aaa797ef | |
parent | 2e3fa394229fcafb06c7f056aef55f1bad438575 (diff) | |
download | MediaProvider-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.sh | 69 |
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 +} |