1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sqlfederation.optimizer.metadata.view;
19
20 import lombok.RequiredArgsConstructor;
21 import org.apache.calcite.plan.RelOptTable.ViewExpander;
22 import org.apache.calcite.rel.RelRoot;
23 import org.apache.calcite.rel.type.RelDataType;
24 import org.apache.calcite.sql.SqlNode;
25 import org.apache.calcite.sql2rel.SqlToRelConverter;
26 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
27 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
28 import org.apache.shardingsphere.parser.rule.SQLParserRule;
29 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
30 import org.apache.shardingsphere.sqlfederation.optimizer.converter.SQLNodeConverterEngine;
31 import org.checkerframework.checker.nullness.qual.Nullable;
32
33 import java.util.List;
34
35
36
37
38 @RequiredArgsConstructor
39 public final class ShardingSphereViewExpander implements ViewExpander {
40
41 private final SQLParserRule sqlParserRule;
42
43 private final DatabaseType databaseType;
44
45 private final SqlToRelConverter sqlToRelConverter;
46
47 @Override
48 public RelRoot expandView(final RelDataType rowType, final String queryString, final List<String> schemaPath, @Nullable final List<String> viewPath) {
49 SQLStatement sqlStatement = new SQLStatementParserEngine(databaseType, sqlParserRule.getSqlStatementCache(),
50 sqlParserRule.getParseTreeCache()).parse(queryString, false);
51 SqlNode sqlNode = SQLNodeConverterEngine.convert(sqlStatement);
52 return sqlToRelConverter.convertQuery(sqlNode, true, true);
53 }
54 }