Skip to content

Commit 32f96bb

Browse files
authored
[PECOBLR-388] added real, numeric, char and bigint support in setObject method (#818)
* added real, numeric, char and long support in setObject method * updated nextchangelog.md * added comments
1 parent 016dc1f commit 32f96bb

3 files changed

Lines changed: 19 additions & 3 deletions

File tree

NEXT_CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
-
1111

1212
### Fixed
13-
-
13+
- Fix: unsupported data types in `setObject(int,Object,int targetSqlType)` method in PreparedStatement
1414

1515
---
1616
*Note: When making changes, please add your change under the appropriate section with a brief description.*

src/main/java/com/databricks/jdbc/common/util/DatabricksTypeUtil.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public class DatabricksTypeUtil {
5353
public static final String ARRAY = "ARRAY";
5454
public static final String STRUCT = "STRUCT";
5555
public static final String VARIANT = "VARIANT";
56+
public static final String CHAR = "CHAR";
5657
private static final ArrayList<ColumnInfoTypeName> SIGNED_TYPES =
5758
new ArrayList<>(
5859
Arrays.asList(
@@ -63,10 +64,12 @@ public class DatabricksTypeUtil {
6364
ColumnInfoTypeName.LONG,
6465
ColumnInfoTypeName.SHORT));
6566

67+
// only used for PreparedStatement
6668
public static ColumnInfoTypeName getColumnInfoType(String typeName) {
6769
switch (typeName) {
70+
case DatabricksTypeUtil.CHAR:
6871
case DatabricksTypeUtil.STRING:
69-
return ColumnInfoTypeName.STRING;
72+
return ColumnInfoTypeName.STRING; // both char, string passed as STRING param
7073
case DatabricksTypeUtil.DATE:
7174
case DatabricksTypeUtil.TIMESTAMP:
7275
case DatabricksTypeUtil.TIMESTAMP_NTZ:
@@ -79,6 +82,7 @@ public static ColumnInfoTypeName getColumnInfoType(String typeName) {
7982
case DatabricksTypeUtil.INT:
8083
return ColumnInfoTypeName.INT;
8184
case DatabricksTypeUtil.BIGINT:
85+
case DatabricksTypeUtil.LONG:
8286
return ColumnInfoTypeName.LONG;
8387
case DatabricksTypeUtil.FLOAT:
8488
return ColumnInfoTypeName.FLOAT;
@@ -359,6 +363,8 @@ public static Nullable getNullableFromValue(Integer isNullable) {
359363
*/
360364
public static String getDatabricksTypeFromSQLType(int sqlType) {
361365
switch (sqlType) {
366+
case Types.CHAR:
367+
return DatabricksTypeUtil.CHAR;
362368
case Types.ARRAY:
363369
return ARRAY;
364370
case Types.BIGINT:
@@ -370,13 +376,15 @@ public static String getDatabricksTypeFromSQLType(int sqlType) {
370376
case Types.DATE:
371377
return DATE;
372378
case Types.DECIMAL:
373-
return DECIMAL;
379+
case Types.NUMERIC:
380+
return DECIMAL; // Databricks treats NUMERIC as DECIMAL
374381
case Types.BIT:
375382
case Types.BOOLEAN:
376383
return BOOLEAN;
377384
case Types.DOUBLE:
378385
return DOUBLE;
379386
case Types.FLOAT:
387+
case Types.REAL: // REAL is float(24)
380388
return FLOAT;
381389
case Types.INTEGER:
382390
return INT;

src/test/java/com/databricks/jdbc/common/util/DatabricksTypeUtilTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ void testGetDatabricksTypeFromSQLType() {
158158
DatabricksTypeUtil.INT, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.INTEGER));
159159
assertEquals(
160160
DatabricksTypeUtil.STRING, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.VARCHAR));
161+
assertEquals(
162+
DatabricksTypeUtil.CHAR, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.CHAR));
161163
assertEquals(
162164
DatabricksTypeUtil.STRING,
163165
DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.LONGVARCHAR));
@@ -178,6 +180,8 @@ void testGetDatabricksTypeFromSQLType() {
178180
assertEquals(
179181
DatabricksTypeUtil.BINARY,
180182
DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.LONGVARBINARY));
183+
assertEquals(
184+
DatabricksTypeUtil.DECIMAL, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.NUMERIC));
181185
assertEquals(
182186
DatabricksTypeUtil.DATE, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.DATE));
183187
assertEquals(
@@ -188,6 +192,8 @@ void testGetDatabricksTypeFromSQLType() {
188192
DatabricksTypeUtil.DOUBLE, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.DOUBLE));
189193
assertEquals(
190194
DatabricksTypeUtil.FLOAT, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.FLOAT));
195+
assertEquals(
196+
DatabricksTypeUtil.FLOAT, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.REAL));
191197
assertEquals(
192198
DatabricksTypeUtil.TIMESTAMP_NTZ,
193199
DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.TIMESTAMP));
@@ -234,6 +240,7 @@ void testInferDatabricksType() {
234240
"BYTE, BYTE",
235241
"INT, INT",
236242
"BIGINT, LONG",
243+
"LONG, LONG",
237244
"FLOAT, FLOAT",
238245
"DOUBLE, DOUBLE",
239246
"BINARY, BINARY",
@@ -244,6 +251,7 @@ void testInferDatabricksType() {
244251
"VOID, NULL",
245252
"NULL, NULL",
246253
"MAP, MAP",
254+
"CHAR, STRING",
247255
"UNKNOWN, USER_DEFINED_TYPE"
248256
})
249257
public void testGetColumnInfoType(String inputTypeName, String expectedTypeName) {

0 commit comments

Comments
 (0)