mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
rdb 关键字转译符过滤
This commit is contained in:
@@ -117,4 +117,23 @@ public class Util {
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
public static String cleanColumn(String column) {
|
||||
if (column == null) {
|
||||
return null;
|
||||
}
|
||||
if (column.contains("`")) {
|
||||
column = column.replaceAll("`", "");
|
||||
}
|
||||
|
||||
if (column.contains("'")) {
|
||||
column = column.replaceAll("'", "");
|
||||
}
|
||||
|
||||
if (column.contains("\"")) {
|
||||
column = column.replaceAll("\"", "");
|
||||
}
|
||||
|
||||
return column;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,6 +78,9 @@ public class RdbSyncService {
|
||||
Map<String, MappingConfig> configMap = mappingConfigCache
|
||||
.get(destination + "." + database + "." + table);
|
||||
|
||||
if (configMap == null) {
|
||||
continue;
|
||||
}
|
||||
for (MappingConfig config : configMap.values()) {
|
||||
|
||||
if (config.getConcurrent()) {
|
||||
@@ -177,13 +180,13 @@ public class RdbSyncService {
|
||||
|
||||
List<Map<String, ?>> values = new ArrayList<>();
|
||||
for (Map.Entry<String, String> entry : columnsMap.entrySet()) {
|
||||
String targetClolumnName = entry.getKey();
|
||||
String targetColumnName = entry.getKey();
|
||||
String srcColumnName = entry.getValue();
|
||||
if (srcColumnName == null) {
|
||||
srcColumnName = targetClolumnName;
|
||||
srcColumnName = Util.cleanColumn(targetColumnName);
|
||||
}
|
||||
|
||||
Integer type = ctype.get(targetClolumnName.toLowerCase());
|
||||
Integer type = ctype.get(Util.cleanColumn(targetColumnName).toLowerCase());
|
||||
|
||||
Object value = data.get(srcColumnName);
|
||||
|
||||
@@ -238,7 +241,7 @@ public class RdbSyncService {
|
||||
|
||||
for (String targetColumnName : targetColumnNames) {
|
||||
updateSql.append(targetColumnName).append("=?, ");
|
||||
Integer type = ctype.get(targetColumnName.toLowerCase());
|
||||
Integer type = ctype.get(Util.cleanColumn(targetColumnName).toLowerCase());
|
||||
BatchExecutor.setValue(values, type, data.get(srcColumnName));
|
||||
}
|
||||
}
|
||||
@@ -344,10 +347,10 @@ public class RdbSyncService {
|
||||
String targetColumnName = entry.getKey();
|
||||
String srcColumnName = entry.getValue();
|
||||
if (srcColumnName == null) {
|
||||
srcColumnName = targetColumnName;
|
||||
srcColumnName = Util.cleanColumn(targetColumnName);
|
||||
}
|
||||
sql.append(targetColumnName).append("=? AND ");
|
||||
Integer type = ctype.get(targetColumnName.toLowerCase());
|
||||
Integer type = ctype.get(Util.cleanColumn(targetColumnName).toLowerCase());
|
||||
// 如果有修改主键的情况
|
||||
if (o != null && o.containsKey(srcColumnName)) {
|
||||
BatchExecutor.setValue(values, type, o.get(srcColumnName));
|
||||
@@ -384,7 +387,7 @@ public class RdbSyncService {
|
||||
String targetColumnName = entry.getKey();
|
||||
String srcColumnName = entry.getValue();
|
||||
if (srcColumnName == null) {
|
||||
srcColumnName = targetColumnName;
|
||||
srcColumnName = Util.cleanColumn(targetColumnName);
|
||||
}
|
||||
Object value;
|
||||
if (o != null && o.containsKey(srcColumnName)) {
|
||||
|
||||
@@ -74,6 +74,8 @@ public class SyncUtil {
|
||||
case Types.LONGVARCHAR:
|
||||
if (value instanceof String) {
|
||||
pstmt.setString(i, (String) value);
|
||||
} else if (value == null) {
|
||||
pstmt.setNull(i, type);
|
||||
} else {
|
||||
pstmt.setString(i, value.toString());
|
||||
}
|
||||
@@ -140,8 +142,10 @@ public class SyncUtil {
|
||||
pstmt.setBigDecimal(i, new BigDecimal((float) value));
|
||||
} else if (value instanceof Double) {
|
||||
pstmt.setBigDecimal(i, new BigDecimal((double) value));
|
||||
} else {
|
||||
} else if (value != null) {
|
||||
pstmt.setBigDecimal(i, new BigDecimal(value.toString()));
|
||||
} else {
|
||||
pstmt.setNull(i, type);
|
||||
}
|
||||
break;
|
||||
case Types.REAL:
|
||||
|
||||
Reference in New Issue
Block a user