From 478c95f0423aa22d0e24fc89aaec656cd9fecfef Mon Sep 17 00:00:00 2001 From: Jiri Pechanec Date: Thu, 22 Aug 2024 11:13:46 +0200 Subject: [PATCH] DBZ-8027 Added test --- .../connector/postgresql/PostgresMoneyIT.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/debezium-connector-postgres/src/test/java/io/debezium/connector/postgresql/PostgresMoneyIT.java b/debezium-connector-postgres/src/test/java/io/debezium/connector/postgresql/PostgresMoneyIT.java index c826a59f8..326ac44f2 100644 --- a/debezium-connector-postgres/src/test/java/io/debezium/connector/postgresql/PostgresMoneyIT.java +++ b/debezium-connector-postgres/src/test/java/io/debezium/connector/postgresql/PostgresMoneyIT.java @@ -22,6 +22,7 @@ import io.debezium.data.Envelope; import io.debezium.doc.FixFor; import io.debezium.embedded.async.AbstractAsyncEngineConnectorTest; +import io.debezium.relational.RelationalDatabaseConnectorConfig.DecimalHandlingMode; /** * Integration test to verify postgres money types defined in public schema. @@ -144,6 +145,45 @@ public void shouldReceiveChangesForInsertNullAndZeroMoney() throws Exception { assertThat(after.get("m")).isEqualTo(BigDecimal.ZERO.setScale(2)); } + @Test + @FixFor("DBZ-8027") + public void shouldReceiveCorrectDefaultValueForHandlingMode() throws Exception { + createTableWithNotNull(); + TestHelper.execute("insert into post_money.debezium_test(id, m) values(10, '3.14'::money);"); + + var config = TestHelper.defaultConfig() + .with(PostgresConnectorConfig.SNAPSHOT_MODE, PostgresConnectorConfig.SnapshotMode.ALWAYS) + .with(PostgresConnectorConfig.DECIMAL_HANDLING_MODE, DecimalHandlingMode.STRING) + .with(PostgresConnectorConfig.SNAPSHOT_SELECT_STATEMENT_OVERRIDES_BY_TABLE, "post_money.debezium_test") + .with(PostgresConnectorConfig.SNAPSHOT_SELECT_STATEMENT_OVERRIDES_BY_TABLE + ".post_money.debezium_test", + "SELECT id, null AS m FROM post_money.debezium_test") + .build(); + start(PostgresConnector.class, config); + + var records = consumeRecordsByTopic(1); + var recordsForTopic = records.recordsForTopic(topicName("post_money.debezium_test")); + + assertThat(recordsForTopic).hasSize(1); + assertThat(((Struct) recordsForTopic.get(0).value()).getStruct("after").getString("m")).isEqualTo("0.00"); + + stopConnector(); + + config = TestHelper.defaultConfig() + .with(PostgresConnectorConfig.SNAPSHOT_MODE, PostgresConnectorConfig.SnapshotMode.ALWAYS) + .with(PostgresConnectorConfig.DECIMAL_HANDLING_MODE, DecimalHandlingMode.DOUBLE) + .with(PostgresConnectorConfig.SNAPSHOT_SELECT_STATEMENT_OVERRIDES_BY_TABLE, "post_money.debezium_test") + .with(PostgresConnectorConfig.SNAPSHOT_SELECT_STATEMENT_OVERRIDES_BY_TABLE + ".post_money.debezium_test", + "SELECT id, null AS m FROM post_money.debezium_test") + .build(); + start(PostgresConnector.class, config); + + records = consumeRecordsByTopic(1); + recordsForTopic = records.recordsForTopic(topicName("post_money.debezium_test")); + + assertThat(recordsForTopic).hasSize(1); + assertThat(((Struct) recordsForTopic.get(0).value()).getStruct("after").getFloat64("m")).isEqualTo(0.0); + } + private void createTable() { TestHelper.execute( "DROP SCHEMA IF EXISTS post_money CASCADE;", @@ -151,6 +191,13 @@ private void createTable() { "CREATE TABLE post_money.debezium_test (id int4 NOT NULL, m money, CONSTRAINT dbz_test_pkey PRIMARY KEY (id));"); } + private void createTableWithNotNull() { + TestHelper.execute( + "DROP SCHEMA IF EXISTS post_money CASCADE;", + "CREATE SCHEMA post_money;", + "CREATE TABLE post_money.debezium_test (id int4 NOT NULL, m money NOT NULL, CONSTRAINT dbz_test_pkey PRIMARY KEY (id));"); + } + private void insertTwoRecords() { TestHelper.execute("insert into post_money.debezium_test(id, m) values(8, -92233720368547758.08),(9, 92233720368547758.07);"); }