Class CalcitePrepareImpl
- java.lang.Object
-
- org.apache.calcite.prepare.CalcitePrepareImpl
-
- All Implemented Interfaces:
CalcitePrepare
public class CalcitePrepareImpl extends java.lang.Object implements CalcitePrepare
Shit just got real.This class is public so that projects that create their own JDBC driver and server can fine-tune preferences. However, this class and its methods are subject to change without notice.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
CalcitePrepareImpl.CalcitePreparedExplain
AnEXPLAIN
statement, prepared and ready to execute.(package private) static class
CalcitePrepareImpl.CalcitePreparingStmt
Holds state for the process of preparing a SQL statement.(package private) static class
CalcitePrepareImpl.EmptyScalarTranslator
Basic translator.private static class
CalcitePrepareImpl.LambdaScalarTranslator
Translator that looks for parameters.(package private) static interface
CalcitePrepareImpl.ScalarTranslator
Translator from Java AST toRexNode
.-
Nested classes/interfaces inherited from interface org.apache.calcite.jdbc.CalcitePrepare
CalcitePrepare.AnalyzeViewResult, CalcitePrepare.CalciteSignature<T>, CalcitePrepare.Context, CalcitePrepare.ConvertResult, CalcitePrepare.Dummy, CalcitePrepare.ParseResult, CalcitePrepare.Query<T>, CalcitePrepare.SparkHandler
-
-
Field Summary
Fields Modifier and Type Field Description static boolean
COMMUTE
private static java.util.List<RelOptRule>
CONSTANT_REDUCTION_RULES
static boolean
DEBUG
private static java.util.List<RelOptRule>
DEFAULT_RULES
private static boolean
ENABLE_COLLATION_TRAIT
Whether to enable the collation trait.static boolean
ENABLE_ENUMERABLE
Whether the enumerable convention is enabled.static boolean
ENABLE_STREAM
Whether the streaming is enabled.boolean
enableBindable
Whether the bindable convention should be the root convention of any plan.static java.util.List<RelOptRule>
ENUMERABLE_RULES
private static java.util.Set<java.lang.String>
SIMPLE_SQLS
-
Fields inherited from interface org.apache.calcite.jdbc.CalcitePrepare
DEFAULT_FACTORY, THREAD_CONTEXT_STACK
-
-
Constructor Summary
Constructors Constructor Description CalcitePrepareImpl()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private CalcitePrepare.AnalyzeViewResult
analyze_(SqlValidator validator, java.lang.String sql, SqlNode sqlNode, RelRoot root, boolean fail)
CalcitePrepare.AnalyzeViewResult
analyzeView(CalcitePrepare.Context context, java.lang.String sql, boolean fail)
Analyzes a view.private org.apache.calcite.avatica.ColumnMetaData.AvaticaType
avaticaType(JavaTypeFactory typeFactory, RelDataType type, RelDataType fieldType)
CalcitePrepare.ConvertResult
convert(CalcitePrepare.Context context, java.lang.String sql)
private CalcitePrepare.ParseResult
convert_(CalcitePrepare.Context context, java.lang.String sql, boolean analyze, boolean fail, CalciteCatalogReader catalogReader, SqlValidator validator, SqlNode sqlNode1)
protected RelOptCluster
createCluster(RelOptPlanner planner, RexBuilder rexBuilder)
Factory method for cluster.protected SqlRexConvertletTable
createConvertletTable()
Factory method for default convertlet table.protected SqlParser
createParser(java.lang.String sql)
Factory method for default SQL parser.protected SqlParser
createParser(java.lang.String sql, SqlParser.ConfigBuilder parserConfig)
Factory method for SQL parser with a given configuration.protected SqlParser.ConfigBuilder
createParserConfig()
Factory method for SQL parser configuration.protected RelOptPlanner
createPlanner(CalcitePrepare.Context prepareContext)
Creates a query planner and initializes it with a default set of rules.protected RelOptPlanner
createPlanner(CalcitePrepare.Context prepareContext, Context externalContext, RelOptCostFactory costFactory)
Creates a query planner and initializes it with a default set of rules.protected java.util.List<Function1<CalcitePrepare.Context,RelOptPlanner>>
createPlannerFactories()
Creates a collection of planner factories.private SqlValidator
createSqlValidator(CalcitePrepare.Context context, CalciteCatalogReader catalogReader)
void
executeDdl(CalcitePrepare.Context context, SqlNode node)
Executes a DDL statement.private static java.lang.String
getClassName(RelDataType type)
private java.util.List<org.apache.calcite.avatica.ColumnMetaData>
getColumnMetaDataList(JavaTypeFactory typeFactory, RelDataType x, RelDataType jdbcType, java.util.List<java.util.List<java.lang.String>> originList)
private static int
getPrecision(RelDataType type)
private static int
getScale(RelDataType type)
private org.apache.calcite.avatica.Meta.StatementType
getStatementType(Prepare.PreparedResult preparedResult)
Deduces the broad type of statement for a prepare result.private org.apache.calcite.avatica.Meta.StatementType
getStatementType(SqlKind kind)
Deduces the broad type of statement.private static java.lang.String
getTypeName(RelDataType type)
Returns the type name in string form.private int
getTypeOrdinal(RelDataType type)
private static RelDataType
makeStruct(RelDataTypeFactory typeFactory, RelDataType type)
private org.apache.calcite.avatica.ColumnMetaData
metaData(JavaTypeFactory typeFactory, int ordinal, java.lang.String fieldName, RelDataType type, RelDataType fieldType, java.util.List<java.lang.String> origins)
private static java.lang.String
origin(java.util.List<java.lang.String> origins, int offsetFromEnd)
CalcitePrepare.ParseResult
parse(CalcitePrepare.Context context, java.lang.String sql)
private CalcitePrepare.ParseResult
parse_(CalcitePrepare.Context context, java.lang.String sql, boolean convert, boolean analyze, boolean fail)
<R> R
perform(CalciteServerStatement statement, Frameworks.PrepareAction<R> action)
Executes a prepare action.protected void
populateMaterializations(CalcitePrepare.Context context, RelOptPlanner planner, Prepare.Materialization materialization)
(package private) <T> CalcitePrepare.CalciteSignature<T>
prepare_(CalcitePrepare.Context context, CalcitePrepare.Query<T> query, java.lang.reflect.Type elementType, long maxRowCount)
(package private) <T> CalcitePrepare.CalciteSignature<T>
prepare2_(CalcitePrepare.Context context, CalcitePrepare.Query<T> query, java.lang.reflect.Type elementType, long maxRowCount, CalciteCatalogReader catalogReader, RelOptPlanner planner)
<T> CalcitePrepare.CalciteSignature<T>
prepareQueryable(CalcitePrepare.Context context, Queryable<T> queryable)
<T> CalcitePrepare.CalciteSignature<T>
prepareSql(CalcitePrepare.Context context, CalcitePrepare.Query<T> query, java.lang.reflect.Type elementType, long maxRowCount)
private <T> CalcitePrepare.CalciteSignature<T>
simplePrepare(CalcitePrepare.Context context, java.lang.String sql)
Quickly prepares a simple SQL statement, circumventing the usual preparation process.
-
-
-
Field Detail
-
DEBUG
public static final boolean DEBUG
-
COMMUTE
public static final boolean COMMUTE
-
ENABLE_COLLATION_TRAIT
private static final boolean ENABLE_COLLATION_TRAIT
Whether to enable the collation trait. Some extra optimizations are possible if enabled, but queries should work either way. At some point this will become a preference, or we will run multiple phases: first disabled, then enabled.- See Also:
- Constant Field Values
-
enableBindable
public final boolean enableBindable
Whether the bindable convention should be the root convention of any plan. If not, enumerable convention is the default.
-
ENABLE_ENUMERABLE
public static final boolean ENABLE_ENUMERABLE
Whether the enumerable convention is enabled.- See Also:
- Constant Field Values
-
ENABLE_STREAM
public static final boolean ENABLE_STREAM
Whether the streaming is enabled.- See Also:
- Constant Field Values
-
SIMPLE_SQLS
private static final java.util.Set<java.lang.String> SIMPLE_SQLS
-
ENUMERABLE_RULES
public static final java.util.List<RelOptRule> ENUMERABLE_RULES
-
DEFAULT_RULES
private static final java.util.List<RelOptRule> DEFAULT_RULES
-
CONSTANT_REDUCTION_RULES
private static final java.util.List<RelOptRule> CONSTANT_REDUCTION_RULES
-
-
Method Detail
-
parse
public CalcitePrepare.ParseResult parse(CalcitePrepare.Context context, java.lang.String sql)
- Specified by:
parse
in interfaceCalcitePrepare
-
convert
public CalcitePrepare.ConvertResult convert(CalcitePrepare.Context context, java.lang.String sql)
- Specified by:
convert
in interfaceCalcitePrepare
-
analyzeView
public CalcitePrepare.AnalyzeViewResult analyzeView(CalcitePrepare.Context context, java.lang.String sql, boolean fail)
Description copied from interface:CalcitePrepare
Analyzes a view.- Specified by:
analyzeView
in interfaceCalcitePrepare
- Parameters:
context
- Contextsql
- View SQLfail
- Whether to fail (and throw a descriptive error message) if the view is not modifiable- Returns:
- Result of analyzing the view
-
parse_
private CalcitePrepare.ParseResult parse_(CalcitePrepare.Context context, java.lang.String sql, boolean convert, boolean analyze, boolean fail)
-
convert_
private CalcitePrepare.ParseResult convert_(CalcitePrepare.Context context, java.lang.String sql, boolean analyze, boolean fail, CalciteCatalogReader catalogReader, SqlValidator validator, SqlNode sqlNode1)
-
analyze_
private CalcitePrepare.AnalyzeViewResult analyze_(SqlValidator validator, java.lang.String sql, SqlNode sqlNode, RelRoot root, boolean fail)
-
executeDdl
public void executeDdl(CalcitePrepare.Context context, SqlNode node)
Description copied from interface:CalcitePrepare
Executes a DDL statement.The statement identified itself as DDL in the
CalcitePrepare.ParseResult.kind()
field.- Specified by:
executeDdl
in interfaceCalcitePrepare
-
createParser
protected SqlParser createParser(java.lang.String sql)
Factory method for default SQL parser.
-
createParser
protected SqlParser createParser(java.lang.String sql, SqlParser.ConfigBuilder parserConfig)
Factory method for SQL parser with a given configuration.
-
createParserConfig
protected SqlParser.ConfigBuilder createParserConfig()
Factory method for SQL parser configuration.
-
createConvertletTable
protected SqlRexConvertletTable createConvertletTable()
Factory method for default convertlet table.
-
createCluster
protected RelOptCluster createCluster(RelOptPlanner planner, RexBuilder rexBuilder)
Factory method for cluster.
-
createPlannerFactories
protected java.util.List<Function1<CalcitePrepare.Context,RelOptPlanner>> createPlannerFactories()
Creates a collection of planner factories.The collection must have at least one factory, and each factory must create a planner. If the collection has more than one planner, Calcite will try each planner in turn.
One of the things you can do with this mechanism is to try a simpler, faster, planner with a smaller rule set first, then fall back to a more complex planner for complex and costly queries.
The default implementation returns a factory that calls
createPlanner(org.apache.calcite.jdbc.CalcitePrepare.Context)
.
-
createPlanner
protected RelOptPlanner createPlanner(CalcitePrepare.Context prepareContext)
Creates a query planner and initializes it with a default set of rules.
-
createPlanner
protected RelOptPlanner createPlanner(CalcitePrepare.Context prepareContext, Context externalContext, RelOptCostFactory costFactory)
Creates a query planner and initializes it with a default set of rules.
-
prepareQueryable
public <T> CalcitePrepare.CalciteSignature<T> prepareQueryable(CalcitePrepare.Context context, Queryable<T> queryable)
- Specified by:
prepareQueryable
in interfaceCalcitePrepare
-
prepareSql
public <T> CalcitePrepare.CalciteSignature<T> prepareSql(CalcitePrepare.Context context, CalcitePrepare.Query<T> query, java.lang.reflect.Type elementType, long maxRowCount)
- Specified by:
prepareSql
in interfaceCalcitePrepare
-
prepare_
<T> CalcitePrepare.CalciteSignature<T> prepare_(CalcitePrepare.Context context, CalcitePrepare.Query<T> query, java.lang.reflect.Type elementType, long maxRowCount)
-
simplePrepare
private <T> CalcitePrepare.CalciteSignature<T> simplePrepare(CalcitePrepare.Context context, java.lang.String sql)
Quickly prepares a simple SQL statement, circumventing the usual preparation process.
-
getStatementType
private org.apache.calcite.avatica.Meta.StatementType getStatementType(SqlKind kind)
Deduces the broad type of statement. Currently returns SELECT for most statement types, but this may change.- Parameters:
kind
- Kind of statement
-
getStatementType
private org.apache.calcite.avatica.Meta.StatementType getStatementType(Prepare.PreparedResult preparedResult)
Deduces the broad type of statement for a prepare result. Currently returns SELECT for most statement types, but this may change.- Parameters:
preparedResult
- Prepare result
-
prepare2_
<T> CalcitePrepare.CalciteSignature<T> prepare2_(CalcitePrepare.Context context, CalcitePrepare.Query<T> query, java.lang.reflect.Type elementType, long maxRowCount, CalciteCatalogReader catalogReader, RelOptPlanner planner)
-
createSqlValidator
private SqlValidator createSqlValidator(CalcitePrepare.Context context, CalciteCatalogReader catalogReader)
-
getColumnMetaDataList
private java.util.List<org.apache.calcite.avatica.ColumnMetaData> getColumnMetaDataList(JavaTypeFactory typeFactory, RelDataType x, RelDataType jdbcType, java.util.List<java.util.List<java.lang.String>> originList)
-
metaData
private org.apache.calcite.avatica.ColumnMetaData metaData(JavaTypeFactory typeFactory, int ordinal, java.lang.String fieldName, RelDataType type, RelDataType fieldType, java.util.List<java.lang.String> origins)
-
avaticaType
private org.apache.calcite.avatica.ColumnMetaData.AvaticaType avaticaType(JavaTypeFactory typeFactory, RelDataType type, RelDataType fieldType)
-
origin
private static java.lang.String origin(java.util.List<java.lang.String> origins, int offsetFromEnd)
-
getTypeOrdinal
private int getTypeOrdinal(RelDataType type)
-
getClassName
private static java.lang.String getClassName(RelDataType type)
-
getScale
private static int getScale(RelDataType type)
-
getPrecision
private static int getPrecision(RelDataType type)
-
getTypeName
private static java.lang.String getTypeName(RelDataType type)
Returns the type name in string form. Does not include precision, scale or whether nulls are allowed. Example: "DECIMAL" not "DECIMAL(7, 2)"; "INTEGER" not "JavaType(int)".
-
populateMaterializations
protected void populateMaterializations(CalcitePrepare.Context context, RelOptPlanner planner, Prepare.Materialization materialization)
-
makeStruct
private static RelDataType makeStruct(RelDataTypeFactory typeFactory, RelDataType type)
-
perform
public <R> R perform(CalciteServerStatement statement, Frameworks.PrepareAction<R> action)
Executes a prepare action.
-
-