lidavidm commented on code in PR #1288:
URL: https://github.com/apache/arrow-adbc/pull/1288#discussion_r1439549890
##########
c/driver/postgresql/postgres_copy_reader_test.cc:
##########
@@ -680,6 +680,72 @@ TEST(PostgresCopyUtilsTest, PostgresCopyReadNumeric) {
EXPECT_EQ(std::string(item.data, item.size_bytes), "inf");
}
+// This buffer is similar to the read variant above but removes special values
+// nan, ±inf as they are not supported via the Arrow Decimal types
+// COPY (SELECT CAST(col AS NUMERIC) AS col FROM ( VALUES (NULL), (-123.456),
+// ('0.00001234'), (1.0000), (123.456), (1000000)) AS drvd(col))
+// TO STDOUT WITH (FORMAT binary);
+static uint8_t kTestPgCopyNumericWrite[] = {
+ 0x50, 0x47, 0x43, 0x4f, 0x50, 0x59, 0x0a, 0xff, 0x0d, 0x0a, 0x00, 0x00,
0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00,
0x01, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x03, 0x00,
0x7b, 0x11,
+ 0xd0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x01, 0xff, 0xfe, 0x00,
0x00, 0x00,
+ 0x08, 0x04, 0xd2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x01, 0x00,
0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00,
0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x7b, 0x11, 0xd0, 0x00, 0x01, 0x00,
0x00, 0x00,
+ 0x0a, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xff,
0xff};
+
+TEST(PostgresCopyUtilsTest, PostgresCopyWriteNumeric) {
+ adbc_validation::Handle<struct ArrowSchema> schema;
+ adbc_validation::Handle<struct ArrowArray> array;
+ struct ArrowError na_error;
+ constexpr enum ArrowType type = NANOARROW_TYPE_DECIMAL128;
+ constexpr int32_t size = 128;
+ constexpr int32_t precision = 38;
+ constexpr int32_t scale = 8;
+
+ struct ArrowDecimal decimal1;
+ struct ArrowDecimal decimal2;
+ struct ArrowDecimal decimal3;
+ struct ArrowDecimal decimal4;
+ struct ArrowDecimal decimal5;
+
+ ArrowDecimalInit(&decimal1, size, 19, 8);
+ ArrowDecimalSetInt(&decimal1, -12345600000);
+ ArrowDecimalInit(&decimal2, size, 19, 8);
+ ArrowDecimalSetInt(&decimal2, 1234);
+ ArrowDecimalInit(&decimal3, size, 19, 8);
+ ArrowDecimalSetInt(&decimal3, 100000000);
+ ArrowDecimalInit(&decimal4, size, 19, 8);
+ ArrowDecimalSetInt(&decimal4, 12345600000);
+ ArrowDecimalInit(&decimal5, size, 19, 8);
+ ArrowDecimalSetInt(&decimal5, 100000000000000);
+
+ const std::vector<std::optional<ArrowDecimal*>> values = {
+ std::nullopt, &decimal1, &decimal2, &decimal3, &decimal4, &decimal5};
+
+ ArrowSchemaInit(&schema.value);
Review Comment:
I've been meaning to overhaul this for a while now. (Or possibly give in and
depend on arrow-cpp...) The current approach really only works for primitive
types.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]