[ 
https://issues.apache.org/jira/browse/CALCITE-6301?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17887059#comment-17887059
 ] 

Julian Hyde edited comment on CALCITE-6301 at 1/13/25 9:06 PM:
---------------------------------------------------------------

Hey [~julianhyde], I have finally managed to carve out time to resume this work 
and have a PR ready for review here: 
[https://github.com/apache/calcite/pull/3984.|https://github.com/apache/calcite/pull/3984]

It took some wrangling and some refactoring but I got the failing test case I 
discussed in the last comment to pass.


was (Author: JIRAUSER297744):
Hey [~julianhyde] 

 

I have finally managed to carve out time to resume this work and have a PR 
ready for review here: 
[https://github.com/apache/calcite/pull/3984.|https://github.com/apache/calcite/pull/3984]

 

Took some wrangling and some refactoring but I got the failing test case I 
discussed in the last comment to pass. 

 

 

> Extend ‘Must-filter’ columns to support a conditional bypass list
> -----------------------------------------------------------------
>
>                 Key: CALCITE-6301
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6301
>             Project: Calcite
>          Issue Type: Improvement
>            Reporter: Oliver Lee
>            Assignee: Oliver Lee
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.39.0
>
>
> In CALCITE-6219 we introduced {{{}interface SemanticTable{}}}. A table that 
> implements this interface can define fields to be ‘must-filter’; a query that 
> does not filter those fields in its {{WHERE}} or {{HAVING}} clause will throw 
> a validation error.
> In this case, we allow a {{SemanticTable}} to have a list of bypass fields. 
> If a query filters on any bypass field in its {{WHERE}} or {{HAVING}} clause, 
> then the must-filter fields are ignored. 
> For example, the {{EMP}} table specifies must-filter-fields {{EMPNO}} and 
> {{{}DEPTNO{}}},
> and bypass-fields {{ENAME}} and {{{}SALARY{}}}. Consider the following 
> queries on {{{}EMP{}}}.
> {code:java}
> // Valid. Query filters on both must-filter fields.
> SELECT * FROM EMP WHERE EMPNO = 1 and DEPTNO = 2;
> // Invalid. Query does not filter on must-filter field 'DEPTNO'.
> SELECT * FROM EMP WHERE EMPNO = 1;
> // Valid. Query filters on bypass field 'ENAME', and therefore does not
> // need to filter on the must-filter field 'DEPTNO'.
> SELECT * FROM EMP WHERE EMPNO = 1 and ENAME = ’name’ ;
> // Valid. Query filters on bypass field 'ENAME', and therefore does not
> // need to filter on any must-filter field.
> SELECT * FROM EMP WHERE ENAME = ’name’;
> // Valid. Query filters on bypass field 'SALARY', and therefore does not
> // need to filter on any must-filter field.
> SELECT * FROM EMP WHERE SALARY > 10;
> {code}
>  
> As for must-filter fields, there are special considerations are for handling 
> joins, CTEs and subqueries. We therefore include a comprehensive suite of 
> tests, as we did for CALCITE-6219.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to