Eric Pangiawan created KAFKA-15838:
--------------------------------------

             Summary: [Connect] ExtractField and InsertField NULL Values are 
replaced by default value even in NULLABLE fields
                 Key: KAFKA-15838
                 URL: https://issues.apache.org/jira/browse/KAFKA-15838
             Project: Kafka
          Issue Type: Bug
            Reporter: Eric Pangiawan


ExtractField: Line 116-119

https://github.com/a0x8o/kafka/blob/master/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/ExtractField.java#L61-L68

InsertField: Line 163 - 195

[https://github.com/a0x8o/kafka/blob/master/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/InsertField.java#L163-L195]
h1. Expect:

Value `null` is valid for an optional filed, even though the field has a 
default value.
Only when field is required, the class return default value fallback when value 
is `null`.
h1. Actual:

Always return default value if `null` was given.
h1. Example:

PostgreSQL DDL:
{code:java}
CREATE TABLE products(
    id varchar(255),
    color varchar(255),
    quantity float8
);
-- Set Default
ALTER TABLE products ALTER COLUMN quantity SET  DEFAULT 1.0; {code}
Insert A Record:
{code:java}
INSERT INTO public.products VALUES('1', 'Blue', null); {code}
Table Select *:
{code:java}
 id | color | quantity
----+-------+----------
 1  | Blue  | {code}
Debezium Behavior when using ExtractField and InsertField class (in the event 
flattening SMT):
{code:java}
{
    "id":"1",
    "color":"Blue",
    "quantity":1.0,
    "__op":"c",
    "__ts_ms":1698127432079,
    "__source_ts_ms":1698127431679,
    "__db":"testing_db",
    "__schema":"public",
    "__table":"products",
    "__lsn":24470112,
    "__txId":957,
    "__snapshot":null,
    "__deleted":"false"
} {code}
The debezium code can be found 
[here|https://github.com/debezium/debezium/blob/2.4/debezium-core/src/main/java/io/debezium/transforms/ExtractNewRecordState.java#L116-L119]
h1. Expected Output:
{code:java}
{
    "id":"1",
    "color":"Blue",
    "quantity":null,
    "__op":"c",
    "__ts_ms":1698127432079,
    "__source_ts_ms":1698127431679,
    "__db":"testing_db",
    "__schema":"public",
    "__table":"products",
    "__lsn":24470112,
    "__txId":957,
    "__snapshot":null,
    "__deleted":"false"
}
 {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to