Julian Hyde created CALCITE-4334:
------------------------------------
Summary: TRUE_AGG, an aggregate function that always returns TRUE
Key: CALCITE-4334
URL: https://issues.apache.org/jira/browse/CALCITE-4334
Project: Calcite
Issue Type: Bug
Reporter: Julian Hyde
It would be useful to have an (internal) aggregate function that has no
arguments and returns a constant value, regardless of how many rows are in the
group. We suggest {{TRUE_AGG}}, which always returns the {{BOOLEAN}} value
{{TRUE}}.
If there are reasons why it would be better to return other constants (such as
0, 1, FALSE or the empty string) we will consider them.
For example, when rewriting sub-queries (see SubQueryRemoveRule) we introduce
add "true as indicator" to the SELECT clause of sub-queries. It can be used to
detect rows generated by an outer join. If it is an aggregate query, we would
have to write "min(true) as indicator", which necessitates an extra {{Project}}
below the {{Aggregate}} to provide the "true" value.
Another example. We would like to make {{RelBuilder.aggregate(groupKey())}}
throw when given an empty group key and no aggregate calls. (Because it would
create an {{Aggregate}} that has zero fields, and that is problematic elsewhere
in Calcite.) But we would also like a pattern to generate a constant single-row
relational expression. So, {{RelBulder.aggregate(groupKey(),
aggregateCall(TRUE_AGG))}} should generate {{VALUES TRUE}}.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)