DBZ-287 Avoiding double conversion; changing test to use a larger scale
This commit is contained in:
parent
7fb8829cb1
commit
bddf715324
@ -8,7 +8,6 @@
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.math.MathContext;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
@ -130,8 +129,7 @@ protected Object convertDecimal(Column column, Field fieldDefn, Object data) {
|
||||
return newDecimal;
|
||||
}
|
||||
if (column.scale() > newDecimal.scale()) {
|
||||
MathContext mc = new MathContext((newDecimal.precision() - newDecimal.scale()) + column.scale());
|
||||
newDecimal = new BigDecimal(newDecimal.doubleValue(), mc);
|
||||
newDecimal = newDecimal.setScale(column.scale());
|
||||
}
|
||||
return newDecimal;
|
||||
}
|
||||
|
@ -14,7 +14,6 @@
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.MathContext;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
@ -91,8 +90,8 @@ protected List<SchemaAndValueField> schemasAndValuesForNumericType() {
|
||||
return Arrays.asList(new SchemaAndValueField("si", SchemaBuilder.OPTIONAL_INT16_SCHEMA, (short) 1),
|
||||
new SchemaAndValueField("i", SchemaBuilder.OPTIONAL_INT32_SCHEMA, 123456),
|
||||
new SchemaAndValueField("bi", SchemaBuilder.OPTIONAL_INT64_SCHEMA, 1234567890123L),
|
||||
new SchemaAndValueField("d", Decimal.builder(2).optional().build(), new BigDecimal(1.10, new MathContext(3))),
|
||||
new SchemaAndValueField("n", Decimal.builder(3).optional().build(), new BigDecimal(22.220, new MathContext(5))),
|
||||
new SchemaAndValueField("d", Decimal.builder(2).optional().build(), new BigDecimal("1.10")),
|
||||
new SchemaAndValueField("n", Decimal.builder(4).optional().build(), new BigDecimal("22.2200")),
|
||||
new SchemaAndValueField("r", Schema.OPTIONAL_FLOAT32_SCHEMA, 3.3f),
|
||||
new SchemaAndValueField("db", Schema.OPTIONAL_FLOAT64_SCHEMA, 4.44d),
|
||||
new SchemaAndValueField("ss", Schema.INT16_SCHEMA, (short) 1),
|
||||
|
@ -66,7 +66,7 @@ public void shouldLoadSchemaForBuiltinPostgresTypes() throws Exception {
|
||||
Arrays.stream(TEST_TABLES).forEach(tableId -> assertKeySchema(tableId, "pk", Schema.INT32_SCHEMA));
|
||||
assertTableSchema("public.numeric_table", "si, i, bi, d, n, r, db, ss, bs, b",
|
||||
Schema.OPTIONAL_INT16_SCHEMA, Schema.OPTIONAL_INT32_SCHEMA, Schema.OPTIONAL_INT64_SCHEMA,
|
||||
Decimal.builder(2).optional().build(), Decimal.builder(3).optional().build(), Schema.OPTIONAL_FLOAT32_SCHEMA,
|
||||
Decimal.builder(2).optional().build(), Decimal.builder(4).optional().build(), Schema.OPTIONAL_FLOAT32_SCHEMA,
|
||||
Schema.OPTIONAL_FLOAT64_SCHEMA, Schema.INT16_SCHEMA, Schema.INT64_SCHEMA, Schema.OPTIONAL_BOOLEAN_SCHEMA);
|
||||
assertTableSchema("public.string_table", "vc, vcv, ch, c, t",
|
||||
Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_STRING_SCHEMA,
|
||||
|
@ -1,7 +1,7 @@
|
||||
-- Generate a number of tables to cover as many of the PG types as possible
|
||||
DROP SCHEMA IF EXISTS public CASCADE;
|
||||
CREATE SCHEMA public;
|
||||
CREATE TABLE numeric_table (pk SERIAL, si SMALLINT, i INTEGER, bi BIGINT, d DECIMAL(3,2), n NUMERIC(5,3), r REAL, db DOUBLE PRECISION, ss SMALLSERIAL, bs BIGSERIAL, b BOOLEAN, PRIMARY KEY(pk));
|
||||
CREATE TABLE numeric_table (pk SERIAL, si SMALLINT, i INTEGER, bi BIGINT, d DECIMAL(3,2), n NUMERIC(6,4), r REAL, db DOUBLE PRECISION, ss SMALLSERIAL, bs BIGSERIAL, b BOOLEAN, PRIMARY KEY(pk));
|
||||
CREATE TABLE string_table (pk SERIAL, vc VARCHAR(2), vcv CHARACTER VARYING(2), ch CHARACTER(4), c CHAR(3), t TEXT, PRIMARY KEY(pk));
|
||||
CREATE TABLE cash_table (pk SERIAL, csh MONEY, PRIMARY KEY(pk));
|
||||
CREATE TABLE bitbin_table (pk SERIAL, ba BYTEA, bol BIT(1), bs BIT(2), bv BIT VARYING(2) , PRIMARY KEY(pk));
|
||||
|
Loading…
Reference in New Issue
Block a user