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

[jira] [Resolved] (CALCITE-2082) Do not store types or type factories inside operators

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

Julian Hyde resolved CALCITE-2082.
----------------------------------
    Resolution: Fixed

Fixed in [39cf82b8|https://github.com/apache/calcite/commit/39cf82b8bf94b9240fe4592706d8eeb2952712f0].

> Do not store types or type factories inside operators
> -----------------------------------------------------
>
>                 Key: CALCITE-2082
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2082
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Julian Hyde
>            Priority: Major
>             Fix For: 1.26.0
>
>
> Do not store types (RelDataType) or type factories (RelDataTypeFactory) in SqlOperator instances.
> *Rationale*: a {{SqlOperator}} has a lifetime that spans many statements; but a type factory is only for one statement, and each type belongs to that factory. We want to share {{SqlOperator}} instances across connections, therefore we need to create them before there is a type factory.
> Typically, a method that returns a type should have a type factory argument with which to create it.
> The current situation is technical debt. There are a couple of pieces of code tagged with this case number; see the fix to CALCITE-2072.
> In particular:
> * Remove method {{List<RelDataType> SqlOperator.getParamTypes()}};
> * Remove {{RelDataTypeFactory}} argument from {{SqlUserDefinedAggFunction}} constructor, and remove its {{typeFactory}} field.
> We will add {{interface SqlOperandMetadata extends SqlOperatorTypeChecker}}, which has new methods {{List<RelDataType>> paramTypes(RelDataTypeFactory)}} and {{List<String> paramNames()}}.
> This interface will typically be implemented only for user-defined functions. Unlike SQL built-in functions, UDFs have a fixed set of parameters (although some of them may be optional), and the parameters have names.
> In {{interface SqlOperandTypeChecker}}, add method {{boolean isFixedParameters()}}. Will typically return true for UDFs, false for built-in functions. Returns false for table window functions (e.g. {{HOP}}), even though these have named parameters (which tends to make them look a bit like UDFs).



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