kawasin73のブログ

技術記事とかいろんなことをかくブログです

SQLite を再実装する時に役にたつドキュメント

困った時はドキュメント、どうもかわしんです。最近、諸事情で SQLite のドキュメントを読んでいます。

前回の記事 で紹介した通り SQLite を Rust で再実装しています。おかげさまで 300 を超える Github Star もいただき嬉しいです。

github.com

SQLite は全ての仕様が ドキュメント にまとめられているので、そのドキュメントと本家の実装を読み比べながら実装しています。

SQLite を再実装する上で特に以下のドキュメントは役にたちます。これらだけで最小限の SQLite の実装は作れると思います。

  • Overview Documents > About SQLite
    • いかに SQLite がすごいかを自慢しているドキュメント。使おうとしている人には安心を、再実装しようとする人には絶望を与えてくれます。
  • Programming Interfaces > Introduction to the C/C++ API
    • SQLite をどういう風に使うかがざっくりわかります。prepare() -> bind() して準備を行い、step() -> column() で 1 行ずつアクセスする流れみたいです。
  • Programming Interfaces > SQL Syntax
    • SQLite がサポートしている SQL 文が全部載っています。しかも、構文のダイアグラムが全て描かれているので SQL パーサーを書く時に超絶便利です。
    • ただ、四角と丸が何を表しているのかが説明されていないので最初は戸惑いました。僕は以下のように解釈してます。
      • 四角 : 別の構文 (詳細が別ページに用意されている)
      • 丸 + 大文字 : キーワード/予約語
      • 丸 + 記号 : 記号
      • 丸 + 小文字 : 多分そのページ内に説明されているなんらかのリテラル。こいつが曖昧で戸惑いました。
  • Programming Interfaces > DataTypes
    • SQLite のデータ型とその変換や比較についてです。面白情報が詰まってます。
  • Technical and Design Documentation > Architecture
    • SQLite がどのようなコンポーネントの組み合わせでできているかの概観が説明されています。わかりやすいです。
  • Technical and Design Documentation > SQLite File Format
    • これは必読です。SQLite のファイルフォーマットが全部載っています。SQLite を実装しない場合でも自分でファイルフォーマットを設計するときの参考になります。
    • 分量は多いですが、SELECT 文を実装するだけなら一部を読むだけで十分です。僕も必要ない部分はまだ読んでいません。

あとは目次にはないがドキュメント内のリンクを辿ることで到達することができるドキュメントもあります。まだ発掘できていないドキュメントも多々あるのだと思います。

最後に

いつも記事を書き終わった後に最初の書き出しを考えているのですが、この記事を書いて思いついたのが「困った時はドキュメント」でした。ただ、なんかすでに書いたことあるような気がしたので過去の記事を読んでみたらすでに使ってました。4年前の記事。懐かしい。

kawasin73.hatenablog.com