Search in sources :

Example 91 with SqlIdentifier

use of org.apache.calcite.sql.SqlIdentifier in project flink by apache.

the class Expander method expanded.

/**
 * Expands identifiers in a given SQL string, returning a {@link Expanded}.
 */
public Expanded expanded(String ori) {
    final Map<SqlParserPos, SqlIdentifier> identifiers = new HashMap<>();
    final Map<String, SqlIdentifier> funcNameToId = new HashMap<>();
    final SqlNode oriNode = planner.parser().parse(ori);
    // parse again because validation is stateful, that means the node tree was probably
    // mutated.
    final SqlNode validated = planner.validate(planner.parser().parse(ori));
    validated.accept(new SqlBasicVisitor<Void>() {

        @Override
        public Void visit(SqlCall call) {
            SqlOperator operator = call.getOperator();
            if (operator instanceof BridgingSqlFunction) {
                final SqlIdentifier functionID = ((BridgingSqlFunction) operator).getSqlIdentifier();
                if (!functionID.isSimple()) {
                    funcNameToId.put(Util.last(functionID.names), functionID);
                }
            }
            return super.visit(call);
        }

        @Override
        public Void visit(SqlIdentifier identifier) {
            // and we stop expanding all of them.
            if (!identifier.names.get(0).startsWith("EXPR$")) {
                identifiers.putIfAbsent(identifier.getParserPosition(), identifier);
            }
            return null;
        }
    });
    return new Expanded(oriNode, identifiers, funcNameToId);
}
Also used : SqlParserPos(org.apache.calcite.sql.parser.SqlParserPos) HashMap(java.util.HashMap) SqlCall(org.apache.calcite.sql.SqlCall) SqlOperator(org.apache.calcite.sql.SqlOperator) BridgingSqlFunction(org.apache.flink.table.planner.functions.bridging.BridgingSqlFunction) SqlIdentifier(org.apache.calcite.sql.SqlIdentifier) SqlNode(org.apache.calcite.sql.SqlNode)

Example 92 with SqlIdentifier

use of org.apache.calcite.sql.SqlIdentifier in project flink by apache.

the class SqlToOperationConverter method convertSqlInsert.

/**
 * Convert insert into statement.
 */
private Operation convertSqlInsert(RichSqlInsert insert) {
    // Get sink table name.
    List<String> targetTablePath = ((SqlIdentifier) insert.getTargetTableID()).names;
    // Get sink table hints.
    HintStrategyTable hintStrategyTable = flinkPlanner.config().getSqlToRelConverterConfig().getHintStrategyTable();
    List<RelHint> tableHints = SqlUtil.getRelHint(hintStrategyTable, insert.getTableHints());
    Map<String, String> dynamicOptions = FlinkHints.getHintedOptions(tableHints);
    UnresolvedIdentifier unresolvedIdentifier = UnresolvedIdentifier.of(targetTablePath);
    ObjectIdentifier identifier = catalogManager.qualifyIdentifier(unresolvedIdentifier);
    ContextResolvedTable contextResolvedTable = catalogManager.getTableOrError(identifier);
    PlannerQueryOperation query = (PlannerQueryOperation) convertValidatedSqlNodeOrFail(flinkPlanner, catalogManager, insert.getSource());
    return new SinkModifyOperation(contextResolvedTable, query, insert.getStaticPartitionKVs(), insert.isOverwrite(), dynamicOptions);
}
Also used : SinkModifyOperation(org.apache.flink.table.operations.SinkModifyOperation) UnresolvedIdentifier(org.apache.flink.table.catalog.UnresolvedIdentifier) ContextResolvedTable(org.apache.flink.table.catalog.ContextResolvedTable) SqlIdentifier(org.apache.calcite.sql.SqlIdentifier) RelHint(org.apache.calcite.rel.hint.RelHint) HintStrategyTable(org.apache.calcite.rel.hint.HintStrategyTable) ObjectIdentifier(org.apache.flink.table.catalog.ObjectIdentifier)

Example 93 with SqlIdentifier

