@Override public Void visitSchemaPath(SchemaPath path, StringBuilder sb) throws RuntimeException { PathSegment seg = path.getRootSegment(); if (seg.isArray()) { throw new IllegalStateException("Drill doesn't currently support top level arrays"); } sb.append('`'); sb.append(escapeBackTick(seg.getNameSegment().getPath())); sb.append('`'); while ( (seg = seg.getChild()) != null) { if (seg.isNamed()) { sb.append('.'); sb.append('`'); sb.append(escapeBackTick(seg.getNameSegment().getPath())); sb.append('`'); } else { sb.append('['); sb.append(seg.getArraySegment().getIndex()); sb.append(']'); } } return null; }
/** * Returns {@link FieldPath} equivalent of the specified {@link SchemaPath}. */ public static FieldPath schemaPath2FieldPath(SchemaPath column) { Stack<PathSegment> pathSegments = new Stack<PathSegment>(); PathSegment seg = column.getRootSegment(); while (seg != null) { pathSegments.push(seg); seg = seg.getChild(); } FieldSegment child = null; while (!pathSegments.isEmpty()) { seg = pathSegments.pop(); if (seg.isNamed()) { child = new FieldSegment.NameSegment(((PathSegment.NameSegment)seg).getPath(), child, false); } else { child = new FieldSegment.IndexSegment(((PathSegment.ArraySegment)seg).getIndex(), child); } } return new FieldPath((FieldSegment.NameSegment) child); }
/** * Returns {@link FieldPath} equivalent of the specified {@link SchemaPath}. * * @param schemaPath {@link SchemaPath} instance that should be converted * @return {@link FieldPath} equivalent of the specified {@link SchemaPath}. */ public static FieldPath schemaPathToFieldPath(SchemaPath schemaPath) { Deque<PathSegment> pathSegments = Queues.newArrayDeque(); PathSegment pathSegment = schemaPath.getRootSegment(); while (pathSegment != null) { pathSegments.push(pathSegment); pathSegment = pathSegment.getChild(); } FieldSegment child = null; while (!pathSegments.isEmpty()) { pathSegment = pathSegments.pop(); if (pathSegment.isNamed()) { child = new FieldSegment.NameSegment(((PathSegment.NameSegment) pathSegment).getPath(), child, false); } else { child = new FieldSegment.IndexSegment(String.valueOf(((PathSegment.ArraySegment) pathSegment).getIndex()), child); } } return new FieldPath((FieldSegment.NameSegment) child); } }
Preconditions.checkArgument(path.getRootSegment().getChild().isArray(), String.format("Selected column '%s' must be an array index", pathStr)); int index = path.getRootSegment().getChild().getArraySegment().getIndex(); columnIds.add(index);
int index = path.getRootSegment().getChild().getArraySegment().getIndex(); columnIds.add(index);
/** * Returns {@link FieldPath} equivalent of the specified {@link SchemaPath}. * * @param schemaPath {@link SchemaPath} instance that should be converted * @return {@link FieldPath} equivalent of the specified {@link SchemaPath}. */ public static FieldPath schemaPathToFieldPath(SchemaPath schemaPath) { Deque<PathSegment> pathSegments = Queues.newArrayDeque(); PathSegment pathSegment = schemaPath.getRootSegment(); while (pathSegment != null) { pathSegments.push(pathSegment); pathSegment = pathSegment.getChild(); } FieldSegment child = null; while (!pathSegments.isEmpty()) { pathSegment = pathSegments.pop(); if (pathSegment.isNamed()) { child = new FieldSegment.NameSegment(((PathSegment.NameSegment) pathSegment).getPath(), child, false); } else { child = new FieldSegment.IndexSegment(String.valueOf(((PathSegment.ArraySegment) pathSegment).getIndex()), child); } } return new FieldPath((FieldSegment.NameSegment) child); } }
private void parseArray(NameSegment arraySeg) { String name = arraySeg.getPath(); int index = ((ArraySegment) arraySeg.getChild()).getIndex(); RequestedColumnImpl member = getImpl(name); if (member == null) { member = new RequestedColumnImpl(this, name); projection.add(name, member); } else if (member.isSimple()) { // Saw both a and a[x]. Occurs in project list. // Project all elements. member.projectAllElements(); return; } else if (member.hasIndex(index)) { throw UserException .validationError() .message("Duplicate array index in project list: %s[%d]", member.fullName(), index) .build(logger); } member.addIndex(index); }
@Override public Void visitSchemaPath(SchemaPath path, StringBuilder sb) throws RuntimeException { PathSegment seg = path.getRootSegment(); if (seg.isArray()) { throw new IllegalStateException("Drill doesn't currently support top level arrays"); } sb.append('`'); sb.append(escapeBackTick(seg.getNameSegment().getPath())); sb.append('`'); while ( (seg = seg.getChild()) != null) { if (seg.isNamed()) { sb.append('.'); sb.append('`'); sb.append(escapeBackTick(seg.getNameSegment().getPath())); sb.append('`'); } else { sb.append('['); sb.append(seg.getArraySegment().getIndex()); sb.append(']'); } } return null; }
/** * Returns {@link FieldPath} equivalent of the specified {@link SchemaPath}. */ public static FieldPath schemaPath2FieldPath(SchemaPath column) { Stack<PathSegment> pathSegments = new Stack<PathSegment>(); PathSegment seg = column.getRootSegment(); while (seg != null) { pathSegments.push(seg); seg = seg.getChild(); } FieldSegment child = null; while (!pathSegments.isEmpty()) { seg = pathSegments.pop(); if (seg.isNamed()) { child = new FieldSegment.NameSegment(((PathSegment.NameSegment)seg).getPath(), child, false); } else { child = new FieldSegment.IndexSegment(((PathSegment.ArraySegment)seg).getIndex(), child); } } return new FieldPath((FieldSegment.NameSegment) child); }
@Override public boolean segmentEquals(PathSegment obj) { if (this == obj) { return true; } else if (obj == null) { return false; } else if (obj instanceof ArraySegment) { return index == ((ArraySegment)obj).getIndex(); } return false; }
@Override public boolean segmentEquals(PathSegment obj) { if (this == obj) { return true; } else if (obj == null) { return false; } else if (obj instanceof ArraySegment) { return index == ((ArraySegment)obj).getIndex(); } return false; }