やってみる

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

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

 create文とか吐くヤツ。.schemaとの違いがわからん。

成果物

.help

.fullschema ?--indent?   Show schema and the content of sqlite_stat tables

 スキーマsqlite_statテーブルのコンテンツを表示する。

  • スキーマcreate文だと思う
  • sqlite_statテーブルって何?

.fullschema

echo "create table users(id primary key, name text, class text);
insert into users(name, class) values('Yamada','A');
insert into users(name, class) values('Suzuki','B');
insert into users(name, class) values('Tanaka','A');
" > create_0.sql
sqlite3 :memory: \
".read create_0.sql" \
".fullschema"
CREATE TABLE users(id primary key, name text, class text);
/* No STAT tables available */

--indent

sqlite3 :memory: \
".read create_0.sql" \
".fullschema --indent"
CREATE TABLE users(id primary key, name text, class text);
/* No STAT tables available */

 変わらず。

/* No STAT tables available */

 「利用可能なSTATテーブルはありません」とコメント。STATテーブルって何。

.stats

 ドットコマンドに.statsとかあったのでonにしてみたが同様。

sqlite3 :memory: \
".read create_0.sql" \
".stats on" \
".fullschema"
CREATE TABLE users(id primary key, name text, class text);
/* No STAT tables available */

DBSTAT仮想テーブル

関係性を見いだせなかった。

 DBSTAT仮想テーブルとやらがあるらしい。SQLITE_ENABLE_DBSTAT_VTABコンパイルオプションが有効なら使える。

SQLITE_ENABLE_DBSTAT_VTAB

 以下でコンパイルオプションを一覧。あった。使えるはず。思い出した。確か自分でビルドするときに設定しないと有効にならないヤツ。

$ sqlite3 :memory: "pragma compile_options;"
ALLOW_URI_AUTHORITY
COMPILER=gcc-6.3.0 20170516
ENABLE_COLUMN_METADATA
ENABLE_DBSTAT_VTAB
ENABLE_FTS4
ENABLE_FTS5
ENABLE_GEOPOLY
ENABLE_ICU
ENABLE_JSON1
ENABLE_PREUPDATE_HOOK
ENABLE_RTREE
ENABLE_SESSION
ENABLE_STAT4
ENABLE_STMTVTAB
ENABLE_UNLOCK_NOTIFY
THREADSAFE=1

使ってみる

echo "create table users(id primary key, name text, class text);
CREATE VIRTUAL TABLE temp.stat USING dbstat(main);
insert into users(name, class) values('Yamada','A');
insert into users(name, class) values('Suzuki','B');
insert into users(name, class) values('Tanaka','A');
" > create_1.sql
sqlite3 :memory: \
".read create_1.sql" \
".stats on" \
".fullschema"
CREATE TABLE users(id primary key, name text, class text);
CREATE VIRTUAL TABLE stat USING dbstat(main);
/* No STAT tables available */

 念の為、.stats offでも試したが同様。

 あんれー? 

 そもそも本当に使えるのか?

 mainスキーマ内にあるusersテーブルが使うページ数を取得する。ページ数って何?

sqlite3 :memory: \
".read create_1.sql" \
"SELECT count(*) FROM dbstat WHERE name='users';"
1

 使えていると思う。なら/* No STAT tables available */は何なの? これは関係ないの? わからん……。

類似コマンド

  • .schema

関連コマンド?

  • .stats

対象環境

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

前回まで