use of org.apache.calcite.sql.SqlIdentifier in project flink by apache.

the class SqlDescriptorOperator method deriveType.

@Override
public RelDataType deriveType(SqlValidator validator, SqlValidatorScope scope, SqlCall call) {
    final RelDataTypeFactory typeFactory = validator.getTypeFactory();
    RelDataTypeFactory.Builder builder = typeFactory.builder().kind(StructKind.PEEK_FIELDS_NO_EXPAND);
    for (SqlNode node : call.getOperandList()) {
        if (node instanceof SqlIdentifier) {
            // we can't infer the column type, just forward the column name for now.
            builder.add(((SqlIdentifier) node).getSimple(), typeFactory.createUnknownType());
        } else {
            throw new IllegalArgumentException("DESCRIPTOR operator only supports accepting a list of " + "identifiers that represent a list of names.");
        }
    }
    return builder.build();
}
Also used : RelDataTypeFactory(org.apache.calcite.rel.type.RelDataTypeFactory) SqlIdentifier(org.apache.calcite.sql.SqlIdentifier) SqlNode(org.apache.calcite.sql.SqlNode)

Example 94 with SqlIdentifier

use of org.apache.calcite.sql.SqlIdentifier in project flink by apache.

the class FunctionCatalogOperatorTable method lookupOperatorOverloads.

@Override
public void lookupOperatorOverloads(SqlIdentifier opName, SqlFunctionCategory category, SqlSyntax syntax, List<SqlOperator> operatorList, SqlNameMatcher nameMatcher) {
    if (opName.isStar()) {
        return;
    }
    final UnresolvedIdentifier identifier = UnresolvedIdentifier.of(opName.names);
    functionCatalog.lookupFunction(identifier).flatMap(resolvedFunction -> convertToSqlFunction(category, resolvedFunction)).ifPresent(operatorList::add);
}
Also used : DataTypeFactory(org.apache.flink.table.catalog.DataTypeFactory) TypeInference(org.apache.flink.table.types.inference.TypeInference) SqlSyntax(org.apache.calcite.sql.SqlSyntax) DeferredTypeFlinkTableFunction(org.apache.flink.table.planner.plan.schema.DeferredTypeFlinkTableFunction) DataType(org.apache.flink.table.types.DataType) UnresolvedIdentifier(org.apache.flink.table.catalog.UnresolvedIdentifier) BuiltInFunctionDefinition(org.apache.flink.table.functions.BuiltInFunctionDefinition) AggregateFunctionDefinition(org.apache.flink.table.functions.AggregateFunctionDefinition) FunctionCatalog(org.apache.flink.table.catalog.FunctionCatalog) FlinkTypeFactory(org.apache.flink.table.planner.calcite.FlinkTypeFactory) SqlNameMatcher(org.apache.calcite.sql.validate.SqlNameMatcher) SqlIdentifier(org.apache.calcite.sql.SqlIdentifier) TypeConversions.fromLegacyInfoToDataType(org.apache.flink.table.types.utils.TypeConversions.fromLegacyInfoToDataType) SqlOperator(org.apache.calcite.sql.SqlOperator) FunctionKind(org.apache.flink.table.functions.FunctionKind) Nullable(javax.annotation.Nullable) TypeStrategies(org.apache.flink.table.types.inference.TypeStrategies) SqlKind(org.apache.calcite.sql.SqlKind) TableFunctionDefinition(org.apache.flink.table.functions.TableFunctionDefinition) ScalarFunctionDefinition(org.apache.flink.table.functions.ScalarFunctionDefinition) GenericTypeInfo(org.apache.flink.api.java.typeutils.GenericTypeInfo) FunctionDefinition(org.apache.flink.table.functions.FunctionDefinition) SqlOperatorTable(org.apache.calcite.sql.SqlOperatorTable) SqlFunctionCategory(org.apache.calcite.sql.SqlFunctionCategory) ContextResolvedFunction(org.apache.flink.table.catalog.ContextResolvedFunction) HiveAggSqlFunction(org.apache.flink.table.planner.functions.utils.HiveAggSqlFunction) List(java.util.List) SqlFunction(org.apache.calcite.sql.SqlFunction) BridgingSqlAggFunction(org.apache.flink.table.planner.functions.bridging.BridgingSqlAggFunction) BridgingSqlFunction(org.apache.flink.table.planner.functions.bridging.BridgingSqlFunction) ValidationException(org.apache.flink.table.api.ValidationException) Optional(java.util.Optional) HiveFunctionUtils.isHiveFunc(org.apache.flink.table.planner.functions.utils.HiveFunctionUtils.isHiveFunc) Internal(org.apache.flink.annotation.Internal) HiveTableSqlFunction(org.apache.flink.table.planner.functions.utils.HiveTableSqlFunction) UserDefinedFunctionUtils(org.apache.flink.table.planner.functions.utils.UserDefinedFunctionUtils) FunctionIdentifier(org.apache.flink.table.functions.FunctionIdentifier) TypeConversions(org.apache.flink.table.types.utils.TypeConversions) Row(org.apache.flink.types.Row) UnresolvedIdentifier(org.apache.flink.table.catalog.UnresolvedIdentifier)

