public interface SqlTester extends AutoCloseable
The idea is that when you define an operator (or another piece of SQL functionality), you can define the logical behavior of that operator once, as part of that operator. Later you can define one or more physical implementations of that operator, and test them all using the same set of tests.
Specific implementations of SqlTester might evaluate the
queries in different ways, for example, using a C++ versus Java calculator.
An implementation might even ignore certain calls altogether.
| 限定符和类型 | 接口和说明 |
|---|---|
static interface |
SqlTester.ParameterChecker
Parameter checker.
|
static interface |
SqlTester.ResultChecker
Result checker.
|
static interface |
SqlTester.TypeChecker
Type checker.
|
static interface |
SqlTester.ValidatedNodeConsumer
Action that is called after validation.
|
static interface |
SqlTester.ValidatedNodeFunction<R>
A function to apply to the result of validation.
|
static class |
SqlTester.VmName
Name of a virtual machine that can potentially implement an operator.
|
| 限定符和类型 | 方法和说明 |
|---|---|
void |
assertConvertsTo(SqlTestFactory factory,
DiffRepository diffRepos,
String sql,
String plan,
boolean trim,
boolean expression,
boolean decorrelate)
Checks that a SQL statement converts to a given plan, optionally
trimming columns that are not needed.
|
void |
assertExceptionIsThrown(SqlTestFactory factory,
org.apache.calcite.sql.parser.StringAndPos sap,
@Nullable String expectedMsgPattern)
Checks that a query is valid, or, if invalid, throws the right
message at the right location.
|
void |
check(SqlTestFactory factory,
String query,
SqlTester.TypeChecker typeChecker,
SqlTester.ParameterChecker parameterChecker,
SqlTester.ResultChecker resultChecker)
Tests that a SQL query returns a result of expected type and value.
|
default void |
check(SqlTestFactory factory,
String query,
SqlTester.TypeChecker typeChecker,
SqlTester.ResultChecker resultChecker)
Tests that a SQL query returns a single column with the given type.
|
void |
checkAgg(SqlTestFactory factory,
String expr,
String[] inputValues,
SqlTester.ResultChecker resultChecker)
Checks that an aggregate expression returns the expected result.
|
void |
checkAggFails(SqlTestFactory factory,
String expr,
String[] inputValues,
String expectedError,
boolean runtime)
Tests that an aggregate expression fails at run time.
|
void |
checkColumnType(SqlTestFactory factory,
String sql,
String type)
Checks that a query returns one column of an expected type.
|
void |
checkFails(SqlTestFactory factory,
org.apache.calcite.sql.parser.StringAndPos expression,
String expectedError,
boolean runtime)
Tests that a scalar SQL expression fails at run time.
|
default void |
checkFails(SqlTestFactory factory,
String expression,
String expectedError,
boolean runtime)
As
checkFails(SqlTestFactory, StringAndPos, String, boolean),
but with a string that contains carets. |
void |
checkQueryFails(SqlTestFactory factory,
org.apache.calcite.sql.parser.StringAndPos sap,
String expectedError)
Tests that a SQL query fails at prepare time.
|
void |
checkWinAgg(SqlTestFactory factory,
String expr,
String[] inputValues,
String windowSpec,
String type,
SqlTester.ResultChecker resultChecker)
Checks that a windowed aggregate expression returns the expected result.
|
default org.apache.calcite.rel.RelRoot |
convertSqlToRel(SqlTestFactory factory,
String sql,
boolean decorrelate,
boolean trim)
Converts a SQL string to a
RelNode tree. |
org.apache.calcite.util.Pair<org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.rel.RelRoot> |
convertSqlToRel2(SqlTestFactory factory,
String sql,
boolean decorrelate,
boolean trim)
Converts a SQL string to a (SqlValidator, RelNode) pair.
|
void |
forEachQuery(SqlTestFactory factory,
String expression,
Consumer<String> consumer)
Given a scalar expression, generates a sequence of SQL queries that
evaluate it, and calls a given action with each.
|
org.apache.calcite.rel.type.RelDataType |
getColumnType(SqlTestFactory factory,
String sql)
Returns the data type of the sole column of a SQL query.
|
org.apache.calcite.rel.type.RelDataType |
getResultType(SqlTestFactory factory,
String sql)
Returns the data type of the row returned by a SQL query.
|
org.apache.calcite.sql.SqlNode |
parseExpression(SqlTestFactory factory,
String expr)
Parses an expression.
|
org.apache.calcite.sql.SqlNode |
parseQuery(SqlTestFactory factory,
String sql)
Parses a query.
|
void |
setFor(org.apache.calcite.sql.SqlOperator operator,
SqlTester.VmName... unimplementedVmNames)
Declares that this test is for a given operator.
|
org.apache.calcite.rel.RelNode |
trimRelNode(SqlTestFactory factory,
org.apache.calcite.rel.RelNode relNode)
Trims a RelNode.
|
<R> R |
validateAndApply(SqlTestFactory factory,
org.apache.calcite.sql.parser.StringAndPos sap,
SqlTester.ValidatedNodeFunction<R> function)
Parses and validates a query, then calls a function on the result.
|
void |
validateAndThen(SqlTestFactory factory,
org.apache.calcite.sql.parser.StringAndPos sap,
SqlTester.ValidatedNodeConsumer consumer)
Parses and validates a query, then calls an action on the result.
|
closevoid forEachQuery(SqlTestFactory factory, String expression, Consumer<String> consumer)
factory - Factoryexpression - Scalar expressionconsumer - Action to be called for each queryorg.apache.calcite.sql.SqlNode parseQuery(SqlTestFactory factory, String sql) throws org.apache.calcite.sql.parser.SqlParseException
org.apache.calcite.sql.parser.SqlParseExceptionorg.apache.calcite.sql.SqlNode parseExpression(SqlTestFactory factory, String expr) throws org.apache.calcite.sql.parser.SqlParseException
org.apache.calcite.sql.parser.SqlParseExceptionvoid validateAndThen(SqlTestFactory factory, org.apache.calcite.sql.parser.StringAndPos sap, SqlTester.ValidatedNodeConsumer consumer)
<R> R validateAndApply(SqlTestFactory factory, org.apache.calcite.sql.parser.StringAndPos sap, SqlTester.ValidatedNodeFunction<R> function)
void assertExceptionIsThrown(SqlTestFactory factory, org.apache.calcite.sql.parser.StringAndPos sap, @Nullable String expectedMsgPattern)
If expectedMsgPattern is null, the query must
succeed.
If expectedMsgPattern is not null, the query must
fail, and give an error location of (expectedLine, expectedColumn)
through (expectedEndLine, expectedEndColumn).
factory - Factorysap - SQL statementexpectedMsgPattern - If this parameter is null the query must beorg.apache.calcite.rel.type.RelDataType getColumnType(SqlTestFactory factory, String sql)
For example, getResultType("VALUES (1") returns
INTEGER.
Fails if query returns more than one column.
org.apache.calcite.rel.type.RelDataType getResultType(SqlTestFactory factory, String sql)
For example, getResultType("VALUES (1, 'foo')")
returns RecordType(INTEGER EXPR$0, CHAR(3) EXPR#1).
void checkColumnType(SqlTestFactory factory, String sql, String type)
checkType("VALUES (1 + 2)", "INTEGER NOT NULL").factory - Factorysql - Query expressiontype - Type stringdefault void check(SqlTestFactory factory, String query, SqlTester.TypeChecker typeChecker, SqlTester.ResultChecker resultChecker)
check("VALUES (1 + 2)", "3", SqlTypeName.Integer);
If result is null, the expression must yield the SQL NULL
value. If result is a Pattern, the
result must match that pattern.
factory - Factoryquery - SQL querytypeChecker - Checks whether the result is the expected typeresultChecker - Checks whether the result has the expected valuevoid check(SqlTestFactory factory, String query, SqlTester.TypeChecker typeChecker, SqlTester.ParameterChecker parameterChecker, SqlTester.ResultChecker resultChecker)
SqlTester.TypeChecker
and SqlTester.ResultChecker functors.factory - Factoryquery - SQL querytypeChecker - Checks whether the result is the expected typeparameterChecker - Checks whether the parameters are of expected
typesresultChecker - Checks whether the result has the expected valuevoid setFor(org.apache.calcite.sql.SqlOperator operator,
SqlTester.VmName... unimplementedVmNames)
operator - OperatorunimplementedVmNames - Names of virtual machines for which thisvoid checkAgg(SqlTestFactory factory, String expr, String[] inputValues, SqlTester.ResultChecker resultChecker)
For example, checkAgg("AVG(DISTINCT x)", new String[] {"2", "3",
null, "3" }, new Double(2.5), 0);
factory - Factoryexpr - Aggregate expression, e.g. SUM(DISTINCT x)inputValues - Array of input values, e.g. ["1", null, "2"]resultChecker - Checks whether the result has the expected valuevoid checkWinAgg(SqlTestFactory factory, String expr, String[] inputValues, String windowSpec, String type, SqlTester.ResultChecker resultChecker)
For example, checkWinAgg("FIRST_VALUE(x)", new String[] {"2",
"3", null, "3" }, "INTEGER NOT NULL", 2, 0d);
factory - Factoryexpr - Aggregate expression, e.g. SUM(DISTINCT x)inputValues - Array of input values, e.g. ["1", null, "2"]type - Expected result typeresultChecker - Checks whether the result has the expected valuevoid checkAggFails(SqlTestFactory factory, String expr, String[] inputValues, String expectedError, boolean runtime)
factory - Factoryexpr - An aggregate expressioninputValues - Array of input valuesexpectedError - Pattern for expected errorruntime - If true, must fail at runtime; if false, must fail at
validate timevoid checkFails(SqlTestFactory factory, org.apache.calcite.sql.parser.StringAndPos expression, String expectedError, boolean runtime)
factory - Factoryexpression - SQL scalar expressionexpectedError - Pattern for expected error. If !runtime, must
include an error location.runtime - If true, must fail at runtime; if false, must fail at
validate timedefault void checkFails(SqlTestFactory factory, String expression, String expectedError, boolean runtime)
checkFails(SqlTestFactory, StringAndPos, String, boolean),
but with a string that contains carets.void checkQueryFails(SqlTestFactory factory, org.apache.calcite.sql.parser.StringAndPos sap, String expectedError)
factory - Factorysap - SQL query and error positionexpectedError - Pattern for expected error. Must
include an error location.default org.apache.calcite.rel.RelRoot convertSqlToRel(SqlTestFactory factory, String sql, boolean decorrelate, boolean trim)
RelNode tree.factory - Factorysql - SQL statementdecorrelate - Whether to decorrelatetrim - Whether to trimorg.apache.calcite.util.Pair<org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.rel.RelRoot> convertSqlToRel2(SqlTestFactory factory, String sql, boolean decorrelate, boolean trim)
void assertConvertsTo(SqlTestFactory factory, DiffRepository diffRepos, String sql, String plan, boolean trim, boolean expression, boolean decorrelate)
factory - FactorydiffRepos - Diff repositorysql - SQL query or expressionplan - Expected plantrim - Whether to trim columns that are not neededexpression - True if sql is an expression, false if it is a queryorg.apache.calcite.rel.RelNode trimRelNode(SqlTestFactory factory, org.apache.calcite.rel.RelNode relNode)
Copyright © 2012-2023 Apache Software Foundation. All Rights Reserved.