DatabaseTableMeta类第209行开始
for (String schema : schemas) {
// filter views
packet = connection.query("show full tables from `" + schema + "` where Table_type = 'BASE TABLE'");
int tableNameColumnIndex = 0; // default index is 0
List<String> tables = new ArrayList<>();
for (int line = 0; line < packet.getFieldValues().size() / columnSize; line++) {
String table = packet.getFieldValues().get(line * columnSize + tableNameColumnIndex);
String fullName = schema + "." + table;
if (blackFilter == null || !blackFilter.filter(fullName)) {
if (filter == null || filter.filter(fullName)) {
tables.add(table);
}
}
}
if (tables.isEmpty()) {
continue;
}
StringBuilder sql = new StringBuilder();
for (String table : tables) {
sql.append("show create table `" + schema + "`.`" + table + "`;");
}
List<ResultSetPacket> packets = connection.queryMulti(sql.toString());
for (ResultSetPacket onePacket : packets) {
if (onePacket.getFieldValues().size() > 1) {
String oneTableCreateSql = onePacket.getFieldValues().get(1);
memoryTableMeta.apply(INIT_POSITION, schema, oneTableCreateSql, null);
}
}
}
这个地方看着是要支持polardb-x的show table,但是会导致mysql出问题,把TABLE_TYPE的值“BASE TABLE”当成表名加到tables集合中,导致后面执行desc BASE TABLE直接报错。 看这段代码的意思应该是想在第二个for循环之前定义一个tableNameColumnIndex,然后想在for循环面对它做计算重新赋值,依此来跳过BASE TABLE,但是不知道作者是不是忘了,后面啥也没对它做,导致每张表后面都会跟着加进去一个BASE TABLE表。
原提问者GitHub用户zswiori
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。