private String shortName(ColumnMetaData column) { String name = column.getName(); ColumnMetaData parent = column.getParent(); if (parent != null && name.startsWith(parent.getName())) name = name.substring(parent.getName().length()); if (!Character.isLetterOrDigit(name.charAt(0))) name = name.substring(1); return name; }
private void checkColumns(ColumnMetaData[] columnMeta) { Set<String> seen = new HashSet<>(); for (int i = 0; i < columnMeta.length; i++) { ColumnMetaData c = columnMeta[i]; String name = c.getName(); if (seen.contains(name)) throw new TrevniRuntimeException("Duplicate column name: "+name); ColumnMetaData parent = c.getParent(); if (parent != null && !seen.contains(parent.getName())) throw new TrevniRuntimeException("Parent must precede child: "+name); seen.add(name); } }
private void readColumnMetaData(InputBuffer in) throws IOException { for (int i = 0; i < columnCount; i++) { ColumnMetaData meta = ColumnMetaData.read(in, this); meta.setDefaults(this.metaData); ColumnDescriptor column = new ColumnDescriptor(file, meta); columns[i] = column; meta.setNumber(i); columnsByName.put(meta.getName(), column); } }
/** Set this column's parent. A parent must be a preceding array column. */ public ColumnMetaData setParent(ColumnMetaData parent) { if (!parent.isArray()) throw new TrevniRuntimeException("Parent is not an array: "+parent); if (values) throw new TrevniRuntimeException("Array column cannot have index: "+this); this.parent = parent; parent.children.add(this); return setReserved(PARENT_KEY, parent.getName()); }
/** Expert: Returns the next length in an array column. */ public int nextLength() throws IOException { if (!column.metaData.isArray()) throw new TrevniRuntimeException ("Column is not array: " +column.metaData.getName()); assert arrayLength == 0; return arrayLength = values.readLength(); }
void initialize() throws IOException { // compute a mapping from column name to number for file Map<String,Integer> fileColumnNumbers = new HashMap<>(); int i = 0; for (ColumnMetaData c : new AvroColumnator(fileSchema).getColumns()) fileColumnNumbers.put(c.getName(), i++); // create iterator for each column in readSchema AvroColumnator readColumnator = new AvroColumnator(readSchema); this.arrayWidths = readColumnator.getArrayWidths(); ColumnMetaData[] readColumns = readColumnator.getColumns(); this.values = new ColumnValues[readColumns.length]; int j = 0; for (ColumnMetaData c : readColumns) { Integer n = fileColumnNumbers.get(c.getName()); if (n != null) values[j++] = reader.getValues(n); } findDefaults(readSchema, fileSchema); }
/** Seek to the named value. */ public void seek(T v) throws IOException { if (!column.metaData.hasIndexValues()) throw new TrevniRuntimeException ("Column does not have value index: " +column.metaData.getName()); if (previous == null // not in current block? || previous.compareTo(v) > 0 || (block != column.blockCount()-1 && column.firstValues[block+1].compareTo(v) <= 0)) startBlock(column.findBlock(v)); // seek to block start while (hasNext()) { // scan block long savedPosition = values.tell(); T savedPrevious = previous; if (next().compareTo(v) >= 0) { values.seek(savedPosition); previous = savedPrevious; row--; return; } } }
@Override public T next() { if (column.metaData.isArray() || column.metaData.getParent() != null) throw new TrevniRuntimeException ("Column is array: " +column.metaData.getName()); try { startRow(); return nextValue(); } catch (IOException e) { throw new TrevniRuntimeException(e); } }
private String shortName(ColumnMetaData column) { String name = column.getName(); ColumnMetaData parent = column.getParent(); if (parent != null && name.startsWith(parent.getName())) name = name.substring(parent.getName().length()); if (!Character.isLetterOrDigit(name.charAt(0))) name = name.substring(1); return name; }
private String shortName(ColumnMetaData column) { String name = column.getName(); ColumnMetaData parent = column.getParent(); if (parent != null && name.startsWith(parent.getName())) name = name.substring(parent.getName().length()); if (!Character.isLetterOrDigit(name.charAt(0))) name = name.substring(1); return name; }
private void checkColumns(ColumnMetaData[] columnMeta) { Set<String> seen = new HashSet<String>(); for (int i = 0; i < columnMeta.length; i++) { ColumnMetaData c = columnMeta[i]; String name = c.getName(); if (seen.contains(name)) throw new TrevniRuntimeException("Duplicate column name: "+name); ColumnMetaData parent = c.getParent(); if (parent != null && !seen.contains(parent.getName())) throw new TrevniRuntimeException("Parent must precede child: "+name); seen.add(name); } }
void initialize() throws IOException { // compute a mapping from column name to number for file Map<String,Integer> fileColumnNumbers = new HashMap<String,Integer>(); int i = 0; for (ColumnMetaData c : new AvroColumnator(fileSchema).getColumns()) fileColumnNumbers.put(c.getName(), i++); // create iterator for each column in readSchema AvroColumnator readColumnator = new AvroColumnator(readSchema); this.arrayWidths = readColumnator.getArrayWidths(); ColumnMetaData[] readColumns = readColumnator.getColumns(); this.values = new ColumnValues[readColumns.length]; int j = 0; for (ColumnMetaData c : readColumns) { Integer n = fileColumnNumbers.get(c.getName()); if (n == null) throw new TrevniRuntimeException("No column named: "+c.getName()); values[j++] = reader.getValues(n); } }
/** Expert: Returns the next length in an array column. */ public int nextLength() throws IOException { if (!column.metaData.isArray()) throw new TrevniRuntimeException ("Column is not array: " +column.metaData.getName()); assert arrayLength == 0; return arrayLength = values.readInt(); }
private void readColumnMetaData(InputBuffer in) throws IOException { for (int i = 0; i < columnCount; i++) { ColumnMetaData meta = ColumnMetaData.read(in, this); meta.setDefaults(this.metaData); ColumnDescriptor column = new ColumnDescriptor(file, meta); columns[i] = column; meta.setNumber(i); columnsByName.put(meta.getName(), column); } }
/** Set this column's parent. A parent must be a preceding array column. */ public ColumnMetaData setParent(ColumnMetaData parent) { if (!parent.isArray()) throw new TrevniRuntimeException("Parent is not an array: "+parent); if (values) throw new TrevniRuntimeException("Array column cannot have index: "+this); this.parent = parent; parent.children.add(this); return setReserved(PARENT_KEY, parent.getName()); }
/** Seek to the named value. */ public void seek(T v) throws IOException { if (!column.metaData.hasIndexValues()) throw new TrevniRuntimeException ("Column does not have value index: " +column.metaData.getName()); if (previous == null // not in current block? || previous.compareTo(v) > 0 || (block != column.blockCount()-1 && column.firstValues[block+1].compareTo(v) <= 0)) startBlock(column.findBlock(v)); // seek to block start while (hasNext()) { // scan block long savedPosition = values.tell(); T savedPrevious = previous; if (next().compareTo(v) >= 0) { values.seek(savedPosition); previous = savedPrevious; row--; return; } } }
@Override public T next() { if (column.metaData.isArray() || column.metaData.getParent() != null) throw new TrevniRuntimeException ("Column is array: " +column.metaData.getName()); try { startRow(); return nextValue(); } catch (IOException e) { throw new TrevniRuntimeException(e); } }