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 lombok.RequiredArgsConstructor;
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.proxy.backend.handler.admin.executor.DatabaseAdminQueryExecutor;
29 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
30 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
31 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
32 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
33
34 import java.sql.Types;
35 import java.util.Collection;
36 import java.util.Collections;
37
38
39
40
41 @RequiredArgsConstructor
42 @Getter
43 public final class ShowConnectionIdExecutor implements DatabaseAdminQueryExecutor {
44
45 public static final String FUNCTION_NAME = "connection_id()";
46
47 private final SelectStatement sqlStatement;
48
49 private MergedResult mergedResult;
50
51 @Override
52 public void execute(final ConnectionSession connectionSession) {
53 mergedResult = new LocalDataMergedResult(Collections.singleton(new LocalDataQueryResultRow(connectionSession.getConnectionId())));
54 }
55
56 @Override
57 public QueryResultMetaData getQueryResultMetaData() {
58 return new RawQueryResultMetaData(Collections.singletonList(new RawQueryResultColumnMetaData("", FUNCTION_NAME, getLabel(), Types.VARCHAR, "VARCHAR", 100, 0)));
59 }
60
61 private String getLabel() {
62 Collection<ProjectionSegment> projections = sqlStatement.getProjections().getProjections();
63 for (ProjectionSegment each : projections) {
64 if (each instanceof ExpressionProjectionSegment) {
65 return ((ExpressionProjectionSegment) each).getAliasName().orElse(FUNCTION_NAME);
66 }
67 }
68 return FUNCTION_NAME;
69 }
70 }