Example #1
0
 /**
  * Apply an appropriate column filter based on the input string. Four modes of operation:
  *
  * <ol>
  *   <li>1. Null or blank ("") `colFilter`: do nothing.
  *   <li>2. No ranges `colFilter`: use scanner.fetchColumn() which invokes an Accumulo system
  *       {@link ColumnQualifierFilter}.
  *   <li>3. Singleton range `colFilter`: use Accumulo user {@link ColumnSliceFilter}.
  *   <li>4. Multi-range `colFilter`: use Graphulo {@link D4mRangeFilter}.
  * </ol>
  *
  * @param colFilter column filter string
  * @param scanner to call fetchColumn() on, for case #2
  * @param dis to call append()/prepend() on, for cases #3 and #4
  * @param append True means call {@link DynamicIteratorSetting#append}. False means call {@link
  *     DynamicIteratorSetting#prepend}
  */
 public static void applyGeneralColumnFilter(
     String colFilter, ScannerBase scanner, DynamicIteratorSetting dis, boolean append) {
   //    System.err.println("colFilter: "+colFilter);
   if (colFilter != null && !colFilter.isEmpty()) {
     int pos1 = colFilter.indexOf(':');
     if (pos1 == -1) { // no ranges - collection of singleton texts
       // todo - the order this filter applies is different. Ensure no logical bugs when we have
       // case 2.
       for (Text text : GraphuloUtil.d4mRowToTexts(colFilter)) {
         scanner.fetchColumn(GraphuloUtil.EMPTY_TEXT, text);
       }
     } else {
       SortedSet<Range> ranges = GraphuloUtil.d4mRowToRanges(colFilter);
       assert ranges.size() > 0;
       IteratorSetting s;
       if (ranges.size() == 1) { // single range - use ColumnSliceFilter
         Range r = ranges.first();
         s = new IteratorSetting(1, ColumnSliceFilter.class);
         //          System.err.println("start: "+(r.isInfiniteStartKey() ? null :
         // r.getStartKey().getRow().toString())
         //              +"end: "+(r.isInfiniteStopKey() ? null :
         // r.getEndKey().getRow().toString()));
         ColumnSliceFilter.setSlice(
             s,
             r.isInfiniteStartKey() ? null : r.getStartKey().getRow().toString(),
             true,
             r.isInfiniteStopKey() ? null : r.getEndKey().getRow().toString(),
             true);
         //          System.err.println("!ok "+GraphuloUtil.d4mRowToRanges(colFilter));
       } else { // multiple ranges
         //          System.err.println("ok "+GraphuloUtil.d4mRowToRanges(colFilter));
         s = D4mRangeFilter.iteratorSetting(1, D4mRangeFilter.KeyPart.COLQ, colFilter);
       }
       if (append) dis.append(s);
       else dis.prepend(s);
     }
   }
 }
Example #2
0
 //  @Deprecated
 //   * @deprecated Use {@link #applyGeneralColumnFilter(String, ScannerBase,
 // DynamicIteratorSetting)} for more robust filter setting.
 public static void applyGeneralColumnFilter(String colFilter, ScannerBase scanner, int priority) {
   //    System.err.println("colFilter: "+colFilter);
   if (colFilter != null && !colFilter.isEmpty()) {
     int pos1 = colFilter.indexOf(':');
     if (pos1 == -1) { // no ranges - collection of singleton texts
       for (Text text : GraphuloUtil.d4mRowToTexts(colFilter)) {
         scanner.fetchColumn(GraphuloUtil.EMPTY_TEXT, text);
       }
     } else {
       SortedSet<Range> ranges = GraphuloUtil.d4mRowToRanges(colFilter);
       assert ranges.size() > 0;
       IteratorSetting s;
       if (ranges.size() == 1) { // single range - use ColumnSliceFilter
         Range r = ranges.first();
         if (r.isInfiniteStartKey() && r.isInfiniteStopKey())
           return; // Infinite case: no filtering.
         s = new IteratorSetting(priority, ColumnSliceFilter.class);
         //          System.err.println("start: "+(r.isInfiniteStartKey() ? null :
         // r.getStartKey().getRow().toString())
         //              +"end: "+(r.isInfiniteStopKey() ? null :
         // r.getEndKey().getRow().toString()));
         ColumnSliceFilter.setSlice(
             s,
             r.isInfiniteStartKey() ? null : r.getStartKey().getRow().toString(),
             true,
             r.isInfiniteStopKey() ? null : r.getEndKey().getRow().toString(),
             true);
         //          System.err.println("!ok "+GraphuloUtil.d4mRowToRanges(colFilter));
       } else { // multiple ranges
         //          System.err.println("ok "+GraphuloUtil.d4mRowToRanges(colFilter));
         s = D4mRangeFilter.iteratorSetting(1, D4mRangeFilter.KeyPart.COLQ, colFilter);
       }
       scanner.addScanIterator(s);
     }
   }
 }