mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
fixed #3976 , support LogEvent.MYSQL_TYPE_TYPED_ARRAY
This commit is contained in:
@@ -283,6 +283,9 @@ public abstract class LogEvent {
|
|||||||
public static final int MYSQL_TYPE_TIMESTAMP2 = 17;
|
public static final int MYSQL_TYPE_TIMESTAMP2 = 17;
|
||||||
public static final int MYSQL_TYPE_DATETIME2 = 18;
|
public static final int MYSQL_TYPE_DATETIME2 = 18;
|
||||||
public static final int MYSQL_TYPE_TIME2 = 19;
|
public static final int MYSQL_TYPE_TIME2 = 19;
|
||||||
|
public static final int MYSQL_TYPE_TYPED_ARRAY = 20;
|
||||||
|
public static final int MYSQL_TYPE_INVALID = 243;
|
||||||
|
public static final int MYSQL_TYPE_BOOL = 244;
|
||||||
public static final int MYSQL_TYPE_JSON = 245;
|
public static final int MYSQL_TYPE_JSON = 245;
|
||||||
public static final int MYSQL_TYPE_NEWDECIMAL = 246;
|
public static final int MYSQL_TYPE_NEWDECIMAL = 246;
|
||||||
public static final int MYSQL_TYPE_ENUM = 247;
|
public static final int MYSQL_TYPE_ENUM = 247;
|
||||||
|
|||||||
@@ -1133,6 +1133,8 @@ public final class RowsLogBuffer {
|
|||||||
length = len;
|
length = len;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case LogEvent.MYSQL_TYPE_BOOL :
|
||||||
|
case LogEvent.MYSQL_TYPE_INVALID :
|
||||||
default:
|
default:
|
||||||
logger.error(String.format("!! Don't know how to handle column type=%d meta=%d (%04X)",
|
logger.error(String.format("!! Don't know how to handle column type=%d meta=%d (%04X)",
|
||||||
type,
|
type,
|
||||||
|
|||||||
@@ -343,12 +343,13 @@ public final class TableMapLogEvent extends LogEvent {
|
|||||||
public int geoType;
|
public int geoType;
|
||||||
public boolean nullable;
|
public boolean nullable;
|
||||||
public boolean visibility;
|
public boolean visibility;
|
||||||
|
public boolean array;
|
||||||
|
|
||||||
@Override
|
@Override public String toString() {
|
||||||
public String toString() {
|
return "ColumnInfo{" + "type=" + type + ", meta=" + meta + ", name='" + name + '\'' + ", unsigned="
|
||||||
return "ColumnInfo [type=" + type + ", meta=" + meta + ", name=" + name + ", unsigned=" + unsigned
|
+ unsigned + ", pk=" + pk + ", set_enum_values=" + set_enum_values + ", charset=" + charset
|
||||||
+ ", pk=" + pk + ", set_enum_values=" + set_enum_values + ", charset=" + charset + ", geoType="
|
+ ", geoType=" + geoType + ", nullable=" + nullable + ", visibility=" + visibility + ", array="
|
||||||
+ geoType + ", nullable=" + nullable + "]";
|
+ array + '}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,12 +545,16 @@ public final class TableMapLogEvent extends LogEvent {
|
|||||||
*/
|
*/
|
||||||
private final void decodeFields(LogBuffer buffer, final int len) {
|
private final void decodeFields(LogBuffer buffer, final int len) {
|
||||||
final int limit = buffer.limit();
|
final int limit = buffer.limit();
|
||||||
|
|
||||||
buffer.limit(len + buffer.position());
|
buffer.limit(len + buffer.position());
|
||||||
for (int i = 0; i < columnCnt; i++) {
|
for (int i = 0; i < columnCnt; i++) {
|
||||||
ColumnInfo info = columnInfo[i];
|
ColumnInfo info = columnInfo[i];
|
||||||
|
|
||||||
switch (info.type) {
|
int binlogType = info.type;
|
||||||
|
if (binlogType == MYSQL_TYPE_TYPED_ARRAY) {
|
||||||
|
binlogType = buffer.getUint8();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (binlogType) {
|
||||||
case MYSQL_TYPE_TINY_BLOB:
|
case MYSQL_TYPE_TINY_BLOB:
|
||||||
case MYSQL_TYPE_BLOB:
|
case MYSQL_TYPE_BLOB:
|
||||||
case MYSQL_TYPE_MEDIUM_BLOB:
|
case MYSQL_TYPE_MEDIUM_BLOB:
|
||||||
@@ -557,6 +562,9 @@ public final class TableMapLogEvent extends LogEvent {
|
|||||||
case MYSQL_TYPE_DOUBLE:
|
case MYSQL_TYPE_DOUBLE:
|
||||||
case MYSQL_TYPE_FLOAT:
|
case MYSQL_TYPE_FLOAT:
|
||||||
case MYSQL_TYPE_GEOMETRY:
|
case MYSQL_TYPE_GEOMETRY:
|
||||||
|
case MYSQL_TYPE_TIME2:
|
||||||
|
case MYSQL_TYPE_DATETIME2:
|
||||||
|
case MYSQL_TYPE_TIMESTAMP2:
|
||||||
case MYSQL_TYPE_JSON:
|
case MYSQL_TYPE_JSON:
|
||||||
/*
|
/*
|
||||||
* These types store a single byte.
|
* These types store a single byte.
|
||||||
@@ -565,14 +573,6 @@ public final class TableMapLogEvent extends LogEvent {
|
|||||||
break;
|
break;
|
||||||
case MYSQL_TYPE_SET:
|
case MYSQL_TYPE_SET:
|
||||||
case MYSQL_TYPE_ENUM:
|
case MYSQL_TYPE_ENUM:
|
||||||
/*
|
|
||||||
* log_event.h : MYSQL_TYPE_SET & MYSQL_TYPE_ENUM : This
|
|
||||||
* enumeration value is only used internally and cannot
|
|
||||||
* exist in a binlog.
|
|
||||||
*/
|
|
||||||
logger.warn("This enumeration value is only used internally "
|
|
||||||
+ "and cannot exist in a binlog: type=" + info.type);
|
|
||||||
break;
|
|
||||||
case MYSQL_TYPE_STRING: {
|
case MYSQL_TYPE_STRING: {
|
||||||
/*
|
/*
|
||||||
* log_event.h : The first byte is always
|
* log_event.h : The first byte is always
|
||||||
@@ -600,12 +600,6 @@ public final class TableMapLogEvent extends LogEvent {
|
|||||||
info.meta = x;
|
info.meta = x;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MYSQL_TYPE_TIME2:
|
|
||||||
case MYSQL_TYPE_DATETIME2:
|
|
||||||
case MYSQL_TYPE_TIMESTAMP2: {
|
|
||||||
info.meta = buffer.getUint8();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
info.meta = 0;
|
info.meta = 0;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user