in holo-client/src/main/java/com/alibaba/hologres/client/impl/UpsertStatementBuilder.java [461:569]
private void fillPreparedStatement(PreparedStatement ps, int index, Object obj, Column column) throws SQLException {
switch (column.getType()) {
case Types.OTHER:
if (obj instanceof byte[] && "roaringbitmap".equalsIgnoreCase(column.getTypeName())) {
PGroaringbitmap binaryObject = new PGroaringbitmap();
byte[] bytes = (byte[]) obj;
binaryObject.setByteValue(bytes, 0);
ps.setObject(index, binaryObject, column.getType());
} else if ("varbit".equals(column.getTypeName())) {
ps.setString(index, obj == null ? null : String.valueOf(obj));
} else {
ps.setObject(index, obj, column.getType());
}
break;
case Types.LONGNVARCHAR:
case Types.VARCHAR:
case Types.CHAR:
if (obj == null) {
ps.setNull(index, column.getType());
} else {
ps.setObject(index, removeU0000(obj.toString()), column.getType());
}
break;
case Types.BIT:
if ("bit".equals(column.getTypeName())) {
if (obj instanceof Boolean) {
ps.setString(index, (Boolean) obj ? "1" : "0");
} else {
ps.setString(index, obj == null ? null : String.valueOf(obj));
}
} else {
ps.setObject(index, obj, column.getType());
}
break;
case Types.TIMESTAMP_WITH_TIMEZONE:
case Types.TIMESTAMP:
if (obj instanceof Number && inputNumberAsEpochMsForDatetimeColumn) {
ps.setObject(index, new Timestamp(((Number) obj).longValue()), column.getType());
} else if (obj instanceof String && inputStringAsEpochMsForDatetimeColumn) {
long l = 0L;
try {
l = Long.parseLong((String) obj);
ps.setObject(index, new Timestamp(l), column.getType());
} catch (NumberFormatException e) {
if (MYSQL_0000.equals(obj)) {
ps.setObject(index, new Timestamp(0), column.getType());
} else {
ps.setObject(index, obj, column.getType());
}
}
} else {
if (MYSQL_0000.equals(obj)) {
ps.setObject(index, new Timestamp(0), column.getType());
} else {
ps.setObject(index, obj, column.getType());
}
}
break;
case Types.DATE:
if (obj instanceof Number && inputNumberAsEpochMsForDatetimeColumn) {
ps.setObject(index, new java.sql.Date(((Number) obj).longValue()), column.getType());
} else if (obj instanceof String && inputStringAsEpochMsForDatetimeColumn) {
long l = 0L;
try {
l = Long.parseLong((String) obj);
ps.setObject(index, new java.sql.Date(l), column.getType());
} catch (NumberFormatException e) {
if (MYSQL_0000.equals(obj)) {
ps.setObject(index, new java.sql.Date(0), column.getType());
} else {
ps.setObject(index, obj, column.getType());
}
}
} else {
if (MYSQL_0000.equals(obj)) {
ps.setObject(index, new java.sql.Date(0), column.getType());
} else {
ps.setObject(index, obj, column.getType());
}
}
break;
case Types.TIME_WITH_TIMEZONE:
case Types.TIME:
if (obj instanceof Number && inputNumberAsEpochMsForDatetimeColumn) {
ps.setObject(index, new Time(((Number) obj).longValue()), column.getType());
} else if (obj instanceof String && inputStringAsEpochMsForDatetimeColumn) {
long l = 0L;
try {
l = Long.parseLong((String) obj);
ps.setObject(index, new Time(l), column.getType());
} catch (NumberFormatException e) {
if (MYSQL_0000.equals(obj)) {
ps.setObject(index, new Time(0), column.getType());
} else {
ps.setObject(index, obj, column.getType());
}
}
} else {
if (MYSQL_0000.equals(obj)) {
ps.setObject(index, new Time(0), column.getType());
} else {
ps.setObject(index, obj, column.getType());
}
}
break;
default:
ps.setObject(index, obj, column.getType());
}
}