All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.flink.sql.parser.plan.builder.BlinkRelBuilder Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.flink.sql.parser.plan.builder;

import org.apache.calcite.adapter.java.JavaTypeFactory;
import org.apache.calcite.config.CalciteConnectionConfig;
import org.apache.calcite.config.CalciteConnectionConfigImpl;
import org.apache.calcite.config.CalciteConnectionProperty;
import org.apache.calcite.jdbc.CalciteSchema;
import org.apache.calcite.jdbc.JavaTypeFactoryImpl;
import org.apache.calcite.plan.Context;
import org.apache.calcite.plan.Contexts;
import org.apache.calcite.plan.ConventionTraitDef;
import org.apache.calcite.plan.RelOptCluster;
import org.apache.calcite.plan.RelOptPlanner;
import org.apache.calcite.plan.RelOptSchema;
import org.apache.calcite.plan.volcano.VolcanoPlanner;
import org.apache.calcite.prepare.CalciteCatalogReader;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.tools.FrameworkConfig;
import org.apache.calcite.tools.RelBuilder;

import java.util.Properties;

/**
 * Blink rel builder.
 */
public class BlinkRelBuilder extends RelBuilder {

	public BlinkRelBuilder(Context context, RelOptCluster cluster, RelOptSchema relOptSchema) {
		super(context, cluster, relOptSchema);
	}

	public RelOptPlanner getPlanner() {
		return this.cluster.getPlanner();
	}

	public static BlinkRelBuilder create(FrameworkConfig config) {
		JavaTypeFactory typeFactory = new JavaTypeFactoryImpl(config.getTypeSystem());

		VolcanoPlanner planner = new VolcanoPlanner(config.getCostFactory(), Contexts.empty());
		planner.setExecutor(config.getExecutor());
		planner.addRelTraitDef(ConventionTraitDef.INSTANCE);

		RelOptCluster cluster = RelOptCluster.create(planner, new RexBuilder(typeFactory));
		CalciteSchema calciteSchema = CalciteSchema.from(config.getDefaultSchema());
		Properties prop = new Properties();
		prop.setProperty(CalciteConnectionProperty.CASE_SENSITIVE.camelName(),
			String.valueOf(config.getParserConfig().caseSensitive()));
		CalciteConnectionConfig connectionConfig = new CalciteConnectionConfigImpl(prop);
		RelOptSchema relOptSchema = new CalciteCatalogReader(
			calciteSchema,
			CalciteSchema.from(config.getDefaultSchema()).path(null),
			typeFactory,
			connectionConfig);

		return new BlinkRelBuilder(config.getContext(), cluster, relOptSchema);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy