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(); }                  
         \

Reply via email to