use of org.apache.ignite.internal.schema.row.Row in project ignite-3 by apache.
the class TupleMarshallerImpl method buildRow.
/**
* Marshal tuple to a row.
*
* @param schema Schema.
* @param keyTuple0 Internal key tuple.
* @param valTuple0 Internal value tuple.
* @return Row.
* @throws SchemaMismatchException If failed to write tuple column.
*/
@NotNull
private Row buildRow(SchemaDescriptor schema, InternalTuple keyTuple0, InternalTuple valTuple0) throws SchemaMismatchException {
RowAssembler rowBuilder = createAssembler(schema, keyTuple0, valTuple0);
Columns columns = schema.keyColumns();
for (int i = 0, len = columns.length(); i < len; i++) {
final Column col = columns.column(i);
writeColumn(rowBuilder, col, keyTuple0);
}
if (valTuple0.tuple != null) {
columns = schema.valueColumns();
for (int i = 0, len = columns.length(); i < len; i++) {
final Column col = columns.column(i);
writeColumn(rowBuilder, col, valTuple0);
}
}
return new Row(schema, rowBuilder.build());
}
use of org.apache.ignite.internal.schema.row.Row in project ignite-3 by apache.
the class TupleMarshallerImpl method marshalKey.
/**
* {@inheritDoc}
*/
@Override
public Row marshalKey(@NotNull Tuple keyTuple) throws TupleMarshallerException {
try {
final SchemaDescriptor schema = schemaReg.schema();
InternalTuple keyTuple0 = toInternalTuple(schema, keyTuple, true);
if (keyTuple0.knownColumns() < keyTuple.columnCount()) {
throw new SchemaMismatchException("Key tuple contains extra columns: " + extraColumnNames(keyTuple, true, schema));
}
final RowAssembler rowBuilder = createAssembler(schema, keyTuple0, InternalTuple.NO_VALUE);
Columns cols = schema.keyColumns();
for (int i = 0, len = cols.length(); i < len; i++) {
final Column col = cols.column(i);
writeColumn(rowBuilder, col, keyTuple0);
}
return new Row(schema, rowBuilder.build());
} catch (Exception ex) {
throw new TupleMarshallerException("Failed to marshal tuple.", ex);
}
}
use of org.apache.ignite.internal.schema.row.Row in project ignite-3 by apache.
the class IgniteTableImpl method toRow.
/**
* {@inheritDoc}
*/
@Override
public <RowT> RowT toRow(ExecutionContext<RowT> ectx, BinaryRow binaryRow, RowHandler.RowFactory<RowT> factory, @Nullable ImmutableBitSet requiredColumns) {
RowHandler<RowT> handler = factory.handler();
assert handler == ectx.rowHandler();
RowT res = factory.create();
assert handler.columnCount(res) == (requiredColumns == null ? desc.columnsCount() : requiredColumns.cardinality());
Row row = schemaRegistry.resolve(binaryRow, schemaDescriptor);
if (requiredColumns == null) {
for (int i = 0; i < desc.columnsCount(); i++) {
ColumnDescriptor colDesc = desc.columnDescriptor(i);
handler.set(i, res, row.value(colDesc.physicalIndex()));
}
} else {
for (int i = 0, j = requiredColumns.nextSetBit(0); j != -1; j = requiredColumns.nextSetBit(j + 1), i++) {
ColumnDescriptor colDesc = desc.columnDescriptor(j);
handler.set(i, res, row.value(colDesc.physicalIndex()));
}
}
return res;
}
use of org.apache.ignite.internal.schema.row.Row in project ignite-3 by apache.
the class KvMarshallerTest method privateClass.
@ParameterizedTest
@MethodSource("marshallerFactoryProvider")
public void privateClass(MarshallerFactory factory) throws MarshallerException {
Column[] cols = new Column[] { new Column("primLongCol".toUpperCase(), INT64, false) };
SchemaDescriptor schema = new SchemaDescriptor(1, cols, cols);
final ObjectFactory<PrivateTestObject> objFactory = new ObjectFactory<>(PrivateTestObject.class);
final KvMarshaller<PrivateTestObject, PrivateTestObject> marshaller = factory.create(schema, PrivateTestObject.class, PrivateTestObject.class);
final PrivateTestObject key = PrivateTestObject.randomObject(rnd);
final PrivateTestObject val = PrivateTestObject.randomObject(rnd);
BinaryRow row = marshaller.marshal(key, objFactory.create());
Object key1 = marshaller.unmarshalKey(new Row(schema, row));
Object val1 = marshaller.unmarshalValue(new Row(schema, row));
assertTrue(key.getClass().isInstance(key1));
assertTrue(val.getClass().isInstance(val1));
}
use of org.apache.ignite.internal.schema.row.Row in project ignite-3 by apache.
the class KvMarshallerTest method classLoader.
@ParameterizedTest
@MethodSource("marshallerFactoryProvider")
public void classLoader(MarshallerFactory factory) throws MarshallerException {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(new DynamicClassLoader(getClass().getClassLoader()));
Column[] keyCols = new Column[] { new Column("key".toUpperCase(), INT64, false) };
Column[] valCols = new Column[] { new Column("col0".toUpperCase(), INT64, false), new Column("col1".toUpperCase(), INT64, false), new Column("col2".toUpperCase(), INT64, false) };
SchemaDescriptor schema = new SchemaDescriptor(1, keyCols, valCols);
final Class<?> valClass = createGeneratedObjectClass();
final ObjectFactory<?> objFactory = new ObjectFactory<>(valClass);
KvMarshaller<Long, Object> marshaller = factory.create(schema, Long.class, (Class<Object>) valClass);
final Long key = rnd.nextLong();
BinaryRow row = marshaller.marshal(key, objFactory.create());
Long key1 = marshaller.unmarshalKey(new Row(schema, row));
Object val1 = marshaller.unmarshalValue(new Row(schema, row));
assertTrue(valClass.isInstance(val1));
assertEquals(key, key1);
} finally {
Thread.currentThread().setContextClassLoader(loader);
}
}
Aggregations