Hello I have a question. I'm learning how to define UDFs in Calcite.
Using the CSV example JAR as a base, I'm defining a UDF using `SqlFunction`. It 
only works during SQL validation, but during execution, it reports a "UDF not 
matched" error.


public class UAddStr extends SqlFunction {

  public UAddStr(String name, SqlKind kind, @Nullable SqlReturnTypeInference 
returnTypeInference, @Nullable SqlOperandTypeInference operandTypeInference, 
@Nullable SqlOperandTypeChecker operandTypeChecker, SqlFunctionCategory 
category) {
    super(name, kind, returnTypeInference, operandTypeInference, 
operandTypeChecker, category);
  }
}


public class ExtendedSqlOperatorTable extends ReflectiveSqlOperatorTable {
  private static ExtendedSqlOperatorTable instance;

  public static synchronized ExtendedSqlOperatorTable instance() {
    if (instance == null) {
      instance = new ExtendedSqlOperatorTable();
      instance.init();
    }
    instance.register(addStr());
    return instance;
  }

  private static SqlFunction addStr() {
    return new UAddStr("addStr",
            SqlKind.OTHER_FUNCTION,
            ReturnTypes.VARCHAR,
            null,
            OperandTypes.STRING,
            SqlFunctionCategory.USER_DEFINED_FUNCTION);
  }
}




If I use a UDF registered with Schmea, it also reports a "UDF not matched" 
error during SQL validation, but I can still query data during execution. 
rootSchema.add("addstr", ScalarFunctionImpl.create(UAddStr.class, "addStr"));


What I don't understand is: how should I define a UDF that works in both SQL 
validation and execution?  


中文介绍:  
你好

想请教一个问题,我正在学习使用 在 Calcite 中定义 UDF 功能,
我以 csv example jar 为基础,我使用 SqlFunction 定义 UDF 它只能在 SQL 校验校验起作用,但是在 执行阶段 会报 udf 
无法匹配到。  

如果使用 schmea 注册的UDF, 在 SQL 校验阶段它又会报 udf 无法匹配到,但是在执行阶段是可以查询数据的。 

我没有想明白的是: 我应该怎么去定义一个 udf,让它既可以在 SQL 校验起作用,也可以在 执行阶段起作用。   

Reply via email to