From 04d12fbb003297424d3ad9ad98afdfdbb37fe18f Mon Sep 17 00:00:00 2001 From: HappenLee Date: Tue, 4 May 2021 21:19:50 -0500 Subject: [PATCH] [Bug] Optimize querying from PostgreSQL and MySQL compatibility (#5741) 1. Use the param `UseDeclareFetch` to fix the memory consumption of PostgreSQL Driver 2. Fix the bug of mysql client 5.1 query failed Doris --- .../src/main/java/org/apache/doris/catalog/OdbcTable.java | 3 ++- .../src/main/java/org/apache/doris/mysql/MysqlProto.java | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java index d937008d44..835e3c1a3c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OdbcTable.java @@ -274,7 +274,7 @@ public class OdbcTable extends Table { "utf8"); break; case POSTGRESQL: - connectString = String.format("Driver=%s;Server=%s;Port=%s;DataBase=%s;Uid=%s;Pwd=%s;charset=%s", + connectString = String.format("Driver=%s;Server=%s;Port=%s;DataBase=%s;Uid=%s;Pwd=%s;charset=%s;UseDeclareFetch=1;Fetch=4096", getOdbcDriver(), getHost(), getPort(), @@ -282,6 +282,7 @@ public class OdbcTable extends Table { getUserName(), getPasswd(), "utf8"); + break; case MYSQL: connectString = String.format("Driver=%s;Server=%s;Port=%s;DataBase=%s;Uid=%s;Pwd=%s;charset=%s;forward_cursor=1;no_cache=1", getOdbcDriver(), diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java index 3120eab648..5aa9eb234c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java @@ -172,7 +172,10 @@ public class MysqlProto { // with password. // So Doris support the Protocol::AuthSwitchRequest to tell client to keep the default password plugin // which Doris is using now. - if (!handshakePacket.checkAuthPluginSameAsDoris(authPacket.getPluginName())) { + // Note: Check the authPacket whether support plugin auth firstly, before we check AuthPlugin between doris and client + // to compatible with older version: like mysql 5.1 + if (authPacket.getCapability().isPluginAuth() && + !handshakePacket.checkAuthPluginSameAsDoris(authPacket.getPluginName())) { // 1. clear the serializer serializer.reset(); // 2. build the auth switch request and send to the client