create()関数。名前の通り、テーブルをcreateする時に呼ばれる。MySQLのデータ・ディレクトリを覗いたことがあれば分かる通り、ストレージ・エンジンに関係なく、すべてのテーブルにはtablename.frmという拡張子のファイルが作成されて、ストレージ・エンジンに関係のないメタデータ、フィールド定義だったりとかはその中に格納される。
ストレージ・エンジンのcreate()は.frmファイルが作られた後で呼ばれ、ストレージ・エンジン固有のメタデータだったり、データそのものを格納する領域のセットアップを行なう。ファイルのopenは必要であれば別途open()が呼び出されるので、ここで行なう必要はない。要するに空のテーブルを一個作るのがcreate()の仕事だ。
MyISAMのようにテーブルごとに対応するファイル(tablename.MYDとか)を作成して、そこに(メタ)データをストアする場合、ファイル名を「tablename.拡張子」にして、bas_ext()関数が拡張子のリストを返すようにしておくと、テーブルが削除された際のファイルの削除はMySQL(デフォルトのhandler::delete_table())が勝手にやってくれる。InnoDBみたいに別のところにデータをストアするのであれば、別途delete_table()の実装が必要。
create()の引数は、const char *name, TABLE *table_arg, HA_CREATE_INFO *create_info の3つ。nameはテーブル名ではなく、ファイルが置かれるディレクトリへのパス+テーブル名。通常だったら"$data_dir/dbname/tablename"という文字列になる。これに拡張子つけて使え、ということだ。これはいいとして、table_argとcreate_info。TABLEの定義はtable.h、HA_CREATE_INFOの定義はhandler.hにあるので、それを見れば分かるけど、基本的にはcreate文のオプション(comment="XXX"とか、maxrows=XXXとか)がcreate_infoに格納されていて、それ以外のcreate文の本体に書かれたテーブル構造に関する情報(.frmに格納される情報)はtable_argに格納されている、と考えてOK。
オプションがこの時点ですでにcreate_infoにセットされていることから分かる通り、ストレージ・エンジンが独自のオプションを必要とする場合にはストレージ・エンジン以外のコード、パーサとかもいじらないといけない。初期のFederatedエンジンはそれが面倒くさかったのか、commentにオプションを記述するsyntaxだったりした。このへん、もうちょっとなんとかならんものかと思ったり。
閑話休題。class handlerはtable_argと同じTABLE *型のtableというメンバを持っていて、これを使えばtable_argに含まれている情報はcreate()以外のメンバ関数においていつでも取得できる。なので、これをcreate()で保存しておく必要はない。create_infoの方の情報は他に保存されているわけではないので、必要なら保存しておかないといけない。
空テーブルの作成が正常に終了したらcreate()は0を返す。そうでなければエラーコードを返す。MySQLのソースでの関数の戻り値の流儀は大体のところ、正常終了は0(FALSE)、そうでなければエラーコードだ。個人的には失敗した時にNULLとか返す奴らとかと混じった時に、条件判定の意味を取り違えがちなので、この流儀はそんなに好きじゃないんだけど。
事件前には、突然ひげを生やしたり、記者クラブ内のいすをけるなどの奇行も目立つようになっていたという。
ひげを生やすのは奇行なのか……
久しぶりに歯医者に行った。なんか差し歯がぐらぐらすんなーと思っていたら、差し歯の下が虫歯になって膿んだのだった。で、とりあえず差し歯を抜いて膿を出して、その後どうするか考える、とゆーのが今日の治療だったんだが。
麻酔2本打たれてオレは全然痛くないのに、医者が「痛くないですかー?」「痛いですよねー?」「もう少しだけ我慢してくださいねー」「大丈夫ですかー?」となぜか焦りまくってる。いや、それよりもなぜあなたはマイナスドライバーを手に持っているのですか?とツッコみたかったのだが。どう見てもあれはホームセンターで売ってる安物のマイナスドライバーだった。ひょっとしてオレはメカ沢なのか?みたいな。
で、差し歯抜いた後、やっぱり別に痛くもなかったんだが、うがいしたらすげー血だったので、口の中はそれなりにホラーなことになっていたのだろう。その後、歯茎切って膿を出すのに、やっぱり別に痛くもないのに、さらに麻酔を2本追加された。で、また「痛くないですかー?」「痛いですよねー?」。
いや、それよりもマイナスドライバー……。
子供の頃に読んだ本だが、急になんとなく読みたくなったので買ってみた。頭がいいんだか悪いんだかよくわかんない犬とその飼い主の一家の話。牧歌的でいい話だ。オレも近所の人間から二十二口径のライフルをプレゼントされてみたい。