Search in sources :

Example 81 with Row

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);
}
Also used : Column(org.apache.ignite.internal.schema.Column) RowAssembler(org.apache.ignite.internal.schema.row.RowAssembler) Row(org.apache.ignite.internal.schema.row.Row) Test(org.junit.jupiter.api.Test)

Example 82 with Row

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);
        }
    }
}
Also used : BigInteger(java.math.BigInteger) RowAssembler(org.apache.ignite.internal.schema.row.RowAssembler) Row(org.apache.ignite.internal.schema.row.Row)

Example 83 with Row

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);
}
Also used : SchemaDescriptor(org.apache.ignite.internal.schema.SchemaDescriptor) BinaryRow(org.apache.ignite.internal.schema.BinaryRow) Row(org.apache.ignite.internal.schema.row.Row) ColumnMapper(org.apache.ignite.internal.schema.mapping.ColumnMapper) Nullable(org.jetbrains.annotations.Nullable)

Aggregations

Row (org.apache.ignite.internal.schema.row.Row)83 BinaryRow (org.apache.ignite.internal.schema.BinaryRow)55 Column (org.apache.ignite.internal.schema.Column)34 SchemaDescriptor (org.apache.ignite.internal.schema.SchemaDescriptor)30 NotNull (org.jetbrains.annotations.NotNull)25 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)24 MethodSource (org.junit.jupiter.params.provider.MethodSource)22 Tuple (org.apache.ignite.table.Tuple)21 Test (org.junit.jupiter.api.Test)18 ByteBufferRow (org.apache.ignite.internal.schema.ByteBufferRow)17 TupleMarshaller (org.apache.ignite.internal.schema.marshaller.TupleMarshaller)15 TupleMarshallerImpl (org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl)15 DummySchemaManagerImpl (org.apache.ignite.internal.table.impl.DummySchemaManagerImpl)15 RowAssembler (org.apache.ignite.internal.schema.row.RowAssembler)14 ArrayList (java.util.ArrayList)8 InternalTransaction (org.apache.ignite.internal.tx.InternalTransaction)6 Random (java.util.Random)5 MarshallerException (org.apache.ignite.internal.schema.marshaller.MarshallerException)5 TestObjectWithAllTypes (org.apache.ignite.internal.schema.testobjects.TestObjectWithAllTypes)5 IgniteException (org.apache.ignite.lang.IgniteException)5