
com.github.wz2cool.canal.utils.SqlUtils Maven / Gradle / Ivy
The newest version!
package com.github.wz2cool.canal.utils;
import com.github.wz2cool.canal.utils.model.*;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* sql 工具类
*
* @author Frank
*/
public class SqlUtils {
private SqlUtils() {
// empty constructor
}
public static CanalRowChange getRowChange(final FlatMessage flatMessage) {
CanalRowChange rowChange = new CanalRowChange();
rowChange.setId(flatMessage.getId());
rowChange.setDdl(flatMessage.getIsDdl());
rowChange.setEs(flatMessage.getEs());
rowChange.setType(flatMessage.getType());
rowChange.setDatabase(flatMessage.getDatabase());
rowChange.setTable(flatMessage.getTable());
rowChange.setSql(flatMessage.getSql());
if (CollectionUtils.isEmpty(flatMessage.getData())) {
return rowChange;
}
Map mysqlTypeMap = flatMessage.getMysqlType();
List pkNames = CollectionUtils.isEmpty(flatMessage.getPkNames()) ? new ArrayList<>() : flatMessage.getPkNames();
List canalRowDataList = new ArrayList<>();
for (int i = 0; i < flatMessage.getData().size(); i++) {
Map rowData = flatMessage.getData().get(i);
Map oldRowData = getOldRowData(flatMessage.getOld(), i);
CanalRowData canalRowData = new CanalRowData();
canalRowData.setDatabase(flatMessage.getDatabase());
canalRowData.setTable(flatMessage.getTable());
List canalColumnDataList = new ArrayList<>();
for (Map.Entry colValueEntry : rowData.entrySet()) {
CanalColumnData canalColumnData = new CanalColumnData();
String column = colValueEntry.getKey();
String value = colValueEntry.getValue();
String oldValue = oldRowData.get(column);
String mysqlType = mysqlTypeMap.get(column);
boolean isKey = pkNames.contains(column);
boolean updated = oldRowData.containsKey(column);
canalColumnData.setName(column);
canalColumnData.setKey(isKey);
canalColumnData.setValue(value);
canalColumnData.setOldValue(oldValue);
canalColumnData.setMysqlType(mysqlType);
canalColumnData.setUpdated(updated);
canalColumnDataList.add(canalColumnData);
}
canalRowData.setColumnList(canalColumnDataList);
canalRowDataList.add(canalRowData);
}
rowChange.setRowDataList(canalRowDataList);
return rowChange;
}
private static Map getOldRowData(final List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy