This commit is contained in:
阿丸 2025-04-10 16:22:41 +08:00 committed by GitHub
commit bf0e1dc9bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 3 deletions

View File

@ -1,7 +1,9 @@
package com.alibaba.datax.plugin.rdbms.util;
import com.alibaba.datax.common.exception.DataXException;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -206,6 +208,17 @@ public enum DataBaseType {
return result;
}
public String buildQuoteColumnFormat(List<String> columnName) {
if (null == columnName || columnName.isEmpty()) {
return StringUtils.EMPTY;
}
StringBuilder builder = new StringBuilder();
for (String column : columnName) {
builder.append(column.contains("`") ? column : quoteColumnName(column)).append(",");
}
return builder.substring(0, builder.length() - 1);
}
public String quoteTableName(String tableName) {
String result = tableName;

View File

@ -267,8 +267,9 @@ public class CommonRdbmsWriter {
this.taskPluginCollector = taskPluginCollector;
// 用于写入数据的时候的类型根据目的表字段类型转换
String quoteColumnFormat = this.dataBaseType.buildQuoteColumnFormat(this.columns);
this.resultSetMetaData = DBUtil.getColumnMetaData(connection,
this.table, StringUtils.join(this.columns, ","));
this.table, quoteColumnFormat);
// 写数据库的SQL语句
calcWriteRecordSql();

View File

@ -118,6 +118,8 @@ public final class WriterUtil {
String.format("您所配置的 writeMode:%s 错误. 因为DataX 目前仅支持replace,update 或 insert 方式. 请检查您的配置并作出修改.", writeMode));
}
// && writeMode.trim().toLowerCase().startsWith("replace")
String quoteColumnFormat = dataBaseType.buildQuoteColumnFormat(columnHolders);
String writeDataSqlTemplate;
if (forceUseUpdate ||
((dataBaseType == DataBaseType.MySql || dataBaseType == DataBaseType.Tddl) && writeMode.trim().toLowerCase().startsWith("update"))
@ -125,7 +127,7 @@ public final class WriterUtil {
//update只在mysql下使用
writeDataSqlTemplate = new StringBuilder()
.append("INSERT INTO %s (").append(StringUtils.join(columnHolders, ","))
.append("INSERT INTO %s (").append(quoteColumnFormat)
.append(") VALUES(").append(StringUtils.join(valueHolders, ","))
.append(")")
.append(onDuplicateKeyUpdateString(columnHolders))
@ -137,7 +139,7 @@ public final class WriterUtil {
writeMode = "replace";
}
writeDataSqlTemplate = new StringBuilder().append(writeMode)
.append(" INTO %s (").append(StringUtils.join(columnHolders, ","))
.append(" INTO %s (").append(quoteColumnFormat)
.append(") VALUES(").append(StringUtils.join(valueHolders, ","))
.append(")").toString();
}