3
import java.math.BigDecimal;
4
import java.sql.ResultSetMetaData;
5
import java.sql.SQLException;
7
public class NativeUDFCallback implements UDFCallback {
9
private static final int MYSQL_TYPE_STRING = 254;
11
private static final int RESULT_INDEX = -1;
13
private final long that;
15
public NativeUDFCallback(long ptr) {
19
public long getPointer() {
23
public int getArgumentCount() {
24
int rv = get_argument_count(that);
26
// .println("JAVA: NativeUDFCallback.getArgumentCount() = " + rv);
30
public int getArgumentType(int argIndex) {
31
// System.err.println("JAVA: NativeUDFCallback.getArgumentType");
32
return get_argument_type(that, argIndex);
35
public boolean isArgumentNull(int argIndex) {
36
boolean rv = is_argument_null(that, argIndex);
37
// System.err.println("JAVA: NativeUDFCallback.isArgumentNull(" +
38
// argIndex + ") = " + rv);
42
public void setNullArgument(int idx) {
43
// System.err.println("JAVA: NativeUDFCallback.setNullArgument");
44
set_null_argument(that, idx);
47
public long getLongArgument(int argIndex) {
48
// System.err.println("JAVA: NativeUDFCallback.getLongArgument");
49
return get_long_argument(that, argIndex);
52
public void setLongArgument(int idx, long value) {
53
// System.err.println("JAVA: NativeUDFCallback.setLongArgument");
54
set_long_argument(that, idx, value);
57
public String getStringArgument(int argIndex) {
58
// System.err.println("JAVA: NativeUDFCallback.getStringArgument");
59
return get_string_argument(that, argIndex);
62
public void setStringArgument(int idx, String value) {
63
// System.err.println("JAVA: NativeUDFCallback.setStringArgument");
64
set_string_argument(that, idx, value);
67
public double getDoubleArgument(int argIndex) {
68
// System.err.println("JAVA: NativeUDFCallback.getDoubleArgument");
69
return get_double_argument(that, argIndex);
72
public void setDoubleArgument(int idx, double value) {
73
// System.err.println("JAVA: NativeUDFCallback.setDoubleArgument");
74
set_double_argument(that, idx, value);
77
public BigDecimal getBigDecimalArgument(int argIndex) {
78
// System.err.println("JAVA: NativeUDFCallback.getBigDecimalArgument");
79
return new BigDecimal(get_big_decimal_argument(that, argIndex));
82
public void setBigDecimalArgument(int idx, BigDecimal value) {
83
// System.err.println("JAVA: NativeUDFCallback.setBigDecimalArgument");
84
set_big_decimal_argument(that, idx, value.toString());
87
public void storeResultNull() {
88
// System.err.println("JAVA: NativeUDFCallback.storeResultNull");
89
set_null_argument(that, RESULT_INDEX);
92
public void storeResultLong(long value) {
93
// System.err.println("JAVA: NativeUDFCallback.storeResultLong");
94
set_long_argument(that, RESULT_INDEX, value);
97
public void storeResultString(String value) {
98
// System.err.println("JAVA: NativeUDFCallback.storeResultString");
99
set_string_argument(that, RESULT_INDEX, value);
102
public void storeResultDouble(double value) {
103
// System.err.println("JAVA: NativeUDFCallback.storeResultDouble");
104
set_double_argument(that, RESULT_INDEX, value);
107
public void storeResultBigDecimal(BigDecimal value) {
108
// System.err.println("JAVA: NativeUDFCallback.storeResultBigDecimal");
109
set_big_decimal_argument(that, RESULT_INDEX, value.toString());
112
public void storeResultResultSet(java.sql.ResultSet rs) {
113
// System.err.println("JAVA: NativeUDFCallback.storeResultResultSet");
116
final ResultSetMetaData metaData = rs.getMetaData();
117
colcount = metaData.getColumnCount();
118
for (int i = 1; i <= colcount; i++) {
119
String name = metaData.getColumnLabel(i);
120
int width = metaData.getColumnDisplaySize(i);
121
int mysql_type = MYSQL_TYPE_STRING;
124
row_field(that, name, mysql_type, width, precision);
128
for (int i = 1; i <= colcount; i++) {
129
storeResultString(rs.getString(i));
134
} catch (SQLException e) {
135
throw new UDFException(e);
140
} catch (Exception e) {
148
private static native int get_argument_count(long that);
150
private static native int get_argument_type(long that, int arg_index);
152
private static native boolean is_argument_null(long that, int arg_index);
154
private static native void set_null_argument(long that, int idx);
156
private static native long get_long_argument(long that, int arg_index);
158
private static native void set_long_argument(long that, int idx, long value);
160
private static native String get_string_argument(long that, int arg_index);
162
private static native void set_string_argument(long that, int idx,
165
private static native double get_double_argument(long that, int arg_index);
167
private static native void set_double_argument(long that, int idx,
170
private static native String get_big_decimal_argument(long that,
173
private static native void set_big_decimal_argument(long that, int idx,
176
/* The following are for result sets */
178
/* this method is called for each column in the result set to be constructed */
179
private static native int row_field(long that, String column_name,
180
int field_type, int column_width, int precision);
182
/* call row_prepare() before filling in the row */
183
private static native int row_prepare(long that);
185
/* call store for each column value */
187
/* call row_send for each row */
188
private static native int row_send(long that);
190
/* call row_send_eof after the last row */
191
private static native int row_send_eof(long that);