drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From paul-rogers <...@git.apache.org>
Subject [GitHub] drill pull request #909: DRILL-4264: Allow field names to include dots
Date Fri, 25 Aug 2017 21:59:44 GMT
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 infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message