You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by "WillAyd (via GitHub)" <gi...@apache.org> on 2023/05/27 02:43:18 UTC

[GitHub] [arrow-adbc] WillAyd commented on a diff in pull request #714: refactor(c/driver/postgresql): Use Prepared Statement in Result Helper

WillAyd commented on code in PR #714:
URL: https://github.com/apache/arrow-adbc/pull/714#discussion_r1207596735


##########
c/driver/postgresql/connection.cc:
##########
@@ -72,12 +72,48 @@ class PqResultRow {
 // as expected prior to iterating
 class PqResultHelper {
  public:
-  PqResultHelper(PGconn* conn, const char* query) : conn_(conn) {
+  PqResultHelper(PGconn* conn, const char* query, std::vector<std::string> param_values,
+                 struct AdbcError* error)
+      : conn_(conn), param_values_(param_values), error_(error) {
     query_ = std::string(query);
     result_ = PQexec(conn_, query_.c_str());
+    for (auto data : param_values) {
+      param_lengths_.push_back(data.length());
+    }
+  }
+
+  AdbcStatusCode Prepare() {
+    // TODO: make stmtName a unique identifier?

Review Comment:
   I noticed in the similar implementation in statement.cc that this uses an empty string. Wondering if we should generate a random string for the lifetime of the class so that there is no potential for races trying to execute prepared statements



##########
c/driver/postgresql/connection.cc:
##########
@@ -146,15 +185,17 @@ class PqGetObjectsHelper {
   }
 
   AdbcStatusCode GetObjects() {
-    PqResultHelper curr_db_helper = PqResultHelper{conn_, "SELECT current_database()"};
-    if (curr_db_helper.Status() == PGRES_TUPLES_OK) {
-      assert(curr_db_helper.NumRows() == 1);
-      auto curr_iter = curr_db_helper.begin();
-      PqResultRow db_row = *curr_iter;
-      current_db_ = std::string(db_row[0].data);
-    } else {
-      return ADBC_STATUS_INTERNAL;
-    }
+    std::vector<std::string> _;

Review Comment:
   This is pointless to add an empty vector. I'm guessing we should just add an alternate constructor, but could also go in a separate class since the Prepare/Execute interaction is overkill for something without parameters



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org