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
こっちのほうが簡単かつ安全に使えますです