Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/909#discussion_r135359090
  
    --- Diff: 
contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/binary/CompareFunctionsProcessor.java
 ---
    @@ -82,466 +45,37 @@ public static CompareFunctionsProcessor 
process(FunctionCall call, boolean nullC
             LogicalExpression swapArg = valueArg;
             valueArg = nameArg;
             nameArg = swapArg;
    -        evaluator.functionName = 
COMPARE_FUNCTIONS_TRANSPOSE_MAP.get(functionName);
    +        
evaluator.setFunctionName(COMPARE_FUNCTIONS_TRANSPOSE_MAP.get(functionName));
           }
    -      evaluator.success = nameArg.accept(evaluator, valueArg);
    +      evaluator.setSuccess(nameArg.accept(evaluator, valueArg));
         } else if (nullComparatorSupported && call.args.get(0) instanceof 
SchemaPath) {
    -      evaluator.success = true;
    -      evaluator.path = (SchemaPath) nameArg;
    +      evaluator.setSuccess(true);
    +      evaluator.setPath((SchemaPath) nameArg);
         }
     
         return evaluator;
       }
     
    -  public CompareFunctionsProcessor(String functionName) {
    -    this.success = false;
    -    this.functionName = functionName;
    -    this.isEqualityFn = 
COMPARE_FUNCTIONS_TRANSPOSE_MAP.containsKey(functionName)
    -        && 
COMPARE_FUNCTIONS_TRANSPOSE_MAP.get(functionName).equals(functionName);
    -    this.isRowKeyPrefixComparison = false;
    -    this.sortOrderAscending = true;
    -  }
    -
    -  public byte[] getValue() {
    -    return value;
    -  }
    -
    -  public boolean isSuccess() {
    -    return success;
    -  }
    -
    -  public SchemaPath getPath() {
    -    return path;
    -  }
    -
    -  public String getFunctionName() {
    -    return functionName;
    -  }
    -
    -  public boolean isRowKeyPrefixComparison() {
    -   return isRowKeyPrefixComparison;
    -  }
    -
    -  public byte[] getRowKeyPrefixStartRow() {
    -    return rowKeyPrefixStartRow;
    -  }
    -
    -  public byte[] getRowKeyPrefixStopRow() {
    -  return rowKeyPrefixStopRow;
    -  }
    -
    -  public Filter getRowKeyPrefixFilter() {
    -  return rowKeyPrefixFilter;
    -  }
    -
    -  public boolean isSortOrderAscending() {
    -    return sortOrderAscending;
    -  }
    -
       @Override
    -  public Boolean visitCastExpression(CastExpression e, LogicalExpression 
valueArg) throws RuntimeException {
    -    if (e.getInput() instanceof CastExpression || e.getInput() instanceof 
SchemaPath) {
    -      return e.getInput().accept(this, valueArg);
    -    }
    -    return false;
    -  }
    -
    -  @Override
    -  public Boolean visitConvertExpression(ConvertExpression e, 
LogicalExpression valueArg) throws RuntimeException {
    -    if (e.getConvertFunction() == ConvertExpression.CONVERT_FROM) {
    -
    -      String encodingType = e.getEncodingType();
    -      int prefixLength    = 0;
    -
    -      // Handle scan pruning in the following scenario:
    -      // The row-key is a composite key and the CONVERT_FROM() function 
has byte_substr() as input function which is
    -      // querying for the first few bytes of the row-key(start-offset 1)
    -      // Example WHERE clause:
    -      // CONVERT_FROM(BYTE_SUBSTR(row_key, 1, 8), 'DATE_EPOCH_BE') < DATE 
'2015-06-17'
    -      if (e.getInput() instanceof FunctionCall) {
    -
    -        // We can prune scan range only for big-endian encoded data
    -        if (encodingType.endsWith("_BE") == false) {
    -          return false;
    -        }
    -
    -        FunctionCall call = (FunctionCall)e.getInput();
    -        String functionName = call.getName();
    -        if (!functionName.equalsIgnoreCase("byte_substr")) {
    -          return false;
    -        }
    -
    -        LogicalExpression nameArg = call.args.get(0);
    -        LogicalExpression valueArg1 = call.args.size() >= 2 ? 
call.args.get(1) : null;
    -        LogicalExpression valueArg2 = call.args.size() >= 3 ? 
call.args.get(2) : null;
    -
    -        if (((nameArg instanceof SchemaPath) == false) ||
    -             (valueArg1 == null) || ((valueArg1 instanceof IntExpression) 
== false) ||
    -             (valueArg2 == null) || ((valueArg2 instanceof IntExpression) 
== false)) {
    -          return false;
    -        }
    -
    -        boolean isRowKey = 
((SchemaPath)nameArg).getAsUnescapedPath().equals(DrillHBaseConstants.ROW_KEY);
    -        int offset = ((IntExpression)valueArg1).getInt();
    -
    -        if (!isRowKey || (offset != 1)) {
    -          return false;
    -        }
    -
    -        this.path    = (SchemaPath)nameArg;
    -        prefixLength = ((IntExpression)valueArg2).getInt();
    -        this.isRowKeyPrefixComparison = true;
    -        return visitRowKeyPrefixConvertExpression(e, prefixLength, 
valueArg);
    -      }
    -
    -      if (e.getInput() instanceof SchemaPath) {
    -        ByteBuf bb = null;
    -
    -        switch (encodingType) {
    -        case "INT_BE":
    -        case "INT":
    -        case "UINT_BE":
    -        case "UINT":
    -        case "UINT4_BE":
    -        case "UINT4":
    -          if (valueArg instanceof IntExpression
    -              && (isEqualityFn || encodingType.startsWith("U"))) {
    -            bb = newByteBuf(4, encodingType.endsWith("_BE"));
    -            bb.writeInt(((IntExpression)valueArg).getInt());
    -          }
    -          break;
    -        case "BIGINT_BE":
    -        case "BIGINT":
    -        case "UINT8_BE":
    -        case "UINT8":
    -          if (valueArg instanceof LongExpression
    -              && (isEqualityFn || encodingType.startsWith("U"))) {
    -            bb = newByteBuf(8, encodingType.endsWith("_BE"));
    -            bb.writeLong(((LongExpression)valueArg).getLong());
    -          }
    -          break;
    -        case "FLOAT":
    -          if (valueArg instanceof FloatExpression && isEqualityFn) {
    -            bb = newByteBuf(4, true);
    -            bb.writeFloat(((FloatExpression)valueArg).getFloat());
    -          }
    -          break;
    -        case "DOUBLE":
    -          if (valueArg instanceof DoubleExpression && isEqualityFn) {
    -            bb = newByteBuf(8, true);
    -            bb.writeDouble(((DoubleExpression)valueArg).getDouble());
    -          }
    -          break;
    -        case "TIME_EPOCH":
    -        case "TIME_EPOCH_BE":
    -          if (valueArg instanceof TimeExpression) {
    -            bb = newByteBuf(8, encodingType.endsWith("_BE"));
    -            bb.writeLong(((TimeExpression)valueArg).getTime());
    -          }
    -          break;
    -        case "DATE_EPOCH":
    -        case "DATE_EPOCH_BE":
    -          if (valueArg instanceof DateExpression) {
    -            bb = newByteBuf(8, encodingType.endsWith("_BE"));
    -            bb.writeLong(((DateExpression)valueArg).getDate());
    -          }
    -          break;
    -        case "BOOLEAN_BYTE":
    -          if (valueArg instanceof BooleanExpression) {
    -            bb = newByteBuf(1, false /* does not matter */);
    -            bb.writeByte(((BooleanExpression)valueArg).getBoolean() ? 1 : 
0);
    -          }
    -          break;
    -        case "DOUBLE_OB":
    -        case "DOUBLE_OBD":
    -          if (valueArg instanceof DoubleExpression) {
    -            bb = newByteBuf(9, true);
    -            PositionedByteRange br = new 
SimplePositionedMutableByteRange(bb.array(), 0, 9);
    -            if (encodingType.endsWith("_OBD")) {
    -              org.apache.hadoop.hbase.util.OrderedBytes.encodeFloat64(br,
    -                  ((DoubleExpression)valueArg).getDouble(), 
Order.DESCENDING);
    -              this.sortOrderAscending = false;
    -            } else {
    -              org.apache.hadoop.hbase.util.OrderedBytes.encodeFloat64(br,
    -                  ((DoubleExpression)valueArg).getDouble(), 
Order.ASCENDING);
    -            }
    +  protected ByteBuf getByteBuf(LogicalExpression valueArg, String 
encodingType) {
    --- End diff --
    
    Sorry, it is not at all clear why we deleted the big wad of code. Nor is it 
clear why, when resolving functions, we start looking at byte buffers. 
Resolving function is a setup task; byte buffers are runtime tasks. Can you 
explain this a bit?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to