diff options
Diffstat (limited to 'exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/PruneScanRule.java')
-rw-r--r-- | exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/PruneScanRule.java | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/PruneScanRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/PruneScanRule.java index 6f48b8508..8d3a8cec9 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/PruneScanRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/partition/PruneScanRule.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.apache.drill.exec.util.DrillFileSystemUtil; import org.apache.drill.shaded.guava.com.google.common.base.Stopwatch; import org.apache.calcite.adapter.enumerable.EnumerableTableScan; import org.apache.calcite.rel.core.Filter; @@ -74,7 +75,7 @@ import org.apache.drill.shaded.guava.com.google.common.collect.Lists; import org.apache.drill.shaded.guava.com.google.common.collect.Maps; import org.apache.drill.exec.vector.ValueVector; - +import org.apache.hadoop.fs.Path; public abstract class PruneScanRule extends StoragePluginOptimizerRule { static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PruneScanRule.class); @@ -372,7 +373,7 @@ public abstract class PruneScanRule extends StoragePluginOptimizerRule { // handle the case all partitions are filtered out. boolean canDropFilter = true; boolean wasAllPartitionsPruned = false; - String cacheFileRoot = null; + Path cacheFileRoot = null; if (newPartitions.isEmpty()) { assert firstLocation != null; @@ -388,7 +389,7 @@ public abstract class PruneScanRule extends StoragePluginOptimizerRule { // set the cacheFileRoot appropriately if (firstLocation.isCompositePartition()) { - cacheFileRoot = descriptor.getBaseTableLocation() + firstLocation.getCompositePartitionPath(); + cacheFileRoot = Path.mergePaths(descriptor.getBaseTableLocation(), firstLocation.getCompositePartitionPath()); } } @@ -408,7 +409,7 @@ public abstract class PruneScanRule extends StoragePluginOptimizerRule { // if metadata cache file could potentially be used, then assign a proper cacheFileRoot int index = -1; if (!matchBitSet.isEmpty()) { - String path = ""; + StringBuilder path = new StringBuilder(); index = matchBitSet.length() - 1; for (int j = 0; j < matchBitSet.length(); j++) { @@ -419,10 +420,12 @@ public abstract class PruneScanRule extends StoragePluginOptimizerRule { break; } } - for (int j=0; j <= index; j++) { - path += "/" + spInfo[j]; + for (int j = 0; j <= index; j++) { + path.append("/") + .append(spInfo[j]); } - cacheFileRoot = descriptor.getBaseTableLocation() + path; + cacheFileRoot = Path.mergePaths(descriptor.getBaseTableLocation(), + DrillFileSystemUtil.createPathSafe(path.toString())); } if (index != maxIndex) { // if multiple partitions are being selected, we should not drop the filter |