You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Stamatis Zampetakis (Jira)" <ji...@apache.org> on 2021/06/18 08:36:00 UTC

[jira] [Updated] (CALCITE-2974) Timestamp conversion performance can be improved

     [ https://issues.apache.org/jira/browse/CALCITE-2974?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stamatis Zampetakis updated CALCITE-2974:
-----------------------------------------
    Fix Version/s:     (was: next)

> Timestamp conversion performance can be improved
> ------------------------------------------------
>
>                 Key: CALCITE-2974
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2974
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.19.0
>            Reporter: Valeriy Trofimov
>            Priority: Major
>              Labels: easyfix, performance
>         Attachments: Current.txt, Proposed.txt
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> RexSimplify.simplifyCast() is slow when converting a string to SQL Timestamp value. The slowness is caused by this line:
> {code:java}
> executor.reduce(rexBuilder, ImmutableList.of(e), reducedValues);
> {code}
> Debugging this code line with my team showed that for timestamp conversion it loads a pre-compiled conversion code, which makes it slow. My team proposes to replace this line with the following code that greately improves performance:
> {code:java}
> if (typeName == SqlTypeName.CHAR && e.getType().getSqlTypeName() == SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE) {
>     if (literal.getValue() instanceof NlsString) {
>         String timestampStr = ((NlsString) literal.getValue()).getValue();
>         Long timestampLong = SqlFunctions.toTimestampWithLocalTimeZone(timestampStr);
>         reducedValues.add(rexBuilder.makeLiteral(timestampLong, e.getType(), true));
>     }
> }
> if (reducedValues.isEmpty()) {
>     executor.reduce(rexBuilder, ImmutableList.of(e), reducedValues);
> }
> {code}
> Let us know if we can submit a pull request with this code change or if we've missed anything. Do you know the reason behind using a pre-compiled code for timestamp conversion?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)