|
4 | 4 | import org.opensearch.dataprepper.plugins.source.rds.datatype.mysql.MySQLDataType; |
5 | 5 | import org.opensearch.dataprepper.plugins.source.rds.model.TableMetadata; |
6 | 6 |
|
| 7 | +import java.math.BigDecimal; |
7 | 8 | import java.math.BigInteger; |
8 | 9 | import java.util.ArrayList; |
9 | 10 | import java.util.BitSet; |
@@ -39,7 +40,13 @@ private Number handleNumericType(final MySQLDataType columnType, final Object va |
39 | 40 | } |
40 | 41 |
|
41 | 42 | if (value instanceof Number) { |
42 | | - return (Number)value; |
| 43 | + return (Number) value; |
| 44 | + } |
| 45 | + |
| 46 | + if (columnType.isDecimal()) { |
| 47 | + if (value instanceof byte[] || value instanceof Map || value instanceof ArrayList<?>) { |
| 48 | + return handleByteArray(value); |
| 49 | + } |
43 | 50 | } |
44 | 51 |
|
45 | 52 | throw new IllegalArgumentException("Unsupported value type. The value is of type: " + value.getClass()); |
@@ -107,4 +114,29 @@ private static BigInteger bitSetToBigInteger(BitSet bitSet) { |
107 | 114 | } |
108 | 115 | return result; |
109 | 116 | } |
| 117 | + |
| 118 | + private Number handleByteArray(final Object value) { |
| 119 | + if (value instanceof byte[]) { |
| 120 | + return new BigDecimal(new BigInteger((byte[]) value)); |
| 121 | + } |
| 122 | + |
| 123 | + if (value instanceof Map) { |
| 124 | + Object data = ((Map<?, ?>)value).get(BYTES_KEY); |
| 125 | + if (data instanceof byte[]) { |
| 126 | + return new BigDecimal(new BigInteger((byte[]) data)); |
| 127 | + } |
| 128 | + } |
| 129 | + |
| 130 | + if (value instanceof ArrayList<?>) { |
| 131 | + ArrayList<?> list = (ArrayList<?>) value; |
| 132 | + byte[] bytes = new byte[list.size()]; |
| 133 | + for (int i = 0; i < list.size(); i++) { |
| 134 | + bytes[i] = ((Number) list.get(i)).byteValue(); |
| 135 | + } |
| 136 | + return new BigDecimal(new BigInteger(bytes)); |
| 137 | + } |
| 138 | + |
| 139 | + throw new IllegalArgumentException("Unsupported byte array value type: " + value.getClass()); |
| 140 | + } |
| 141 | + |
110 | 142 | } |
0 commit comments