9
9
import java .sql .SQLType ;
10
10
import java .sql .Timestamp ;
11
11
import java .util .Arrays ;
12
+ import java .util .HashMap ;
12
13
import java .util .Locale ;
13
14
import java .util .Map ;
14
15
import java .util .stream .Collectors ;
@@ -44,12 +45,63 @@ public enum DataType {
44
45
DATE ( JDBCType .TIMESTAMP , Timestamp .class , Long .BYTES , 24 , 24 );
45
46
// @formatter:on
46
47
48
+ public static final String ODBC_DATATYPE_PREFIX = "SQL_" ;
49
+
47
50
private static final Map <SQLType , DataType > jdbcToEs ;
51
+ private static final Map <String , DataType > odbcToEs ;
48
52
49
53
static {
50
54
jdbcToEs = Arrays .stream (DataType .values ())
51
55
.filter (dataType -> dataType != TEXT && dataType != NESTED && dataType != SCALED_FLOAT ) // Remove duplicates
52
56
.collect (Collectors .toMap (dataType -> dataType .jdbcType , dataType -> dataType ));
57
+
58
+ odbcToEs = new HashMap <>(36 );
59
+
60
+ // Numeric
61
+ odbcToEs .put ("SQL_BIT" , BOOLEAN );
62
+ odbcToEs .put ("SQL_TINYINT" , BYTE );
63
+ odbcToEs .put ("SQL_SMALLINT" , SHORT );
64
+ odbcToEs .put ("SQL_INTEGER" , INTEGER );
65
+ odbcToEs .put ("SQL_BIGINT" , LONG );
66
+ odbcToEs .put ("SQL_FLOAT" , FLOAT );
67
+ odbcToEs .put ("SQL_REAL" , FLOAT );
68
+ odbcToEs .put ("SQL_DOUBLE" , DOUBLE );
69
+ odbcToEs .put ("SQL_DECIMAL" , DOUBLE );
70
+ odbcToEs .put ("SQL_NUMERIC" , DOUBLE );
71
+
72
+ // String
73
+ odbcToEs .put ("SQL_GUID" , KEYWORD );
74
+ odbcToEs .put ("SQL_CHAR" , KEYWORD );
75
+ odbcToEs .put ("SQL_WCHAR" , KEYWORD );
76
+ odbcToEs .put ("SQL_VARCHAR" , TEXT );
77
+ odbcToEs .put ("SQL_WVARCHAR" , TEXT );
78
+ odbcToEs .put ("SQL_LONGVARCHAR" , TEXT );
79
+ odbcToEs .put ("SQL_WLONGVARCHAR" , TEXT );
80
+
81
+ // Binary
82
+ odbcToEs .put ("SQL_BINARY" , BINARY );
83
+ odbcToEs .put ("SQL_VARBINARY" , BINARY );
84
+ odbcToEs .put ("SQL_LONGVARBINARY" , BINARY );
85
+
86
+ // Date
87
+ odbcToEs .put ("SQL_DATE" , DATE );
88
+ odbcToEs .put ("SQL_TIME" , DATE );
89
+ odbcToEs .put ("SQL_TIMESTAMP" , DATE );
90
+
91
+ // Intervals - Currently Not Supported
92
+ odbcToEs .put ("SQL_INTERVAL_HOUR_TO_MINUTE" , UNSUPPORTED );
93
+ odbcToEs .put ("SQL_INTERVAL_HOUR_TO_SECOND" , UNSUPPORTED );
94
+ odbcToEs .put ("SQL_INTERVAL_MINUTE_TO_SECOND" , UNSUPPORTED );
95
+ odbcToEs .put ("SQL_INTERVAL_MONTH" , UNSUPPORTED );
96
+ odbcToEs .put ("SQL_INTERVAL_YEAR" , UNSUPPORTED );
97
+ odbcToEs .put ("SQL_INTERVAL_YEAR_TO_MONTH" , UNSUPPORTED );
98
+ odbcToEs .put ("SQL_INTERVAL_DAY" , UNSUPPORTED );
99
+ odbcToEs .put ("SQL_INTERVAL_HOUR" , UNSUPPORTED );
100
+ odbcToEs .put ("SQL_INTERVAL_MINUTE" , UNSUPPORTED );
101
+ odbcToEs .put ("SQL_INTERVAL_SECOND" , UNSUPPORTED );
102
+ odbcToEs .put ("SQL_INTERVAL_DAY_TO_HOUR" , UNSUPPORTED );
103
+ odbcToEs .put ("SQL_INTERVAL_DAY_TO_MINUTE" , UNSUPPORTED );
104
+ odbcToEs .put ("SQL_INTERVAL_DAY_TO_SECOND" , UNSUPPORTED );
53
105
}
54
106
55
107
/**
@@ -162,6 +214,9 @@ public static Class<?> fromJdbcTypeToJava(SQLType jdbcType) {
162
214
return jdbcToEs .get (jdbcType ).javaClass ();
163
215
}
164
216
217
+ public static DataType fromODBCType (String odbcType ) {
218
+ return odbcToEs .get (odbcType );
219
+ }
165
220
/**
166
221
* Creates returns DataType enum coresponding to the specified es type
167
222
* <p>
@@ -170,4 +225,4 @@ public static Class<?> fromJdbcTypeToJava(SQLType jdbcType) {
170
225
public static DataType fromEsType (String esType ) {
171
226
return DataType .valueOf (esType .toUpperCase (Locale .ROOT ));
172
227
}
173
- }
228
+ }
0 commit comments