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.db.protocol.constant.DatabaseProtocolServerInfo;
23 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
24 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
25 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.raw.metadata.RawQueryResultColumnMetaData;
26 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.raw.metadata.RawQueryResultMetaData;
27 import org.apache.shardingsphere.infra.merge.result.MergedResult;
28 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataMergedResult;
29 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
30 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
31 import org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminQueryExecutor;
32 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
33 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
34 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
35
36 import java.sql.Types;
37 import java.util.Collections;
38
39
40
41
42 @RequiredArgsConstructor
43 @Getter
44 public final class ShowVersionExecutor implements DatabaseAdminQueryExecutor {
45
46 public static final String FUNCTION_NAME = "version()";
47
48 private final SelectStatement sqlStatement;
49
50 private MergedResult mergedResult;
51
52 @Override
53 public void execute(final ConnectionSession connectionSession) {
54 mergedResult = new LocalDataMergedResult(Collections.singleton(new LocalDataQueryResultRow(
55 DatabaseProtocolServerInfo.getProtocolVersion(connectionSession.getDatabaseName(), TypedSPILoader.getService(DatabaseType.class, "MySQL")))));
56 }
57
58 @Override
59 public QueryResultMetaData getQueryResultMetaData() {
60 return new RawQueryResultMetaData(Collections.singletonList(new RawQueryResultColumnMetaData("", FUNCTION_NAME, getLabel(), Types.VARCHAR, "VARCHAR", 100, 0)));
61 }
62
63 private String getLabel() {
64 return sqlStatement.getProjections().getProjections().stream()
65 .filter(ExpressionProjectionSegment.class::isInstance).findFirst().map(each -> ((ExpressionProjectionSegment) each).getAliasName().orElse(FUNCTION_NAME)).orElse(FUNCTION_NAME);
66 }
67 }