Julian Hyde created CALCITE-6120:
------------------------------------
Summary: Add MATCHES_FILTER function, to match on Looker-style
filter expressions
Key: CALCITE-6120
URL: https://issues.apache.org/jira/browse/CALCITE-6120
Project: Calcite
Issue Type: Improvement
Reporter: Julian Hyde
Add a MATCHES_FILTER function that returns whether an expression matches
Looker-style filter expression. It would be enabled in only the BigQuery
library (although it is not a function currently supported by BigQuery).
Looker filters are strings that express ranges in a concise way that are easy
to humans to write and understand, and not as error-prone as traditional SQL
expressions. Think of them as a generalization of {{LIKE}} from strings to
other data types such as DATE and INTEGER.
Here is an example:
{code}
SELECT *
FROM Emp
WHERE MATCHES_FILTER(hiredate, 'last 3 months')
{code}
See the [filter expressions
specification|https://cloud.google.com/looker/docs/filter-expressions].
The implementation can be a wrapper around the
[filtex|https://github.com/julianhyde/filtex] library that expands
{{MATCHES_FILTER}} as a macro. The library parses filter expressions, and we
convert its AST into a tree of RexNode. For example {{MATCHES_FILTER(hiredate,
'last 3 months')}} becomes a RexNode equivalent to {{hiredate BETWEEN
current_date - interval 3 month AND current_date}}.
The initial implementation would require the filter expression to be a constant
(such as literal). This would ensure that filter expressions are only ever
parsed at prepare time, not during execution of the query.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)