[
https://issues.apache.org/jira/browse/DRILL-7435?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16966319#comment-16966319
]
Paul Rogers commented on DRILL-7435:
------------------------------------
DRILL-7436 provides a work-around fix. Someone should probably look carefully
to work out the detailed semantics in this area: how should we handle `LATE`
with the 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)