From 6b1e4eac97185dbae7ebf9082f63495ac673281c Mon Sep 17 00:00:00 2001 From: "jianghang.loujh" Date: Fri, 10 Jun 2022 11:37:52 +0800 Subject: [PATCH] fixed issue #4216 , support polardb-x show databases --- .../inbound/mysql/tsdb/DatabaseTableMeta.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java index 3e1ecf71..a08eda97 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java @@ -14,6 +14,7 @@ import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.regex.Pattern; +import com.alibaba.otter.canal.parse.driver.mysql.packets.server.FieldPacket; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; @@ -190,8 +191,20 @@ public class DatabaseTableMeta implements TableMetaTSDB { private boolean dumpTableMeta(MysqlConnection connection, final CanalEventFilter filter) { try { ResultSetPacket packet = connection.query("show databases"); + int columnSize = packet.getFieldDescriptors().size(); + int columnIndex = 0; + for (; columnIndex < columnSize; columnIndex++) { + FieldPacket value = packet.getFieldDescriptors().get(columnIndex); + if (StringUtils.equalsIgnoreCase(value.getName(), "Database")) { + break; + } + } + List schemas = new ArrayList<>(); - schemas.addAll(packet.getFieldValues()); + for (int line = 0; line < packet.getFieldValues().size() / columnSize; line++) { + String schema = packet.getFieldValues().get(line * columnSize + columnIndex); + schemas.add(schema); + } for (String schema : schemas) { // filter views