Hi, All

Recently, I try to upgrade flink from 1.8.2 to 1.10, but i meet some problem 
about function. In 1.8.2, there are just Built-In function and User-defined 
Functions, but in 1.10, there are 4 categories of funtions.
I defined a function which named JSON_VALUE in my system, it doesn’t exist in 
1.8.2, but present to 1.10.0. of course i use it in sql, something like 'select 
JSON_VALUE(string, string) from table1’, no category or database. the problem 
is in 1.10.0, my function will be recognized as SqlJsonValueFunction, and args 
not match, so my sql is wrong.
    I read document about Ambiguous Function Reference, In my understanding, my 
function will be registered as temporary system function, and it should be 
chosen first. isn’t it? I try to debug it, and find some information:
First, sql will be parsed by ParseImpl, and JSON_VALUE will be parsed as 
SqlBasicCall, operator is SqlJsonValueFunction, it’s belonged to SYSTEM catalog 
and the kind is OTHER_FUNCTION. Then,SqlUtil.lookupRoutine will not find this 
SqlFunction, because it not in BasicOperatorTable. my function 
inFunctionCatalog, butSqlJsonValueFunctionbelonged to SYSTEM, not belong 
toUSER_DEFINED, so program will not search it in FunctionCatalog.
How can i solve this problem without modifying sql and function name? my 
program can choose flink version and have many sql jobs, so i don’t wish to 
modify sql and function name.
Thansk.

Reply via email to