Browse Source

fixed issue #4216 , support polardb-x show databases

jianghang.loujh 2 years ago
parent
commit
bc4dceea1a

+ 14 - 1
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<String> 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