use of org.apache.ignite.internal.schema.SchemaDescriptor in project ignite-3 by apache.
the class NumericTypesSerializerTest method testStringDecimalSpecialCase.
@Test
public void testStringDecimalSpecialCase() throws TupleMarshallerException {
schema = new SchemaDescriptor(42, new Column[] { new Column("key", NativeTypes.INT64, false) }, new Column[] { new Column("decimalCol", NativeTypes.decimalOf(1, 0), false) });
// representation of "0000" value.
final Tuple tup = createTuple().set("key", rnd.nextLong()).set("decimalCol", new BigDecimal("0E+3"));
TupleMarshaller marshaller = new TupleMarshallerImpl(new DummySchemaManagerImpl(schema));
final Row row = marshaller.marshal(tup);
assertEquals(row.decimalValue(1), BigDecimal.ZERO);
}
use of org.apache.ignite.internal.schema.SchemaDescriptor in project ignite-3 by apache.
the class NumericTypesSerializerTest method testPrecisionRestrictionsForNumbers.
@Test
public void testPrecisionRestrictionsForNumbers() {
schema = new SchemaDescriptor(42, new Column[] { new Column("key", NativeTypes.INT64, false) }, new Column[] { new Column("number1", NativeTypes.numberOf(5), false) });
TupleMarshaller marshaller = new TupleMarshallerImpl(new DummySchemaManagerImpl(schema));
final Tuple badTup = createTuple().set("key", rnd.nextLong());
assertThrows(TupleMarshallerException.class, () -> marshaller.marshal(badTup.set("number1", BigInteger.valueOf(999991L))), "Column's type mismatch");
assertThrows(TupleMarshallerException.class, () -> marshaller.marshal(badTup.set("number1", new BigInteger("111111"))), "Column's type mismatch");
assertThrows(TupleMarshallerException.class, () -> marshaller.marshal(badTup.set("number1", BigInteger.valueOf(-999991L))), "Column's type mismatch");
assertThrows(TupleMarshallerException.class, () -> marshaller.marshal(badTup.set("number1", new BigInteger("-111111"))), "Column's type mismatch");
}
use of org.apache.ignite.internal.schema.SchemaDescriptor in project ignite-3 by apache.
the class NumericTypesSerializerTest method testSameBinaryRepresentation.
/**
* Test.
*/
@ParameterizedTest
@MethodSource("sameDecimals")
public void testSameBinaryRepresentation(Pair<BigInteger, BigInteger> pair) throws Exception {
schema = new SchemaDescriptor(42, new Column[] { new Column("key", NativeTypes.INT64, false) }, new Column[] { new Column("decimalCol", NativeTypes.decimalOf(19, 3), false) });
TupleMarshaller marshaller = new TupleMarshallerImpl(new DummySchemaManagerImpl(schema));
long randomKey = rnd.nextLong();
final Tuple firstTup = createTuple().set("key", randomKey).set("decimalCol", pair.getFirst());
final Tuple secondTup = createTuple().set("key", randomKey).set("decimalCol", pair.getSecond());
final Row firstRow = marshaller.marshal(firstTup);
final Row secondRow = marshaller.marshal(secondTup);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
firstRow.writeTo(stream);
byte[] firstRowInBytes = stream.toByteArray();
stream.reset();
secondRow.writeTo(stream);
byte[] secondRowInBytes = stream.toByteArray();
assertArrayEquals(firstRowInBytes, secondRowInBytes);
}
use of org.apache.ignite.internal.schema.SchemaDescriptor in project ignite-3 by apache.
the class NumericTypesSerializerTest method testPrecisionRestrictionsForDecimal.
@Test
public void testPrecisionRestrictionsForDecimal() {
schema = new SchemaDescriptor(42, new Column[] { new Column("key", NativeTypes.INT64, false) }, new Column[] { new Column("decimalCol", NativeTypes.decimalOf(9, 3), false) });
final Tuple badTup = createTuple().set("key", rnd.nextLong());
TupleMarshaller marshaller = new TupleMarshallerImpl(new DummySchemaManagerImpl(schema));
assertThrows(TupleMarshallerException.class, () -> marshaller.marshal(badTup.set("decimalCol", new BigDecimal("123456789.0123"))), "Failed to set decimal value for column");
assertThrows(TupleMarshallerException.class, () -> marshaller.marshal(badTup.set("decimalCol", new BigDecimal("-1234567890123"))), "Failed to set decimal value for column");
assertThrows(TupleMarshallerException.class, () -> marshaller.marshal(badTup.set("decimalCol", new BigDecimal("1234567"))), "Failed to set decimal value for column");
assertThrows(TupleMarshallerException.class, () -> marshaller.marshal(badTup.set("decimalCol", new BigDecimal("12345678.9"))), "Failed to set decimal value for column");
}
use of org.apache.ignite.internal.schema.SchemaDescriptor in project ignite-3 by apache.
the class JdbcMetadataCatalog method getColumnsMeta.
/**
* See {@link DatabaseMetaData#getColumns(String, String, String, String)} for details.
*
* <p>Ignite has only one possible CATALOG_NAME, it is handled on the client (driver) side.
*
* @param schemaNamePtrn Schema name java regex pattern.
* @param tblNamePtrn Table name java regex pattern.
* @param colNamePtrn Column name java regex pattern.
* @return Future of the list of metadatas about columns that match specified schema/tablename/columnname criterias.
*/
public CompletableFuture<Collection<JdbcColumnMeta>> getColumnsMeta(String schemaNamePtrn, String tblNamePtrn, String colNamePtrn) {
String schemaNameRegex = translateSqlWildcardsToRegex(schemaNamePtrn);
String tlbNameRegex = translateSqlWildcardsToRegex(tblNamePtrn);
String colNameRegex = translateSqlWildcardsToRegex(colNamePtrn);
return tables.tablesAsync().thenApply(tablesList -> {
return tablesList.stream().filter(t -> matches(getTblSchema(t.name()), schemaNameRegex)).filter(t -> matches(getTblName(t.name()), tlbNameRegex)).flatMap(tbl -> {
SchemaDescriptor schema = ((TableImpl) tbl).schemaView().schema();
List<Pair<String, Column>> tblColPairs = new ArrayList<>();
for (Column column : schema.keyColumns().columns()) {
tblColPairs.add(new Pair<>(tbl.name(), column));
}
for (Column column : schema.valueColumns().columns()) {
tblColPairs.add(new Pair<>(tbl.name(), column));
}
return tblColPairs.stream();
}).filter(e -> matches(e.getSecond().name(), colNameRegex)).sorted(bySchemaThenTabNameThenColOrder).map(pair -> createColumnMeta(pair.getFirst(), pair.getSecond())).collect(Collectors.toCollection(LinkedHashSet::new));
});
}
Aggregations