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 70a741e5 test(c/driver/postgresql): ensure ingestion works with temp 
table (#1054)
70a741e5 is described below

commit 70a741e5d4dc39ea55be3e3b5474fb4adbcaa819
Author: David Li <[email protected]>
AuthorDate: Tue Sep 12 11:10:23 2023 -0400

    test(c/driver/postgresql): ensure ingestion works with temp table (#1054)
    
    - Add a bit more information to the error message in case there are
    future issues.
    - Add a regression test to ensure this use case continues to work.
    
    Fixes #1045.
---
 c/driver/postgresql/postgresql_test.cc | 44 ++++++++++++++++++++++++++++++++++
 c/driver/postgresql/statement.cc       |  7 +++---
 2 files changed, 48 insertions(+), 3 deletions(-)

diff --git a/c/driver/postgresql/postgresql_test.cc 
b/c/driver/postgresql/postgresql_test.cc
index aabb8133..d4449981 100644
--- a/c/driver/postgresql/postgresql_test.cc
+++ b/c/driver/postgresql/postgresql_test.cc
@@ -878,6 +878,50 @@ class PostgresStatementTest : public ::testing::Test,
 };
 ADBCV_TEST_STATEMENT(PostgresStatementTest)
 
+TEST_F(PostgresStatementTest, SqlIngestTemporaryTable) {
+  ASSERT_THAT(quirks()->DropTable(&connection, "temptable", &error), 
IsOkStatus(&error));
+
+  ASSERT_THAT(AdbcConnectionSetOption(&connection, 
ADBC_CONNECTION_OPTION_AUTOCOMMIT,
+                                      ADBC_OPTION_VALUE_DISABLED, &error),
+              IsOkStatus(&error));
+
+  ASSERT_THAT(AdbcStatementNew(&connection, &statement, &error), 
IsOkStatus(&error));
+
+  ASSERT_THAT(AdbcStatementSetSqlQuery(
+                  &statement, "CREATE TEMPORARY TABLE temptable (ints 
BIGINT)", &error),
+              IsOkStatus(&error));
+  ASSERT_THAT(AdbcStatementExecuteQuery(&statement, nullptr, nullptr, &error),
+              IsOkStatus(&error));
+
+  {
+    adbc_validation::Handle<struct ArrowSchema> schema;
+    adbc_validation::Handle<struct ArrowArray> batch;
+
+    ArrowSchemaInit(&schema.value);
+    ASSERT_THAT(ArrowSchemaSetTypeStruct(&schema.value, 1), 
adbc_validation::IsOkErrno());
+    ASSERT_THAT(ArrowSchemaSetType(schema->children[0], NANOARROW_TYPE_INT64),
+                adbc_validation::IsOkErrno());
+    ASSERT_THAT(ArrowSchemaSetName(schema->children[0], "ints"),
+                adbc_validation::IsOkErrno());
+
+    ASSERT_THAT((adbc_validation::MakeBatch<int64_t>(
+                    &schema.value, &batch.value, static_cast<struct 
ArrowError*>(nullptr),
+                    {-1, 0, 1, std::nullopt})),
+                adbc_validation::IsOkErrno());
+
+    ASSERT_THAT(AdbcStatementSetOption(&statement, 
ADBC_INGEST_OPTION_TARGET_TABLE,
+                                       "temptable", &error),
+                IsOkStatus(&error));
+    ASSERT_THAT(AdbcStatementSetOption(&statement, ADBC_INGEST_OPTION_MODE,
+                                       ADBC_INGEST_OPTION_MODE_APPEND, &error),
+                IsOkStatus(&error));
+    ASSERT_THAT(AdbcStatementBind(&statement, &batch.value, &schema.value, 
&error),
+                IsOkStatus(&error));
+    ASSERT_THAT(AdbcStatementExecuteQuery(&statement, nullptr, nullptr, 
&error),
+                IsOkStatus(&error));
+  }
+}
+
 TEST_F(PostgresStatementTest, SqlIngestTimestampOverflow) {
   ASSERT_THAT(AdbcStatementNew(&connection, &statement, &error), 
IsOkStatus(&error));
 
diff --git a/c/driver/postgresql/statement.cc b/c/driver/postgresql/statement.cc
index e38bf8f4..28069379 100644
--- a/c/driver/postgresql/statement.cc
+++ b/c/driver/postgresql/statement.cc
@@ -500,10 +500,11 @@ struct BindStream {
                                 param_lengths.data(), param_formats.data(),
                                 /*resultFormat=*/0 /*text*/);
 
-        if (PQresultStatus(result) != PGRES_COMMAND_OK) {
+        ExecStatusType pg_status = PQresultStatus(result);
+        if (pg_status != PGRES_COMMAND_OK) {
           AdbcStatusCode code = SetError(
-              error, result, "%s%s",
-              "[libpq] Failed to execute prepared statement: ", 
PQerrorMessage(conn));
+              error, result, "[libpq] Failed to execute prepared statement: %s 
%s",
+              PQresStatus(pg_status), PQerrorMessage(conn));
           PQclear(result);
           return code;
         }

Reply via email to