mirror of https://github.com/apache/nifi.git
NIFI-5819: Support SQLServer sql_variant type
This closes #6699. Signed-off-by: Peter Turcsanyi <turcsanyi@apache.org>
This commit is contained in:
parent
2ad33eea80
commit
5f1d93f977
|
@ -650,6 +650,11 @@ public class JdbcCommon {
|
||||||
builder.name(columnName).type().unionOf().nullBuilder().endNull().and().bytesType().endUnion().noDefault();
|
builder.name(columnName).type().unionOf().nullBuilder().endNull().and().bytesType().endUnion().noDefault();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case -150: // SQLServer may return -150 from the driver even though it's really -156 (sql_variant), treat as a union since we don't know what the values will actually be
|
||||||
|
case -156:
|
||||||
|
builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().and().intType().and().longType().and().booleanType().and().bytesType().and()
|
||||||
|
.doubleType().and().floatType().endUnion().noDefault();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("createSchema: Unknown SQL type " + meta.getColumnType(i) + " / " + meta.getColumnTypeName(i)
|
throw new IllegalArgumentException("createSchema: Unknown SQL type " + meta.getColumnType(i) + " / " + meta.getColumnTypeName(i)
|
||||||
|
|
|
@ -736,12 +736,20 @@ public class PutDatabaseRecord extends AbstractProcessor {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sqlType = column.getDataType();
|
sqlType = column.getDataType();
|
||||||
|
// SQLServer returns -150 for sql_variant from DatabaseMetaData though the server expects -156 when setting a sql_variant parameter
|
||||||
|
if (sqlType == -150) {
|
||||||
|
sqlType = -156;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert (if necessary) from field data type to column data type
|
// Convert (if necessary) from field data type to column data type
|
||||||
if (fieldSqlType != sqlType) {
|
if (fieldSqlType != sqlType) {
|
||||||
try {
|
try {
|
||||||
DataType targetDataType = DataTypeUtils.getDataTypeFromSQLTypeValue(sqlType);
|
DataType targetDataType = DataTypeUtils.getDataTypeFromSQLTypeValue(sqlType);
|
||||||
|
// If sqlType is unsupported, fall back to the fieldSqlType instead
|
||||||
|
if (targetDataType == null) {
|
||||||
|
targetDataType = DataTypeUtils.getDataTypeFromSQLTypeValue(fieldSqlType);
|
||||||
|
}
|
||||||
if (targetDataType != null) {
|
if (targetDataType != null) {
|
||||||
if (sqlType == Types.BLOB || sqlType == Types.BINARY) {
|
if (sqlType == Types.BLOB || sqlType == Types.BINARY) {
|
||||||
if (currentValue instanceof Object[]) {
|
if (currentValue instanceof Object[]) {
|
||||||
|
|
Loading…
Reference in New Issue