aboutsummaryrefslogtreecommitdiff
path: root/exec/java-exec/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'exec/java-exec/src/test')
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/PlanTestBase.java25
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/TestDirScanToValuesConversion.java73
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetMetadataCache.java20
3 files changed, 98 insertions, 20 deletions
diff --git a/exec/java-exec/src/test/java/org/apache/drill/PlanTestBase.java b/exec/java-exec/src/test/java/org/apache/drill/PlanTestBase.java
index 247d7842e..da257c02c 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/PlanTestBase.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/PlanTestBase.java
@@ -20,15 +20,20 @@ package org.apache.drill;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
import java.util.List;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.commons.io.FileUtils;
import org.apache.drill.common.expression.SchemaPath;
import org.apache.drill.exec.record.RecordBatchLoader;
import org.apache.drill.exec.record.VectorWrapper;
import org.apache.drill.exec.rpc.user.QueryDataBatch;
+import org.apache.drill.exec.store.parquet.metadata.Metadata;
import org.apache.drill.exec.vector.NullableVarCharVector;
import org.apache.drill.exec.vector.ValueVector;
import org.apache.calcite.sql.SqlExplain.Depth;
@@ -317,6 +322,26 @@ public class PlanTestBase extends BaseTestQuery {
testPhysical(plan);
}
+ /**
+ * Helper method for checking the metadata file existence
+ *
+ * @param table table name or table path
+ */
+ public static void checkForMetadataFile(String table) {
+ final String tmpDir;
+
+ try {
+ tmpDir = dirTestWatcher.getRootDir().getCanonicalPath();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ File metaFile = table.startsWith(tmpDir) ? FileUtils.getFile(table, Metadata.METADATA_FILENAME)
+ : FileUtils.getFile(tmpDir, table, Metadata.METADATA_FILENAME);
+ assertTrue(String.format("There is no metadata cache file for the %s table", table),
+ Files.exists(metaFile.toPath()));
+ }
+
/*
* This will get the plan (either logical or physical) in Optiq RelNode
* format, based on SqlExplainLevel and Depth.
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestDirScanToValuesConversion.java b/exec/java-exec/src/test/java/org/apache/drill/TestDirScanToValuesConversion.java
new file mode 100644
index 000000000..1aeeb5ffb
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestDirScanToValuesConversion.java
@@ -0,0 +1,73 @@
+/*
+ * 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;
+
+import org.apache.drill.categories.PlannerTest;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.nio.file.Paths;
+
+@Category({PlannerTest.class})
+public class TestDirScanToValuesConversion extends PlanTestBase {
+
+ private static final String TABLE_WITH_METADATA = "parquetTable1";
+
+ @BeforeClass
+ public static void setUp() {
+ dirTestWatcher.copyResourceToRoot(Paths.get("multilevel"));
+ dirTestWatcher.copyResourceToRoot(Paths.get("multilevel/parquet"), Paths.get(TABLE_WITH_METADATA));
+ }
+
+ @Test
+ public void testDirScanToValuesConversion() throws Exception {
+ String[] tableNames = {"multilevel/parquet", "multilevel/json", "multilevel/csv"};
+ String[] queries = {
+ "select distinct dir0, dir1 from dfs.`%s`",
+ "select dir0, dir1 from dfs.`%s` group by 1, 2"
+ };
+ for (String tableName : tableNames) {
+ for (String query : queries) {
+ testPlanMatchingPatterns(String.format(query, tableName), new String[]{"Values\\(tuples="}, new String[]{"Scan\\(table="});
+ }
+ }
+ }
+
+ @Test
+ public void testDirScanToValuesConversionWithMetadataCache() throws Exception {
+ test("refresh table metadata dfs.`%s`", TABLE_WITH_METADATA);
+ checkForMetadataFile(TABLE_WITH_METADATA);
+ String query = String.format("select distinct dir0, dir1 from dfs.`%s`", TABLE_WITH_METADATA);
+ PlanTestBase.testPlanMatchingPatterns(query, new String[]{"Values\\(tuples="}, null);
+ }
+
+ @Test
+ public void testDirScanToValuesConversionIsNotApplied() throws Exception {
+ String[] tableNames = {"multilevel/parquet", "multilevel/json", "multilevel/csv"};
+ String[] queries = {
+ "select dir0, dir1 from dfs.`%s`", // no aggregation
+ "select dir0, dir1, o_custkey from dfs.`%s` group by 1, 2, 3" // not only partition columns present
+ };
+ for (String tableName : tableNames) {
+ for (String query : queries) {
+ testPlanMatchingPatterns(String.format(query, tableName), new String[]{"Scan\\(table="}, new String[]{"Values\\(tuples="});
+ }
+ }
+ }
+}
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetMetadataCache.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetMetadataCache.java
index 3500f6f30..38b39446d 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetMetadataCache.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetMetadataCache.java
@@ -956,24 +956,4 @@ public class TestParquetMetadataCache extends PlanTestBase {
int actualRowCount = testSql(query);
assertEquals(expectedRowCount, actualRowCount);
}
-
- /**
- * Helper method for checking the metadata file existence
- *
- * @param table table name or table path
- */
- private void checkForMetadataFile(String table) {
- final String tmpDir;
-
- try {
- tmpDir = dirTestWatcher.getRootDir().getCanonicalPath();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- File metaFile = table.startsWith(tmpDir) ? FileUtils.getFile(table, Metadata.METADATA_FILENAME)
- : FileUtils.getFile(tmpDir, table, Metadata.METADATA_FILENAME);
- assertTrue(String.format("There is no metadata cache file for the %s table", table),
- Files.exists(metaFile.toPath()));
- }
}