in adb3client/src/main/java/com/alibaba/cloud/analyticdb/adb3client/impl/UpsertStatementBuilder.java [94:138]
private String buildInsertSql(Tuple3<TableSchema, TableName, WriteMode> tuple, Tuple<BitSet, BitSet> input) {
TableSchema schema = tuple.l;
TableName tableName = tuple.m;
WriteMode mode = tuple.r;
BitSet set = input.l;
BitSet onlyInsertSet = input.r;
StringBuilder sb = new StringBuilder();
if (WriteMode.INSERT_OR_IGNORE == mode) {
sb.append("insert ignore into ").append(tableName.getFullName());
} else if (WriteMode.INSERT_OR_REPLACE == mode) {
sb.append("replace into ").append(tableName.getFullName());
} else {
sb.append("insert into ").append(tableName.getFullName());
}
sb.append("(");
first = true;
set.stream().forEach((index) -> {
if (!first) {
sb.append(",");
}
first = false;
sb.append(IdentifierUtil.quoteIdentifier(schema.getColumn(index).getName()));
});
sb.append(")");
sb.append(" values ");
sb.append("(");
first = true;
set.stream().forEach((index) -> {
if (!first) {
sb.append(",");
}
first = false;
sb.append("?");
Column column = schema.getColumn(index);
if (Types.BIT == column.getType() && "bit".equals(column.getTypeName())) {
sb.append("::bit(").append(column.getPrecision()).append(")");
} else if (Types.OTHER == column.getType() && "varbit".equals(column.getTypeName())) {
sb.append("::bit varying(").append(column.getPrecision()).append(")");
}
});
sb.append(")");
return sb.toString();
}