[ 
https://issues.apache.org/jira/browse/CALCITE-2985?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16819886#comment-16819886
 ] 

Julian Hyde commented on CALCITE-2985:
--------------------------------------

I'm not too worried about the size of SqlStdOperatorTable per se; I'm more 
worried about coupling. Only functions that need to be in there should be in 
there.

JSON functions that are in the SQL standard should clearly be in 
SqlStdOperatorTable.

For JSON functions that are MySQL extensions it is less clear. I would tend to 
put them into the MySQL table; but if they have irregular syntax we have a 
problem, because the parser will need to make explicit calls to them, and for 
that, it has to use the operator table, and we only support passing in the 
standard operator table.

If it helps to put the MySQL functions in the std table for a short time, I 
have no objections.

I have said elsewhere that there seems to be too much code added to the parser 
for each JSON function. Having the parser do ONLY parsing and not validation - 
and keeping it decoupled from the operator table and type system - is an 
important principle that has served us well. We need to get back to that.

Can someone explain why, in the parser, JsonValueExpression could not be just 
one kind of expression? As, for instance, an interval literal is just an 
expression. If you want to add a string to an interval, the parser won't stop 
you, but the validator will give an error. If we made that change, 
JSON_STORAGE_SIZE would be a regular function and would need no change 
whatsoever to the parser.

> Add the JSON_STORAGE_SIZE function
> ----------------------------------
>
>                 Key: CALCITE-2985
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2985
>             Project: Calcite
>          Issue Type: Sub-task
>            Reporter: Forward Xu
>            Assignee: Forward Xu
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> JSON_STORAGE_SIZE(json_val)
> This function returns the number of bytes used to store the binary 
> representation of a JSON document. When the argument is a JSON column, this 
> is the space used to store the JSON document. json_val must be a valid JSON 
> document or a string which can be parsed as one. In the case where it is 
> string, the function returns the amount of storage space in the JSON binary 
> representation that is created by parsing the string as JSON and converting 
> it to binary. It returns NULL if the argument is NULL.
> An error results when json_val is not NULL, and is not—or cannot be 
> successfully parsed as—a JSON document.
> To illustrate this function's behavior when used with a JSON column as its 
> argument, we create a table named jtable containing a JSON column jcol, 
> insert a JSON value into the table, then obtain the storage space used by 
> this column with JSON_STORAGE_SIZE(), as shown here:
> {code:java}
> SELECT
> JSON_STORAGE_SIZE('[100, "sakila", [1, 3, 5], 425.05]') AS A,
> JSON_STORAGE_SIZE('{"a": 1000, "b": "a", "c": "[1, 3, 5, 7]"}') AS B,
> JSON_STORAGE_SIZE('{"a": 1000, "b": "wxyz", "c": "[1, 3, 5, 7]"}') AS C,
> JSON_STORAGE_SIZE('[100, "json", [[10, 20, 30], 3, 5], 425.05]') AS D;
> {code}
> | A  | B  | C  | D  |
> | 29 | 37 | 40 | 36 |



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to