1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor;
19
20 import lombok.Getter;
21 import org.apache.shardingsphere.authority.rule.AuthorityRule;
22 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
23 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.raw.metadata.RawQueryResultColumnMetaData;
24 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.raw.metadata.RawQueryResultMetaData;
25 import org.apache.shardingsphere.infra.merge.result.MergedResult;
26 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataMergedResult;
27 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
28 import org.apache.shardingsphere.infra.metadata.user.Grantee;
29 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
30 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
31 import org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminQueryExecutor;
32 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
33
34 import java.sql.Types;
35 import java.util.Collections;
36 import java.util.Optional;
37
38
39
40
41 @Getter
42 public final class ShowCurrentUserExecutor implements DatabaseAdminQueryExecutor {
43
44 public static final String FUNCTION_NAME = "current_user()";
45
46 public static final String FUNCTION_NAME_ALIAS = "current_user";
47
48 private MergedResult mergedResult;
49
50 @Override
51 public void execute(final ConnectionSession connectionSession) {
52 AuthorityRule authorityRule = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
53 Optional<Grantee> grantee = authorityRule.findUser(connectionSession.getGrantee()).map(ShardingSphereUser::getGrantee);
54 mergedResult = new LocalDataMergedResult(Collections.singleton(new LocalDataQueryResultRow(grantee.isPresent() ? grantee.get().toString() : "")));
55 }
56
57 @Override
58 public QueryResultMetaData getQueryResultMetaData() {
59 return new RawQueryResultMetaData(Collections.singletonList(new RawQueryResultColumnMetaData("", FUNCTION_NAME, FUNCTION_NAME, Types.VARCHAR, "VARCHAR", 100, 0)));
60 }
61 }