private void fillPreparedStatement()

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());
		}
	}