[MySQL Compatibility 2/4][Bug] Fix bug and improve compatibility with mysql protocol (#4362)
1. select database() will only return database name, without cluster name. 2. select user() will return the IP which user connected in.
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
package org.apache.doris.analysis;
|
||||
|
||||
import org.apache.doris.catalog.Type;
|
||||
import org.apache.doris.cluster.ClusterNamespace;
|
||||
import org.apache.doris.common.AnalysisException;
|
||||
import org.apache.doris.qe.ConnectContext;
|
||||
import org.apache.doris.thrift.TExprNode;
|
||||
@ -41,6 +42,10 @@ public class InformationFunction extends Expr {
|
||||
strValue = other.strValue;
|
||||
}
|
||||
|
||||
public String getStrValue() {
|
||||
return strValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr clone() {
|
||||
return new InformationFunction(this);
|
||||
@ -50,7 +55,7 @@ public class InformationFunction extends Expr {
|
||||
protected void analyzeImpl(Analyzer analyzer) throws AnalysisException {
|
||||
if (funcType.equalsIgnoreCase("DATABASE") || funcType.equalsIgnoreCase("SCHEMA")) {
|
||||
type = Type.VARCHAR;
|
||||
strValue = analyzer.getDefaultDb();
|
||||
strValue = ClusterNamespace.getNameFromFullName(analyzer.getDefaultDb());
|
||||
} else if (funcType.equalsIgnoreCase("USER")) {
|
||||
type = Type.VARCHAR;
|
||||
strValue = ConnectContext.get().getUserIdentity().toString();
|
||||
|
||||
@ -104,6 +104,7 @@ public class MysqlProto {
|
||||
|
||||
context.setCurrentUserIdentity(currentUserIdentity.get(0));
|
||||
context.setQualifiedUser(qualifiedUser);
|
||||
context.setRemoteIP(remoteIp);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -17,10 +17,12 @@
|
||||
|
||||
package org.apache.doris.planner;
|
||||
|
||||
import org.apache.doris.analysis.Analyzer;
|
||||
import org.apache.doris.analysis.CreateDbStmt;
|
||||
import org.apache.doris.analysis.CreateTableStmt;
|
||||
import org.apache.doris.analysis.DropDbStmt;
|
||||
import org.apache.doris.analysis.Expr;
|
||||
import org.apache.doris.analysis.InformationFunction;
|
||||
import org.apache.doris.analysis.LoadStmt;
|
||||
import org.apache.doris.analysis.SelectStmt;
|
||||
import org.apache.doris.analysis.ShowCreateDbStmt;
|
||||
@ -48,8 +50,6 @@ import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@ -989,7 +989,6 @@ public class QueryPlanTest {
|
||||
explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);
|
||||
Assert.assertTrue(explainString.contains("INNER JOIN (PARTITIONED)"));
|
||||
|
||||
|
||||
connectContext.getSessionVariable().setPreferJoinMethod("broadcast");
|
||||
explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);
|
||||
Assert.assertTrue(explainString.contains("INNER JOIN (BROADCAST)"));
|
||||
@ -1021,4 +1020,23 @@ public class QueryPlanTest {
|
||||
Assert.assertFalse(explainString.contains(denseRank));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInformationFunctions() throws Exception {
|
||||
connectContext.setDatabase("default_cluster:test");
|
||||
Analyzer analyzer = new Analyzer(connectContext.getCatalog(), connectContext);
|
||||
InformationFunction infoFunc = new InformationFunction("database");
|
||||
infoFunc.analyze(analyzer);
|
||||
Assert.assertEquals("test", infoFunc.getStrValue());
|
||||
|
||||
infoFunc = new InformationFunction("user");
|
||||
infoFunc.analyze(analyzer);
|
||||
Assert.assertEquals("'root'@'127.0.0.1'", infoFunc.getStrValue());
|
||||
|
||||
infoFunc = new InformationFunction("current_user");
|
||||
infoFunc.analyze(analyzer);
|
||||
Assert.assertEquals("'root'@'%'", infoFunc.getStrValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -17,7 +17,6 @@
|
||||
|
||||
package org.apache.doris.utframe;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import org.apache.doris.analysis.Analyzer;
|
||||
import org.apache.doris.analysis.SqlParser;
|
||||
import org.apache.doris.analysis.SqlScanner;
|
||||
@ -28,7 +27,6 @@ import org.apache.doris.catalog.DiskInfo;
|
||||
import org.apache.doris.common.AnalysisException;
|
||||
import org.apache.doris.common.Config;
|
||||
import org.apache.doris.common.DdlException;
|
||||
import org.apache.doris.common.Pair;
|
||||
import org.apache.doris.common.util.SqlParserUtils;
|
||||
import org.apache.doris.mysql.privilege.PaloAuth;
|
||||
import org.apache.doris.planner.Planner;
|
||||
@ -46,19 +44,18 @@ import org.apache.doris.utframe.MockedFrontend.EnvVarNotSetException;
|
||||
import org.apache.doris.utframe.MockedFrontend.FeStartException;
|
||||
import org.apache.doris.utframe.MockedFrontend.NotInitException;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.net.ServerSocket;
|
||||
import java.nio.channels.SocketChannel;
|
||||
import java.nio.file.Files;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -72,6 +69,7 @@ public class UtFrameUtils {
|
||||
ctx.setCluster(SystemInfoService.DEFAULT_CLUSTER);
|
||||
ctx.setCurrentUserIdentity(UserIdentity.ROOT);
|
||||
ctx.setQualifiedUser(PaloAuth.ROOT_USER);
|
||||
ctx.setRemoteIP("127.0.0.1");
|
||||
ctx.setCatalog(Catalog.getCurrentCatalog());
|
||||
ctx.setThreadLocalInfo();
|
||||
return ctx;
|
||||
@ -223,3 +221,4 @@ public class UtFrameUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user