in kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/incremental/wal/decode/TestDecodingPlugin.java [169:219]
private Object readColumnData(final ByteBuffer data, final String columnType) {
data.mark();
if ('n' == data.get() && data.remaining() >= 3 && 'u' == data.get() && 'l' == data.get()) {
if (data.hasRemaining()) {
data.get();
}
return null;
}
data.reset();
if (columnType.startsWith("numeric")) {
return new BigDecimal(readNextSegment(data));
}
if (columnType.startsWith("bit") || columnType.startsWith("bit varying")) {
return readNextSegment(data);
}
switch (columnType) {
case "smallint":
return Short.parseShort(readNextSegment(data));
case "integer":
return Integer.parseInt(readNextSegment(data));
case "bigint":
return Long.parseLong(readNextSegment(data));
case "real":
return Float.parseFloat(readNextSegment(data));
case "double precision":
return Double.parseDouble(readNextSegment(data));
case "boolean":
return Boolean.parseBoolean(readNextSegment(data));
case "time without time zone":
try {
return timestampUtils.toTime(null, readNextString(data));
} catch (final SQLException ex) {
throw new DecodingException(ex);
}
case "date":
return Date.valueOf(readNextString(data));
case "timestamp without time zone":
try {
return timestampUtils.toTimestamp(null, readNextString(data));
} catch (final SQLException ex) {
throw new DecodingException(ex);
}
case "bytea":
return decodeHex(readNextString(data).substring(2));
case "json":
case "jsonb":
return readNextJson(data);
default:
return readNextString(data);
}
}