[ 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)