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 <jhyde.apa...@gmail.com> 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 <guohongyu...@gmail.com> 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