public ObjectMappedTableDataset(String name, Table table, TypeRepresentation typeRep, Schema objectSchema, @Nullable ClassLoader classLoader) { super(name, table); this.table = table; this.objectSchema = objectSchema; this.typeRepresentation = typeRep; this.typeRepresentation.setClassLoader(classLoader); this.putWriter = new ReflectionPutWriter<>(objectSchema); }
@Override protected void writeNull(Put put) throws IOException { nextField(); }
@Override public void apply() throws Exception { Put put = new Put(rowKey); ReflectionPutWriter<User> putWriter = new ReflectionPutWriter<>(schema); putWriter.write(SAMUEL, put); usersTable.put(put); Row row = usersTable.get(rowKey); ReflectionRowRecordReader rowReader = new ReflectionRowRecordReader(schema, null); StructuredRecord actual = rowReader.read(row, schema); assertRecordEqualsUser(SAMUEL, actual); } });
@Override protected void writeUnion(Put put, Object val, Schema schema) throws IOException { // only support unions if its for a nullable. if (!schema.isNullable()) { throw new UnsupportedOperationException("Unions that do not represent nullables are not supported."); } if (val != null) { seenRefs.remove(val); write(put, val, schema.getNonNullable()); } else { // if the value is null, we want to generate a put with value null, to make sure to delete any existing values. put.add(nextField(), (byte[]) null); } } }
@WriteOnly @Override public void write(byte[] key, T object) { Put put = new Put(key); try { putWriter.write(object, put); table.put(put); } catch (IOException e) { // should never happen throw new DataSetException("Failed to encode object to be written: " + e.getMessage(), e); } }
@Override public void apply() throws Exception { Put put = new Put(rowKey); ReflectionPutWriter<User> putWriter = new ReflectionPutWriter<>(fullSchema); putWriter.write(SAMUEL, put); usersTable.put(put); Row row = usersTable.get(rowKey); ReflectionRowRecordReader rowReader = new ReflectionRowRecordReader(projSchema, null); StructuredRecord actual = rowReader.read(row, fullSchema); assertRecordEqualsUser(projected, actual); } });
@Override protected void writeUnion(Put put, Object val, Schema schema) throws IOException { // only support unions if its for a nullable. if (!schema.isNullable()) { throw new UnsupportedOperationException("Unions that do not represent nullables are not supported."); } if (val != null) { seenRefs.remove(val); write(put, val, schema.getNonNullable()); } else { // if the value is null, we want to generate a put with value null, to make sure to delete any existing values. put.add(nextField(), (byte[]) null); } } }
@WriteOnly @Override public void write(byte[] key, T object) { Put put = new Put(key); try { putWriter.write(object, put); table.put(put); } catch (IOException e) { // should never happen throw new DataSetException("Failed to encode object to be written: " + e.getMessage(), e); } }
@Override public void apply() throws Exception { Put put = new Put(rowKey); ReflectionPutWriter<User> putWriter = new ReflectionPutWriter<>(schema); putWriter.write(obj, put); table.put(put); Row row = table.get(rowKey); ReflectionRowReader<User> rowReader = new ReflectionRowReader<>(schema, TypeToken.of(User.class)); User actual = rowReader.read(row, schema); Assert.assertEquals(obj, actual); } });
@Override protected void writeNull(Put put) throws IOException { nextField(); }
public ObjectMappedTableDataset(String name, Table table, TypeRepresentation typeRep, Schema objectSchema, @Nullable ClassLoader classLoader) { super(name, table); this.table = table; this.objectSchema = objectSchema; this.typeRepresentation = typeRep; this.typeRepresentation.setClassLoader(classLoader); this.putWriter = new ReflectionPutWriter<>(objectSchema); }
@Override public void apply() throws Exception { Put put = new Put(rowKey); ReflectionPutWriter<User> putWriter = new ReflectionPutWriter<>(fullSchema); putWriter.write(SAMUEL, put); usersTable.put(put); Row row = usersTable.get(rowKey); ReflectionRowReader<User2> rowReader = new ReflectionRowReader<>(projSchema, TypeToken.of(User2.class)); User2 actual = rowReader.read(row, fullSchema); Assert.assertEquals(projected, actual); } });
@Override protected void writeLong(Put put, long val) throws IOException { put.add(nextField(), val); }
@Override protected void writeFloat(Put put, Float val) throws IOException { put.add(nextField(), val); }
@Override protected void writeBool(Put put, Boolean val) throws IOException { put.add(nextField(), val); }
@Override protected void writeInt(Put put, int val) throws IOException { put.add(nextField(), val); }
@Override protected void writeLong(Put put, long val) throws IOException { put.add(nextField(), val); }
@Override protected void writeString(Put put, String val) throws IOException { put.add(nextField(), val); }
@Override protected void writeDouble(Put put, Double val) throws IOException { put.add(nextField(), val); }
@Override protected void writeDouble(Put put, Double val) throws IOException { put.add(nextField(), val); }