mirror of
https://github.com/alibaba/DataX.git
synced 2025-05-02 05:11:42 +08:00
Merge a42feefb46
into 0824b45c5e
This commit is contained in:
commit
bf0e1dc9bd
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user