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;
}