private static Path[] execute(ParseContext ctx, Partition part, ExprNodeDesc pruner)
      throws SemanticException {
    Path[] finalPaths;

    List<Path> selectedPaths = new ArrayList<Path>();

    if (ListBucketingPrunerUtils.isUnknownState(pruner)) {
      // Use full partition path for error case.
      LOG.warn("List bucketing pruner is either null or in unknown state "
          + " so that it uses full partition scan :" + Arrays.toString(part.getPath()));
      finalPaths = part.getPath();
    } else {
      // Retrieve skewed columns.
      List<List<String>> sVals = part.getSkewedColValues();

      assert ((sVals != null) && (sVals.size() > 0)) :
        part.getName() + " skewed metadata is corrupted. No skewed value information.";
      // Calculate collection.
      List<List<String>> indexCollection = DynamicMultiDimensionalCollection
          .generateCollection(sVals);

      assert (indexCollection != null) : "Collection is null.";

      // Calculate unique skewed elements for each skewed column.
      List<List<String>> uniqSkewValues = DynamicMultiDimensionalCollection.uniqueSkewedValueList(
          sVals);
      // Decide skewed value directory selection.
      List<Boolean> nonSkewedValueMatchResult = decideSkewedValueDirSelection(part, pruner,
          selectedPaths, indexCollection, uniqSkewValues);

      // Decide default directory selection.
      decideDefaultDirSelection(part, selectedPaths, nonSkewedValueMatchResult);

      // Finalize paths.
      finalPaths = generateFinalPath(part, selectedPaths);

    }
    return finalPaths;
  }
Main skeleton for list bucketing pruning.

@param ctx
@param part
@param pruner
@return
@throws SemanticException
ql/src/java/org/apache/hadoop/hive/ql/optimizer/listbucketingpruner/ListBucketingPruner.java