diff options
Diffstat (limited to 'exec/java-exec/src/main/java/org/apache/drill/exec/record/metadata/TupleSchema.java')
-rw-r--r-- | exec/java-exec/src/main/java/org/apache/drill/exec/record/metadata/TupleSchema.java | 63 |
1 files changed, 51 insertions, 12 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/record/metadata/TupleSchema.java b/exec/java-exec/src/main/java/org/apache/drill/exec/record/metadata/TupleSchema.java index 83dc91ac8..283ee6451 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/record/metadata/TupleSchema.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/record/metadata/TupleSchema.java @@ -17,15 +17,22 @@ */ package org.apache.drill.exec.record.metadata; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.drill.exec.record.BatchSchema; +import org.apache.drill.exec.record.BatchSchema.SelectionVectorMode; +import org.apache.drill.exec.record.MaterializedField; + import java.util.ArrayList; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; -import org.apache.drill.exec.record.BatchSchema; -import org.apache.drill.exec.record.MaterializedField; -import org.apache.drill.exec.record.BatchSchema.SelectionVectorMode; - /** * Defines the schema of a tuple: either the top-level row or a nested * "map" (really structure). A schema is a collection of columns (backed @@ -33,11 +40,28 @@ import org.apache.drill.exec.record.BatchSchema.SelectionVectorMode; * index. New columns may be added at any time; the new column takes the * next available index. */ - +@JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE) +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +@JsonPropertyOrder({"columns", "properties"}) public class TupleSchema implements TupleMetadata { private MapColumnMetadata parentMap; private final TupleNameSpace<ColumnMetadata> nameSpace = new TupleNameSpace<>(); + private final Map<String, String> properties = new LinkedHashMap<>(); + + public TupleSchema() { + } + + @JsonCreator + public TupleSchema(@JsonProperty("columns") List<AbstractColumnMetadata> columns, + @JsonProperty("properties") Map<String, String> properties) { + columns.forEach(this::addColumn); + setProperties(properties); + } public void bind(MapColumnMetadata parentMap) { this.parentMap = parentMap; @@ -145,6 +169,7 @@ public class TupleSchema implements TupleMetadata { return cols; } + @JsonProperty("columns") @Override public List<ColumnMetadata> toMetadataList() { return new ArrayList<>(nameSpace.entries()); @@ -183,13 +208,6 @@ public class TupleSchema implements TupleMetadata { public boolean isRoot() { return parentMap == null; } @Override - public String schemaString() { - return nameSpace.entries().stream() - .map(ColumnMetadata::columnString) - .collect(Collectors.joining(", ")); - } - - @Override public String toString() { StringBuilder builder = new StringBuilder() .append("[") @@ -200,7 +218,28 @@ public class TupleSchema implements TupleMetadata { .map(ColumnMetadata::toString) .collect(Collectors.joining(", "))); + if (!properties.isEmpty()) { + if (!nameSpace.entries().isEmpty()) { + builder.append(", "); + } + builder.append("properties: ").append(properties); + } + builder.append("]"); return builder.toString(); } + + @Override + public void setProperties(Map<String, String> properties) { + if (properties == null) { + return; + } + this.properties.putAll(properties); + } + + @JsonProperty("properties") + @Override + public Map<String, String> properties() { + return properties; + } } |