やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3学習 CLI(-zip)

 ZIPファイルを開いてSQLite3アーカイブ型(zipテーブル)に展開する。

成果物

テスト用ファイル作成

echo -e "aaa\nAAA" > A.txt
echo -e "bbb\nBBB" > B.txt
mkdir -p ./D/DD
echo -e "ddd\nDDD" > ./D/DD/DDD.txt
zip -r myarchive A.txt B.txt D/

 myarchive.zipファイルが作成されたことを確認。

ls -1 | grep myarchive.zip
myarchive.zip

-zip

 zipファイルを指定して-zipフラグを付与する。このときzipファイル内容はzipテーブルに展開される。

sqlite3 myarchive.zip -zip ".tables"
zip

 zipテーブルの内容を確認。ファイルの内容が展開されている。

sqlite3 myarchive.zip -zip ".headers on" "select * from zip";
name|mode|mtime|sz|rawdata|data|method
A.txt|33188|1566008691|8|aaa
AAA
|aaa
AAA
|0
B.txt|33188|1566008691|8|bbb
BBB
|bbb
BBB
|0
D/|16877|1566006789|0|||0
D/DD/|16877|1566006789|0|||0
D/DD/DDD.txt|33188|1566008692|8|ddd
DDD
|ddd
DDD
|0

SQLite3 Archiveは圧縮できているのか?

 以前、ZIPを圧縮・展開できているかどうかわからなかった。確認方法すら不明だった。

 今回この結果をみるかぎり、展開はできるようだ。今回の-zipフラグの動作はSQLITE_HAVE_ZLIBコンパイルオプションを付与しなかったバイナリでも確認できた。つまり、同コンパイルオプションを付与せずともZIP展開はできる。

 圧縮は不明。以下のようなことをしても変化なし。

select sqlar_compress('aaa
AAA');
select 'aaa
AAA';
select length(sqlar_compress('aaa
AAA'));
select length('aaa
AAA');

関連

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで