@@ -228,4 +228,54 @@ void getColumnsFromResult_withResultNull_withValidData_shouldReturnColumns()
228228 null , sourceRecord , false , mockMetadata , "namespace" , "table" );
229229 assertEquals (8 , columns .size ());
230230 }
231+
232+ /**
233+ * Tests that the string "null" (lowercase) is correctly treated as null for numeric, boolean, and
234+ * date/time types.
235+ */
236+ @ Test
237+ void createColumnFromValue_valueIsLowercaseNull_shouldReturnNullColumn ()
238+ throws ColumnParsingException {
239+ String columnName = "testColumn" ;
240+ ColumnInfo columnInfo = ColumnInfo .builder ().columnName (columnName ).build ();
241+
242+ // Integer type
243+ Column <?> intColumn = ColumnUtils .createColumnFromValue (DataType .INT , columnInfo , "null" );
244+ assertEquals (IntColumn .ofNull (columnName ), intColumn );
245+
246+ // Double type
247+ Column <?> doubleColumn = ColumnUtils .createColumnFromValue (DataType .DOUBLE , columnInfo , "null" );
248+ assertEquals (DoubleColumn .ofNull (columnName ), doubleColumn );
249+
250+ // Boolean type
251+ Column <?> boolColumn = ColumnUtils .createColumnFromValue (DataType .BOOLEAN , columnInfo , "null" );
252+ assertEquals (BooleanColumn .ofNull (columnName ), boolColumn );
253+
254+ // Date type
255+ Column <?> dateColumn = ColumnUtils .createColumnFromValue (DataType .DATE , columnInfo , "null" );
256+ assertEquals (DateColumn .ofNull (columnName ), dateColumn );
257+
258+ // Time type
259+ Column <?> timeColumn = ColumnUtils .createColumnFromValue (DataType .TIME , columnInfo , "null" );
260+ assertEquals (TimeColumn .ofNull (columnName ), timeColumn );
261+
262+ // Timestamp type
263+ Column <?> timestampColumn =
264+ ColumnUtils .createColumnFromValue (DataType .TIMESTAMP , columnInfo , "null" );
265+ assertEquals (TimestampColumn .ofNull (columnName ), timestampColumn );
266+ }
267+
268+ /**
269+ * Tests that when the string value "null" is provided for TEXT columns, it is treated as a
270+ * literal string and not converted to null.
271+ */
272+ @ Test
273+ void createColumnFromValue_valueIsNullString_shouldRemainLiteralForTextType ()
274+ throws ColumnParsingException {
275+ String columnName = "textColumn" ;
276+ ColumnInfo columnInfo = ColumnInfo .builder ().columnName (columnName ).build ();
277+
278+ Column <?> textCol = ColumnUtils .createColumnFromValue (DataType .TEXT , columnInfo , "null" );
279+ assertEquals (TextColumn .of (columnName , "null" ), textCol );
280+ }
231281}
0 commit comments