Julian Hyde created CALCITE-2914:
------------------------------------

             Summary: Improve how LatticeSuggester deduces foreign keys
                 Key: CALCITE-2914
                 URL: https://issues.apache.org/jira/browse/CALCITE-2914
             Project: Calcite
          Issue Type: Bug
            Reporter: Julian Hyde


Improve how LatticeSuggester deduces foreign keys.

Currently LatticeSuggester uses SqlStatisticProvider and deduces that a join 
between two tables is "many to one" if the left table has more rows than the 
right table. Clearly this is wrong, because it does not take into account the 
keys of the join.

I think we will change the method
{code:java}
double tableCardinality(List<String> qualifiedTableName){code}
to
{code:java}
double tableCardinality(RelOptTable table){code}
and add a method
{code:java}
boolean isForeignKey(RelOptTable fromTable, List<String> fromColumns,
   RelOptTable toTable, List<String> toColumns){code}

For example, {{isForeignKey(empTable, ["DEPTNO"], deptTable, ["DEPTNO"])}} 
would return true.

One valid implementation might look at the catalog for foreign key constraints; 
another might execute a query to see whether every row in emp is matched by 
exaclty one row in dept.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to