[
https://issues.apache.org/jira/browse/HIVE-26643?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alessandro Solimando updated HIVE-26643:
----------------------------------------
Description:
The rule pulls up constants without checking/adjusting nullability to match
that of the field type.
Here is the stack-trace when a nullable type is involved:
{code:java}
java.lang.AssertionError: Cannot add expression of different type to set:
set type is RecordType(JavaType(class java.lang.Integer) f1, JavaType(int) NOT
NULL f2) NOT NULL
expression type is RecordType(JavaType(int) NOT NULL f1, JavaType(int) NOT NULL
f2) NOT NULL
set is
rel#38:HiveUnion.(input#0=HepRelVertex#35,input#1=HepRelVertex#35,all=true)
expression is HiveProject(f1=[1], f2=[$0])
HiveUnion(all=[true])
HiveProject(f2=[$1])
HiveProject(f1=[$0], f2=[$1])
HiveFilter(condition=[=($0, 1)])
LogicalTableScan(table=[[]])
HiveProject(f2=[$1])
HiveProject(f1=[$0], f2=[$1])
HiveFilter(condition=[=($0, 1)])
LogicalTableScan(table=[[]])
{code}
The solution is to check nullability and add a cast when the field is nullable,
since the constant's type is not.
was:
The rule does pull up constants without checking/adjusting nullability to match
that of the field type.
Here is the stack-trace when a nullable type is involved:
{code:java}
java.lang.AssertionError: Cannot add expression of different type to set:
set type is RecordType(JavaType(class java.lang.Integer) f1, JavaType(int) NOT
NULL f2) NOT NULL
expression type is RecordType(JavaType(int) NOT NULL f1, JavaType(int) NOT NULL
f2) NOT NULL
set is
rel#38:HiveUnion.(input#0=HepRelVertex#35,input#1=HepRelVertex#35,all=true)
expression is HiveProject(f1=[1], f2=[$0])
HiveUnion(all=[true])
HiveProject(f2=[$1])
HiveProject(f1=[$0], f2=[$1])
HiveFilter(condition=[=($0, 1)])
LogicalTableScan(table=[[]])
HiveProject(f2=[$1])
HiveProject(f1=[$0], f2=[$1])
HiveFilter(condition=[=($0, 1)])
LogicalTableScan(table=[[]])
{code}
The solution is to check nullability and add a cast when the field is nullable,
since the constant's type is not.
> HiveUnionPullUpConstantsRule produces an invalid plan when pulling up
> constants for nullable fields
> ---------------------------------------------------------------------------------------------------
>
> Key: HIVE-26643
> URL: https://issues.apache.org/jira/browse/HIVE-26643
> Project: Hive
> Issue Type: Bug
> Components: CBO
> Affects Versions: 4.0.0-alpha-2
> Reporter: Alessandro Solimando
> Assignee: Alessandro Solimando
> Priority: Major
> Labels: pull-request-available
> Time Spent: 20m
> Remaining Estimate: 0h
>
> The rule pulls up constants without checking/adjusting nullability to match
> that of the field type.
> Here is the stack-trace when a nullable type is involved:
> {code:java}
> java.lang.AssertionError: Cannot add expression of different type to set:
> set type is RecordType(JavaType(class java.lang.Integer) f1, JavaType(int)
> NOT NULL f2) NOT NULL
> expression type is RecordType(JavaType(int) NOT NULL f1, JavaType(int) NOT
> NULL f2) NOT NULL
> set is
> rel#38:HiveUnion.(input#0=HepRelVertex#35,input#1=HepRelVertex#35,all=true)
> expression is HiveProject(f1=[1], f2=[$0])
> HiveUnion(all=[true])
> HiveProject(f2=[$1])
> HiveProject(f1=[$0], f2=[$1])
> HiveFilter(condition=[=($0, 1)])
> LogicalTableScan(table=[[]])
> HiveProject(f2=[$1])
> HiveProject(f1=[$0], f2=[$1])
> HiveFilter(condition=[=($0, 1)])
> LogicalTableScan(table=[[]])
> {code}
> The solution is to check nullability and add a cast when the field is
> nullable, since the constant's type is not.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)