naoki86star

インターネットの片隅でなにかしら書いてみる

VoltDBネタ:ユーザー定義関数

voltdbは7.6になったとのことで、SQLのためにjavaでユーザー関数定義できるようになったそうです。前にc++でごりごり書いてみた*1ipアドレス変換関数を試してみましたよ
こんなすこし雑なコード例で

package function;
import org.voltdb.VoltProcedure.VoltAbortException;
import java.net.*:
public class ExampleFunction {
    public String inet_ntoa( long ip_int ) throws VoltAbortException {
        byte[] bytes = new byte[4];
        bytes[0] = (byte) ((ip_int & 0xff000000L)>>24);
        bytes[1] = (byte) ((ip_int & 0xff0000L)>>16);
        bytes[2] = (byte) ((ip_int & 0xff00L)>>8);
        bytes[3] = (byte) (ip_int & 0xffL);
        try {
            return InetAddress.getByAddress(bytes).getHostAddress();
        } catch (UnknownHostException e) {
            throw new VoltAbortException(e.toString());
        }
    }
}

こんな手順で

load classes hoge.jar;
CREATE FUNCTION fn_inet_ntoa FROM METHOD function.ExampleFunction.inet_ntoa;

ちゃんとうごきました

1> select fn_inet_ntoa(ip) from mytable limit 1;
C1
-------------
192.168.0.1

こっちのほうが簡単かつ安全に使えますです