http://git-wip-us.apache.org/repos/asf/drill/blob/03928af0/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/store/hive/schema/TestColumnListCache.java
----------------------------------------------------------------------
diff --git 
a/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/store/hive/schema/TestColumnListCache.java
 
b/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/store/hive/schema/TestColumnListCache.java
new file mode 100644
index 0000000..2fdab54
--- /dev/null
+++ 
b/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/store/hive/schema/TestColumnListCache.java
@@ -0,0 +1,111 @@
+/*
+* 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.drill.exec.store.hive.schema;
+
+import com.google.common.collect.Lists;
+import org.apache.drill.exec.store.hive.ColumnListsCache;
+import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+public class TestColumnListCache {
+
+  @Test
+  public void testTableColumnsIndex() {
+    ColumnListsCache cache = new ColumnListsCache();
+    List<FieldSchema> columns = Lists.newArrayList();
+    columns.add(new FieldSchema("f1", "int", null));
+    columns.add(new FieldSchema("f2", "int", null));
+    assertEquals(0, cache.addOrGet(columns));
+  }
+
+  @Test
+  public void testPartitionColumnsIndex() {
+    ColumnListsCache cache = new ColumnListsCache();
+    List<FieldSchema> columns = Lists.newArrayList();
+    columns.add(new FieldSchema("f1", "int", null));
+    columns.add(new FieldSchema("f2", "int", null));
+    cache.addOrGet(columns);
+    columns.add(new FieldSchema("f3", "int", null));
+    assertEquals(1, cache.addOrGet(columns));
+  }
+
+  @Test
+  public void testColumnListUnique() {
+    ColumnListsCache cache = new ColumnListsCache();
+    List<FieldSchema> columns = Lists.newArrayList();
+    columns.add(new FieldSchema("f1", "int", null));
+    columns.add(new FieldSchema("f2", "int", null));
+    cache.addOrGet(columns);
+    cache.addOrGet(Lists.newArrayList(columns));
+    assertEquals(0, cache.addOrGet(Lists.newArrayList(columns)));
+  }
+
+  @Test
+  public void testPartitionColumnListAccess() {
+    ColumnListsCache cache = new ColumnListsCache();
+    List<FieldSchema> columns = Lists.newArrayList();
+    columns.add(new FieldSchema("f1", "int", null));
+    columns.add(new FieldSchema("f2", "int", null));
+    cache.addOrGet(columns);
+    cache.addOrGet(columns);
+    columns.add(new FieldSchema("f3", "int", null));
+    cache.addOrGet(columns);
+    cache.addOrGet(columns);
+    columns.add(new FieldSchema("f4", "int", null));
+    cache.addOrGet(columns);
+    cache.addOrGet(columns);
+    assertEquals(columns, cache.getColumns(2));
+  }
+
+  @Test
+  public void testPartitionColumnCaching() {
+    ColumnListsCache cache = new ColumnListsCache();
+    List<FieldSchema> columns = Lists.newArrayList();
+    columns.add(new FieldSchema("f1", "int", null));
+    columns.add(new FieldSchema("f2", "int", null));
+    // sum of all indexes from cache
+    int indexSum = cache.addOrGet(columns);
+    indexSum += cache.addOrGet(columns);
+    List<FieldSchema> sameColumns = Lists.newArrayList(columns);
+    indexSum += cache.addOrGet(sameColumns);
+    List<FieldSchema> otherColumns = Lists.newArrayList();
+    otherColumns.add(new FieldSchema("f3", "int", null));
+    otherColumns.add(new FieldSchema("f4", "int", null));
+    // sum of all indexes from cache
+    int secondIndexSum = cache.addOrGet(otherColumns);
+    secondIndexSum += cache.addOrGet(otherColumns);
+    List<FieldSchema> sameOtherColumns = Lists.newArrayList();
+    sameOtherColumns.add(new FieldSchema("f3", "int", null));
+    sameOtherColumns.add(new FieldSchema("f4", "int", null));
+    secondIndexSum += cache.addOrGet(sameOtherColumns);
+    secondIndexSum += cache.addOrGet(Lists.newArrayList(sameOtherColumns));
+    secondIndexSum += cache.addOrGet(otherColumns);
+    secondIndexSum += cache.addOrGet(otherColumns);
+    indexSum += cache.addOrGet(sameColumns);
+    indexSum += cache.addOrGet(columns);
+    // added only two kinds of column lists
+    assertNull(cache.getColumns(3));
+    // sum of the indices of the first column list
+    assertEquals(0, indexSum);
+    assertEquals(6, secondIndexSum);
+  }
+}

Reply via email to