やってみる

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

SQLite3ドットコマンド(.tables)

 テーブル一覧。

成果物

.help shell

sqlite3 :memory: ".help tables"
.tables ?TABLE?          List names of tables matching LIKE pattern TABLE

.tables

テーブルがひとつもないとき

 何もでない。

sqlite3 :memory: ".tables"



テーブルが1つあるとき

sqlite3 :memory: \
"create table MyTable(C text);" \
".tables"
MyTable

 sqlite_masterなどの隠しテーブルは出ない。

コマンド省略

 じつは、.ta, .tab, .tabl, .tableでも出る。

sqlite3 :memory: \
"create table MyTable(C text);" \
".ta"
MyTable

複数テーブルがあるとき

 行でなく列に出す。

sqlite3 :memory: \
"create table MyTable(C text);" \
"create table HAHAHA(C text);" \
".tables"
HAHAHA   MyTable

テーブルを区切れない

 もしテーブル名にスペースがあったら、テーブル名なのかデリミタなのか区別できない。

sqlite3 :memory: \
"create table MyTable(C text);" \
"create table HAHAHA(C text);" \
'create table "HI HI HI"("C C C" text);' \
".tables"
HAHAHA    HI HI HI  MyTable 

 行で分けてくれたらgrepで使えるのに……。

sqlite3 :memory: \
"create table MyTable(C text);" \
"create table HAHAHA(C text);" \
'create table "HI HI HI"("C C C" text);' \
".tables" | grep 'HI HI HI'
HAHAHA    HI HI HI  MyTable 

 たまたま1行に含まれた他のテーブルまで出ちゃう。

 スペースが識別子に入らなければ、以下で行にできたのに……。

sqlite3 :memory: \
"create table MyTable(C text);" \
"create table HAHAHA(C text);" \
'create table "HI HI HI"("C C C" text);' \
".tables" | tr -s ' ' | tr ' ' '\n'
HAHAHA
HI
HI
HI
MyTable

 HI HI HIテーブル名が分解されてしまった。あかん。

 .tableは閲覧用ってことで。テーブルがたくさんあって俯瞰したいときは、改行されないほうが嬉しい。

テーブル名一覧がほしい(行区切り)

 自動処理用にテーブル名がほしいときは以下。

sqlite3 :memory: \
"create table MyTable(C text);" \
"create table HAHAHA(C text);" \
'create table "HI HI HI"("C C C" text);' \
"select name from sqlite_master;"
MyTable
HAHAHA
HI HI HI

テーブル名に改行コードが含まれていたら?

 そんなことにはならん。

sqlite3 :memory: \
"create table MyTable(C text);" \
"create table HAHAHA(C text);" \
'create table "HI HI HI"("C C C" text);' \
'create table "FU\nFU\nFU"("C\nC\nC" text);' \
"select name from sqlite_master;"
MyTable
HAHAHA
HI HI HI
FU\nFU\nFU

 ASCII制御コードをテーブル名に入れたらエスケープされるようだ。つまり改行コードがテーブル名になることはない。ならテーブル名はsqlite_master.nameから取得すれば安心ね。

対象環境

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

前回まで