はじめてのpull request。

いつもはgit format-patchでパッチ生成して、git send-emailで投げるのですが、Githubで管理しているOSSなので、初めてpull requestを使ってみました、というだけのお話です。

Mergeはや!

対象は先日ブログにも書いた TonicDNS なのですが、PowerDNSの他の管理ツール(PowerDNS GUI)と共存させる上で2つ問題になるうちの一つ、”MX, SRVレコード以外のレコード登録にpriorityが設定されるのはイケてない問題”は単純に実装上のバグなので 修正パッチを書いてpull requestを出したら 、1,2時間程度で すぐマージされて ビックリしました。まぁバグというより実装する上で優先度低いから後回しにしたという感じもします。MySQLをDBとしてPowerDNS使っている場合、MXレコードとSRVレコード以外にpriorityが設定されていてもPowerDNSは無視してくれるので。

NULL-safe operator便利ですね。

今回、一つのprepared statementを修正するだけで対応できないものかと調べていたら、MySQLだとNULL-safe operatorなるものがあるのを知りました。これを使えば、NULLの場合の判定を

SELECT * from hoge where comment <=> NULL;

とできるので、prepared statementで

SELECT * from hoge where comment <=> :comment;

という感じの書き方ができるのは便利ですね。ただし、TonicDNSはSQLiteもサポートしています。SQLiteはこの記法は使えません。この方法を使って、SQLiteとの互換性もちゃんと残しておくには、MySQLとSQLiteで処理を分けないといけません。SQLiteでは、

SELECT * from hoge where comment is NULL;

MySQLでは

SELECT * from hoge where comment = :comment

というのを、接続先のDBを判定して用意する方がめんどいので、結局レコードのTypeでprepared statementを変更することにしました。

TonicDNSの残タスク。

  • 使い方のドキュメントが無い
    • ユーザドキュメントを作る。これは先日のブログをベースにすれば良いですね
  • レコードの更新ができない
    • レコードの更新もできるようにする
  • MX, SRVレコード以外のレコード登録にpriorityが設定されるのはイケてない どね
  • ユーザ作成ができない
    • これはどうやって許可された人がアカウント作成できるようにするかを考えないとですね。
  • レコード更新してもSOAレコードのserialが更新されない
    • 更新できるようにする