in holo-client/src/main/java/com/alibaba/hologres/client/impl/UpsertStatementBuilder.java [320:406]
protected void fillDefaultValue(Record record, Column column, int i) {
//当列为空并且not null时,尝试在客户端填充default值
if (record.getObject(i) == null && !column.getAllowNull()) {
//对于serial列不处理default值
if (column.isSerial()) {
return;
}
if (column.getDefaultValue() != null) {
String[] defaultValuePair = handleDefaultValue(String.valueOf(column.getDefaultValue()));
String defaultValue = defaultValuePair[0];
switch (column.getType()) {
case Types.INTEGER:
case Types.BIGINT:
case Types.SMALLINT:
record.setObject(i, Long.parseLong(defaultValue));
break;
case Types.REAL:
case Types.DOUBLE:
case Types.FLOAT:
record.setObject(i, Double.parseDouble(defaultValue));
break;
case Types.DECIMAL:
case Types.NUMERIC:
record.setObject(i, new BigDecimal(defaultValue));
break;
case Types.BOOLEAN:
case Types.BIT:
record.setObject(i, Boolean.valueOf(defaultValue));
break;
case Types.CHAR:
case Types.VARCHAR:
record.setObject(i, defaultValue);
break;
case Types.TIMESTAMP:
case Types.TIME_WITH_TIMEZONE:
case Types.TIME:
case Types.DATE:
if ("now()".equalsIgnoreCase(defaultValue) || "current_timestamp".equalsIgnoreCase(defaultValue)) {
record.setObject(i, new Date());
} else {
record.setObject(i, defaultValue);
}
break;
default:
logWarnSeldom("unsupported default type,{}({})", column.getType(), column.getTypeName());
}
} else if (enableDefaultValue) {
switch (column.getType()) {
case Types.INTEGER:
case Types.BIGINT:
case Types.SMALLINT:
record.setObject(i, 0L);
break;
case Types.REAL:
case Types.DOUBLE:
case Types.FLOAT:
record.setObject(i, 0D);
break;
case Types.DECIMAL:
case Types.NUMERIC:
record.setObject(i, BigDecimal.ZERO);
break;
case Types.BOOLEAN:
case Types.BIT:
record.setObject(i, false);
break;
case Types.CHAR:
case Types.VARCHAR:
record.setObject(i, "");
break;
case Types.TIMESTAMP:
case Types.TIME_WITH_TIMEZONE:
case Types.TIME:
case Types.DATE:
if (defaultTimeStampText == null) {
record.setObject(i, new Date(0L));
} else {
record.setObject(i, defaultTimeStampText);
}
break;
default:
logWarnSeldom("unsupported default type,{}({})", column.getType(), column.getTypeName());
}
}
}
}