SqlNode转化成对应的Operation(RelNode)在类org.apache.flink.table.planner.operations.SqlToOperationConverter中完成,代码如下

    1. // org.apache.flink.table.planner.operations.SqlToOperationConverter
    2. /**
    3. * This is the main entrance for executing all kinds of DDL/DML {@code SqlNode}s, different
    4. * SqlNode will have it's implementation in the #convert(type) method whose 'type' argument
    5. * is subclass of {@code SqlNode}.
    6. *
    7. * @param flinkPlanner FlinkPlannerImpl to convertCreateTable sql node to rel node
    8. * @param catalogManager CatalogManager to resolve full path for operations
    9. * @param sqlNode SqlNode to execute on
    10. */
    11. public static Optional<Operation> convert(
    12. FlinkPlannerImpl flinkPlanner,
    13. CatalogManager catalogManager,
    14. SqlNode sqlNode) {
    15. // validate the query
    16. final SqlNode validated = flinkPlanner.validate(sqlNode);
    17. SqlToOperationConverter converter = new SqlToOperationConverter(flinkPlanner, catalogManager);
    18. if (validated instanceof SqlCreateTable) {
    19. return Optional.of(converter.convertCreateTable((SqlCreateTable) validated));
    20. } else if (validated instanceof SqlDropTable) {
    21. return Optional.of(converter.convertDropTable((SqlDropTable) validated));
    22. } else if (validated instanceof SqlAlterTable) {
    23. return Optional.of(converter.convertAlterTable((SqlAlterTable) validated));
    24. } else if (validated instanceof SqlCreateFunction) {
    25. return Optional.of(converter.convertCreateFunction((SqlCreateFunction) validated));
    26. } else if (validated instanceof SqlAlterFunction) {
    27. return Optional.of(converter.convertAlterFunction((SqlAlterFunction) validated));
    28. } else if (validated instanceof SqlDropFunction) {
    29. return Optional.of(converter.convertDropFunction((SqlDropFunction) validated));
    30. } else if (validated instanceof RichSqlInsert) {
    31. return Optional.of(converter.convertSqlInsert((RichSqlInsert) validated));
    32. } else if (validated instanceof SqlUseCatalog) {
    33. return Optional.of(converter.convertUseCatalog((SqlUseCatalog) validated));
    34. } else if (validated instanceof SqlUseDatabase) {
    35. return Optional.of(converter.convertUseDatabase((SqlUseDatabase) validated));
    36. } else if (validated instanceof SqlCreateDatabase) {
    37. return Optional.of(converter.convertCreateDatabase((SqlCreateDatabase) validated));
    38. } else if (validated instanceof SqlDropDatabase) {
    39. return Optional.of(converter.convertDropDatabase((SqlDropDatabase) validated));
    40. } else if (validated instanceof SqlAlterDatabase) {
    41. return Optional.of(converter.convertAlterDatabase((SqlAlterDatabase) validated));
    42. } else if (validated.getKind().belongsTo(SqlKind.QUERY)) {
    43. return Optional.of(converter.convertSqlQuery(validated));
    44. } else {
    45. return Optional.empty();
    46. }
    47. }