You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Danny Chen (Jira)" <ji...@apache.org> on 2020/11/12 09:24:00 UTC

[jira] [Updated] (CALCITE-4396) Allows table valued functions of FROM and JOIN context without TABLE clause

     [ https://issues.apache.org/jira/browse/CALCITE-4396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Danny Chen updated CALCITE-4396:
--------------------------------
    Description: 
In current code base, user can use a table valued function mainly for 2 kinds of SQL statements:

{code:sql}
-- select from the table valued function directly
SELECT ... FROM TABLE(my_tvf(...));

-- join the table valued function with LATERAL keyword
... t1 JOIN LATERAL TABLE(my_tvf(...)) ON ...
{code}

While since version 12.1+, Oracle supports syntax without TABLE keyword, thus you can write SQL as following[1]:

{code:sql}
-- select from the table valued function directly
SELECT ... FROM my_tvf(...);

-- join the table valued function with LATERAL keyword
... t1 JOIN my_tvf(...) ON ...
{code}

SQL-SERVER also allows select from the table valued function directly without the explicit TABLE keyword, but they need the CROSS APPLY clause for table and function join. [2]

We already had a discussion on the DEV mailing list, see [3].

I propose to support the Oracle style table valued function syntax: to omit the TABLE keyword because the syntax is straight-forward and concise.

Of course, this syntax is only valid under Oracle SQL conformance.

[1] https://livesql.oracle.com/apex/livesql/file/tutorial_GSOTSK8FWLYZOG5CJJ9KPX7RX.html
[2] https://docs.microsoft.com/en-us/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine?view=sql-server-ver15#TVF
[3] https://lists.apache.org/x/thread.html/ra98db08e280ddd9adeef62f456f61aedfdf7756e215cb4d66e2a52c9@%3Cdev.calcite.apache.org%3E

  was:
In current code base, user can use a table valued function mainly for 2 kinds of SQL statements:

{code:sql}
-- select from the table valued function directly
SELECT ... FROM TABLE(my_tvf(...));

-- join the table valued function with LATERAL keyword
... t1 JOIN LATERAL TABLE(my_tvf(...)) ON ...
{code}

While since version 12.1+, Oracle supports syntax without TABLE keyword, thus you can write SQL as following:

{code:sql}
-- select from the table valued function directly
SELECT ... FROM my_tvf(...);

-- join the table valued function with LATERAL keyword
... t1 JOIN my_tvf(...) ON ...
{code}

SQL-SERVER also allows select from the table valued function directly without the explicit TABLE keyword, but they need the CROSS APPLY clause for table and function join. [2]

We already had a discussion on the DEV mailing list, see [3].

I propose to support the Oracle style table valued function syntax: to omit the TABLE keyword because the syntax is straight-forward and concise.

Of course, this syntax is only valid under Oracle SQL conformance.

[1] https://livesql.oracle.com/apex/livesql/file/tutorial_GSOTSK8FWLYZOG5CJJ9KPX7RX.html
[2] https://docs.microsoft.com/en-us/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine?view=sql-server-ver15#TVF
[3] https://lists.apache.org/x/thread.html/ra98db08e280ddd9adeef62f456f61aedfdf7756e215cb4d66e2a52c9@%3Cdev.calcite.apache.org%3E


> Allows table valued functions of FROM and JOIN context without TABLE clause
> ---------------------------------------------------------------------------
>
>                 Key: CALCITE-4396
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4396
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.26.0
>            Reporter: Danny Chen
>            Assignee: Danny Chen
>            Priority: Major
>             Fix For: 1.27.0
>
>
> In current code base, user can use a table valued function mainly for 2 kinds of SQL statements:
> {code:sql}
> -- select from the table valued function directly
> SELECT ... FROM TABLE(my_tvf(...));
> -- join the table valued function with LATERAL keyword
> ... t1 JOIN LATERAL TABLE(my_tvf(...)) ON ...
> {code}
> While since version 12.1+, Oracle supports syntax without TABLE keyword, thus you can write SQL as following[1]:
> {code:sql}
> -- select from the table valued function directly
> SELECT ... FROM my_tvf(...);
> -- join the table valued function with LATERAL keyword
> ... t1 JOIN my_tvf(...) ON ...
> {code}
> SQL-SERVER also allows select from the table valued function directly without the explicit TABLE keyword, but they need the CROSS APPLY clause for table and function join. [2]
> We already had a discussion on the DEV mailing list, see [3].
> I propose to support the Oracle style table valued function syntax: to omit the TABLE keyword because the syntax is straight-forward and concise.
> Of course, this syntax is only valid under Oracle SQL conformance.
> [1] https://livesql.oracle.com/apex/livesql/file/tutorial_GSOTSK8FWLYZOG5CJJ9KPX7RX.html
> [2] https://docs.microsoft.com/en-us/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine?view=sql-server-ver15#TVF
> [3] https://lists.apache.org/x/thread.html/ra98db08e280ddd9adeef62f456f61aedfdf7756e215cb4d66e2a52c9@%3Cdev.calcite.apache.org%3E



--
This message was sent by Atlassian Jira
(v8.3.4#803005)