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 d49c0226 feat(c/driver/postgresql): Support ingesting LARGE_STRING
types (#1050)
d49c0226 is described below
commit d49c0226e98e2387d26b407b6ea1c7f4e4b92e70
Author: William Ayd <[email protected]>
AuthorDate: Mon Sep 11 12:08:29 2023 -0400
feat(c/driver/postgresql): Support ingesting LARGE_STRING types (#1050)
Closes https://github.com/apache/arrow-adbc/issues/1015.
---
c/driver/postgresql/postgresql_test.cc | 2 ++
c/driver/postgresql/statement.cc | 3 +++
c/driver/sqlite/sqlite_test.cc | 1 +
c/driver_manager/adbc_driver_manager_test.cc | 2 ++
c/validation/adbc_validation.cc | 5 +++++
c/validation/adbc_validation.h | 2 ++
6 files changed, 15 insertions(+)
diff --git a/c/driver/postgresql/postgresql_test.cc
b/c/driver/postgresql/postgresql_test.cc
index e7cd4b1f..3b776991 100644
--- a/c/driver/postgresql/postgresql_test.cc
+++ b/c/driver/postgresql/postgresql_test.cc
@@ -94,6 +94,8 @@ class PostgresQuirks : public adbc_validation::DriverQuirks {
return NANOARROW_TYPE_INT16;
case NANOARROW_TYPE_DURATION:
return NANOARROW_TYPE_INTERVAL_MONTH_DAY_NANO;
+ case NANOARROW_TYPE_LARGE_STRING:
+ return NANOARROW_TYPE_STRING;
default:
return ingest_type;
}
diff --git a/c/driver/postgresql/statement.cc b/c/driver/postgresql/statement.cc
index b933a643..c68ceeb2 100644
--- a/c/driver/postgresql/statement.cc
+++ b/c/driver/postgresql/statement.cc
@@ -215,6 +215,7 @@ struct BindStream {
param_lengths[i] = 8;
break;
case ArrowType::NANOARROW_TYPE_STRING:
+ case ArrowType::NANOARROW_TYPE_LARGE_STRING:
type_id = PostgresTypeId::kText;
param_lengths[i] = 0;
break;
@@ -394,6 +395,7 @@ struct BindStream {
break;
}
case ArrowType::NANOARROW_TYPE_STRING:
+ case ArrowType::NANOARROW_TYPE_LARGE_STRING:
case ArrowType::NANOARROW_TYPE_BINARY: {
const ArrowBufferView view =
ArrowArrayViewGetBytesUnsafe(array_view->children[col], row);
@@ -875,6 +877,7 @@ AdbcStatusCode PostgresStatement::CreateBulkTable(
create += " DOUBLE PRECISION";
break;
case ArrowType::NANOARROW_TYPE_STRING:
+ case ArrowType::NANOARROW_TYPE_LARGE_STRING:
create += " TEXT";
break;
case ArrowType::NANOARROW_TYPE_BINARY:
diff --git a/c/driver/sqlite/sqlite_test.cc b/c/driver/sqlite/sqlite_test.cc
index 2d68cc34..9f219126 100644
--- a/c/driver/sqlite/sqlite_test.cc
+++ b/c/driver/sqlite/sqlite_test.cc
@@ -77,6 +77,7 @@ class SqliteQuirks : public adbc_validation::DriverQuirks {
case NANOARROW_TYPE_FLOAT:
case NANOARROW_TYPE_DOUBLE:
return NANOARROW_TYPE_DOUBLE;
+ case NANOARROW_TYPE_LARGE_STRING:
case NANOARROW_TYPE_DATE32:
case NANOARROW_TYPE_TIMESTAMP:
return NANOARROW_TYPE_STRING;
diff --git a/c/driver_manager/adbc_driver_manager_test.cc
b/c/driver_manager/adbc_driver_manager_test.cc
index 262171f1..100feab7 100644
--- a/c/driver_manager/adbc_driver_manager_test.cc
+++ b/c/driver_manager/adbc_driver_manager_test.cc
@@ -189,6 +189,8 @@ class SqliteQuirks : public adbc_validation::DriverQuirks {
case NANOARROW_TYPE_FLOAT:
case NANOARROW_TYPE_DOUBLE:
return NANOARROW_TYPE_DOUBLE;
+ case NANOARROW_TYPE_LARGE_STRING:
+ return NANOARROW_TYPE_STRING;
default:
return ingest_type;
}
diff --git a/c/validation/adbc_validation.cc b/c/validation/adbc_validation.cc
index 0833aa2d..595ffd1f 100644
--- a/c/validation/adbc_validation.cc
+++ b/c/validation/adbc_validation.cc
@@ -1252,6 +1252,11 @@ void StatementTest::TestSqlIngestString() {
NANOARROW_TYPE_STRING, {std::nullopt, "", "", "1234", "例"}));
}
+void StatementTest::TestSqlIngestLargeString() {
+ ASSERT_NO_FATAL_FAILURE(TestSqlIngestType<std::string>(
+ NANOARROW_TYPE_LARGE_STRING, {std::nullopt, "", "", "1234", "例"}));
+}
+
void StatementTest::TestSqlIngestBinary() {
ASSERT_NO_FATAL_FAILURE(TestSqlIngestType<std::string>(
NANOARROW_TYPE_BINARY, {std::nullopt, "", "\x00\x01\x02\x04",
"\xFE\xFF"}));
diff --git a/c/validation/adbc_validation.h b/c/validation/adbc_validation.h
index dda52eb2..354e695c 100644
--- a/c/validation/adbc_validation.h
+++ b/c/validation/adbc_validation.h
@@ -271,6 +271,7 @@ class StatementTest {
// Strings
void TestSqlIngestString();
+ void TestSqlIngestLargeString();
void TestSqlIngestBinary();
// Temporal
@@ -356,6 +357,7 @@ class StatementTest {
TEST_F(FIXTURE, SqlIngestFloat32) { TestSqlIngestFloat32(); }
\
TEST_F(FIXTURE, SqlIngestFloat64) { TestSqlIngestFloat64(); }
\
TEST_F(FIXTURE, SqlIngestString) { TestSqlIngestString(); }
\
+ TEST_F(FIXTURE, SqlIngestLargeString) { TestSqlIngestLargeString(); }
\
TEST_F(FIXTURE, SqlIngestBinary) { TestSqlIngestBinary(); }
\
TEST_F(FIXTURE, SqlIngestDuration) { TestSqlIngestDuration(); }
\
TEST_F(FIXTURE, SqlIngestDate32) { TestSqlIngestDate32(); }
\