use of org.apache.ignite.internal.schema.Column in project ignite-3 by apache.
the class RowAssembler method appendNumber.
/**
* Appends BigInteger value for the current column to the chunk.
*
* @param val Column value.
* @return {@code this} for chaining.
* @throws SchemaMismatchException If a value doesn't match the current column type.
*/
public RowAssembler appendNumber(BigInteger val) throws SchemaMismatchException {
checkType(NativeTypeSpec.NUMBER);
Column col = curCols.column(curCol);
NumberNativeType type = (NumberNativeType) col.type();
// 0 is a magic number for "unlimited precision"
if (type.precision() > 0 && new BigDecimal(val).precision() > type.precision()) {
throw new SchemaMismatchException("Failed to set number value for column '" + col.name() + "' " + "(max precision exceeds allocated precision) " + "[number=" + val + ", max precision=" + type.precision() + "]");
}
byte[] bytes = val.toByteArray();
buf.putBytes(curOff, bytes);
writeVarlenOffset(curVartblEntry, curOff - dataOff);
curVartblEntry++;
shiftColumn(bytes.length);
return this;
}
use of org.apache.ignite.internal.schema.Column in project ignite-3 by apache.
the class RecordBinaryViewOperationsTest method getAndUpsert.
@Test
public void getAndUpsert() {
SchemaDescriptor schema = new SchemaDescriptor(1, new Column[] { new Column("id".toUpperCase(), NativeTypes.INT64, false) }, new Column[] { new Column("val".toUpperCase(), NativeTypes.INT64, false) });
RecordView<Tuple> tbl = createTableImpl(schema).recordView();
final Tuple tuple = Tuple.create().set("id", 1L).set("val", 11L);
final Tuple newTuple = Tuple.create().set("id", 1L).set("val", 22L);
assertNull(tbl.get(null, Tuple.create().set("id", 1L)));
// Insert new tuple.
assertNull(tbl.getAndUpsert(null, tuple));
assertEqualsRows(schema, tuple, tbl.get(null, Tuple.create().set("id", 1L)));
// Update exited row.
assertEqualsRows(schema, tuple, tbl.getAndUpsert(null, newTuple));
assertEqualsRows(schema, newTuple, tbl.get(null, Tuple.create().set("id", 1L)));
}
use of org.apache.ignite.internal.schema.Column in project ignite-3 by apache.
the class RecordBinaryViewOperationsTest method replaceExact.
@Test
public void replaceExact() {
SchemaDescriptor schema = new SchemaDescriptor(1, new Column[] { new Column("id".toUpperCase(), NativeTypes.INT64, false) }, new Column[] { new Column("val".toUpperCase(), NativeTypes.INT64, false) });
RecordView<Tuple> tbl = createTableImpl(schema).recordView();
final Tuple tuple = Tuple.create().set("id", 1L).set("val", 11L);
final Tuple tuple2 = Tuple.create().set("id", 1L).set("val", 22L);
assertNull(tbl.get(null, Tuple.create().set("id", 1L)));
// Ignore replace operation for non-existed row.
// TODO: IGNITE-14479: Fix default value usage.
// assertTrue(tbl.replace(keyTuple, tuple));
// assertNull(tbl.get(keyTuple));
// assertNull(tbl.get(tbl.tupleBuilder().set("id", 1L).set("val", -1)));
// Insert row.
tbl.insert(null, tuple);
// Replace existed row.
assertTrue(tbl.replace(null, tuple, tuple2));
assertEqualsRows(schema, tuple2, tbl.get(null, Tuple.create().set("id", 1L)));
}
use of org.apache.ignite.internal.schema.Column in project ignite-3 by apache.
the class RecordBinaryViewOperationsTest method getAll.
@Test
public void getAll() {
SchemaDescriptor schema = new SchemaDescriptor(1, new Column[] { new Column("id".toUpperCase(), NativeTypes.INT64, false) }, new Column[] { new Column("val".toUpperCase(), NativeTypes.INT64, false) });
RecordView<Tuple> tbl = createTableImpl(schema).recordView();
Tuple rec1 = Tuple.create().set("id", 1L).set("val", 11L);
Tuple rec3 = Tuple.create().set("id", 3L).set("val", 33L);
tbl.upsertAll(null, List.of(rec1, rec3));
Collection<Tuple> res = tbl.getAll(null, List.of(Tuple.create().set("id", 1L), Tuple.create().set("id", 2L), Tuple.create().set("id", 3L)));
assertEquals(2, res.size());
assertTrue(res.contains(rec1));
assertTrue(res.contains(rec1));
}
use of org.apache.ignite.internal.schema.Column in project ignite-3 by apache.
the class RecordViewOperationsTest method recordView.
/**
* Creates RecordView.
*/
private RecordViewImpl<TestObjectWithAllTypes> recordView() {
ClusterService clusterService = Mockito.mock(ClusterService.class, RETURNS_DEEP_STUBS);
Mockito.when(clusterService.topologyService().localMember().address()).thenReturn(DummyInternalTableImpl.ADDR);
TxManager txManager = new TxManagerImpl(clusterService, new HeapLockManager());
MessagingService messagingService = MessagingServiceTestUtils.mockMessagingService(txManager);
Mockito.when(clusterService.messagingService()).thenReturn(messagingService);
DummyInternalTableImpl table = new DummyInternalTableImpl(new VersionedRowStore(new ConcurrentHashMapPartitionStorage(), txManager), txManager);
Mapper<TestObjectWithAllTypes> recMapper = Mapper.of(TestObjectWithAllTypes.class);
Column[] valCols = { new Column("primitiveByteCol".toUpperCase(), INT8, false), new Column("primitiveShortCol".toUpperCase(), INT16, false), new Column("primitiveIntCol".toUpperCase(), INT32, false), new Column("primitiveFloatCol".toUpperCase(), FLOAT, false), new Column("primitiveDoubleCol".toUpperCase(), DOUBLE, false), new Column("byteCol".toUpperCase(), INT8, true), new Column("shortCol".toUpperCase(), INT16, true), new Column("intCol".toUpperCase(), INT32, true), new Column("longCol".toUpperCase(), INT64, true), new Column("nullLongCol".toUpperCase(), INT64, true), new Column("floatCol".toUpperCase(), FLOAT, true), new Column("doubleCol".toUpperCase(), DOUBLE, true), new Column("dateCol".toUpperCase(), DATE, true), new Column("timeCol".toUpperCase(), time(), true), new Column("dateTimeCol".toUpperCase(), datetime(), true), new Column("timestampCol".toUpperCase(), timestamp(), true), new Column("uuidCol".toUpperCase(), NativeTypes.UUID, true), new Column("bitmaskCol".toUpperCase(), NativeTypes.bitmaskOf(42), true), new Column("stringCol".toUpperCase(), STRING, true), new Column("nullBytesCol".toUpperCase(), BYTES, true), new Column("bytesCol".toUpperCase(), BYTES, true), new Column("numberCol".toUpperCase(), NativeTypes.numberOf(12), true), new Column("decimalCol".toUpperCase(), NativeTypes.decimalOf(19, 3), true) };
SchemaDescriptor schema = new SchemaDescriptor(1, new Column[] { new Column("primitiveLongCol".toUpperCase(), NativeTypes.INT64, false) }, valCols);
// Validate all types are tested.
Set<NativeTypeSpec> testedTypes = Arrays.stream(valCols).map(c -> c.type().spec()).collect(Collectors.toSet());
Set<NativeTypeSpec> missedTypes = Arrays.stream(NativeTypeSpec.values()).filter(t -> !testedTypes.contains(t)).collect(Collectors.toSet());
assertEquals(Collections.emptySet(), missedTypes);
return new RecordViewImpl<>(table, new DummySchemaManagerImpl(schema), recMapper);
}
Aggregations