17 package org.apache.calcite.prepare;
21 import org.apache.calcite.config.CalciteConnectionConfig;
22 import org.apache.calcite.config.CalciteConnectionConfigImpl;
23 import org.apache.calcite.config.CalciteConnectionProperty;
24 import org.apache.calcite.jdbc.CalciteSchema;
25 import org.apache.calcite.plan.Context;
26 import org.apache.calcite.plan.hep.HepPlanner;
27 import org.apache.calcite.plan.hep.HepProgram;
28 import org.apache.calcite.rel.RelNode;
29 import org.apache.calcite.rel.RelRoot;
30 import org.apache.calcite.rel.core.RelFactories;
32 import org.apache.calcite.rel.rules.FilterJoinRule;
33 import org.apache.calcite.schema.SchemaPlus;
34 import org.apache.calcite.sql.SqlNode;
35 import org.apache.calcite.sql.advise.SqlAdvisor;
36 import org.apache.calcite.sql.validate.SqlConformanceEnum;
37 import org.apache.calcite.sql.validate.SqlMoniker;
38 import org.apache.calcite.tools.FrameworkConfig;
39 import org.apache.calcite.tools.RelConversionException;
41 import java.lang.reflect.InvocationTargetException;
42 import java.lang.reflect.Method;
43 import java.util.ArrayList;
44 import java.util.List;
45 import java.util.Properties;
63 private static SchemaPlus
rootSchema(SchemaPlus schema) {
65 if (schema.getParentSchema() == null) {
68 schema = schema.getParentSchema();
84 final Context context = config.getContext();
85 final CalciteConnectionConfig connectionConfig;
87 if (context != null) {
88 connectionConfig = context.unwrap(CalciteConnectionConfig.class);
90 Properties properties =
new Properties();
91 properties.setProperty(CalciteConnectionProperty.CASE_SENSITIVE.camelName(),
92 String.valueOf(
config.getParserConfig().caseSensitive()));
93 connectionConfig =
new CalciteConnectionConfigImpl(properties);
96 return new CalciteCatalogReader(CalciteSchema.from(rootSchema),
97 CalciteSchema.from(config.getDefaultSchema()).path(null),
106 Method readyMethod = getClass().getSuperclass().getDeclaredMethod(
"ready");
107 readyMethod.setAccessible(
true);
108 readyMethod.invoke(
this);
109 }
catch (InvocationTargetException e) {
110 if (e.getCause() instanceof RuntimeException) {
111 throw(RuntimeException) e.getCause();
113 throw new RuntimeException(e.getCause());
115 }
catch (Exception e) {
116 throw new RuntimeException(e);
121 final String sql,
final int cursor,
final List<String> visibleTables) {
124 config.getOperatorTable(),
127 SqlConformanceEnum.LENIENT);
130 int adjusted_cursor = cursor < 0 ? sql.length() : cursor;
131 java.util.List<SqlMoniker> hints =
132 advisor.getCompletionHints(sql, adjusted_cursor, replaced);
137 public RelRoot
rel(SqlNode sql)
throws RelConversionException {
138 RelRoot root = super.rel(sql);
148 RelFactories.LOGICAL_BUILDER,
149 FilterJoinRule.TRUE_PREDICATE,
151 final HepProgram program =
152 HepProgram.builder().addRuleInstance(dynamicFilterJoinRule).build();
153 HepPlanner prePlanner =
new HepPlanner(program);
154 prePlanner.setRoot(root.rel);
155 final RelNode rootRelNode = prePlanner.findBestExp();
156 filterPushDownInfo.clear();
157 return root.withRel(rootRelNode);
static SchemaPlus rootSchema(SchemaPlus schema)
CalciteCatalogReader createCatalogReader()
List< MapDParserOptions.FilterPushDownInfo > filterPushDownInfo
CompletionResult(final List< SqlMoniker > hints, final String replaced)
void setFilterPushDownInfo(final List< MapDParserOptions.FilterPushDownInfo > filterPushDownInfo)
CompletionResult getCompletionHints(final String sql, final int cursor, final List< String > visibleTables)
MapDPlanner(FrameworkConfig config)
RelRoot applyFilterPushdown(RelRoot root)