Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion NEXT_CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
-

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

---
*Note: When making changes, please add your change under the appropriate section with a brief description.*
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public class DatabricksTypeUtil {
public static final String ARRAY = "ARRAY";
public static final String STRUCT = "STRUCT";
public static final String VARIANT = "VARIANT";
public static final String CHAR = "CHAR";
private static final ArrayList<ColumnInfoTypeName> SIGNED_TYPES =
new ArrayList<>(
Arrays.asList(
Expand All @@ -63,10 +64,12 @@ public class DatabricksTypeUtil {
ColumnInfoTypeName.LONG,
ColumnInfoTypeName.SHORT));

// only used for PreparedStatement
public static ColumnInfoTypeName getColumnInfoType(String typeName) {
switch (typeName) {
case DatabricksTypeUtil.CHAR:
case DatabricksTypeUtil.STRING:
return ColumnInfoTypeName.STRING;
return ColumnInfoTypeName.STRING; // both char, string passed as STRING param
case DatabricksTypeUtil.DATE:
case DatabricksTypeUtil.TIMESTAMP:
case DatabricksTypeUtil.TIMESTAMP_NTZ:
Expand All @@ -79,6 +82,7 @@ public static ColumnInfoTypeName getColumnInfoType(String typeName) {
case DatabricksTypeUtil.INT:
return ColumnInfoTypeName.INT;
case DatabricksTypeUtil.BIGINT:
case DatabricksTypeUtil.LONG:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we add for REAL also?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not needed, because we first convert java.Sql.Types into DatabricksType and then into columnInfoType. So, real is already converted to float in getDatabricksTypeFromSQLType, which is passed to getColumnInfoType.

return ColumnInfoTypeName.LONG;
case DatabricksTypeUtil.FLOAT:
return ColumnInfoTypeName.FLOAT;
Expand Down Expand Up @@ -359,6 +363,8 @@ public static Nullable getNullableFromValue(Integer isNullable) {
*/
public static String getDatabricksTypeFromSQLType(int sqlType) {
switch (sqlType) {
case Types.CHAR:
return DatabricksTypeUtil.CHAR;
case Types.ARRAY:
return ARRAY;
case Types.BIGINT:
Expand All @@ -370,13 +376,15 @@ public static String getDatabricksTypeFromSQLType(int sqlType) {
case Types.DATE:
return DATE;
case Types.DECIMAL:
return DECIMAL;
case Types.NUMERIC:
return DECIMAL; // Databricks treats NUMERIC as DECIMAL
case Types.BIT:
case Types.BOOLEAN:
return BOOLEAN;
case Types.DOUBLE:
return DOUBLE;
case Types.FLOAT:
case Types.REAL: // REAL is float(24)
return FLOAT;
case Types.INTEGER:
return INT;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,8 @@ void testGetDatabricksTypeFromSQLType() {
DatabricksTypeUtil.INT, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.INTEGER));
assertEquals(
DatabricksTypeUtil.STRING, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.VARCHAR));
assertEquals(
DatabricksTypeUtil.CHAR, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.CHAR));
assertEquals(
DatabricksTypeUtil.STRING,
DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.LONGVARCHAR));
Expand All @@ -178,6 +180,8 @@ void testGetDatabricksTypeFromSQLType() {
assertEquals(
DatabricksTypeUtil.BINARY,
DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.LONGVARBINARY));
assertEquals(
DatabricksTypeUtil.DECIMAL, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.NUMERIC));
assertEquals(
DatabricksTypeUtil.DATE, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.DATE));
assertEquals(
Expand All @@ -188,6 +192,8 @@ void testGetDatabricksTypeFromSQLType() {
DatabricksTypeUtil.DOUBLE, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.DOUBLE));
assertEquals(
DatabricksTypeUtil.FLOAT, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.FLOAT));
assertEquals(
DatabricksTypeUtil.FLOAT, DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.REAL));
assertEquals(
DatabricksTypeUtil.TIMESTAMP_NTZ,
DatabricksTypeUtil.getDatabricksTypeFromSQLType(Types.TIMESTAMP));
Expand Down Expand Up @@ -234,6 +240,7 @@ void testInferDatabricksType() {
"BYTE, BYTE",
"INT, INT",
"BIGINT, LONG",
"LONG, LONG",
"FLOAT, FLOAT",
"DOUBLE, DOUBLE",
"BINARY, BINARY",
Expand All @@ -244,6 +251,7 @@ void testInferDatabricksType() {
"VOID, NULL",
"NULL, NULL",
"MAP, MAP",
"CHAR, STRING",
"UNKNOWN, USER_DEFINED_TYPE"
})
public void testGetColumnInfoType(String inputTypeName, String expectedTypeName) {
Expand Down
Loading