added metadata override to NUMERIC for NUMBER columns reported as DECIMAL but with zero decimal places (SPR-6912)
This commit is contained in:
@@ -19,6 +19,7 @@ package org.springframework.jdbc.core.metadata;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
@@ -346,10 +347,29 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider {
|
||||
metaDataTableName,
|
||||
null);
|
||||
while (tableColumns.next()) {
|
||||
String columnName = tableColumns.getString("COLUMN_NAME");
|
||||
int dataType = tableColumns.getInt("DATA_TYPE");
|
||||
if (dataType == Types.DECIMAL) {
|
||||
String typeName = tableColumns.getString("TYPE_NAME");
|
||||
int decimalDigits = tableColumns.getInt("DECIMAL_DIGITS");
|
||||
// override a DECIMAL data type for no-decimal numerics
|
||||
// (this is for better Oracle support where there have been issues
|
||||
// using DECIMAL for certain inserts (see SPR-6912))
|
||||
if ("NUMBER".equals(typeName) && decimalDigits == 0) {
|
||||
dataType = Types.NUMERIC;
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Overriding metadata: "
|
||||
+ columnName +
|
||||
" now using NUMERIC instead of DECIMAL"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
boolean nullable = tableColumns.getBoolean("NULLABLE");
|
||||
TableParameterMetaData meta = new TableParameterMetaData(
|
||||
tableColumns.getString("COLUMN_NAME"),
|
||||
tableColumns.getInt("DATA_TYPE"),
|
||||
tableColumns.getBoolean("NULLABLE")
|
||||
columnName,
|
||||
dataType,
|
||||
nullable
|
||||
);
|
||||
insertParameterMetaData.add(meta);
|
||||
if (logger.isDebugEnabled()) {
|
||||
|
||||
Reference in New Issue
Block a user