Thomas Rebele created CALCITE-5473: -------------------------------------- Summary: Keep more collations in RelMdCollation#project for monotonic RexCalls Key: CALCITE-5473 URL: https://issues.apache.org/jira/browse/CALCITE-5473 Project: Calcite Issue Type: Improvement Reporter: Thomas Rebele
Some RexCalls do not affect the collation, i.e., $0+10 has the same collation as $0 (if there are now integer overflows). This is already implemented in {{{}SqlMonotonicBinaryOperator#getMonotonicity{}}}. If we have an input with collation [0,1], and a {{{}Calc(a=$0+10, b=$1){}}}, then the output collation would be [0, 1] as well. This is the case for STRICTLY_INCREASING or STRICTLY_DECREASING calls (though the direction of the field collation might need to be adapted). However, if the Calc was {{{}Calc(a=FLOOR($0), b=$1){}}}, then the output collation would be just [0], as the sortedness of b is not guaranteed. This happens for example with rows (0.2, 50) and (0.3, 20) and (0.4, 30), in that order. So for INCREASING, DECREASING, or CONSTANT the collation would be shortened. The right place to implement this would probably be {{{}RelMdCollation#project{}}}. The {{fieldCollationsForRexCalls}} loop would need to stay, because some calls may introduce a collation, regardless of the input. E.g., {{SELECT CURRENT_DATE FROM some_random_table}} is always sorted. -- This message was sent by Atlassian Jira (v8.20.10#820010)