fixed issue #1256, rds alibaba_rds_row_id

This commit is contained in:
agapple
2018-12-10 14:42:28 +08:00
parent dda8081984
commit 7c63e81e01

View File

@@ -621,9 +621,10 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
+ "," + columnInfo.length + " vs " + tableMeta.getFields().size()); + "," + columnInfo.length + " vs " + tableMeta.getFields().size());
} }
} }
} else { // } else {
logger.warn("[" + event.getTable().getDbName() + "." + event.getTable().getTableName() // logger.warn("[" + event.getTable().getDbName() + "." +
+ "] is no primary key , skip alibaba_rds_row_id column"); // event.getTable().getTableName()
// + "] is no primary key , skip alibaba_rds_row_id column");
} }
} }
@@ -634,18 +635,35 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
continue; continue;
} }
if (existRDSNoPrimaryKey && i == columnCnt - 1 && info.type == LogEvent.MYSQL_TYPE_LONGLONG) {
// 不解析最后一列
String rdsRowIdColumnName = "#alibaba_rds_row_id#";
buffer.nextValue(rdsRowIdColumnName, i, info.type, info.meta, false);
Column.Builder columnBuilder = Column.newBuilder();
columnBuilder.setName(rdsRowIdColumnName);
columnBuilder.setIsKey(true);
columnBuilder.setMysqlType("bigint");
columnBuilder.setIndex(i);
columnBuilder.setIsNull(false);
Serializable value = buffer.getValue();
columnBuilder.setValue(value.toString());
columnBuilder.setSqlType(Types.BIGINT);
columnBuilder.setUpdated(false);
if (isAfter) {
rowDataBuilder.addAfterColumns(columnBuilder.build());
} else {
rowDataBuilder.addBeforeColumns(columnBuilder.build());
}
continue;
}
FieldMeta fieldMeta = null; FieldMeta fieldMeta = null;
if (tableMeta != null && !tableError) { if (tableMeta != null && !tableError) {
// 处理file meta // 处理file meta
fieldMeta = tableMeta.getFields().get(i); fieldMeta = tableMeta.getFields().get(i);
} }
if (existRDSNoPrimaryKey && i == columnCnt - 1 && info.type == LogEvent.MYSQL_TYPE_LONGLONG) {
// 不解析最后一列
buffer.nextValue(fieldMeta.getColumnName(), i, info.type, info.meta, false);
continue;
}
if (fieldMeta != null && existOptionalMetaData && tableMetaCache.isOnTSDB()) { if (fieldMeta != null && existOptionalMetaData && tableMetaCache.isOnTSDB()) {
// check column info // check column info
boolean check = StringUtils.equalsIgnoreCase(fieldMeta.getColumnName(), info.name); boolean check = StringUtils.equalsIgnoreCase(fieldMeta.getColumnName(), info.name);