Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,16 @@ List<List<Object>> getRows(
} else {
object = "NO";
}
} else if (mappedColumn.getColumnName().equals(DECIMAL_DIGITS_COLUMN.getColumnName())
|| mappedColumn.getColumnName().equals(NUM_PREC_RADIX_COLUMN.getColumnName())) {
} else if (mappedColumn
.getColumnName()
.equals(DECIMAL_DIGITS_COLUMN.getColumnName())) {
if (object == null) {
object = 0;
}
object = getScale(stripBaseTypeName(typeVal), (int) object);
} else if (mappedColumn
.getColumnName()
.equals(NUM_PREC_RADIX_COLUMN.getColumnName())) {
if (object == null) {
object = 0;
}
Expand Down Expand Up @@ -424,6 +432,19 @@ int getBufferLength(String typeVal) {
return getSizeInBytes(sqlType);
}

int getScale(String baseTypeVal, int scale) {
if (baseTypeVal == null || baseTypeVal.isEmpty()) {
Comment thread
msrathore-db marked this conversation as resolved.
Outdated
return 0;
}
if (baseTypeVal.contains(DECIMAL_TYPE) || baseTypeVal.contains(NUMERIC_TYPE)) {
return scale;
}
if (baseTypeVal.contains(TIMESTAMP_TYPE) || baseTypeVal.contains(TIMESTAMP_NTZ_TYPE)) {
Comment thread
msrathore-db marked this conversation as resolved.
return 9;
}
Comment thread
msrathore-db marked this conversation as resolved.
return 0;
}

/**
* Extracts the character octet length from a given SQL type definition. For example, for input
* "VARCHAR(100)", it returns 100. For inputs without a specified length or invalid inputs, it
Expand Down Expand Up @@ -891,8 +912,13 @@ List<List<Object>> getThriftRows(List<List<Object>> rows, List<ResultColumn> col
object = "YES";
}
}
if (column.getColumnName().equals(DECIMAL_DIGITS_COLUMN.getColumnName())
|| column.getColumnName().equals(NUM_PREC_RADIX_COLUMN.getColumnName())) {
if (column.getColumnName().equals(DECIMAL_DIGITS_COLUMN.getColumnName())) {
if (object == null) {
object = 0;
}
object = getScale(stripBaseTypeName(typeVal), (int) object);
Comment thread
msrathore-db marked this conversation as resolved.
Outdated
}
if (column.getColumnName().equals(NUM_PREC_RADIX_COLUMN.getColumnName())) {
if (object == null) {
object = 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public class TypeValConstants {
static final String BOOLEAN_TYPE = "BOOLEAN";
static final String DATE_TYPE = "DATE";
static final String TIMESTAMP_TYPE = "TIMESTAMP";
static final String TIMESTAMP_NTZ_TYPE = "TIMESTAMP_NTZ";
static final String DECIMAL_TYPE = "DECIMAL";
static final String BINARY_TYPE = "BINARY";
static final String ARRAY_TYPE = "ARRAY";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -531,4 +531,27 @@ void testComplexTypesReturnActualCodesWhenSupportEnabled() throws SQLException {
assertEquals(1111, variantRow.get(0));
assertEquals(1111, variantRow.get(2));
}

@Test
Comment thread
msrathore-db marked this conversation as resolved.
void testDecimalDigitsColumnInGetThriftRows() {
List<ResultColumn> columns = Arrays.asList(COLUMN_TYPE_COLUMN, DECIMAL_DIGITS_COLUMN);

List<List<Object>> rows =
Arrays.asList(
Arrays.asList("DECIMAL(10,2)", 2),
Comment thread
msrathore-db marked this conversation as resolved.
Arrays.asList("TIMESTAMP", 6),
Arrays.asList("INT", 0),
Arrays.asList("VARCHAR(100)", 0),
Arrays.asList("DECIMAL(15,5)", 5),
Arrays.asList("TIMESTAMP_NTZ", 6));

List<List<Object>> updatedRows = metadataResultSetBuilder.getThriftRows(rows, columns);

assertEquals(2, updatedRows.get(0).get(1), "DECIMAL(10,2) should have scale 2");
assertEquals(9, updatedRows.get(1).get(1), "TIMESTAMP should have scale 9");
assertEquals(0, updatedRows.get(2).get(1), "INT should have scale 0");
assertEquals(0, updatedRows.get(3).get(1), "VARCHAR should have scale 0");
assertEquals(5, updatedRows.get(4).get(1), "DECIMAL(15,5) should have scale 5");
assertEquals(9, updatedRows.get(5).get(1), "TIMESTAMP_NTZ should have scale 9");
}
}
Loading