use of org.apache.ignite.internal.schema.row.Row in project ignite-3 by apache.
the class ColumnBindingTest method fieldsBindingWithConverter.
/**
* Fields binding with converter.
*
* @throws Exception If failed.
*/
@Test
public void fieldsBindingWithConverter() throws Exception {
Column[] cols = new Column[] { new Column("data", BYTES, true) };
final Pair<RowAssembler, Row> mocks = createMocks();
final RowAssembler rowAssembler = mocks.getFirst();
final Row row = mocks.getSecond();
TestObjectWrapper obj = new TestObjectWrapper();
obj.data = TestSimpleObject.randomObject(rnd);
for (int i = 0; i < cols.length; i++) {
ColumnBinding.createFieldBinding(cols[i].copy(i), TestObjectWrapper.class, cols[i].name(), new SerializingConverter()).write(rowAssembler, obj);
}
TestObjectWrapper restoredObj = new TestObjectWrapper();
for (int i = 0; i < cols.length; i++) {
ColumnBinding.createFieldBinding(cols[i].copy(i), TestObjectWrapper.class, cols[i].name(), new SerializingConverter()).read(row, restoredObj);
}
assertEquals(obj, restoredObj);
}
use of org.apache.ignite.internal.schema.row.Row in project ignite-3 by apache.
the class RowTest method checkValues.
/**
* Validates row values after serialization-then-deserialization.
*
* @param schema Row schema.
* @param vals Row values.
*/
private void checkValues(SchemaDescriptor schema, Object... vals) {
assertEquals(schema.keyColumns().length() + schema.valueColumns().length(), vals.length);
int nonNullVarLenKeyCols = 0;
int nonNullVarLenValCols = 0;
int nonNullVarLenKeySize = 0;
int nonNullVarLenValSize = 0;
for (int i = 0; i < vals.length; i++) {
NativeTypeSpec type = schema.column(i).type().spec();
if (vals[i] != null && !type.fixedLength()) {
if (type == NativeTypeSpec.BYTES) {
byte[] val = (byte[]) vals[i];
if (schema.isKeyColumn(i)) {
nonNullVarLenKeyCols++;
nonNullVarLenKeySize += val.length;
} else {
nonNullVarLenValCols++;
nonNullVarLenValSize += val.length;
}
} else if (type == NativeTypeSpec.STRING) {
if (schema.isKeyColumn(i)) {
nonNullVarLenKeyCols++;
nonNullVarLenKeySize += RowAssembler.utf8EncodedLength((CharSequence) vals[i]);
} else {
nonNullVarLenValCols++;
nonNullVarLenValSize += RowAssembler.utf8EncodedLength((CharSequence) vals[i]);
}
} else if (type == NativeTypeSpec.NUMBER) {
if (schema.isKeyColumn(i)) {
nonNullVarLenKeyCols++;
nonNullVarLenKeySize += RowAssembler.sizeInBytes((BigInteger) vals[i]);
} else {
nonNullVarLenValCols++;
nonNullVarLenValSize += RowAssembler.sizeInBytes((BigInteger) vals[i]);
}
} else if (type == NativeTypeSpec.DECIMAL) {
if (schema.isKeyColumn(i)) {
nonNullVarLenKeyCols++;
nonNullVarLenKeySize += RowAssembler.sizeInBytes((BigDecimal) vals[i]);
} else {
nonNullVarLenValCols++;
nonNullVarLenValSize += RowAssembler.sizeInBytes((BigDecimal) vals[i]);
}
} else {
throw new IllegalStateException("Unsupported variable-length type: " + type);
}
}
}
RowAssembler asm = new RowAssembler(schema, nonNullVarLenKeySize, nonNullVarLenKeyCols, nonNullVarLenValSize, nonNullVarLenValCols);
for (int i = 0; i < vals.length; i++) {
if (vals[i] == null) {
asm.appendNull();
} else {
NativeType type = schema.column(i).type();
switch(type.spec()) {
case INT8:
asm.appendByte((Byte) vals[i]);
break;
case INT16:
asm.appendShort((Short) vals[i]);
break;
case INT32:
asm.appendInt((Integer) vals[i]);
break;
case INT64:
asm.appendLong((Long) vals[i]);
break;
case FLOAT:
asm.appendFloat((Float) vals[i]);
break;
case DOUBLE:
asm.appendDouble((Double) vals[i]);
break;
case UUID:
asm.appendUuid((java.util.UUID) vals[i]);
break;
case STRING:
asm.appendString((String) vals[i]);
break;
case NUMBER:
asm.appendNumber((BigInteger) vals[i]);
break;
case DECIMAL:
asm.appendDecimal((BigDecimal) vals[i]);
break;
case BYTES:
asm.appendBytes((byte[]) vals[i]);
break;
case BITMASK:
asm.appendBitmask((BitSet) vals[i]);
break;
case DATE:
asm.appendDate((LocalDate) vals[i]);
break;
case TIME:
asm.appendTime((LocalTime) vals[i]);
break;
case DATETIME:
asm.appendDateTime((LocalDateTime) vals[i]);
break;
case TIMESTAMP:
asm.appendTimestamp((Instant) vals[i]);
break;
default:
throw new IllegalStateException("Unsupported test type: " + type);
}
}
}
byte[] data = asm.toBytes();
Row row = new Row(schema, new ByteBufferRow(data));
for (int i = 0; i < vals.length; i++) {
Column col = schema.column(i);
NativeTypeSpec type = col.type().spec();
if (type == NativeTypeSpec.BYTES) {
assertArrayEquals((byte[]) vals[i], (byte[]) NativeTypeSpec.BYTES.objectValue(row, i), "Failed for column: " + col);
} else {
assertEquals(vals[i], type.objectValue(row, i), "Failed for column: " + col);
}
}
}
use of org.apache.ignite.internal.schema.row.Row in project ignite-3 by apache.
the class SchemaRegistryImpl method resolveInternal.
/**
* Resolves a schema for row.
* The method is optimal when the latest schema is already gotten.
*
* @param row Binary row.
* @param curSchema The latest available local schema.
* @return Schema-aware rows.
*/
@Nullable
private Row resolveInternal(BinaryRow row, SchemaDescriptor curSchema) {
if (row == null) {
return null;
}
final SchemaDescriptor rowSchema = schema(row.schemaVersion());
if (curSchema.version() == rowSchema.version()) {
return new Row(rowSchema, row);
}
ColumnMapper mapping = resolveMapping(curSchema, rowSchema);
return new UpgradingRowAdapter(curSchema, rowSchema, row, mapping);
}
Aggregations