[ 
https://issues.apache.org/jira/browse/DRILL-7435?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul Rogers updated DRILL-7435:
-------------------------------
    Description: 
Run Drill with a fix for DRILL-7434. Now, another test fails: 
{{TestJsonReader.testTypeCase()}} fails when it tries to set the value count. 
Evidently the Project operator has added the {{LATE}} type to the Union vector. 
However, there is no vector type associated with the {{LATE}} type. An attempt 
to get the member or this type throws an exception.

The simple work around is to special-case this type when setting the value 
count. The longer-term fix is to not add the {{LATE}} type to a union vector.

The problem appears to occur here:

{noformat}
Daemon Thread [2240a19e-344e-9a8b-f3d9-2a1550662b1b:frag:0:0] (Suspended 
(breakpoint at line 2091 in TypeProtos$MajorType$Builder))     
        TypeProtos$MajorType$Builder.addSubType(TypeProtos$MinorType) line: 
2091        
        DefaultReturnTypeInference.getType(List<LogicalExpression>, 
FunctionAttributes) line: 58        
        FunctionTemplate$ReturnType.getType(List<LogicalExpression>, 
FunctionAttributes) line: 195      
        
DrillSimpleFuncHolder(DrillFuncHolder).getReturnType(List<LogicalExpression>) 
line: 401 
        DrillFuncHolderExpr.<init>(String, DrillFuncHolder, 
List<LogicalExpression>, ExpressionPosition) line: 39       
        DrillSimpleFuncHolder(DrillFuncHolder).getExpr(String, 
List<LogicalExpression>, ExpressionPosition) line: 113   
        ExpressionTreeMaterializer.addCastExpression(LogicalExpression, 
TypeProtos$MajorType, FunctionLookupContext, ErrorCollector, boolean) line: 235 
        
ExpressionTreeMaterializer$MaterializeVisitor(ExpressionTreeMaterializer$AbstractMaterializeVisitor).visitIfExpression(IfExpression,
 FunctionLookupContext) line: 638   
        
ExpressionTreeMaterializer$MaterializeVisitor(ExpressionTreeMaterializer$AbstractMaterializeVisitor).visitIfExpression(IfExpression,
 Object) line: 332  
        IfExpression.accept(ExprVisitor<T,V,E>, V) line: 65     
        ExpressionTreeMaterializer.materialize(LogicalExpression, 
Map<VectorAccessible,BatchReference>, ErrorCollector, FunctionLookupContext, 
boolean, boolean) line: 165      
        ExpressionTreeMaterializer.materialize(LogicalExpression, 
VectorAccessible, ErrorCollector, FunctionLookupContext, boolean, boolean) 
line: 143  
        ProjectRecordBatch.setupNewSchemaFromInput(RecordBatch) line: 482       
        ProjectRecordBatch.setupNewSchema() line: 571   
        ProjectRecordBatch(AbstractUnaryRecordBatch<T>).innerNext() line: 99    
        ProjectRecordBatch.innerNext() line: 144        
        ...
{noformat}

This appears to be processing the if statement in the following test query:

{noformat}
              .sqlQuery("select case when is_bigint(field1) " +
                "then field1 when is_list(field1) then field1[0] " +
                "when is_map(field1) then t.field1.inner1 end f1 from 
cp.`jsoninput/union/a.json` t")
{noformat}

The problem appears to be that a function says it takes data of type LATE, and 
then that data is added to the Union. Not sure of the exact solution, but 
simply omitting the LATE value from the Union seems to work.



  was:
Run Drill with a fix for DRILL-7434. Now, another test fails: 
{{TestJsonReader.testTypeCase()}} fails when it tries to set the value count. 
Evidently the JSON reader has added the {{LATE}} type to the Union vector. 
However, there is no vector type associated with the {{LATE}} type. An attempt 
to get the member or this type throws an exception.

The simple work around is to special-case this type when setting the value 
count. The longer-term fix is to not add the {{LATE}} type to a union vector.


> Project operator incorrectly adds a LATE type to union vector
> -------------------------------------------------------------
>
>                 Key: DRILL-7435
>                 URL: https://issues.apache.org/jira/browse/DRILL-7435
>             Project: Apache Drill
>          Issue Type: Bug
>            Reporter: Paul Rogers
>            Priority: Major
>
> Run Drill with a fix for DRILL-7434. Now, another test fails: 
> {{TestJsonReader.testTypeCase()}} fails when it tries to set the value count. 
> Evidently the Project operator has added the {{LATE}} type to the Union 
> vector. However, there is no vector type associated with the {{LATE}} type. 
> An attempt to get the member or this type throws an exception.
> The simple work around is to special-case this type when setting the value 
> count. The longer-term fix is to not add the {{LATE}} type to a union vector.
> The problem appears to occur here:
> {noformat}
> Daemon Thread [2240a19e-344e-9a8b-f3d9-2a1550662b1b:frag:0:0] (Suspended 
> (breakpoint at line 2091 in TypeProtos$MajorType$Builder))   
>       TypeProtos$MajorType$Builder.addSubType(TypeProtos$MinorType) line: 
> 2091        
>       DefaultReturnTypeInference.getType(List<LogicalExpression>, 
> FunctionAttributes) line: 58        
>       FunctionTemplate$ReturnType.getType(List<LogicalExpression>, 
> FunctionAttributes) line: 195      
>       
> DrillSimpleFuncHolder(DrillFuncHolder).getReturnType(List<LogicalExpression>) 
> line: 401 
>       DrillFuncHolderExpr.<init>(String, DrillFuncHolder, 
> List<LogicalExpression>, ExpressionPosition) line: 39       
>       DrillSimpleFuncHolder(DrillFuncHolder).getExpr(String, 
> List<LogicalExpression>, ExpressionPosition) line: 113   
>       ExpressionTreeMaterializer.addCastExpression(LogicalExpression, 
> TypeProtos$MajorType, FunctionLookupContext, ErrorCollector, boolean) line: 
> 235 
>       
> ExpressionTreeMaterializer$MaterializeVisitor(ExpressionTreeMaterializer$AbstractMaterializeVisitor).visitIfExpression(IfExpression,
>  FunctionLookupContext) line: 638   
>       
> ExpressionTreeMaterializer$MaterializeVisitor(ExpressionTreeMaterializer$AbstractMaterializeVisitor).visitIfExpression(IfExpression,
>  Object) line: 332  
>       IfExpression.accept(ExprVisitor<T,V,E>, V) line: 65     
>       ExpressionTreeMaterializer.materialize(LogicalExpression, 
> Map<VectorAccessible,BatchReference>, ErrorCollector, FunctionLookupContext, 
> boolean, boolean) line: 165      
>       ExpressionTreeMaterializer.materialize(LogicalExpression, 
> VectorAccessible, ErrorCollector, FunctionLookupContext, boolean, boolean) 
> line: 143  
>       ProjectRecordBatch.setupNewSchemaFromInput(RecordBatch) line: 482       
>       ProjectRecordBatch.setupNewSchema() line: 571   
>       ProjectRecordBatch(AbstractUnaryRecordBatch<T>).innerNext() line: 99    
>       ProjectRecordBatch.innerNext() line: 144        
>       ...
> {noformat}
> This appears to be processing the if statement in the following test query:
> {noformat}
>               .sqlQuery("select case when is_bigint(field1) " +
>                 "then field1 when is_list(field1) then field1[0] " +
>                 "when is_map(field1) then t.field1.inner1 end f1 from 
> cp.`jsoninput/union/a.json` t")
> {noformat}
> The problem appears to be that a function says it takes data of type LATE, 
> and then that data is added to the Union. Not sure of the exact solution, but 
> simply omitting the LATE value from the Union seems to work.



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

Reply via email to