ストレージエンジンを参考にしながら、超単純なファイルの入出力をするストレージエンジンを実装します。実装する機能としては、ざっくりと以下のような感じです。そのハンドラを生成しなければいけません。ストレージエンジンでは既に最低限の実装はされているのですが、一応その辺の流れを先に見ておきます。もこのタイミングで生成・初期化されることになります。構造体の色々なメンバを設定したりしますが、特に大事なのは以下のハンドラ生成関数の登録です。実際にハンドラを生成する関数です。呼ばれることになっています。使ってくださいという指定になります。中身を見てみると、以下のようにただコンストラクタを呼んでオブジェクトを生成しているだけだとわかります。初期化関数内でちゃんとその関数を登録してあげましょうということです。テーブルの作成(CREATE)ようやくコーディング。文を処理する機能を作ります。今回作るのはファイルへの入出力をするストレージエンジンなので、データの保存先はファイルです。やるべきことは、テーブルデータ用のファイルを作成することです。開発では直接素のシステムコールは呼ばずにラッパーを使うようです。通常のシステムコールに比べて一つ引数が増えていますが、これは処理に失敗した場合の動作などを指定するものです。ちなみに、「my_○○系」を更にラップした「mysql_file_○○」という関数(マクロ)もあります。いうデータベース動作の計測用に用意されたものです。計測オプションが有効になっているとこれらの計測系プログラムがシステムコールレベルの動作まで計測してくれるっぽいですね(勿論パフォーマンスに影響ありでしょうが)。反映させてから、以下のコマンドを送ってみます。いうファイルができているはずです。ちなみに上の実装は、テーブル作成時のオプション等はガン無視する仕様になっています。今回はそこまで作り込みませんが、しっかりとしたストレージエンジンを作るのであれば、そういったオプションへの対応もこの関数内で必要になってくるでしょう。その場合は、テーブル作成に関する情報が入っている第三引数をよしなに捌く感じになりそうです。テーブルのオープンテーブルデータを操作する機能を実装する前に、それらの機能の前処理として必要になるテーブルのオープンを実装します。テーブルのオープンを担当する関数です。作成されたデータファイルを開いて、ファイルディスクリプタを取得することをオープン処理とします。それを保持する変数を用意しておきます。文での行読み取りなんかで使います。オープンするテーブルの名前が入ってきます。