mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
fixed unique and upgrade druid
This commit is contained in:
@@ -56,10 +56,10 @@ public class AbstractCanalClientTest {
|
|||||||
context_format += "****************************************************" + SEP;
|
context_format += "****************************************************" + SEP;
|
||||||
|
|
||||||
row_format = SEP
|
row_format = SEP
|
||||||
+ "----------------> binlog[{}:{}] , name[{},{}] , eventType : {} , executeTime : {} , delay : {}ms"
|
+ "----------------> binlog[{}:{}] , name[{},{}] , eventType : {} , executeTime : {}({}) , delay : {}ms"
|
||||||
+ SEP;
|
+ SEP;
|
||||||
|
|
||||||
transaction_format = SEP + "================> binlog[{}:{}] , executeTime : {} , delay : {}ms" + SEP;
|
transaction_format = SEP + "================> binlog[{}:{}] , executeTime : {}({}) , delay : {}ms" + SEP;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,6 +165,8 @@ public class AbstractCanalClientTest {
|
|||||||
for (Entry entry : entrys) {
|
for (Entry entry : entrys) {
|
||||||
long executeTime = entry.getHeader().getExecuteTime();
|
long executeTime = entry.getHeader().getExecuteTime();
|
||||||
long delayTime = new Date().getTime() - executeTime;
|
long delayTime = new Date().getTime() - executeTime;
|
||||||
|
Date date = new Date(entry.getHeader().getExecuteTime());
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() == EntryType.TRANSACTIONEND) {
|
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() == EntryType.TRANSACTIONEND) {
|
||||||
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN) {
|
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN) {
|
||||||
@@ -178,7 +180,8 @@ public class AbstractCanalClientTest {
|
|||||||
logger.info(transaction_format,
|
logger.info(transaction_format,
|
||||||
new Object[] { entry.getHeader().getLogfileName(),
|
new Object[] { entry.getHeader().getLogfileName(),
|
||||||
String.valueOf(entry.getHeader().getLogfileOffset()),
|
String.valueOf(entry.getHeader().getLogfileOffset()),
|
||||||
String.valueOf(entry.getHeader().getExecuteTime()), String.valueOf(delayTime) });
|
String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date),
|
||||||
|
String.valueOf(delayTime) });
|
||||||
logger.info(" BEGIN ----> Thread id: {}", begin.getThreadId());
|
logger.info(" BEGIN ----> Thread id: {}", begin.getThreadId());
|
||||||
} else if (entry.getEntryType() == EntryType.TRANSACTIONEND) {
|
} else if (entry.getEntryType() == EntryType.TRANSACTIONEND) {
|
||||||
TransactionEnd end = null;
|
TransactionEnd end = null;
|
||||||
@@ -193,7 +196,8 @@ public class AbstractCanalClientTest {
|
|||||||
logger.info(transaction_format,
|
logger.info(transaction_format,
|
||||||
new Object[] { entry.getHeader().getLogfileName(),
|
new Object[] { entry.getHeader().getLogfileName(),
|
||||||
String.valueOf(entry.getHeader().getLogfileOffset()),
|
String.valueOf(entry.getHeader().getLogfileOffset()),
|
||||||
String.valueOf(entry.getHeader().getExecuteTime()), String.valueOf(delayTime) });
|
String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date),
|
||||||
|
String.valueOf(delayTime) });
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
@@ -213,7 +217,8 @@ public class AbstractCanalClientTest {
|
|||||||
new Object[] { entry.getHeader().getLogfileName(),
|
new Object[] { entry.getHeader().getLogfileName(),
|
||||||
String.valueOf(entry.getHeader().getLogfileOffset()), entry.getHeader().getSchemaName(),
|
String.valueOf(entry.getHeader().getLogfileOffset()), entry.getHeader().getSchemaName(),
|
||||||
entry.getHeader().getTableName(), eventType,
|
entry.getHeader().getTableName(), eventType,
|
||||||
String.valueOf(entry.getHeader().getExecuteTime()), String.valueOf(delayTime) });
|
String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date),
|
||||||
|
String.valueOf(delayTime) });
|
||||||
|
|
||||||
if (eventType == EventType.QUERY || rowChage.getIsDdl()) {
|
if (eventType == EventType.QUERY || rowChage.getIsDdl()) {
|
||||||
logger.info(" sql ----> " + rowChage.getSql() + SEP);
|
logger.info(" sql ----> " + rowChage.getSql() + SEP);
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ package com.alibaba.otter.canal.parse.inbound;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.taobao.tddl.dbsync.binlog.event.TableMapLogEvent;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
|
||||||
|
import com.taobao.tddl.dbsync.binlog.event.TableMapLogEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 描述数据meta对象,mysql binlog中对应的{@linkplain TableMapLogEvent}包含的信息不全
|
* 描述数据meta对象,mysql binlog中对应的{@linkplain TableMapLogEvent}包含的信息不全
|
||||||
*
|
*
|
||||||
@@ -127,6 +128,7 @@ public class TableMeta {
|
|||||||
private boolean key;
|
private boolean key;
|
||||||
private String defaultValue;
|
private String defaultValue;
|
||||||
private String extra;
|
private String extra;
|
||||||
|
private boolean unique;
|
||||||
|
|
||||||
public String getColumnName() {
|
public String getColumnName() {
|
||||||
return columnName;
|
return columnName;
|
||||||
@@ -180,10 +182,21 @@ public class TableMeta {
|
|||||||
this.extra = extra;
|
this.extra = extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public boolean isUnique() {
|
||||||
return "FieldMeta [columnName=" + columnName + ", columnType=" + columnType + ", defaultValue="
|
return unique;
|
||||||
+ defaultValue + ", nullable=" + nullable + ", key=" + key + "]";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setUnique(boolean unique) {
|
||||||
|
this.unique = unique;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "FieldMeta [columnName=" + columnName + ", columnType=" + columnType + ", nullable=" + nullable
|
||||||
|
+ ", key=" + key + ", defaultValue=" + defaultValue + ", extra=" + extra + ", unique=" + unique
|
||||||
|
+ "]";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ public class TableMetaCache {
|
|||||||
* size),
|
* size),
|
||||||
"YES"));
|
"YES"));
|
||||||
meta.setKey("PRI".equalsIgnoreCase(packet.getFieldValues().get(nameMaps.get(COLUMN_KEY) + i * size)));
|
meta.setKey("PRI".equalsIgnoreCase(packet.getFieldValues().get(nameMaps.get(COLUMN_KEY) + i * size)));
|
||||||
|
meta.setUnique("UNI".equalsIgnoreCase(packet.getFieldValues().get(nameMaps.get(COLUMN_KEY) + i * size)));
|
||||||
// 特殊处理引号
|
// 特殊处理引号
|
||||||
meta.setDefaultValue(DruidDdlParser.unescapeQuotaName(packet.getFieldValues()
|
meta.setDefaultValue(DruidDdlParser.unescapeQuotaName(packet.getFieldValues()
|
||||||
.get(nameMaps.get(COLUMN_DEFAULT) + i * size)));
|
.get(nameMaps.get(COLUMN_DEFAULT) + i * size)));
|
||||||
|
|||||||
@@ -446,6 +446,10 @@ public class DatabaseTableMeta implements TableMetaTSDB {
|
|||||||
if (sourceField.isKey() != targetField.isKey()) {
|
if (sourceField.isKey() != targetField.isKey()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sourceField.isUnique() != targetField.isUnique()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -21,12 +21,14 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
|
|||||||
import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint;
|
import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint;
|
||||||
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
|
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
|
||||||
import com.alibaba.druid.sql.ast.statement.SQLColumnPrimaryKey;
|
import com.alibaba.druid.sql.ast.statement.SQLColumnPrimaryKey;
|
||||||
|
import com.alibaba.druid.sql.ast.statement.SQLColumnUniqueKey;
|
||||||
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
|
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
|
||||||
import com.alibaba.druid.sql.ast.statement.SQLNotNullConstraint;
|
import com.alibaba.druid.sql.ast.statement.SQLNotNullConstraint;
|
||||||
import com.alibaba.druid.sql.ast.statement.SQLNullConstraint;
|
import com.alibaba.druid.sql.ast.statement.SQLNullConstraint;
|
||||||
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
|
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
|
||||||
import com.alibaba.druid.sql.ast.statement.SQLTableElement;
|
import com.alibaba.druid.sql.ast.statement.SQLTableElement;
|
||||||
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
|
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
|
||||||
|
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique;
|
||||||
import com.alibaba.druid.sql.repository.Schema;
|
import com.alibaba.druid.sql.repository.Schema;
|
||||||
import com.alibaba.druid.sql.repository.SchemaObject;
|
import com.alibaba.druid.sql.repository.SchemaObject;
|
||||||
import com.alibaba.druid.sql.repository.SchemaRepository;
|
import com.alibaba.druid.sql.repository.SchemaRepository;
|
||||||
@@ -204,6 +206,8 @@ public class MemoryTableMeta implements TableMetaTSDB {
|
|||||||
fieldMeta.setNullable(true);
|
fieldMeta.setNullable(true);
|
||||||
} else if (constraint instanceof SQLColumnPrimaryKey) {
|
} else if (constraint instanceof SQLColumnPrimaryKey) {
|
||||||
fieldMeta.setKey(true);
|
fieldMeta.setKey(true);
|
||||||
|
} else if (constraint instanceof SQLColumnUniqueKey) {
|
||||||
|
fieldMeta.setUnique(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tableMeta.addFieldMeta(fieldMeta);
|
tableMeta.addFieldMeta(fieldMeta);
|
||||||
@@ -215,6 +219,14 @@ public class MemoryTableMeta implements TableMetaTSDB {
|
|||||||
FieldMeta field = tableMeta.getFieldMetaByName(name);
|
FieldMeta field = tableMeta.getFieldMetaByName(name);
|
||||||
field.setKey(true);
|
field.setKey(true);
|
||||||
}
|
}
|
||||||
|
} else if (element instanceof MySqlUnique) {
|
||||||
|
MySqlUnique column = (MySqlUnique) element;
|
||||||
|
List<SQLSelectOrderByItem> uks = column.getColumns();
|
||||||
|
for (SQLSelectOrderByItem uk : uks) {
|
||||||
|
String name = getSqlName(uk.getExpr());
|
||||||
|
FieldMeta field = tableMeta.getFieldMetaByName(name);
|
||||||
|
field.setUnique(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -254,7 +254,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
<artifactId>druid</artifactId>
|
<artifactId>druid</artifactId>
|
||||||
<version>1.1.7-preview_0</version>
|
<version>1.1.8</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- log -->
|
<!-- log -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
Reference in New Issue
Block a user