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

Dawid Wysakowicz commented on CALCITE-4085:
-------------------------------------------

I created a PR, but unfortunately I faced problems with {{JavaType}} because it 
behaves very differently to other {{RelDataType}}.

There is couple of problems with them:
* tests in TableFunctionTest fail because the table function returns a nullable 
{{JavaType}}. This in turn with a change that keeps the original nullability of 
an aliased record changes the nested types.
* tests that operate on linq4j fail, because it mismatches what comes from the 
{{JavaType}} stack and the RexNode. Take for example a class:

{code}
  public static class Dependent {
    public final int empid;
    public final int deptno;
}

  public static class Employee {
    public final int empid;
    public final int deptno;
    public final Dependent dependent
}

// Java type returns JavaType(int), whereas going through the modified 
RexBuilder the type // will be equal to JavaType(java.lang.Integer), because I 
implemented a logic that fixes the // nullability. I think in this case it make 
more sense to treat it as java.lang.Integer, because if // the  Employee class 
is null, the empid will also be null
SELECT t.dependent.empid from Employee;
{code}

I know I did not explain that too clearly, but I tried :( 

Do you have any suggestion how could I fix it?

> Improve nullability support for fields of structured type
> ---------------------------------------------------------
>
>                 Key: CALCITE-4085
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4085
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: Dawid Wysakowicz
>            Assignee: Dawid Wysakowicz
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> As discussed in 
> https://lists.apache.org/thread.html/r602ac95fff23dd1ef974fb396df7be061ab861384ec42f5c57ce0bc2%40%3Cdev.calcite.apache.org%3E
>  I would like to change the way a type of a field of a record is derived at 
> couple of locations. This helps frameworks such as Apache Flink to build 
> support for nullable records with not null fields.
> I suggest to change:
> * SqlDotOperator#deriveType
> * SqlItemOperator#inferReturnType
> * AliasNamespace#validateImpl
> * RexBuilder#makeFieldAccessInternal
> * SqlValidatorImpl.DeriveTypeVisitor#visit(SqlIdentifier)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to