Example 95 with SqlIdentifier

use of org.apache.calcite.sql.SqlIdentifier in project flink by apache.

the class SqlValidatorImpl method usingNames.

/**
 * Returns the set of field names in the join condition specified by USING or implicitly by
 * NATURAL, de-duplicated and in order.
 */
public List<String> usingNames(SqlJoin join) {
    switch(join.getConditionType()) {
        case USING:
            final ImmutableList.Builder<String> list = ImmutableList.builder();
            final Set<String> names = catalogReader.nameMatcher().createSet();
            for (SqlNode node : (SqlNodeList) join.getCondition()) {
                final String name = ((SqlIdentifier) node).getSimple();
                if (names.add(name)) {
                    list.add(name);
                }
            }
            return list.build();
        case NONE:
            if (join.isNatural()) {
                final RelDataType t0 = getValidatedNodeType(join.getLeft());
                final RelDataType t1 = getValidatedNodeType(join.getRight());
                return SqlValidatorUtil.deriveNaturalJoinColumnList(catalogReader.nameMatcher(), t0, t1);
            }
    }
    return null;
}
Also used : ImmutableList(com.google.common.collect.ImmutableList) SqlNodeList(org.apache.calcite.sql.SqlNodeList) RelDataType(org.apache.calcite.rel.type.RelDataType) BitString(org.apache.calcite.util.BitString) SqlIdentifier(org.apache.calcite.sql.SqlIdentifier) SqlNode(org.apache.calcite.sql.SqlNode)

Aggregations

SqlIdentifier (org.apache.calcite.sql.SqlIdentifier)131 SqlNode (org.apache.calcite.sql.SqlNode)84 RelDataType (org.apache.calcite.rel.type.RelDataType)46 SqlNodeList (org.apache.calcite.sql.SqlNodeList)43 ArrayList (java.util.ArrayList)41 SqlCall (org.apache.calcite.sql.SqlCall)32 BitString (org.apache.calcite.util.BitString)28 RelDataTypeField (org.apache.calcite.rel.type.RelDataTypeField)21 SqlSelect (org.apache.calcite.sql.SqlSelect)21 SqlParserPos (org.apache.calcite.sql.parser.SqlParserPos)12 SchemaPlus (org.apache.calcite.schema.SchemaPlus)11 SqlOperator (org.apache.calcite.sql.SqlOperator)11 NlsString (org.apache.calcite.util.NlsString)11 List (java.util.List)9 Map (java.util.Map)9 RelOptTable (org.apache.calcite.plan.RelOptTable)9 RexNode (org.apache.calcite.rex.RexNode)9 AbstractSchema (org.apache.drill.exec.store.AbstractSchema)9 ImmutableList (com.google.common.collect.ImmutableList)8 RelNode (org.apache.calcite.rel.RelNode)7