|
16 | 16 | */ |
17 | 17 | package org.apache.calcite.schema.impl; |
18 | 18 |
|
| 19 | +import java.util.Optional; |
| 20 | + |
19 | 21 | import org.apache.calcite.adapter.java.AbstractQueryableTable; |
20 | 22 | import org.apache.calcite.jdbc.CalciteSchema; |
21 | 23 | import org.apache.calcite.linq4j.QueryProvider; |
|
26 | 28 | import org.apache.calcite.rel.RelRoot; |
27 | 29 | import org.apache.calcite.rel.RelShuttleImpl; |
28 | 30 | import org.apache.calcite.rel.core.TableScan; |
| 31 | +import org.apache.calcite.rel.hint.Hintable; |
| 32 | +import org.apache.calcite.rel.hint.RelHint; |
29 | 33 | import org.apache.calcite.rel.type.RelDataType; |
30 | 34 | import org.apache.calcite.rel.type.RelDataTypeFactory; |
31 | 35 | import org.apache.calcite.rel.type.RelProtoDataType; |
@@ -137,7 +141,16 @@ private RelRoot expandView(RelOptTable.ToRelContext context, |
137 | 141 | final TranslatableTable translatableTable = |
138 | 142 | table.unwrap(TranslatableTable.class); |
139 | 143 | if (translatableTable != null) { |
140 | | - return translatableTable.toRel(context, table); |
| 144 | + RelNode result = translatableTable.toRel(context, table); |
| 145 | + if ( result instanceof Hintable) { |
| 146 | + Optional<RelHint> parameter = scan.getHints().stream() |
| 147 | + .filter(hint -> hint.hintName.equals("PARAMETERS")) |
| 148 | + .findAny(); |
| 149 | + if ( parameter.isPresent()) { |
| 150 | + result = ((Hintable)result).attachHints(ImmutableList.of(parameter.get())); |
| 151 | + } |
| 152 | + } |
| 153 | + return result; |
141 | 154 | } |
142 | 155 | return super.visit(scan); |
143 | 156 | } |
|
0 commit comments