aboutsummaryrefslogtreecommitdiff
path: root/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java')
-rw-r--r--exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java77
1 files changed, 76 insertions, 1 deletions
diff --git a/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java b/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java
index 7087687c1..15a2a2d02 100644
--- a/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java
+++ b/exec/vector/src/main/java/org/apache/drill/exec/vector/ValueHolderHelper.java
@@ -20,7 +20,10 @@ package org.apache.drill.exec.vector;
import io.netty.buffer.DrillBuf;
import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.drill.common.types.TypeProtos;
import org.apache.drill.exec.expr.holders.BigIntHolder;
import org.apache.drill.exec.expr.holders.BitHolder;
import org.apache.drill.exec.expr.holders.DateHolder;
@@ -43,7 +46,6 @@ import org.apache.drill.exec.util.DecimalUtility;
import org.apache.drill.shaded.guava.com.google.common.base.Charsets;
-
public class ValueHolderHelper {
static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(ValueHolderHelper.class);
@@ -229,4 +231,77 @@ public class ValueHolderHelper {
return dch;
}
+
+ /**
+ * Returns list of field names which belong to holder corresponding to the specified {@code TypeProtos.MajorType type}.
+ *
+ * @param type type of holder whose fields should be returned
+ * @return list of field names which belong to holder corresponding to the specified {@code TypeProtos.MajorType type}.
+ */
+ public static List<String> getHolderParams(TypeProtos.MajorType type) {
+ ArrayList<String> result = new ArrayList<>();
+ switch (type.getMode()) {
+ case OPTIONAL:
+ result.add("isSet");
+ // fall through
+ case REQUIRED:
+ switch (type.getMinorType()) {
+ case BIGINT:
+ case FLOAT4:
+ case FLOAT8:
+ case INT:
+ case MONEY:
+ case SMALLINT:
+ case TINYINT:
+ case UINT1:
+ case UINT2:
+ case UINT4:
+ case UINT8:
+ case INTERVALYEAR:
+ case DATE:
+ case TIME:
+ case TIMESTAMP:
+ case BIT:
+ case DECIMAL9:
+ case DECIMAL18:
+ result.add("value");
+ return result;
+ case DECIMAL28DENSE:
+ case DECIMAL28SPARSE:
+ case DECIMAL38DENSE:
+ case DECIMAL38SPARSE:
+ result.add("start");
+ result.add("buffer");
+ result.add("scale");
+ result.add("precision");
+ return result;
+ case INTERVAL: {
+ result.add("months");
+ result.add("days");
+ result.add("milliseconds");
+ return result;
+ }
+ case INTERVALDAY: {
+ result.add("days");
+ result.add("milliseconds");
+ return result;
+ }
+ case VARDECIMAL:
+ result.add("scale");
+ result.add("precision");
+ // fall through
+ case VAR16CHAR:
+ case VARBINARY:
+ case VARCHAR:
+ result.add("start");
+ result.add("end");
+ result.add("buffer");
+ return result;
+ case UNION:
+ result.add("reader");
+ return result;
+ }
+ }
+ return result;
+ }
}