aboutsummaryrefslogtreecommitdiff
path: root/exec/vector
diff options
context:
space:
mode:
authorPaul Rogers <progers@maprtech.com>2017-05-16 15:55:41 -0700
committerPaul Rogers <progers@maprtech.com>2017-07-03 11:41:20 -0700
commit63e243378f3be125f1e8bfb52c74b8211c87bfc3 (patch)
treec31ef81072187855927ca7421ce6471a626ac17d /exec/vector
parent92c9304f77a515d8f6747514bd295613738f611e (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')
-rw-r--r--exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/ColumnReader.java1
-rw-r--r--exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/AbstractColumnReader.java28
-rw-r--r--exec/vector/src/main/java/org/apache/drill/exec/vector/accessor/impl/TupleReaderImpl.java73
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();
+ }
}