[ 
https://issues.apache.org/jira/browse/CALCITE-5704?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17727311#comment-17727311
 ] 

jackylau commented on CALCITE-5704:
-----------------------------------

hi [~jiajunbernoulli] i response it in the pr.

fix it which refers to CONCAT and the result type will check 

```
public static final SqlBinaryOperator CONCAT =
    new SqlBinaryOperator(
        "||",
        SqlKind.OTHER,
        60,
        true,
        ReturnTypes.ARG0.andThen((opBinding, typeToTransform) -> {
          SqlReturnTypeInference returnType =
              typeToTransform.getSqlTypeName().getFamily() == 
SqlTypeFamily.ARRAY
                  ? ReturnTypes.LEAST_RESTRICTIVE
                  : ReturnTypes.DYADIC_STRING_SUM_PRECISION_NULLABLE;

          return requireNonNull(returnType.inferReturnType(opBinding),
              "inferred CONCAT element type");
        }),
        null,
        OperandTypes.STRING_SAME_SAME_OR_ARRAY_SAME_SAME);
```


for example 
ARRAY_EXCEPT(array[1], array['a'])  it will also throw exception. the only 
difference is the throw exception position changed, one is in result type, 
another is in operand type checker.
```
java.lang.IllegalArgumentException: Cannot infer return type for ARRAY_EXCEPT; 
operand types: [INTEGER ARRAY, CHAR(1) ARRAY]
```

and some functions also does it too , such as
```
  /** The "ARRAY(exp, ...)" function (Spark);
   * compare with the standard array value constructor, "ARRAY [exp, ...]". */
  @LibraryOperator(libraries = \{SPARK})
  public static final SqlFunction ARRAY =
      SqlBasicFunction.create("ARRAY",
          SqlLibraryOperators::arrayReturnType,
          OperandTypes.SAME_VARIADIC);
```

> Add ARRAY_EXCEPT, ARRAY_INTERSECT and ARRAY_UNION for Spark dialect
> -------------------------------------------------------------------
>
>                 Key: CALCITE-5704
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5704
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.35.0
>            Reporter: jackylau
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.35.0
>
>
> array_union(array1, array2) - Returns an array of the elements in the union 
> of array1 and array2, without duplicates.
> array_intersect(array1, array2) - Returns an array of the elements in the 
> intersection of array1 and array2, without duplicates.
> array_except(array1, array2) - Returns an array of the elements in array1 but 
> not in array2, without duplicates.
> For more details
> [https://spark.apache.org/docs/latest/api/sql/index.html]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to