I have reviewed. It looks good, and I’m sure we can get this in before 1.37.

Let’s discuss further on the PR and in 
https://issues.apache.org/jira/browse/CALCITE-3679.

> On Nov 13, 2023, at 7:08 PM, Hongyu Guo <[email protected]> wrote:
> 
> Hi Julian,
> 
> Thanks for your explanation.
> I think we can add support for lambda expressions in CTE syntax later, for
> example:
> ```
> with f as (x, y) -> x + y
> select f(c1, c2) from t;
> ```
> 
> Another thing, I provided the wrong PR link, and the correct one should be:
> [1] https://github.com/apache/calcite/pull/3502
> 
> Best,
> Hongyu
> 
> On Tue, Nov 14, 2023 at 2:54 AM Julian Hyde <[email protected]> wrote:
> 
>> Thank you. I’ll take a look.
>> 
>> For what it's worth, I take issue the people (not you - they are in Spark
>> and/or Presto) who originally describe this feature as ‘lambdas’,
>> ‘higher-order functions’ or ‘function values’. The lambdas can only be used
>> within that particular function call, not passed around as a value, and are
>> therefore no more lambdas than the filter ‘e -> e.sal > 10’ in the query
>> ’select * from emp as e where e.sal > 10’.
>> 
>> The so-called ‘higher-order functions’ are all built-in, and work by
>> supporting a particular syntax in the parser. There is no ability to define
>> your own higher-order function (the equivalent of MAP, FILTER or EXISTS),
>> and no ability to treat the lambdas as function values that can be passed
>> to another function.
>> 
>> The bitter irony is that SQL has always supported the MAP and FILTER
>> higher-order functions with a constant argument: these are the project and
>> filter relational operators. All the ‘lambda’ feature does is apply those
>> operators to nested collections, using syntax reminiscent of a real
>> functional programming language.
>> 
>> But the good news is that, now that I have come to terms with the fact
>> that this feature does not really intend to make SQL into a functional
>> programming language, and can see that it doesn’t require vast changes to
>> the type system and execution model, I am happy to consider adding it to
>> Calcite SQL.
>> 
>> Also good news: my dissatisfaction led me to create Morel, which is both a
>> real functional programming language and a real query language.
>> 
>> Julian
>> 
>> 
>> 
>>> On Nov 13, 2023, at 4:11 AM, Hongyu Guo <[email protected]> wrote:
>>> 
>>> Hi devs,
>>> 
>>> I have opened a PR regarding lambda expressions, Calcite will support
>>> lambda expressions like `(a, b) - > a+ b` in function parameters if this
>> PR
>>> is merged.
>>> 
>>> This PR includes the following:
>>> - Parse, validation, SqlToRel and RelToSql for lambda expressions.
>>> - Execution of higher-order functions for EnumerableConvention.
>>> - Addition of the EXISTS function to verify the correctness of the
>>> execution results of higher-order functions.
>>> 
>>> For more details, please refer to the following links:
>>> [1] https://github.com/apache/calcite
>>> [2] https://issues.apache.org/jira/browse/CALCITE-3679
>>> [3] https://issues.apache.org/jira/browse/CALCITE-6116
>>> 
>>> Best,
>>> Hongyu
>> 
>> 

Reply via email to