Hi All,

[*DISCLAIMER]* Please ignore if it's a duplicate request.

I was looking into supported grammars for flink-sql. We do have two dialects*
DEFAULT & HIVE.  *With this we do have  ExtendedParser
<https://github.com/apache/flink/blob/master/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/parse/ExtendedParser.java>
which helps to support some special commands. Currently ExtendedParser
<https://github.com/apache/flink/blob/master/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/parse/ExtendedParser.java>
can only support some predefined strategy
<https://github.com/apache/flink/blob/master/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/parse/ExtendedParser.java#L37>.
I was wondering if we can generalize the ExtendedParser
<https://github.com/apache/flink/blob/master/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/parse/ExtendedParser.java>
using ServiceLoader which can eventually help new grammars with runtime
jars.

public Optional<Operation> parse(String statement) {
    for (ExtendedParseStrategy strategy : loadExtendedStrategies()) {
        if (strategy.match(statement)) {
            return Optional.of(strategy.convert(statement));
        }
    }
    return Optional.empty();
}

private static List<ExtendedParseStrategy> loadExtendedStrategies() {
    // load ExtendedParserStrategy class with ServiceLoader
    List<ExtendedParseStrategy> parseStrategies = new ArrayList<>();
    ServiceLoader<ExtendedParseStrategy> extendedParseStrategies =
ServiceLoader.load(ExtendedParseStrategy.class);
    for (ExtendedParseStrategy extendedParseStrategy :
extendedParseStrategies) {
        parseStrategies.add(extendedParseStrategy);
    }
    return parseStrategies;
}


Please share your thoughts.

Thanks,
Naveen Kumar

Reply via email to