Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
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,
/** * 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"));
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.
Attachments
Attachments
Issue Links
- is duplicated by
-
CALCITE-4632 Exception in RelToSqlConverter: "Cannot convert x to DECIMAL(n, m) due to overflow"
- Closed
- is fixed by
-
CALCITE-4632 Exception in RelToSqlConverter: "Cannot convert x to DECIMAL(n, m) due to overflow"
- Closed
- is related to
-
FLINK-24708 `ConvertToNotInOrInRule` has a bug which leads to wrong result
- Closed
- relates to
-
CALCITE-4590 Incorrect query result with fixed-length string
- Resolved
- links to