blob: 840e218e4c160dc30fb47ec30a18e227661dd8df [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.calcite.avatica;
import org.apache.calcite.avatica.util.ByteString;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URL;
import java.sql.Array;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.NClob;
import java.sql.PreparedStatement;
import java.sql.Ref;
import java.sql.RowId;
import java.sql.Struct;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** Extends the information in {@link java.sql.Types}.
*
* <p>The information in the following conversions tables
* (from the JDBC 4.1 specification) is held in members of this class.
*
* <p>Table B-1: JDBC Types Mapped to Java Types
*
* <pre>
* JDBC Type Java Type
* ============= =========================
* CHAR String
* VARCHAR String
* LONGVARCHAR String
* NUMERIC java.math.BigDecimal
* DECIMAL java.math.BigDecimal
* BIT boolean
* BOOLEAN boolean
* TINYINT byte
* SMALLINT short
* INTEGER int
* BIGINT long
* REAL float
* FLOAT double
* DOUBLE double
* BINARY byte[]
* VARBINARY byte[]
* LONGVARBINARY byte[]
* DATE java.sql.Date
* TIME java.sql.Time
* TIMESTAMP java.sql.Timestamp
* CLOB java.sql.Clob
* BLOB java.sql.Blob
* ARRAY java.sql.Array
* DISTINCT mapping of underlying type
* STRUCT java.sql.Struct
* REF java.sql.Ref
* DATALINK java.net.URL
* JAVA_OBJECT underlying Java class
* ROWID java.sql.RowId
* NCHAR String
* NVARCHAR String
* LONGNVARCHAR String
* NCLOB java.sql.NClob
* SQLXML java.sql.SQLXML
* </pre>
*
* <p>Table B-2: Standard Mapping from Java Types to JDBC Types
*
* <pre>
* Java Type JDBC Type
* ==================== ==============================================
* String CHAR, VARCHAR, LONGVARCHAR, NCHAR, NVARCHAR or
* LONGNVARCHAR
* java.math.BigDecimal NUMERIC
* boolean BIT or BOOLEAN
* byte TINYINT
* short SMALLINT
* int INTEGER
* long BIGINT
* float REAL
* double DOUBLE
* byte[] BINARY, VARBINARY, or LONGVARBINARY
* java.sql.Date DATE
* java.sql.Time TIME
* java.sql.Timestamp TIMESTAMP
* java.sql.Clob CLOB
* java.sql.Blob BLOB
* java.sql.Array ARRAY
* java.sql.Struct STRUCT
* java.sql.Ref REF
* java.net.URL DATALINK
* Java class JAVA_OBJECT
* java.sql.RowId ROWID
* java.sql.NClob NCLOB
* java.sql.SQLXML SQLXML
* </pre>
*
* <p>TABLE B-3: Mapping from JDBC Types to Java Object Types
*
* <pre>
* JDBC Type Java Object Type
* ============= ======================
* CHAR String
* VARCHAR String
* LONGVARCHAR String
* NUMERIC java.math.BigDecimal
* DECIMAL java.math.BigDecimal
* BIT Boolean
* BOOLEAN Boolean
* TINYINT Integer
* SMALLINT Integer
* INTEGER Integer
* BIGINT Long
* REAL Float
* FLOAT Double
* DOUBLE Double
* BINARY byte[]
* VARBINARY byte[]
* LONGVARBINARY byte[]
* DATE java.sql.Date
* TIME java.sql.Time
* TIMESTAMP java.sql.Timestamp
* DISTINCT Object type of underlying type
* CLOB java.sql.Clob
* BLOB java.sql.Blob
* ARRAY java.sql.Array
* STRUCT java.sql.Struct or java.sql.SQLData
* REF java.sql.Ref
* DATALINK java.net.URL
* JAVA_OBJECT underlying Java class
* ROWID java.sql.RowId
* NCHAR String
* NVARCHAR String
* LONGNVARCHAR String
* NCLOB java.sql.NClob
* SQLXML java.sql.SQLXML
* </pre>
*
* <p>TABLE B-4: Mapping from Java Object Types to JDBC Types
*
* <pre>
* Java Object Type JDBC Type
* ==================== ===========================================
* String CHAR, VARCHAR, LONGVARCHAR, NCHAR, NVARCHAR
* or LONGNVARCHAR
* java.math.BigDecimal NUMERIC
* Boolean BIT or BOOLEAN
* Byte TINYINT
* Short SMALLINT
* Integer INTEGER
* Long BIGINT
* Float REAL
* Double DOUBLE
* byte[] BINARY, VARBINARY, or LONGVARBINARY
* java.math.BigInteger BIGINT
* java.sql.Date DATE
* java.sql.Time TIME
* java.sql.Timestamp TIMESTAMP
* java.sql.Clob CLOB
* java.sql.Blob BLOB
* java.sql.Array ARRAY
* java.sql.Struct STRUCT
* java.sql.Ref REF
* java.net.URL DATALINK
* Java class JAVA_OBJECT
* java.sql.RowId ROWID
* java.sql.NClob NCLOB
* java.sql.SQLXML SQLXML
* java.util.Calendar TIMESTAMP
* java.util.Date TIMESTAMP
* </pre>
*
* <p><a id="B5">TABLE B-5</a>: Conversions performed by {@code setObject} and
* {@code setNull} between Java object types and target JDBC types
* <!--
* CHECKSTYLE: OFF
* -->
* <pre>
* T S I B R F D D N B B C V L B V L D T T A B C S R D J R N N L N S
* I M N I E L O E U I O H A O I A O A I I R L L T E A A O C V O C Q
* N A T G A O U C M T O A R N N R N T M M R O O R F T V W H A N L L
* Y L E I L A B I E L R C G A B G E E E A B B U A A I A R G O X
* I L G N T L M R E H V R I V E S Y C L _ D R C N B M
* N I E T E A I A A A Y N A T T I O H V L
* T N R L C N R R A R A N B A A
* T C R B M K J R R
* H Y I P C
* Java type
* ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* String x x x x x x x x x x x x x x x x x x x x . . . . . . . . x x x . .
* java.math.BigDecimal x x x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* Boolean x x x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* Byte x x x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* Short x x x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* Integer x x x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* Long x x x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* Float x x x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* Double x x x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* byte[] . . . . . . . . . . . . . . x x x . . . . . . . . . . . . . . . .
* java.math.BigInteger . . . x . . . . . . . x x x . . . . . . . . . . . . . . . . . . .
* java.sql.Date . . . . . . . . . . . x x x . . . x . x . . . . . . . . . . . . .
* java.sql.Time . . . . . . . . . . . x x x . . . . x x . . . . . . . . . . . . .
* java.sql.Timestamp . . . . . . . . . . . x x x . . . x x x . . . . . . . . . . . . .
* java.sql.Array . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . .
* java.sql.Blob . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . .
* java.sql.Clob . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . .
* java.sql.Struct . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . .
* java.sql.Ref . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . .
* java.net.URL . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . .
* Java class . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . .
* java.sql.Rowid . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . .
* java.sql.NClob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x .
* java.sql.SQLXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x
* java.util.Calendar . . . . . . . . . . . x x x . . . x x x . . . . . . . . . . . . .
* java.util.Date . . . . . . . . . . . x x x . . . x x x . . . . . . . . . . . . .
* </pre>
* <!--
* CHECKSTYLE: ON
* -->
*
* <p><a id="B6">TABLE B-6</a>: Use of {@code ResultSet} getter methods to
* retrieve JDBC data types
* <!--
* CHECKSTYLE: OFF
* -->
* <pre>
* T S I B R F D D N B B C V L B V L D T T C B A R D S J R N N L N S
* I M N I E L O E U I O H A O I A O A I I L L R E A T A O C V O C Q
* N A T G A O U C M T O A R N N R N T M M O O R F T R V W H A N L L
* Y L E I L A B I E L R C G A B G E E E B B A A U A I A R G O X
* I L G N T L M R E H V R I V E S Y L C _ D R C N B M
* N I E T E A I A A A Y N A T I T O H V L
* T N R L C N R R A R A N B A A
* T C R B M K J R R
* H Y I P C
* Java type
* ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* getByte X x x x x x x x x x x x x . . . . . . . . . . . . . . x . . . . .
* getShort x X x x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* getInt x x X x x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* getLong x x x X x x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* getFloat x x x x X x x x x x x x x . . . . . . . . . . . . . . . . . . . .
* getDouble x x x x x X X x x x x x x . . . . . . . . . . . . . . . . . . . .
* getBigDecimal x x x x x x x X X x x x x . . . . . . . . . . . . . . . . . . . .
* getBoolean x x x x x x x x x X x x x . . . . . . . . . . . . . . . . . . . .
* getString x x x x x x x x x x x X X x x x x x x x . . . . x . . . x x x . .
* getNString x x x x x x x x x x x x x x x x x x x x . . . . x . . . X X x . .
* getBytes . . . . . . . . . . . . . . X X x . . . . . . . . . . . . . . . .
* getDate . . . . . . . . . . . x x x . . . X . x . . . . . . . . . . . . .
* getTime . . . . . . . . . . . x x x . . . . X x . . . . . . . . . . . . .
* getTimestamp . . . . . . . . . . . x x x . . . x x X . . . . . . . . . . . x .
* getAsciiStream . . . . . . . . . . . x x X x x x . . . x . . . . . . . . . . . x
* getBinaryStream . . . . . . . . . . . . . . x x X . . . . x . . . . . . . . . x x
* getCharacterStream . . . . . . . . . . . x x X x x x . . . x . . . . . . . x x x x x
* getNCharacterStream . . . . . . . . . . . x x x x x x . . . x . . . . . . . x x X x x
* getClob . . . . . . . . . . . . . . . . . . . . X . . . . . . . . . . x .
* getNClob . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . X .
* getBlob . . . . . . . . . . . . . . . . . . . . . X . . . . . . . . . . .
* getArray . . . . . . . . . . . . . . . . . . . . . . X . . . . . . . . . .
* getRef . . . . . . . . . . . . . . . . . . . . . . . X . . . . . . . . .
* getURL . . . . . . . . . . . . . . . . . . . . . . . . X . . . . . . . .
* getObject x x x x x x x x x x x x x x x x x x x x x x x x x X X x x x x x x
* getRowId . . . . . . . . . . . . . . . . . . . . . . . . . . . X . . . . .
* getSQLXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X
* </pre>
* <!--
* CHECKSTYLE: ON
* -->
*/
public enum SqlType {
BIT(Types.BIT, boolean.class),
BOOLEAN(Types.BOOLEAN, boolean.class),
TINYINT(Types.TINYINT, byte.class),
SMALLINT(Types.SMALLINT, short.class),
INTEGER(Types.INTEGER, int.class),
BIGINT(Types.BIGINT, long.class),
NUMERIC(Types.NUMERIC, BigDecimal.class),
DECIMAL(Types.DECIMAL, BigDecimal.class),
FLOAT(Types.FLOAT, double.class),
REAL(Types.REAL, float.class),
DOUBLE(Types.DOUBLE, double.class),
DATE(Types.DATE, java.sql.Date.class, int.class),
TIME(Types.TIME, Time.class, int.class),
TIMESTAMP(Types.TIMESTAMP, Timestamp.class, long.class),
INTERVAL_YEAR_MONTH(Types.OTHER, Boolean.class),
INTERVAL_DAY_TIME(Types.OTHER, Boolean.class),
CHAR(Types.CHAR, String.class),
VARCHAR(Types.VARCHAR, String.class),
LONGVARCHAR(Types.LONGVARCHAR, String.class),
BINARY(Types.BINARY, byte[].class, ByteString.class, String.class),
VARBINARY(Types.VARBINARY, byte[].class, ByteString.class, String.class),
LONGVARBINARY(Types.LONGVARBINARY, byte[].class, ByteString.class,
String.class),
NULL(Types.NULL, Void.class),
ANY(Types.JAVA_OBJECT, Object.class),
SYMBOL(Types.OTHER, Object.class),
MULTISET(Types.ARRAY, List.class),
ARRAY(Types.ARRAY, Array.class),
BLOB(Types.BLOB, Blob.class),
CLOB(Types.CLOB, Clob.class),
SQLXML(Types.SQLXML, java.sql.SQLXML.class),
MAP(Types.OTHER, Map.class),
DISTINCT(Types.DISTINCT, Object.class),
STRUCT(Types.STRUCT, Struct.class),
REF(Types.REF, Ref.class),
DATALINK(Types.DATALINK, URL.class),
JAVA_OBJECT(Types.JAVA_OBJECT, Object.class),
ROWID(Types.ROWID, RowId.class),
NCHAR(Types.NCHAR, String.class),
NVARCHAR(Types.NVARCHAR, String.class),
LONGNVARCHAR(Types.LONGNVARCHAR, String.class),
NCLOB(Types.NCLOB, NClob.class),
ROW(Types.STRUCT, Object.class),
OTHER(Types.OTHER, Object.class),
CURSOR(2012, Object.class),
TIME_WITH_TIMEZONE(2013, String.class),
TIMESTAMP_WITH_TIMEZONE(2014, String.class),
COLUMN_LIST(Types.OTHER + 2, Object.class);
/** Type id as appears in {@link java.sql.Types},
* e.g. {@link java.sql.Types#INTEGER}. */
public final int id;
/** Default Java type for this SQL type, as described in table B-1. */
public final Class clazz;
/** Class used internally in Calcite to represent instances of this type. */
public final Class internal;
/** Class used to serialize values of this type as JSON. */
public final Class serial;
private static final Map<Integer, SqlType> BY_ID = new HashMap<>();
static {
for (SqlType sqlType : values()) {
BY_ID.put(sqlType.id, sqlType);
}
}
SqlType(int id, Class clazz, Class internal, Class serial) {
this.id = id;
this.clazz = clazz;
this.internal = internal;
this.serial = serial;
}
SqlType(int id, Class clazz, Class internal) {
this(id, clazz, internal, internal);
}
SqlType(int id, Class clazz) {
this(id, clazz, clazz, clazz);
}
public static SqlType valueOf(int type) {
final SqlType sqlType = BY_ID.get(type);
if (sqlType == null) {
throw new IllegalArgumentException("Unknown SQL type " + type);
}
return sqlType;
}
/** Returns the boxed type. */
public Class boxedClass() {
return AvaticaUtils.box(clazz);
}
/** Returns the entries in JDBC table B-5. */
public static Iterable<Map.Entry<Class, SqlType>> getSetConversions() {
final ArrayList<Map.Entry<Class, SqlType>> list = new ArrayList<>();
for (Map.Entry<Class, EnumSet<SqlType>> entry : SET_LIST.entrySet()) {
for (SqlType sqlType : entry.getValue()) {
list.add(new AbstractMap.SimpleEntry<>(entry.getKey(), sqlType));
}
}
return list;
}
public static final Map<Class, EnumSet<SqlType>> SET_LIST;
public static final Map<Method, EnumSet<SqlType>> GET_LIST;
static {
SET_LIST = new HashMap<>();
GET_LIST = new HashMap<>();
EnumSet<SqlType> numericTypes = EnumSet.of(TINYINT, SMALLINT, INTEGER,
BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, BOOLEAN);
Class[] numericClasses = {
BigDecimal.class, Boolean.class, Byte.class, Short.class, Integer.class,
Long.class, Float.class, Double.class
};
EnumSet<SqlType> charTypes = EnumSet.of(CHAR, VARCHAR, LONGVARCHAR);
EnumSet<SqlType> ncharTypes = EnumSet.of(NCHAR, NVARCHAR, LONGNVARCHAR);
EnumSet<SqlType> binaryTypes = EnumSet.of(BINARY, VARBINARY, LONGVARBINARY);
EnumSet<SqlType> dateTimeTypes = EnumSet.of(DATE, TIME, TIMESTAMP);
final EnumSet<SqlType> numericCharTypes = concat(numericTypes, charTypes);
SET_LIST.put(String.class,
concat(numericCharTypes, binaryTypes, dateTimeTypes, ncharTypes));
for (Class clazz : numericClasses) {
SET_LIST.put(clazz, numericCharTypes);
}
SET_LIST.put(byte[].class, binaryTypes);
SET_LIST.put(BigInteger.class,
EnumSet.of(BIGINT, CHAR, VARCHAR, LONGVARCHAR));
SET_LIST.put(java.sql.Date.class,
concat(charTypes, EnumSet.of(DATE, TIMESTAMP)));
SET_LIST.put(Time.class,
concat(charTypes, EnumSet.of(TIME, TIMESTAMP)));
SET_LIST.put(Timestamp.class,
concat(charTypes, EnumSet.of(DATE, TIME, TIMESTAMP)));
SET_LIST.put(Array.class, EnumSet.of(ARRAY));
SET_LIST.put(Blob.class, EnumSet.of(BLOB));
SET_LIST.put(Clob.class, EnumSet.of(CLOB));
SET_LIST.put(Struct.class, EnumSet.of(STRUCT));
SET_LIST.put(Ref.class, EnumSet.of(REF));
SET_LIST.put(URL.class, EnumSet.of(DATALINK));
SET_LIST.put(Class.class, EnumSet.of(JAVA_OBJECT));
SET_LIST.put(RowId.class, EnumSet.of(ROWID));
SET_LIST.put(NClob.class, EnumSet.of(NCLOB));
SET_LIST.put(java.sql.SQLXML.class, EnumSet.of(SQLXML));
SET_LIST.put(Calendar.class,
concat(charTypes, EnumSet.of(DATE, TIME, TIMESTAMP)));
SET_LIST.put(java.util.Date.class,
concat(charTypes, EnumSet.of(DATE, TIME, TIMESTAMP)));
EnumSet<Method> numericMethods =
EnumSet.of(Method.GET_BYTE, Method.GET_SHORT, Method.GET_INT,
Method.GET_LONG, Method.GET_FLOAT, Method.GET_DOUBLE,
Method.GET_BIG_DECIMAL, Method.GET_BOOLEAN);
for (Method method : numericMethods) {
GET_LIST.put(method, numericCharTypes);
}
GET_LIST.put(Method.GET_BYTE, EnumSet.of(ROWID));
for (Method method : EnumSet.of(Method.GET_STRING, Method.GET_N_STRING)) {
GET_LIST.put(method,
concat(numericCharTypes, binaryTypes, dateTimeTypes,
EnumSet.of(DATALINK), ncharTypes));
}
GET_LIST.put(Method.GET_BYTES, binaryTypes);
GET_LIST.put(Method.GET_DATE,
concat(charTypes, EnumSet.of(DATE, TIMESTAMP)));
GET_LIST.put(Method.GET_TIME,
concat(charTypes, EnumSet.of(TIME, TIMESTAMP)));
GET_LIST.put(Method.GET_TIMESTAMP,
concat(charTypes, EnumSet.of(DATE, TIME, TIMESTAMP)));
GET_LIST.put(Method.GET_ASCII_STREAM,
concat(charTypes, binaryTypes, EnumSet.of(CLOB, NCLOB)));
GET_LIST.put(Method.GET_BINARY_STREAM,
concat(binaryTypes, EnumSet.of(BLOB, SQLXML)));
GET_LIST.put(Method.GET_CHARACTER_STREAM,
concat(charTypes, binaryTypes, ncharTypes,
EnumSet.of(CLOB, NCLOB, SQLXML)));
GET_LIST.put(Method.GET_N_CHARACTER_STREAM,
concat(
charTypes, binaryTypes, ncharTypes, EnumSet.of(CLOB, NCLOB, SQLXML)));
GET_LIST.put(Method.GET_CLOB, EnumSet.of(CLOB, NCLOB));
GET_LIST.put(Method.GET_N_CLOB, EnumSet.of(CLOB, NCLOB));
GET_LIST.put(Method.GET_BLOB, EnumSet.of(BLOB));
GET_LIST.put(Method.GET_ARRAY, EnumSet.of(ARRAY));
GET_LIST.put(Method.GET_REF, EnumSet.of(REF));
GET_LIST.put(Method.GET_BLOB, EnumSet.of(BLOB));
GET_LIST.put(Method.GET_URL, EnumSet.of(DATALINK));
GET_LIST.put(Method.GET_OBJECT, EnumSet.allOf(SqlType.class));
GET_LIST.put(Method.GET_ROW_ID, EnumSet.of(ROWID));
GET_LIST.put(Method.GET_SQLXML, EnumSet.of(SQLXML));
}
@SafeVarargs
private static <E extends Enum<E>> EnumSet<E> concat(Collection<E>... ess) {
final List<E> list = new ArrayList<>();
for (Collection<E> es : ess) {
list.addAll(es);
}
return EnumSet.copyOf(list);
}
/** Returns whether {@link java.sql.PreparedStatement#setObject} and
* {@link PreparedStatement#setNull} can assign a value of a particular class
* to a column of a particular SQL type.
*
* <p>The JDBC standard describes the mapping in table <a href="#B5">B-5</a>.
*/
public static boolean canSet(Class aClass, SqlType sqlType) {
final EnumSet<SqlType> sqlTypes = SET_LIST.get(aClass);
return sqlTypes != null && sqlTypes.contains(sqlType);
}
/** Returns whether {@link java.sql.ResultSet#getInt(int)} and similar methods
* can convert a value to a particular SQL type.
*
* <p>The JDBC standard describes the mapping in table <a href="#B6">B-6</a>.
*/
public static boolean canGet(Method method, SqlType sqlType) {
final EnumSet<SqlType> sqlTypes = GET_LIST.get(method);
return sqlTypes != null && sqlTypes.contains(sqlType);
}
/** Getter methods in {@link java.sql.ResultSet}. */
public enum Method {
GET_BYTE("getByte"),
GET_SHORT("getShort"),
GET_INT("getInt"),
GET_LONG("getLong"),
GET_FLOAT("getFloat"),
GET_DOUBLE("getDouble"),
GET_BIG_DECIMAL("getBigDecimal"),
GET_BOOLEAN("getBoolean"),
GET_STRING("getString"),
GET_N_STRING("getNString"),
GET_BYTES("getBytes"),
GET_DATE("getDate"),
GET_TIME("getTime"),
GET_TIMESTAMP("getTimestamp"),
GET_ASCII_STREAM("getAsciiStream"),
GET_BINARY_STREAM("getBinaryStream"),
GET_CHARACTER_STREAM("getCharacterStream"),
GET_N_CHARACTER_STREAM("getNCharacterStream"),
GET_CLOB("getClob"),
GET_N_CLOB("getNClob"),
GET_BLOB("getBlob"),
GET_ARRAY("getArray"),
GET_REF("getRef"),
GET_URL("getURL"),
GET_OBJECT("getObject"),
GET_ROW_ID("getRowId"),
GET_SQLXML("getSQLXML");
public final String methodName;
Method(String methodName) {
this.methodName = methodName;
}
}
}
// End SqlType.java