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