diff options
author | Paul Rogers <progers@maprtech.com> | 2017-05-16 15:55:41 -0700 |
---|---|---|
committer | Paul Rogers <progers@maprtech.com> | 2017-07-03 11:41:20 -0700 |
commit | 63e243378f3be125f1e8bfb52c74b8211c87bfc3 (patch) | |
tree | c31ef81072187855927ca7421ce6471a626ac17d /exec/vector | |
parent | 92c9304f77a515d8f6747514bd295613738f611e (diff) |
DRILL-5518: Test framework enhancements
* Create a SubOperatorTest base class to do routine setup and shutdown.
* Additional methods to simplify creating complex schemas with field
widths.
* Define a test workspace with plugin-specific options (as for the CSV
storage plugin)
* When verifying row sets, add methods to verify and release just the
"actual" batch in addition to the existing method for verify and free
both the actual and expected batches.
* Allow reading of row set values as object for generic comparisons.
* "Column builder" within schema builder to simplify building a single
MatrializedField for tests.
* Misc. code cleanup.
closes #851
Diffstat (limited to 'exec/vector')
3 files changed, 87 insertions, 15 deletions
diff --git a/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/ColumnReader.java b/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/ColumnReader.java index 860a866e7..4932567f2 100644 --- a/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/ColumnReader.java +++ b/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/ColumnReader.java @@ -58,6 +58,7 @@ public interface ColumnReader extends ColumnAccessor { byte[] getBytes(); BigDecimal getDecimal(); Period getPeriod(); + Object getObject(); TupleReader map(); ArrayReader array(); } diff --git a/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/AbstractColumnReader.java b/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/AbstractColumnReader.java index 1ef2243d9..b88b08bc8 100644 --- a/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/AbstractColumnReader.java +++ b/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/AbstractColumnReader.java @@ -47,6 +47,34 @@ public abstract class AbstractColumnReader extends AbstractColumnAccessor implem } @Override + public Object getObject() { + switch (valueType()) { + case ARRAY: + // TODO: build an array. Just a bit tedious... + throw new UnsupportedOperationException(); + case BYTES: + return getBytes(); + case DECIMAL: + return getDecimal(); + case DOUBLE: + return getDouble(); + case INTEGER: + return getInt(); + case LONG: + return getLong(); + case MAP: + // TODO: build an array. Just a bit tedious... + throw new UnsupportedOperationException(); + case PERIOD: + return getPeriod(); + case STRING: + return getString(); + default: + throw new IllegalStateException("Unexpected type: " + valueType()); + } + } + + @Override public boolean isNull() { return false; } diff --git a/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/TupleReaderImpl.java b/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/TupleReaderImpl.java index 041023ba7..97a6e3c30 100644 --- a/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/TupleReaderImpl.java +++ b/exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/TupleReaderImpl.java @@ -17,6 +17,7 @@ */ package org.apache.drill.exec.vector.accessor.impl; +import org.apache.drill.exec.vector.accessor.ArrayReader; import org.apache.drill.exec.vector.accessor.ColumnReader; import org.apache.drill.exec.vector.accessor.TupleReader; @@ -76,21 +77,7 @@ public class TupleReaderImpl extends AbstractTupleAccessor implements TupleReade } switch (colReader.valueType()) { case BYTES: - StringBuilder buf = new StringBuilder() - .append("["); - byte value[] = colReader.getBytes(); - int len = Math.min(value.length, 20); - for (int i = 0; i < len; i++) { - if (i > 0) { - buf.append(", "); - } - buf.append((int) value[i]); - } - if (value.length > len) { - buf.append("..."); - } - buf.append("]"); - return buf.toString(); + return bytesToString(colReader.getBytes()); case DOUBLE: return Double.toString(colReader.getDouble()); case INTEGER: @@ -101,8 +88,64 @@ public class TupleReaderImpl extends AbstractTupleAccessor implements TupleReade return "\"" + colReader.getString() + "\""; case DECIMAL: return colReader.getDecimal().toPlainString(); + case ARRAY: + return getArrayAsString(colReader.array()); default: throw new IllegalArgumentException("Unsupported type " + colReader.valueType()); } } + + private String bytesToString(byte[] value) { + StringBuilder buf = new StringBuilder() + .append("["); + int len = Math.min(value.length, 20); + for (int i = 0; i < len; i++) { + if (i > 0) { + buf.append(", "); + } + buf.append((int) value[i]); + } + if (value.length > len) { + buf.append("..."); + } + buf.append("]"); + return buf.toString(); + } + + private String getArrayAsString(ArrayReader array) { + StringBuilder buf = new StringBuilder(); + buf.append("["); + for (int i = 0; i < array.size(); i++) { + if (i > 0) { + buf.append( ", " ); + } + switch (array.valueType()) { + case BYTES: + buf.append(bytesToString(array.getBytes(i))); + break; + case DOUBLE: + buf.append(Double.toString(array.getDouble(i))); + break; + case INTEGER: + buf.append(Integer.toString(array.getInt(i))); + break; + case LONG: + buf.append(Long.toString(array.getLong(i))); + break; + case STRING: + buf.append("\"" + array.getString(i) + "\""); + break; + case DECIMAL: + buf.append(array.getDecimal(i).toPlainString()); + break; + case MAP: + case ARRAY: + throw new UnsupportedOperationException("Unsupported type " + array.valueType()); + default: + throw new IllegalArgumentException("Unexpected type " + array.valueType()); + } + } + buf.append("]"); + return buf.toString(); + } } |