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)

Reply via email to