You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by li...@apache.org on 2023/06/15 23:29:59 UTC
[arrow-adbc] branch main updated: feat(c/driver/postgresql): Support float type (#807)
This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new 7e3e08b9 feat(c/driver/postgresql): Support float type (#807)
7e3e08b9 is described below
commit 7e3e08b917dde8dad24e917624ee6e4a4a02eb3c
Author: William Ayd <wi...@icloud.com>
AuthorDate: Thu Jun 15 16:29:54 2023 -0700
feat(c/driver/postgresql): Support float type (#807)
---
c/driver/postgresql/postgres_util.h | 6 ++++++
c/driver/postgresql/postgresql_test.cc | 2 --
c/driver/postgresql/statement.cc | 13 +++++++++++++
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/c/driver/postgresql/postgres_util.h b/c/driver/postgresql/postgres_util.h
index d74e568a..0153c896 100644
--- a/c/driver/postgresql/postgres_util.h
+++ b/c/driver/postgresql/postgres_util.h
@@ -121,6 +121,12 @@ ADBC_REGISTER_TO_NETWORK_FUNC(16)
ADBC_REGISTER_TO_NETWORK_FUNC(32)
ADBC_REGISTER_TO_NETWORK_FUNC(64)
+static inline uint32_t ToNetworkFloat4(float v) {
+ uint32_t vint;
+ memcpy(&vint, &v, sizeof(uint32_t));
+ return SwapHostToNetwork(vint);
+}
+
static inline uint64_t ToNetworkFloat8(double v) {
uint64_t vint;
memcpy(&vint, &v, sizeof(uint64_t));
diff --git a/c/driver/postgresql/postgresql_test.cc b/c/driver/postgresql/postgresql_test.cc
index 6c6d1f52..15403384 100644
--- a/c/driver/postgresql/postgresql_test.cc
+++ b/c/driver/postgresql/postgresql_test.cc
@@ -469,8 +469,6 @@ class PostgresStatementTest : public ::testing::Test,
void TestSqlIngestUInt16() { GTEST_SKIP() << "Not implemented"; }
void TestSqlIngestUInt32() { GTEST_SKIP() << "Not implemented"; }
void TestSqlIngestUInt64() { GTEST_SKIP() << "Not implemented"; }
- void TestSqlIngestFloat32() { GTEST_SKIP() << "Not implemented"; }
- void TestSqlIngestFloat64() { GTEST_SKIP() << "Not implemented"; }
void TestSqlIngestBinary() { GTEST_SKIP() << "Not implemented"; }
void TestSqlPrepareErrorParamCountMismatch() { GTEST_SKIP() << "Not yet implemented"; }
diff --git a/c/driver/postgresql/statement.cc b/c/driver/postgresql/statement.cc
index bd26851c..d052a06c 100644
--- a/c/driver/postgresql/statement.cc
+++ b/c/driver/postgresql/statement.cc
@@ -199,6 +199,10 @@ struct BindStream {
type_id = PostgresTypeId::kInt8;
param_lengths[i] = 8;
break;
+ case ArrowType::NANOARROW_TYPE_FLOAT:
+ type_id = PostgresTypeId::kFloat4;
+ param_lengths[i] = 4;
+ break;
case ArrowType::NANOARROW_TYPE_DOUBLE:
type_id = PostgresTypeId::kFloat8;
param_lengths[i] = 8;
@@ -300,6 +304,12 @@ struct BindStream {
std::memcpy(param_values[col], &value, sizeof(int64_t));
break;
}
+ case ArrowType::NANOARROW_TYPE_FLOAT: {
+ const uint32_t value = ToNetworkFloat4(
+ array_view->children[col]->buffer_views[1].data.as_float[row]);
+ std::memcpy(param_values[col], &value, sizeof(uint32_t));
+ break;
+ }
case ArrowType::NANOARROW_TYPE_DOUBLE: {
const uint64_t value = ToNetworkFloat8(
array_view->children[col]->buffer_views[1].data.as_double[row]);
@@ -570,6 +580,9 @@ AdbcStatusCode PostgresStatement::CreateBulkTable(
case ArrowType::NANOARROW_TYPE_INT64:
create += " BIGINT";
break;
+ case ArrowType::NANOARROW_TYPE_FLOAT:
+ create += " REAL";
+ break;
case ArrowType::NANOARROW_TYPE_DOUBLE:
create += " DOUBLE PRECISION";
break;