@@ -185,6 +185,56 @@ Y_UNIT_TEST(PgConvertNumericDecimal128Scale5) {
185
185
checkResult<false >(expected, result, &reader, numeric_out);
186
186
}
187
187
188
+ Y_UNIT_TEST (PgConvertNumericDecimal128BigScale3) {
189
+ TArenaMemoryContext arena;
190
+
191
+ int32_t precision = 20 ;
192
+ int32_t scale = 3 ;
193
+ std::shared_ptr<arrow::DataType> type (new arrow::Decimal128Type (precision, scale));
194
+ arrow::Decimal128Builder builder (type);
195
+
196
+ const char * expected[] = {
197
+ " 36893488147419103.245" , " -36893488147419103.245" , nullptr
198
+ };
199
+
200
+ ARROW_OK (builder.Append (arrow::Decimal128::FromString (" 36893488147419103.245" ).ValueOrDie ()));
201
+ ARROW_OK (builder.Append (arrow::Decimal128::FromString (" -36893488147419103.245" ).ValueOrDie ()));
202
+ ARROW_OK (builder.AppendNull ());
203
+
204
+ std::shared_ptr<arrow::Array> array;
205
+ ARROW_OK (builder.Finish (&array));
206
+
207
+ auto result = PgDecimal128ConvertNumeric (array, precision, scale);
208
+
209
+ NYql::NUdf::TStringBlockReader<arrow::BinaryType, true > reader;
210
+ checkResult<false >(expected, result, &reader, numeric_out);
211
+ }
212
+
213
+ Y_UNIT_TEST (PgConvertNumericDecimal128BigScale1) {
214
+ TArenaMemoryContext arena;
215
+
216
+ int32_t precision = 26 ;
217
+ int32_t scale = 1 ;
218
+ std::shared_ptr<arrow::DataType> type (new arrow::Decimal128Type (precision, scale));
219
+ arrow::Decimal128Builder builder (type);
220
+
221
+ const char * expected[] = {
222
+ " 3868562622766813359059763.2" , " -3868562622766813359059763.2" , nullptr
223
+ };
224
+
225
+ ARROW_OK (builder.Append (arrow::Decimal128::FromString (" 3868562622766813359059763.2" ).ValueOrDie ()));
226
+ ARROW_OK (builder.Append (arrow::Decimal128::FromString (" -3868562622766813359059763.2" ).ValueOrDie ()));
227
+ ARROW_OK (builder.AppendNull ());
228
+
229
+ std::shared_ptr<arrow::Array> array;
230
+ ARROW_OK (builder.Finish (&array));
231
+
232
+ auto result = PgDecimal128ConvertNumeric (array, precision, scale);
233
+
234
+ NYql::NUdf::TStringBlockReader<arrow::BinaryType, true > reader;
235
+ checkResult<false >(expected, result, &reader, numeric_out);
236
+ }
237
+
188
238
Y_UNIT_TEST (PgConvertNumericInt) {
189
239
TArenaMemoryContext arena;
190
240
0 commit comments