You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Vova Vysotskyi (Jira)" <ji...@apache.org> on 2019/12/24 11:20:00 UTC
[jira] [Resolved] (CALCITE-3525) RexSimplify: eliminate redundant
rex calls in OR
[ https://issues.apache.org/jira/browse/CALCITE-3525?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vova Vysotskyi resolved CALCITE-3525.
-------------------------------------
Fix Version/s: 1.22.0
Resolution: Fixed
Fixed in [1f3b710|https://github.com/apache/calcite/commit/1f3b7105fcc5cca45e5cdbb73d59fb51c410d08f].
Thanks [~IhorHuzenko] for the fix and thanks [~vlsi], [~julianhyde], [~zabetak], [~rubenql], [~Chunwei Lei] and [~danny0405] for the review!
> RexSimplify: eliminate redundant rex calls in OR
> ------------------------------------------------
>
> Key: CALCITE-3525
> URL: https://issues.apache.org/jira/browse/CALCITE-3525
> Project: Calcite
> Issue Type: Improvement
> Reporter: Igor Guzenko
> Assignee: Igor Guzenko
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.22.0
>
> Time Spent: 13h 40m
> Remaining Estimate: 0h
>
> Sample case to reproduce in {code}RexProgramTest.simplifyOrTerms{code}:
> {code:java}
> // (a=1 or a=2 or (arr[1]>4 and arr[1]<3 and a=3)) => a=1 or a=2
> final RelDataType intArrayType = typeFactory.createArrayType(intType, -1);
> final RexInputRef ref0 = rexBuilder.makeInputRef(intType, 0);
> final RexInputRef ref3 = rexBuilder.makeInputRef(intArrayType, 3);
> final RexCall itm1 = (RexCall) rexBuilder.makeCall(intType, SqlStdOperatorTable.ITEM,
> ImmutableList.of(ref3, literal1));
> simplify = this.simplify.withParanoid(false);
> checkSimplifyFilter(
> or(
> eq(ref0, literal1),
> eq(ref0, literal2),
> and(
> gt(itm1, literal4),
> lt(itm1, literal3),
> eq(ref0, literal3)
> )
> ),
> "OR(=($0, 1), =($0, 2))"
> );
> simplify = simplify.withParanoid(true);
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)