in java/clickhouse-connector/src/main/java/com/epam/deltix/timebase/connector/clickhouse/algos/UnboundTableWriter.java [452:537]
public static void setNullableValue(ClickhouseContext clickhouseContext, ColumnDeclarationEx columnDeclaration) throws SQLException {
SqlDataType dataType = columnDeclaration.getDbDataType();
boolean isNullable = false;
if (dataType instanceof NullableDataType) {
dataType = ((NullableDataType) dataType).getNestedType();
isNullable = true;
}
if (dataType instanceof NullableDataType) {
throw new UnsupportedOperationException();
} else if (dataType instanceof ArraySqlType) {
clickhouseContext.statement.setArray(columnDeclaration.getStatementIndex(), (Array) getArrayValues(clickhouseContext, columnDeclaration, new Object[0]));
// } else if (dataType instanceof BinaryDataType) {
// essentialDataType = ClickHouseDataType.String;
} else if (dataType instanceof UInt8DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.INTEGER);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.INTEGER);
} else if (dataType instanceof StringDataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.VARCHAR);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.VARCHAR);
} else if (dataType instanceof DateDataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.TIMESTAMP);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.TIMESTAMP);
} else if (dataType instanceof DateTime64DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.TIMESTAMP);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.TIMESTAMP);
} else if (dataType instanceof Enum16DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.VARCHAR);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.VARCHAR);
} else if (dataType instanceof Float32DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.FLOAT);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.FLOAT);
} else if (dataType instanceof Float64DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.DOUBLE);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.DOUBLE);
} else if (dataType instanceof DecimalDataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.DECIMAL);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.DECIMAL);
} else if (dataType instanceof Int8DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.INTEGER);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.INTEGER);
} else if (dataType instanceof Int16DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.INTEGER);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.INTEGER);
} else if (dataType instanceof Int32DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.INTEGER);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.INTEGER);
} else if (dataType instanceof Int64DataType) {
if (isNullable)
clickhouseContext.statement.setNull(columnDeclaration.getStatementIndex(), Types.BIGINT);
else
clickhouseContext.statement.setObject(columnDeclaration.getStatementIndex(), columnDeclaration.getDefaultValue(), Types.BIGINT);
} else if (dataType instanceof NestedDataType) {
setInnerNullValues(clickhouseContext, columnDeclaration, true);
} else if (dataType instanceof ObjectDataType) {
ObjectDataType nestedDataType = (ObjectDataType) dataType;
for (ColumnDeclaration c : nestedDataType.getColumns()) {
ColumnDeclarationEx ce = (ColumnDeclarationEx) c;
setNullableValue(clickhouseContext, ce);
}
} else {
throw new UnsupportedOperationException(String.format("Not supported data type '%s'", dataType.getClass().getName()));
}
}