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

ASF GitHub Bot commented on FLINK-2678:
---------------------------------------

Github user tillrohrmann commented on a diff in the pull request:

    https://github.com/apache/flink/pull/1566#discussion_r51997602
  
    --- Diff: 
flink-core/src/test/java/org/apache/flink/api/java/typeutils/runtime/ObjectArrayComparatorCompositeTypeTest.java
 ---
    @@ -0,0 +1,106 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.flink.api.java.typeutils.runtime;
    +
    +import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
    +import org.apache.flink.api.common.typeinfo.TypeInformation;
    +import org.apache.flink.api.common.typeutils.ComparatorTestBase;
    +import org.apache.flink.api.common.typeutils.CompositeType;
    +import org.apache.flink.api.common.typeutils.TypeComparator;
    +import org.apache.flink.api.common.typeutils.TypeSerializer;
    +import org.apache.flink.api.common.typeutils.base.GenericArraySerializer;
    +import org.apache.flink.api.java.tuple.Tuple;
    +import org.apache.flink.api.java.tuple.Tuple2;
    +import org.apache.flink.api.java.typeutils.ObjectArrayTypeInfo;
    +import org.apache.flink.api.java.typeutils.TupleTypeInfo;
    +import org.junit.Assert;
    +
    +import java.lang.reflect.Array;
    +
    +public class ObjectArrayComparatorCompositeTypeTest extends 
ComparatorTestBase<Tuple2<String, Integer>[][]> {
    +   private final TypeInformation<Tuple2<String, Integer>[]> componentInfo;
    +
    +   public ObjectArrayComparatorCompositeTypeTest() {
    +           this.componentInfo = ObjectArrayTypeInfo.getInfoFor(new 
TupleTypeInfo<Tuple>(BasicTypeInfo.STRING_TYPE_INFO, 
BasicTypeInfo.INT_TYPE_INFO));
    +   }
    +
    +   @SuppressWarnings("unchecked")
    +   @Override
    +   protected TypeSerializer<Tuple2<String, Integer>[][]> 
createSerializer() {
    +           return (TypeSerializer<Tuple2<String, Integer>[][]>) new 
GenericArraySerializer<Tuple2<String, Integer>[]>(
    +                   componentInfo.getTypeClass(),
    +                   componentInfo.createSerializer(null));
    +   }
    +
    +   @SuppressWarnings("unchecked")
    +   @Override
    +   protected TypeComparator<Tuple2<String, Integer>[][]> 
createComparator(boolean ascending) {
    +           CompositeType<? extends Object> baseComponentInfo = new 
TupleTypeInfo<Tuple>(BasicTypeInfo.STRING_TYPE_INFO, 
BasicTypeInfo.INT_TYPE_INFO);
    +           int componentArity = baseComponentInfo.getArity();
    +           int [] logicalKeyFields = new int[componentArity];
    +           boolean[] orders = new boolean[componentArity];
    +
    +           for (int i=0;i < componentArity;i++) {
    +                   logicalKeyFields[i] = i;
    +                   orders[i] = ascending;
    +           }
    +
    +           return (TypeComparator<Tuple2<String, Integer>[][]>) new 
ObjectArrayComparator<Tuple2<String, Integer>[], Character>(ascending,
    +                   (GenericArraySerializer<Tuple2<String, Integer>[]>) 
createSerializer(),
    +                   ((CompositeType<? super Object>) 
baseComponentInfo).createComparator(logicalKeyFields, orders, 0, null)
    +           );
    +   }
    +
    +   @Override
    +   protected void deepEquals(String message, Tuple2<String, Integer>[][] 
should, Tuple2<String, Integer>[][] is) {
    +           Assert.assertTrue(should.length==is.length);
    +           for (int i=0;i < should.length;i++) {
    +                   Assert.assertTrue(should[i].length==is[i].length);
    +                   for (int j=0;j < should[i].length;j++) {
    +                           
Assert.assertEquals(should[i][j].f0,is[i][j].f0);
    +                           
Assert.assertEquals(should[i][j].f1,is[i][j].f1);
    +                   }
    +           }
    +   }
    +
    +   @SuppressWarnings("unchecked")
    +   @Override
    +   protected Tuple2<String, Integer>[][][] getSortedTestData() {
    +           Object result = Array.newInstance(Tuple2.class, new int[]{2, 2, 
1});
    +
    +           ((Tuple2<String, Integer>[][][]) result)[0][0][0] = new 
Tuple2<String, Integer>();
    +           ((Tuple2<String, Integer>[][][]) result)[0][0][0].f0 = "be";
    +           ((Tuple2<String, Integer>[][][]) result)[0][0][0].f1 = 2;
    +
    +           ((Tuple2<String, Integer>[][][]) result)[0][1][0] = new 
Tuple2<String, Integer>();
    --- End diff --
    
    you can write something like `Tuple2.of("not", 3)`. Makes your life easier.


> DataSet API does not support multi-dimensional arrays as keys
> -------------------------------------------------------------
>
>                 Key: FLINK-2678
>                 URL: https://issues.apache.org/jira/browse/FLINK-2678
>             Project: Flink
>          Issue Type: Wish
>          Components: DataSet API
>            Reporter: Till Rohrmann
>            Assignee: Subhobrata Dey
>            Priority: Minor
>
> The DataSet API does not support grouping/sorting on field which are 
> multi-dimensional arrays. It could be helpful to also support these types.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to