Skip to content

Commit

Permalink
[CALCITE-1321] When converting IN-list to join, make minimum list siz…
Browse files Browse the repository at this point in the history
…e configurable (Gautam Parai)

Add SqlToRelConverter.Config, so that all configuration parameters
can be passed as a single immutable object.

Close apache#257
  • Loading branch information
Gautam Parai authored and julianhyde committed Jul 27, 2016
1 parent a0c9883 commit c933c79
Show file tree
Hide file tree
Showing 10 changed files with 365 additions and 129 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,10 @@ void populate(Materialization materialization) {
} catch (SqlParseException e) {
throw new RuntimeException("parse failed", e);
}

final SqlToRelConverter.Config config = SqlToRelConverter.configBuilder()
.withTrimUnusedFields(true).build();
SqlToRelConverter sqlToRelConverter2 =
getSqlToRelConverter(getSqlValidator(), catalogReader);
getSqlToRelConverter(getSqlValidator(), catalogReader, config);

materialization.queryRel =
sqlToRelConverter2.convertQuery(node, true, true).rel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -297,14 +297,20 @@ private ParseResult convert_(Context context, String sql, boolean analyze,
: EnumerableConvention.INSTANCE;
final HepPlanner planner = new HepPlanner(new HepProgramBuilder().build());
planner.addRelTraitDef(ConventionTraitDef.INSTANCE);

final SqlToRelConverter.ConfigBuilder configBuilder =
SqlToRelConverter.configBuilder().withTrimUnusedFields(true);
if (analyze) {
configBuilder.withConvertTableAccess(false);
}

final CalcitePreparingStmt preparingStmt =
new CalcitePreparingStmt(this, context, catalogReader, typeFactory,
context.getRootSchema(), null, planner, resultConvention);
final SqlToRelConverter converter =
preparingStmt.getSqlToRelConverter(validator, catalogReader);
if (analyze) {
converter.enableTableAccessConversion(false);
}
preparingStmt.getSqlToRelConverter(validator, catalogReader,
configBuilder.build());

final RelRoot root = converter.convertQuery(sqlNode1, false, true);
if (analyze) {
return analyze_(validator, sql, sqlNode1, root, fail);
Expand Down Expand Up @@ -1095,12 +1101,12 @@ private PreparedResult prepare_(Supplier<RelNode> fn,

@Override protected SqlToRelConverter getSqlToRelConverter(
SqlValidator validator,
CatalogReader catalogReader) {
CatalogReader catalogReader,
SqlToRelConverter.Config config) {
final RelOptCluster cluster = prepare.createCluster(planner, rexBuilder);
SqlToRelConverter sqlToRelConverter =
new SqlToRelConverter(this, validator, catalogReader, cluster,
StandardConvertletTable.INSTANCE);
sqlToRelConverter.setTrimUnusedFields(true);
StandardConvertletTable.INSTANCE, config);
return sqlToRelConverter;
}

Expand Down Expand Up @@ -1135,9 +1141,10 @@ private PreparedResult prepare_(Supplier<RelNode> fn,
this.catalogReader.withSchemaPath(schemaPath);
SqlValidator validator = createSqlValidator(catalogReader);
SqlNode sqlNode1 = validator.validate(sqlNode);

final SqlToRelConverter.Config config = SqlToRelConverter.configBuilder()
.withTrimUnusedFields(true).build();
SqlToRelConverter sqlToRelConverter =
getSqlToRelConverter(validator, catalogReader);
getSqlToRelConverter(validator, catalogReader, config);
RelRoot root =
sqlToRelConverter.convertQuery(sqlNode1, true, false);

Expand Down
13 changes: 6 additions & 7 deletions core/src/main/java/org/apache/calcite/prepare/PlannerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -218,11 +218,11 @@ public RelRoot rel(SqlNode sql) throws RelConversionException {
assert validatedSqlNode != null;
final RexBuilder rexBuilder = createRexBuilder();
final RelOptCluster cluster = RelOptCluster.create(planner, rexBuilder);
final SqlToRelConverter.Config config = SqlToRelConverter.configBuilder()
.withTrimUnusedFields(false).withConvertTableAccess(false).build();
final SqlToRelConverter sqlToRelConverter =
new SqlToRelConverter(new ViewExpanderImpl(), validator,
createCatalogReader(), cluster, convertletTable);
sqlToRelConverter.setTrimUnusedFields(false);
sqlToRelConverter.enableTableAccessConversion(false);
createCatalogReader(), cluster, convertletTable, config);
root =
sqlToRelConverter.convertQuery(validatedSqlNode, false, true);
root = root.withRel(sqlToRelConverter.flattenTypes(root.rel, true));
Expand Down Expand Up @@ -255,12 +255,11 @@ public RelRoot expandView(RelDataType rowType, String queryString,

final RexBuilder rexBuilder = createRexBuilder();
final RelOptCluster cluster = RelOptCluster.create(planner, rexBuilder);
final SqlToRelConverter.Config config = SqlToRelConverter.configBuilder()
.withTrimUnusedFields(false).withConvertTableAccess(false).build();
final SqlToRelConverter sqlToRelConverter =
new SqlToRelConverter(new ViewExpanderImpl(), validator,
catalogReader, cluster, convertletTable);

sqlToRelConverter.setTrimUnusedFields(false);
sqlToRelConverter.enableTableAccessConversion(false);
catalogReader, cluster, convertletTable, config);

root = sqlToRelConverter.convertQuery(validatedSqlNode, true, false);
root = root.withRel(sqlToRelConverter.flattenTypes(root.rel, true));
Expand Down
25 changes: 16 additions & 9 deletions core/src/main/java/org/apache/calcite/prepare/Prepare.java
Original file line number Diff line number Diff line change
Expand Up @@ -208,16 +208,21 @@ public PreparedResult prepareSql(

init(runtimeContextClass);

SqlToRelConverter sqlToRelConverter =
getSqlToRelConverter(validator, catalogReader);
sqlToRelConverter.setExpand(THREAD_EXPAND.get());
final SqlToRelConverter.ConfigBuilder builder =
SqlToRelConverter.configBuilder()
.withTrimUnusedFields(true)
.withExpand(THREAD_EXPAND.get())
.withExplain(sqlQuery.getKind() == SqlKind.EXPLAIN);
final SqlToRelConverter sqlToRelConverter =
getSqlToRelConverter(validator, catalogReader, builder.build());

SqlExplain sqlExplain = null;
if (sqlQuery.getKind() == SqlKind.EXPLAIN) {
// dig out the underlying SQL statement
sqlExplain = (SqlExplain) sqlQuery;
sqlQuery = sqlExplain.getExplicandum();
sqlToRelConverter.setIsExplain(sqlExplain.getDynamicParamCount());
sqlToRelConverter.setDynamicParamCountInExplain(
sqlExplain.getDynamicParamCount());
}

RelRoot root =
Expand Down Expand Up @@ -319,7 +324,8 @@ protected LogicalTableModify.Operation mapTableModOp(
*/
protected abstract SqlToRelConverter getSqlToRelConverter(
SqlValidator validator,
CatalogReader catalogReader);
CatalogReader catalogReader,
SqlToRelConverter.Config config);

public abstract RelNode flattenTypes(
RelNode rootRel,
Expand All @@ -342,11 +348,12 @@ protected abstract RelNode decorrelate(SqlToRelConverter sqlToRelConverter,
* @return Trimmed relational expression
*/
protected RelRoot trimUnusedFields(RelRoot root) {
final SqlToRelConverter.Config config = SqlToRelConverter.configBuilder()
.withTrimUnusedFields(shouldTrim(root.rel))
.withExpand(THREAD_EXPAND.get())
.build();
final SqlToRelConverter converter =
getSqlToRelConverter(
getSqlValidator(), catalogReader);
converter.setTrimUnusedFields(shouldTrim(root.rel));
converter.setExpand(THREAD_EXPAND.get());
getSqlToRelConverter(getSqlValidator(), catalogReader, config);
final boolean ordered = !root.collation.getFieldCollations().isEmpty();
final boolean dml = SqlKind.DML.contains(root.kind);
return root.withRel(converter.trimUnusedFields(dml || ordered, root.rel));
Expand Down
Loading

0 comments on commit c933c79

Please sign in to comment.