@@ -42,79 +42,82 @@ class PostgreSQLColumnDecoderRegistry(val charset: Charset = CharsetUtil.UTF_8)
42
42
private val uuidArrayDecoder = ArrayDecoder (UUIDEncoderDecoder )
43
43
private val inetAddressArrayDecoder = ArrayDecoder (InetAddressEncoderDecoder )
44
44
45
- override fun decode (kind : ColumnData , value : ByteBuf , charset : Charset ): Any {
46
- return decoderFor(kind.dataType()).decode(kind, value, charset)!!
45
+ private val registry: MutableMap <Int , ColumnDecoder > = defaultRegistry()
46
+
47
+ fun registerType (type : Int , decoder : ColumnDecoder ) {
48
+ registry[type] = decoder
47
49
}
48
50
49
- private fun decoderFor (kind : Int ): ColumnDecoder {
50
- return when (kind) {
51
+ override fun decode (kind : ColumnData , value : ByteBuf , charset : Charset ): Any {
52
+ return registry.getOrDefault(kind.dataType(), StringEncoderDecoder ).decode(kind, value, charset)!!
53
+ }
51
54
52
- ColumnTypes .Boolean -> BooleanEncoderDecoder
53
- ColumnTypes .BooleanArray -> this .booleanArrayDecoder
55
+ private fun defaultRegistry (): MutableMap <Int , ColumnDecoder > {
56
+ val res = mutableMapOf<Int , ColumnDecoder >()
57
+ res[ColumnTypes .Boolean ] = BooleanEncoderDecoder
58
+ res[ColumnTypes .BooleanArray ] = this .booleanArrayDecoder
54
59
55
- ColumnTypes .Char -> CharEncoderDecoder
56
- ColumnTypes .CharArray -> this .charArrayDecoder
60
+ res[ ColumnTypes .Char ] = CharEncoderDecoder
61
+ res[ ColumnTypes .CharArray ] = this .charArrayDecoder
57
62
58
- ColumnTypes .Bigserial -> LongEncoderDecoder
59
- ColumnTypes .BigserialArray -> this .longArrayDecoder
63
+ res[ ColumnTypes .Bigserial ] = LongEncoderDecoder
64
+ res[ ColumnTypes .BigserialArray ] = this .longArrayDecoder
60
65
61
- ColumnTypes .Smallint -> ShortEncoderDecoder
62
- ColumnTypes .SmallintArray -> this .shortArrayDecoder
66
+ res[ ColumnTypes .Smallint ] = ShortEncoderDecoder
67
+ res[ ColumnTypes .SmallintArray ] = this .shortArrayDecoder
63
68
64
- ColumnTypes .Integer -> IntegerEncoderDecoder
65
- ColumnTypes .IntegerArray -> this .integerArrayDecoder
69
+ res[ ColumnTypes .Integer ] = IntegerEncoderDecoder
70
+ res[ ColumnTypes .IntegerArray ] = this .integerArrayDecoder
66
71
67
- ColumnTypes .OID -> LongEncoderDecoder
68
- ColumnTypes .OIDArray -> this .longArrayDecoder
72
+ res[ ColumnTypes .OID ] = LongEncoderDecoder
73
+ res[ ColumnTypes .OIDArray ] = this .longArrayDecoder
69
74
70
- ColumnTypes .Numeric -> BigDecimalEncoderDecoder
71
- ColumnTypes .NumericArray -> this .bigDecimalArrayDecoder
75
+ res[ ColumnTypes .Numeric ] = BigDecimalEncoderDecoder
76
+ res[ ColumnTypes .NumericArray ] = this .bigDecimalArrayDecoder
72
77
73
- ColumnTypes .Real -> FloatEncoderDecoder
74
- ColumnTypes .RealArray -> this .floatArrayDecoder
78
+ res[ ColumnTypes .Real ] = FloatEncoderDecoder
79
+ res[ ColumnTypes .RealArray ] = this .floatArrayDecoder
75
80
76
- ColumnTypes .Double -> DoubleEncoderDecoder
77
- ColumnTypes .DoubleArray -> this .doubleArrayDecoder
81
+ res[ ColumnTypes .Double ] = DoubleEncoderDecoder
82
+ res[ ColumnTypes .DoubleArray ] = this .doubleArrayDecoder
78
83
79
- ColumnTypes .Text -> StringEncoderDecoder
80
- ColumnTypes .TextArray -> this .stringArrayDecoder
84
+ res[ ColumnTypes .Text ] = StringEncoderDecoder
85
+ res[ ColumnTypes .TextArray ] = this .stringArrayDecoder
81
86
82
- ColumnTypes .Varchar -> StringEncoderDecoder
83
- ColumnTypes .VarcharArray -> this .stringArrayDecoder
87
+ res[ ColumnTypes .Varchar ] = StringEncoderDecoder
88
+ res[ ColumnTypes .VarcharArray ] = this .stringArrayDecoder
84
89
85
- ColumnTypes .Bpchar -> StringEncoderDecoder
86
- ColumnTypes .BpcharArray -> this .stringArrayDecoder
90
+ res[ ColumnTypes .Bpchar ] = StringEncoderDecoder
91
+ res[ ColumnTypes .BpcharArray ] = this .stringArrayDecoder
87
92
88
- ColumnTypes .Timestamp -> PostgreSQLTimestampEncoderDecoder
89
- ColumnTypes .TimestampArray -> this .timestampArrayDecoder
93
+ res[ ColumnTypes .Timestamp ] = PostgreSQLTimestampEncoderDecoder
94
+ res[ ColumnTypes .TimestampArray ] = this .timestampArrayDecoder
90
95
91
- ColumnTypes .TimestampWithTimezone -> PostgreSQLTimestampEncoderDecoder
92
- ColumnTypes .TimestampWithTimezoneArray -> this .timestampWithTimezoneArrayDecoder
96
+ res[ ColumnTypes .TimestampWithTimezone ] = PostgreSQLTimestampEncoderDecoder
97
+ res[ ColumnTypes .TimestampWithTimezoneArray ] = this .timestampWithTimezoneArrayDecoder
93
98
94
- ColumnTypes .Date -> DateEncoderDecoder
95
- ColumnTypes .DateArray -> this .dateArrayDecoder
99
+ res[ ColumnTypes .Date ] = DateEncoderDecoder
100
+ res[ ColumnTypes .DateArray ] = this .dateArrayDecoder
96
101
97
- ColumnTypes .Time -> TimeEncoderDecoder .Instance
98
- ColumnTypes .TimeArray -> this .timeArrayDecoder
102
+ res[ ColumnTypes .Time ] = TimeEncoderDecoder .Instance
103
+ res[ ColumnTypes .TimeArray ] = this .timeArrayDecoder
99
104
100
- ColumnTypes .TimeWithTimezone -> TimeWithTimezoneEncoderDecoder
101
- ColumnTypes .TimeWithTimezoneArray -> this .timeWithTimestampArrayDecoder
105
+ res[ ColumnTypes .TimeWithTimezone ] = TimeWithTimezoneEncoderDecoder
106
+ res[ ColumnTypes .TimeWithTimezoneArray ] = this .timeWithTimestampArrayDecoder
102
107
103
- ColumnTypes .Interval -> PostgreSQLIntervalEncoderDecoder
104
- ColumnTypes .IntervalArray -> this .intervalArrayDecoder
108
+ res[ ColumnTypes .Interval ] = PostgreSQLIntervalEncoderDecoder
109
+ res[ ColumnTypes .IntervalArray ] = this .intervalArrayDecoder
105
110
106
- ColumnTypes .MoneyArray -> this .stringArrayDecoder
107
- ColumnTypes .NameArray -> this .stringArrayDecoder
108
- ColumnTypes .UUID -> UUIDEncoderDecoder
109
- ColumnTypes .UUIDArray -> this .uuidArrayDecoder
110
- ColumnTypes .XMLArray -> this .stringArrayDecoder
111
- ColumnTypes .ByteA -> ByteArrayEncoderDecoder
111
+ res[ ColumnTypes .MoneyArray ] = this .stringArrayDecoder
112
+ res[ ColumnTypes .NameArray ] = this .stringArrayDecoder
113
+ res[ ColumnTypes .UUID ] = UUIDEncoderDecoder
114
+ res[ ColumnTypes .UUIDArray ] = this .uuidArrayDecoder
115
+ res[ ColumnTypes .XMLArray ] = this .stringArrayDecoder
116
+ res[ ColumnTypes .ByteA ] = ByteArrayEncoderDecoder
112
117
113
- ColumnTypes .Inet -> InetAddressEncoderDecoder
114
- ColumnTypes .InetArray -> this .inetAddressArrayDecoder
115
- ColumnTypes .Geometry -> StringEncoderDecoder
118
+ res[ColumnTypes .Inet ] = InetAddressEncoderDecoder
119
+ res[ColumnTypes .InetArray ] = this .inetAddressArrayDecoder
116
120
117
- else -> StringEncoderDecoder
118
- }
121
+ return res
119
122
}
120
123
}
0 commit comments