Yeah, the user has no way to know currently.

We ought to indicate in https://calcite.apache.org/docs/reference.html which 
functions are in the standard operator table, and which are in extension tables.

Sadly we don’t even document NVL on that page. Logged 
https://issues.apache.org/jira/browse/CALCITE-2846.

Julian


> On Feb 11, 2019, at 8:04 PM, Hongze Zhang <[email protected]> wrote:
> 
> Thanks for the suggestions Julian and Stamatis!
> 
> 
> I would support the idea about adding a MysqlSqlOperatorTable to Calcite, 
> what I was not sure about is whether to put MySQL's JSON functions to it. I 
> was wandering if user could easily know (e.g.) JSON_TYPE is a MySQL functions 
> and JSON_VALUE is a built-in function.
> But I understand your opinions and actually I have no strong inclination as 
> long as we can bring the feature to Calcite.
> 
> 
> Best,
> Hongze
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 在 2019-02-12 02:43:52,"Julian Hyde" <[email protected]> 写道:
>> A MysqlSqlOperatorTable isn’t a bad idea. Each operator table could be a 
>> place to collect the operators for that DB.
>> 
>> I have a couple of asks:
>> * Don’t include standard operators on that table
>> * If operators are shared with another DB (e.g. the LEAST function will 
>> occur in both OracleSqlOperatorTable and MysqlSqlOperatorTable) make sure 
>> that the code only occurs in one place.
>> 
>> Julian
>> 
>> 
>>> On Feb 11, 2019, at 5:51 AM, Stamatis Zampetakis <[email protected]> wrote:
>>> 
>>> Hi Hongze, Qianjin,
>>> 
>>> I apologise fo the late response.
>>> 
>>> I still don't understand why it is problematic to create a separate
>>> MySQLOperatorTable.
>>> You can easily combine operator tables (using ChainedSqlOperatorTable for
>>> instance) and pass them around to places were otherwise you would put a
>>> single operator table (e.g., SqlValidator).
>>> It is also easy to use multiple operator tables at a higher level using the
>>> connection property FUN [1].
>>> 
>>> Best,
>>> Stamatis
>>> 
>>> [1]
>>> https://calcite.apache.org/apidocs/org/apache/calcite/config/CalciteConnectionProperty.html#FUN
>>> 
>>> 
>>> Στις Παρ, 1 Φεβ 2019 στις 6:39 π.μ., ο/η ForwardXu <[email protected]> έγραψε:
>>> 
>>>> hi statmatis:
>>>> It's also possible that we could do better in both ways, as Hongze Zhang
>>>> said. One of the initial reasons I implemented json_type was to use it in
>>>> flink as well. However, we know that flink is not open to support a dialect
>>>> like mysql.
>>>> best
>>>> qianjin
>>>> 
>>>> 
>>>> 
>>>> 
>>>> ------------------ 原始邮件 ------------------
>>>> 发件人: "Hongze Zhang"<[email protected]>;
>>>> 发送时间: 2019年2月1日(星期五) 中午1:09
>>>> 收件人: "[email protected]"<[email protected]>;
>>>> 
>>>> 主题: Re: Re: Integrating MySQL's JSON functions
>>>> 
>>>> 
>>>> 
>>>> Hi Stamatis,
>>>> 
>>>> Thanks for mentioning MySQLOperatorTable!
>>>> 
>>>> I just read some code about the usage of OracleOperatorTable in Calcite,
>>>> but I am now not strongly inclined to add MySQL's JSON functions to
>>>> MySQLOperatorTable.
>>>> MySQL's JSON functions are rarely conflict with what are from standard,
>>>> and they extends the JSON ability of MySQL in many sides. I think it might
>>>> be a good try to treat functions from both MySQL's and standard's as a
>>>> whole JSON operator suite.
>>>> Users may want to directly use any function they know, I think it is
>>>> better to not to confuse them with the truth that what's in standard and
>>>> what's not.
>>>> For the conflict part like JSON_OBJECT(key , value) and JSON_OBJECT(key :
>>>> value), I think we can just support both.
>>>> 
>>>> What do you think?
>>>> 
>>>> 
>>>> 
>>>> Hongze
>>>> 
>>>> From: Stamatis Zampetakis
>>>> Date: 2019-02-01 06:32
>>>> To: dev
>>>> Subject: Re: Integrating MySQL's JSON functions
>>>> Nice document Hongze!
>>>> 
>>>> Since the functions are only present in MySQL why not create a
>>>> MySQLOperatorTable and put them there? I went over the discussion in
>>>> CALCITE-2791 but I did not understand why it is preferable to put them in
>>>> the SqlStdOperatorTable.
>>>> 
>>>> Στις Πέμ, 31 Ιαν 2019 στις 10:51 μ.μ., ο/η Julian Hyde <[email protected]>
>>>> έγραψε:
>>>> 
>>>>> +1
>>>>> 
>>>>> In the reference doc, let’s make it clear that these are in MySQL but not
>>>>> in the standard. (Unlike some of their other extensions to standard SQL,
>>>>> MySQL seem to have done a good job - they are well-designed and
>>>>> well-documented.)
>>>>> 
>>>>>> On Jan 31, 2019, at 10:20 AM, Hongze Zhang <[email protected]> wrote:
>>>>>> 
>>>>>> Hi all,
>>>>>> 
>>>>>> 
>>>>>> There is a PR CALCITE-2791[1] from xuqianjin about adding a MySQL
>>>>> function JSON_TYPE[2], and I want to know what do you think about it.
>>>>>> 
>>>>>> 
>>>>>> JSON_TYPE is not a standard JSON function defined by SQL:2016. In MySQL
>>>>> the use of this function is to get the type of a JSON doc. The similar
>>>>> operator in Calcite 1.18.0 is "IS JSON (VALUE/SCALAR/OBJECT/ARRAY)",
>>>>> however sometimes JSON_TYPE can do more than it.
>>>>>> 
>>>>>> As for other non-standard JSON functions, I made a simple summary table
>>>>> about JSON support (mainly as functions) details of some of most
>>>> important
>>>>> SQL implementations. you can open it via link
>>>>> 
>>>> https://docs.google.com/spreadsheets/d/1A6vrEEu3WK49dJ5mfaYeMLFvAy0JR9uoJsiaKhxUal4/edit#gid=0
>>>>>> 
>>>>>> 
>>>>>> And I suggest to introduce some JSON functions that is from MySQL and
>>>>> might be useful for Calcite but not supported, not Just JSON_TYPE:
>>>>>> 1. JSON_INSERT / JSON_SET / JSON_REPLACE /JSON_REMOVE [3]
>>>>>> 2. JSON_DEPTH / JSON_LENGTH / JSON_TYPE [4]
>>>>>> I think the PR[1] can be a good start.
>>>>>> 
>>>>>> 
>>>>>> Does anyone have thought about this? Looking forward to your reply.
>>>>>> 
>>>>>> 
>>>>>> [1] https://issues.apache.org/jira/browse/CALCITE-2791
>>>>>> [2]
>>>>> 
>>>> https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html#function_json-type
>>>>>> [3]
>>>>> https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html
>>>>>> [4]
>>>>> https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html
>>>>> 
>>>>> 

Reply via email to