[
https://issues.apache.org/jira/browse/CALCITE-4888?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17467784#comment-17467784
]
Julian Hyde commented on CALCITE-4888:
--------------------------------------
I don't see why {{Sarg}} should be receiving values that are so different that
it generates a {{ClassCastException}}. The summary and description don't talk
about that case.
And it's not obvious why simplification should make a difference. I don't mean
that I can't read the code and figure it out. I mean that, if simplification
makes a difference, it should be part of the specification, i.e. in the method
javadoc. But if you actually write the javadoc, you'll see that you have
implemented something with complex and unpredictable behavior.
So, simplify.
> The type of generated search argument literal is wrong if the literal types
> of RelBuilder.in are different and compatible
> -------------------------------------------------------------------------------------------------------------------------
>
> Key: CALCITE-4888
> URL: https://issues.apache.org/jira/browse/CALCITE-4888
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Jing Zhang
> Priority: Major
> Labels: pull-request-available
> Attachments: image-2021-11-23-10-31-05-137.png, screenshot-1.png,
> screenshot-2.png, screenshot-3.png
>
> Time Spent: 2.5h
> Remaining Estimate: 0h
>
> The type of resulted search argument literal is wrong if the literal types of
> RelBuilder.in are different and compatible with each other.
> For example,
> {code:java}
> /**
> * Custom type system that converts different length of CHAR type to
> VARCHAR type.
> */
> public static class VaryingTypeSystem extends RelDataTypeSystemImpl {
> public static final RelDataTypeSystem INSTANCE = new VaryingTypeSystem();
> @Override public boolean shouldConvertRaggedUnionTypesToVarying() {
> return true;
> }
> }
> RelBuilder relBuilder =
> RelBuilder.create(config().typeSystem(VaryingTypeSystem.INSTANCE).build());
> relBuilder.scan("EMP");
> RexNode condition = relBuilder.in(relBuilder.field("JOB"),
> relBuilder.literal("CLERK"), relBuilder.literal("A"));
> {code}
> In the above example, we overwrite the shouldConvertRaggedUnionTypesToVarying
> to suggest the least restrictive type of a number of CHAR types of different
> lengths should be a VARCHAR type.
> We expect the type of the generated SARGS literal to be VACHAR(5).
> Actually, the type of generated SARGS literal is CHAR(5) and the literal with
> value 'A' is converted to char(5), which leads to wrong result data.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)