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 ba1c072  Expand error codes, add vendor-specific codes (#21)
ba1c072 is described below

commit ba1c072606d3b188c3c533f0fe0b1c1b2e035f56
Author: David Li <[email protected]>
AuthorDate: Thu Jun 23 10:06:55 2022 -0400

    Expand error codes, add vendor-specific codes (#21)
    
    Fixes #20.
---
 adbc.h                                     | 96 +++++++++++++++++++++++++-----
 adbc_driver_manager/adbc_driver_manager.cc | 52 +++++++++-------
 drivers/flight_sql/flight_sql.cc           | 40 ++++++-------
 drivers/sqlite/sqlite.cc                   | 58 +++++++++---------
 4 files changed, 159 insertions(+), 87 deletions(-)

diff --git a/adbc.h b/adbc.h
index 4be0d78..9e1ed97 100644
--- a/adbc.h
+++ b/adbc.h
@@ -158,26 +158,91 @@ struct AdbcStatement;
 /// Error codes for operations that may fail.
 typedef uint8_t AdbcStatusCode;
 
-/// No error.
+/// \brief No error.
 #define ADBC_STATUS_OK 0
-/// An unknown error occurred.
+/// \brief An unknown error occurred.
+///
+/// May indicate a driver-side or database-side error.
 #define ADBC_STATUS_UNKNOWN 1
-/// The operation is not implemented.
+/// \brief The operation is not implemented or supported.
+///
+/// May indicate a driver-side or database-side error.
 #define ADBC_STATUS_NOT_IMPLEMENTED 2
-/// An operation was attempted on an uninitialized object.
-#define ADBC_STATUS_UNINITIALIZED 3
-/// The arguments are invalid.
-#define ADBC_STATUS_INVALID_ARGUMENT 4
-/// The object is in an invalid state for the given operation.
-#define ADBC_STATUS_INTERNAL 5
-/// An I/O error occurred.
-#define ADBC_STATUS_IO 6
+/// \brief A requested resource was not found.
+///
+/// May indicate a driver-side or database-side error.
+#define ADBC_STATUS_NOT_FOUND 3
+/// \brief A requested resource already exists.
+///
+/// May indicate a driver-side or database-side error.
+#define ADBC_STATUS_ALREADY_EXISTS 4
+/// \brief The arguments are invalid, likely a programming error.
+///
+/// For instance, they may be of the wrong format, or out of range.
+///
+/// May indicate a driver-side or database-side error.
+#define ADBC_STATUS_INVALID_ARGUMENT 5
+/// \brief The preconditions for the operation are not met, likely a
+///   programming error.
+///
+/// For instance, the object may be uninitialized, or may have not
+/// been fully configured.
+///
+/// May indicate a driver-side or database-side error.
+#define ADBC_STATUS_INVALID_STATE 6
+/// \brief Invalid data was processed (not a programming error).
+///
+/// For instance, a division by zero may have occurred during query
+/// execution.
+///
+/// May indicate a database-side error only.
+#define ADBC_STATUS_INVALID_DATA 7
+/// \brief The database's integrity was affected.
+///
+/// For instance, a foreign key check may have failed, or a uniqueness
+/// constraint may have been violated.
+///
+/// May indicate a database-side error only.
+#define ADBC_STATUS_INTEGRITY 8
+/// \brief An error internal to the driver or database occurred.
+///
+/// May indicate a driver-side or database-side error.
+#define ADBC_STATUS_INTERNAL 9
+/// \brief An I/O error occurred.
+///
+/// For instance, a remote service may be unavailable.
+///
+/// May indicate a driver-side or database-side error.
+#define ADBC_STATUS_IO 10
+/// \brief The operation was cancelled, not due to a timeout.
+///
+/// May indicate a driver-side or database-side error.
+#define ADBC_STATUS_CANCELLED 11
+/// \brief The operation was cancelled due to a timeout.
+///
+/// May indicate a driver-side or database-side error.
+#define ADBC_STATUS_TIMEOUT 12
+/// \brief Authentication failed.
+///
+/// May indicate a database-side error only.
+#define ADBC_STATUS_UNAUTHENTICATED 13
+/// \brief The client is not authorized to perform the given operation.
+///
+/// May indicate a database-side error only.
+#define ADBC_STATUS_UNAUTHORIZED 14
 
 /// \brief A detailed error message for an operation.
 struct ADBC_EXPORT AdbcError {
   /// \brief The error message.
   char* message;
 
+  /// \brief A vendor-specific error code, if applicable.
+  int32_t vendor_code;
+
+  /// \brief A SQLSTATE error code, if provided, as defined by the
+  ///   SQL:2003 standard.
+  char sqlstate[5];
+
   /// \brief Release the contained error.
   ///
   /// Unlike other structures, this is an embedded callback to make it
@@ -687,11 +752,10 @@ AdbcStatusCode AdbcStatementGetPartitionDesc(struct 
AdbcStatement* statement,
 
 /// \brief An instance of an initialized database driver.
 ///
-/// This provides a common interface for implementation-specific
-/// driver initialization routines. Drivers should populate this
-/// struct, and applications can call ADBC functions through this
-/// struct, without worrying about multiple definitions of the same
-/// symbol.
+/// This provides a common interface for vendor-specific driver
+/// initialization routines. Drivers should populate this struct, and
+/// applications can call ADBC functions through this struct, without
+/// worrying about multiple definitions of the same symbol.
 struct ADBC_EXPORT AdbcDriver {
   /// \brief Opaque driver-defined state.
   /// This field is NULLPTR if the driver is unintialized/freed (but
diff --git a/adbc_driver_manager/adbc_driver_manager.cc 
b/adbc_driver_manager/adbc_driver_manager.cc
index 0572300..e120f59 100644
--- a/adbc_driver_manager/adbc_driver_manager.cc
+++ b/adbc_driver_manager/adbc_driver_manager.cc
@@ -193,7 +193,7 @@ AdbcStatusCode AdbcDatabaseSetOption(struct AdbcDatabase* 
database, const char*
 AdbcStatusCode AdbcDatabaseInit(struct AdbcDatabase* database, struct 
AdbcError* error) {
   if (!database->private_data) {
     SetError(error, "Must call AdbcDatabaseNew first");
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   TempDatabase* args = reinterpret_cast<TempDatabase*>(database->private_data);
   if (args->driver.empty()) {
@@ -264,7 +264,7 @@ AdbcStatusCode AdbcDatabaseInit(struct AdbcDatabase* 
database, struct AdbcError*
 AdbcStatusCode AdbcDatabaseRelease(struct AdbcDatabase* database,
                                    struct AdbcError* error) {
   if (!database->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   auto status = database->private_driver->DatabaseRelease(database, error);
   if (database->private_driver->release) {
@@ -278,7 +278,7 @@ AdbcStatusCode AdbcConnectionNew(struct AdbcDatabase* 
database,
                                  struct AdbcConnection* connection,
                                  struct AdbcError* error) {
   if (!database->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   auto status = database->private_driver->ConnectionNew(database, connection, 
error);
   connection->private_driver = database->private_driver;
@@ -288,7 +288,7 @@ AdbcStatusCode AdbcConnectionNew(struct AdbcDatabase* 
database,
 AdbcStatusCode AdbcConnectionInit(struct AdbcConnection* connection,
                                   struct AdbcError* error) {
   if (!connection->private_driver) {
-    return ADBC_STATUS_INVALID_ARGUMENT;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return connection->private_driver->ConnectionInit(connection, error);
 }
@@ -296,7 +296,7 @@ AdbcStatusCode AdbcConnectionInit(struct AdbcConnection* 
connection,
 AdbcStatusCode AdbcConnectionRelease(struct AdbcConnection* connection,
                                      struct AdbcError* error) {
   if (!connection->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   auto status = connection->private_driver->ConnectionRelease(connection, 
error);
   connection->private_driver = nullptr;
@@ -307,7 +307,7 @@ AdbcStatusCode AdbcStatementBind(struct AdbcStatement* 
statement,
                                  struct ArrowArray* values, struct 
ArrowSchema* schema,
                                  struct AdbcError* error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return statement->private_driver->StatementBind(statement, values, schema, 
error);
 }
@@ -316,7 +316,7 @@ AdbcStatusCode AdbcStatementBindStream(struct 
AdbcStatement* statement,
                                        struct ArrowArrayStream* stream,
                                        struct AdbcError* error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return statement->private_driver->StatementBindStream(statement, stream, 
error);
 }
@@ -324,7 +324,7 @@ AdbcStatusCode AdbcStatementBindStream(struct 
AdbcStatement* statement,
 AdbcStatusCode AdbcStatementExecute(struct AdbcStatement* statement,
                                     struct AdbcError* error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return statement->private_driver->StatementExecute(statement, error);
 }
@@ -333,7 +333,7 @@ AdbcStatusCode AdbcStatementGetStream(struct AdbcStatement* 
statement,
                                       struct ArrowArrayStream* out,
                                       struct AdbcError* error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return statement->private_driver->StatementGetStream(statement, out, error);
 }
@@ -342,7 +342,7 @@ AdbcStatusCode AdbcStatementNew(struct AdbcConnection* 
connection,
                                 struct AdbcStatement* statement,
                                 struct AdbcError* error) {
   if (!connection->private_driver) {
-    return ADBC_STATUS_INVALID_ARGUMENT;
+    return ADBC_STATUS_INVALID_STATE;
   }
   auto status = connection->private_driver->StatementNew(connection, 
statement, error);
   statement->private_driver = connection->private_driver;
@@ -352,7 +352,7 @@ AdbcStatusCode AdbcStatementNew(struct AdbcConnection* 
connection,
 AdbcStatusCode AdbcStatementPrepare(struct AdbcStatement* statement,
                                     struct AdbcError* error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return statement->private_driver->StatementPrepare(statement, error);
 }
@@ -360,7 +360,7 @@ AdbcStatusCode AdbcStatementPrepare(struct AdbcStatement* 
statement,
 AdbcStatusCode AdbcStatementRelease(struct AdbcStatement* statement,
                                     struct AdbcError* error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   auto status = statement->private_driver->StatementRelease(statement, error);
   statement->private_driver = nullptr;
@@ -370,7 +370,7 @@ AdbcStatusCode AdbcStatementRelease(struct AdbcStatement* 
statement,
 AdbcStatusCode AdbcStatementSetOption(struct AdbcStatement* statement, const 
char* key,
                                       const char* value, struct AdbcError* 
error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return statement->private_driver->StatementSetOption(statement, key, value, 
error);
 }
@@ -378,7 +378,7 @@ AdbcStatusCode AdbcStatementSetOption(struct AdbcStatement* 
statement, const cha
 AdbcStatusCode AdbcStatementSetSqlQuery(struct AdbcStatement* statement,
                                         const char* query, struct AdbcError* 
error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return statement->private_driver->StatementSetSqlQuery(statement, query, 
error);
 }
@@ -387,7 +387,7 @@ AdbcStatusCode AdbcStatementSetSubstraitPlan(struct 
AdbcStatement* statement,
                                              const uint8_t* plan, size_t 
length,
                                              struct AdbcError* error) {
   if (!statement->private_driver) {
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
   return statement->private_driver->StatementSetSubstraitPlan(statement, plan, 
length,
                                                               error);
@@ -401,13 +401,21 @@ const char* AdbcStatusCodeMessage(AdbcStatusCode code) {
     return STRINGIFY(CONSTANT) " (" STRINGIFY_VALUE(CONSTANT) ")";
 
   switch (code) {
-    CASE(ADBC_STATUS_OK)
-    CASE(ADBC_STATUS_UNKNOWN)
-    CASE(ADBC_STATUS_NOT_IMPLEMENTED)
-    CASE(ADBC_STATUS_UNINITIALIZED)
-    CASE(ADBC_STATUS_INVALID_ARGUMENT)
-    CASE(ADBC_STATUS_INTERNAL)
-    CASE(ADBC_STATUS_IO)
+    CASE(ADBC_STATUS_OK);
+    CASE(ADBC_STATUS_UNKNOWN);
+    CASE(ADBC_STATUS_NOT_IMPLEMENTED);
+    CASE(ADBC_STATUS_NOT_FOUND);
+    CASE(ADBC_STATUS_ALREADY_EXISTS);
+    CASE(ADBC_STATUS_INVALID_ARGUMENT);
+    CASE(ADBC_STATUS_INVALID_STATE);
+    CASE(ADBC_STATUS_INVALID_DATA);
+    CASE(ADBC_STATUS_INTEGRITY);
+    CASE(ADBC_STATUS_INTERNAL);
+    CASE(ADBC_STATUS_IO);
+    CASE(ADBC_STATUS_CANCELLED);
+    CASE(ADBC_STATUS_TIMEOUT);
+    CASE(ADBC_STATUS_UNAUTHENTICATED);
+    CASE(ADBC_STATUS_UNAUTHORIZED);
     default:
       return "(invalid code)";
   }
diff --git a/drivers/flight_sql/flight_sql.cc b/drivers/flight_sql/flight_sql.cc
index e54f979..370450f 100644
--- a/drivers/flight_sql/flight_sql.cc
+++ b/drivers/flight_sql/flight_sql.cc
@@ -72,7 +72,7 @@ class FlightSqlDatabaseImpl {
   AdbcStatusCode Init(struct AdbcError* error) {
     if (client_) {
       SetError(error, "Database already initialized");
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INVALID_STATE;
     }
     auto it = options_.find("location");
     if (it == options_.end()) {
@@ -102,7 +102,7 @@ class FlightSqlDatabaseImpl {
   AdbcStatusCode SetOption(const char* key, const char* value, struct 
AdbcError* error) {
     if (client_) {
       SetError(error, "Database already initialized");
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INVALID_STATE;
     }
     options_[key] = value;
     return ADBC_STATUS_OK;
@@ -156,7 +156,7 @@ class FlightSqlConnectionImpl {
     client_ = database_->Connect();
     if (!client_) {
       SetError(error, "Database not yet initialized!");
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INVALID_STATE;
     }
     return ADBC_STATUS_OK;
   }
@@ -225,7 +225,7 @@ class FlightSqlStatementImpl : public 
arrow::RecordBatchReader {
                            struct ArrowArrayStream* out, struct AdbcError* 
error) {
     if (!info_) {
       SetError(error, "Statement has not yet been executed");
-      return ADBC_STATUS_UNINITIALIZED;
+      return ADBC_STATUS_INVALID_STATE;
     }
 
     auto status = NextStream();
@@ -293,7 +293,7 @@ class FlightSqlStatementImpl : public 
arrow::RecordBatchReader {
   AdbcStatusCode GetPartitionDescSize(size_t* length, struct AdbcError* error) 
const {
     if (!info_) {
       SetError(error, "Statement has not yet been executed");
-      return ADBC_STATUS_UNINITIALIZED;
+      return ADBC_STATUS_INVALID_STATE;
     }
 
     // TODO: we're only encoding the ticket, not the actual locations
@@ -308,7 +308,7 @@ class FlightSqlStatementImpl : public 
arrow::RecordBatchReader {
   AdbcStatusCode GetPartitionDesc(uint8_t* partition_desc, struct AdbcError* 
error) {
     if (!info_) {
       SetError(error, "Statement has not yet been executed");
-      return ADBC_STATUS_UNINITIALIZED;
+      return ADBC_STATUS_INVALID_STATE;
     }
 
     if (next_endpoint_ >= info_->endpoints().size()) {
@@ -355,7 +355,7 @@ AdbcStatusCode FlightSqlDatabaseNew(struct AdbcDatabase* 
database,
 
 AdbcStatusCode FlightSqlDatabaseSetOption(struct AdbcDatabase* database, const 
char* key,
                                           const char* value, struct AdbcError* 
error) {
-  if (!database || !database->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!database || !database->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlDatabaseImpl>*>(database->private_data);
   return (*ptr)->SetOption(key, value, error);
@@ -363,7 +363,7 @@ AdbcStatusCode FlightSqlDatabaseSetOption(struct 
AdbcDatabase* database, const c
 
 AdbcStatusCode FlightSqlDatabaseInit(struct AdbcDatabase* database,
                                      struct AdbcError* error) {
-  if (!database->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!database->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlDatabaseImpl>*>(database->private_data);
   return (*ptr)->Init(error);
@@ -371,7 +371,7 @@ AdbcStatusCode FlightSqlDatabaseInit(struct AdbcDatabase* 
database,
 
 AdbcStatusCode FlightSqlDatabaseRelease(struct AdbcDatabase* database,
                                         struct AdbcError* error) {
-  if (!database->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!database->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlDatabaseImpl>*>(database->private_data);
   AdbcStatusCode status = (*ptr)->Release(error);
@@ -383,7 +383,7 @@ AdbcStatusCode FlightSqlDatabaseRelease(struct 
AdbcDatabase* database,
 AdbcStatusCode FlightSqlConnectionDeserializePartitionDesc(
     struct AdbcConnection* connection, const uint8_t* serialized_partition,
     size_t serialized_length, struct AdbcStatement* statement, struct 
AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlStatementImpl>*>(statement->private_data);
   return (*ptr)->DeserializePartitionDesc(serialized_partition, 
serialized_length, error);
@@ -392,7 +392,7 @@ AdbcStatusCode FlightSqlConnectionDeserializePartitionDesc(
 AdbcStatusCode FlightSqlConnectionGetTableTypes(struct AdbcConnection* 
connection,
                                                 struct AdbcStatement* 
statement,
                                                 struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlStatementImpl>*>(statement->private_data);
   return (*ptr)->GetTableTypes(error);
@@ -416,7 +416,7 @@ AdbcStatusCode FlightSqlConnectionSetOption(struct 
AdbcConnection* connection,
 
 AdbcStatusCode FlightSqlConnectionInit(struct AdbcConnection* connection,
                                        struct AdbcError* error) {
-  if (!connection->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!connection->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr = reinterpret_cast<std::shared_ptr<FlightSqlConnectionImpl>*>(
       connection->private_data);
   return (*ptr)->Init(error);
@@ -424,7 +424,7 @@ AdbcStatusCode FlightSqlConnectionInit(struct 
AdbcConnection* connection,
 
 AdbcStatusCode FlightSqlConnectionRelease(struct AdbcConnection* connection,
                                           struct AdbcError* error) {
-  if (!connection->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!connection->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr = reinterpret_cast<std::shared_ptr<FlightSqlConnectionImpl>*>(
       connection->private_data);
   auto status = (*ptr)->Close(error);
@@ -435,7 +435,7 @@ AdbcStatusCode FlightSqlConnectionRelease(struct 
AdbcConnection* connection,
 
 AdbcStatusCode FlightSqlStatementExecute(struct AdbcStatement* statement,
                                          struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlStatementImpl>*>(statement->private_data);
   return (*ptr)->Execute(*ptr, error);
@@ -444,7 +444,7 @@ AdbcStatusCode FlightSqlStatementExecute(struct 
AdbcStatement* statement,
 AdbcStatusCode FlightSqlStatementGetPartitionDesc(struct AdbcStatement* 
statement,
                                                   uint8_t* partition_desc,
                                                   struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlStatementImpl>*>(statement->private_data);
   return (*ptr)->GetPartitionDesc(partition_desc, error);
@@ -453,7 +453,7 @@ AdbcStatusCode FlightSqlStatementGetPartitionDesc(struct 
AdbcStatement* statemen
 AdbcStatusCode FlightSqlStatementGetPartitionDescSize(struct AdbcStatement* 
statement,
                                                       size_t* length,
                                                       struct AdbcError* error) 
{
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlStatementImpl>*>(statement->private_data);
   return (*ptr)->GetPartitionDescSize(length, error);
@@ -462,7 +462,7 @@ AdbcStatusCode 
FlightSqlStatementGetPartitionDescSize(struct AdbcStatement* stat
 AdbcStatusCode FlightSqlStatementGetStream(struct AdbcStatement* statement,
                                            struct ArrowArrayStream* out,
                                            struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlStatementImpl>*>(statement->private_data);
   return (*ptr)->GetStream(*ptr, out, error);
@@ -480,7 +480,7 @@ AdbcStatusCode FlightSqlStatementNew(struct AdbcConnection* 
connection,
 
 AdbcStatusCode FlightSqlStatementRelease(struct AdbcStatement* statement,
                                          struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlStatementImpl>*>(statement->private_data);
   auto status = (*ptr)->Close(error);
@@ -491,7 +491,7 @@ AdbcStatusCode FlightSqlStatementRelease(struct 
AdbcStatement* statement,
 
 AdbcStatusCode FlightSqlStatementSetSqlQuery(struct AdbcStatement* statement,
                                              const char* query, struct 
AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<FlightSqlStatementImpl>*>(statement->private_data);
   return (*ptr)->SetSqlQuery(*ptr, query, error);
@@ -593,7 +593,7 @@ AdbcStatusCode AdbcStatementSetSqlQuery(struct 
AdbcStatement* statement,
 }
 
 extern "C" {
-ARROW_EXPORT
+ADBC_EXPORT
 AdbcStatusCode AdbcFlightSqlDriverInit(size_t count, struct AdbcDriver* driver,
                                        size_t* initialized, struct AdbcError* 
error) {
   if (count < ADBC_VERSION_0_0_1) return ADBC_STATUS_NOT_IMPLEMENTED;
diff --git a/drivers/sqlite/sqlite.cc b/drivers/sqlite/sqlite.cc
index 74f6cd2..c11ec23 100644
--- a/drivers/sqlite/sqlite.cc
+++ b/drivers/sqlite/sqlite.cc
@@ -165,7 +165,7 @@ class SqliteDatabaseImpl {
   AdbcStatusCode Init(struct AdbcError* error) {
     if (db_) {
       SetError(error, "Database already initialized");
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INVALID_STATE;
     }
     const char* filename = ":memory:";
     auto it = options_.find("filename");
@@ -181,7 +181,7 @@ class SqliteDatabaseImpl {
   AdbcStatusCode SetOption(const char* key, const char* value, struct 
AdbcError* error) {
     if (db_) {
       SetError(error, "Database already initialized");
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INVALID_STATE;
     }
     options_[key] = value;
     return ADBC_STATUS_OK;
@@ -191,7 +191,7 @@ class SqliteDatabaseImpl {
     std::lock_guard<std::mutex> guard(mutex_);
     if (--connection_count_ < 0) {
       SetError(error, "Connection count underflow");
-      return ADBC_STATUS_INTERNAL;
+      return ADBC_STATUS_INVALID_STATE;
     }
     return ADBC_STATUS_OK;
   }
@@ -202,13 +202,13 @@ class SqliteDatabaseImpl {
     if (connection_count_ > 0) {
       SetError(error, "Cannot release database with ", connection_count_,
                " open connections");
-      return ADBC_STATUS_INTERNAL;
+      return ADBC_STATUS_INVALID_STATE;
     }
 
     auto status = sqlite3_close(db_);
     if (status != SQLITE_OK) {
       if (db_) SetError(db_, "sqlite3_close", error);
-      return ADBC_STATUS_UNKNOWN;
+      return ADBC_STATUS_IO;
     }
     return ADBC_STATUS_OK;
   }
@@ -234,7 +234,7 @@ class SqliteConnectionImpl {
         (db_schema && std::strlen(db_schema) > 0)) {
       std::memset(schema, 0, sizeof(*schema));
       SetError(error, "Catalog/schema are not supported");
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_NOT_IMPLEMENTED;
     }
 
     std::string query = "SELECT * FROM ";
@@ -264,7 +264,7 @@ class SqliteConnectionImpl {
     db_ = database_->Connect();
     if (!db_) {
       SetError(error, "Database not yet initialized!");
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INVALID_STATE;
     }
     return ADBC_STATUS_OK;
   }
@@ -482,14 +482,14 @@ class SqliteStatementImpl {
     auto status = arrow::ImportRecordBatch(values, schema).Value(&batch);
     if (!status.ok()) {
       SetError(error, status);
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INTERNAL;
     }
 
     std::shared_ptr<arrow::Table> table;
     status = arrow::Table::FromRecordBatches({std::move(batch)}).Value(&table);
     if (!status.ok()) {
       SetError(error, status);
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INTERNAL;
     }
 
     bind_parameters_.reset(new arrow::TableBatchReader(std::move(table)));
@@ -501,7 +501,7 @@ class SqliteStatementImpl {
     auto status = 
arrow::ImportRecordBatchReader(stream).Value(&bind_parameters_);
     if (!status.ok()) {
       SetError(error, status);
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INTERNAL;
     }
     return ADBC_STATUS_OK;
   }
@@ -514,7 +514,7 @@ class SqliteStatementImpl {
       return ExecuteBulk(error);
     }
     SetError(error, "Cannot execute a statement without a query");
-    return ADBC_STATUS_UNINITIALIZED;
+    return ADBC_STATUS_INVALID_STATE;
   }
 
   AdbcStatusCode GetObjects(const std::shared_ptr<SqliteStatementImpl>& self, 
int depth,
@@ -921,7 +921,7 @@ class SqliteStatementImpl {
                            struct ArrowArrayStream* out, struct AdbcError* 
error) {
     if (!result_reader_) {
       SetError(error, "Statement has not yet been executed");
-      return ADBC_STATUS_UNINITIALIZED;
+      return ADBC_STATUS_INVALID_STATE;
     }
     auto status = arrow::ExportRecordBatchReader(result_reader_, out);
     if (!status.ok()) {
@@ -964,7 +964,7 @@ class SqliteStatementImpl {
   AdbcStatusCode ExecuteBulk(struct AdbcError* error) {
     if (!bind_parameters_) {
       SetError(error, "Must AdbcStatementBind for bulk insertion");
-      return ADBC_STATUS_INVALID_ARGUMENT;
+      return ADBC_STATUS_INVALID_STATE;
     }
 
     sqlite3* db = connection_->db();
@@ -1107,7 +1107,7 @@ AdbcStatusCode SqliteDatabaseNew(struct AdbcDatabase* 
database, struct AdbcError
 
 AdbcStatusCode SqliteDatabaseInit(struct AdbcDatabase* database,
                                   struct AdbcError* error) {
-  if (!database->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!database->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<SqliteDatabaseImpl>*>(database->private_data);
   return (*ptr)->Init(error);
@@ -1115,7 +1115,7 @@ AdbcStatusCode SqliteDatabaseInit(struct AdbcDatabase* 
database,
 
 AdbcStatusCode SqliteDatabaseSetOption(struct AdbcDatabase* database, const 
char* key,
                                        const char* value, struct AdbcError* 
error) {
-  if (!database || !database->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!database || !database->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<SqliteDatabaseImpl>*>(database->private_data);
   return (*ptr)->SetOption(key, value, error);
@@ -1123,7 +1123,7 @@ AdbcStatusCode SqliteDatabaseSetOption(struct 
AdbcDatabase* database, const char
 
 AdbcStatusCode SqliteDatabaseRelease(struct AdbcDatabase* database,
                                      struct AdbcError* error) {
-  if (!database->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!database->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<SqliteDatabaseImpl>*>(database->private_data);
   AdbcStatusCode status = (*ptr)->Release(error);
@@ -1136,7 +1136,7 @@ AdbcStatusCode SqliteConnectionGetObjects(
     struct AdbcConnection* connection, int depth, const char* catalog,
     const char* db_schema, const char* table_name, const char** table_types,
     const char* column_name, struct AdbcStatement* statement, struct 
AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   return (*ptr)->GetObjects(*ptr, depth, catalog, db_schema, table_name, 
table_types,
@@ -1148,7 +1148,7 @@ AdbcStatusCode SqliteConnectionGetTableSchema(struct 
AdbcConnection* connection,
                                               const char* table_name,
                                               struct ArrowSchema* schema,
                                               struct AdbcError* error) {
-  if (!connection->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!connection->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<SqliteConnectionImpl>*>(connection->private_data);
   return (*ptr)->GetTableSchema(catalog, db_schema, table_name, schema, error);
@@ -1157,7 +1157,7 @@ AdbcStatusCode SqliteConnectionGetTableSchema(struct 
AdbcConnection* connection,
 AdbcStatusCode SqliteConnectionGetTableTypes(struct AdbcConnection* connection,
                                              struct AdbcStatement* statement,
                                              struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   return (*ptr)->GetTableTypes(*ptr, error);
@@ -1165,7 +1165,7 @@ AdbcStatusCode SqliteConnectionGetTableTypes(struct 
AdbcConnection* connection,
 
 AdbcStatusCode SqliteConnectionInit(struct AdbcConnection* connection,
                                     struct AdbcError* error) {
-  if (!connection->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!connection->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<SqliteConnectionImpl>*>(connection->private_data);
   return (*ptr)->Init(error);
@@ -1183,7 +1183,7 @@ AdbcStatusCode SqliteConnectionNew(struct AdbcDatabase* 
database,
 
 AdbcStatusCode SqliteConnectionRelease(struct AdbcConnection* connection,
                                        struct AdbcError* error) {
-  if (!connection->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!connection->private_data) return ADBC_STATUS_INVALID_STATE;
   auto ptr =
       
reinterpret_cast<std::shared_ptr<SqliteConnectionImpl>*>(connection->private_data);
   AdbcStatusCode status = (*ptr)->Release(error);
@@ -1201,7 +1201,7 @@ AdbcStatusCode SqliteConnectionSetOption(struct 
AdbcConnection* connection,
 AdbcStatusCode SqliteStatementBind(struct AdbcStatement* statement,
                                    struct ArrowArray* values, struct 
ArrowSchema* schema,
                                    struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   return (*ptr)->Bind(*ptr, values, schema, error);
@@ -1210,7 +1210,7 @@ AdbcStatusCode SqliteStatementBind(struct AdbcStatement* 
statement,
 AdbcStatusCode SqliteStatementBindStream(struct AdbcStatement* statement,
                                          struct ArrowArrayStream* stream,
                                          struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   return (*ptr)->Bind(*ptr, stream, error);
@@ -1218,7 +1218,7 @@ AdbcStatusCode SqliteStatementBindStream(struct 
AdbcStatement* statement,
 
 AdbcStatusCode SqliteStatementExecute(struct AdbcStatement* statement,
                                       struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   return (*ptr)->Execute(*ptr, error);
@@ -1239,7 +1239,7 @@ AdbcStatusCode SqliteStatementGetPartitionDescSize(struct 
AdbcStatement* stateme
 AdbcStatusCode SqliteStatementGetStream(struct AdbcStatement* statement,
                                         struct ArrowArrayStream* out,
                                         struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   return (*ptr)->GetStream(*ptr, out, error);
@@ -1257,14 +1257,14 @@ AdbcStatusCode SqliteStatementNew(struct 
AdbcConnection* connection,
 
 AdbcStatusCode SqliteStatementPrepare(struct AdbcStatement* statement,
                                       struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   // No-op
   return ADBC_STATUS_OK;
 }
 
 AdbcStatusCode SqliteStatementRelease(struct AdbcStatement* statement,
                                       struct AdbcError* error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   auto status = (*ptr)->Close(error);
@@ -1275,7 +1275,7 @@ AdbcStatusCode SqliteStatementRelease(struct 
AdbcStatement* statement,
 
 AdbcStatusCode SqliteStatementSetOption(struct AdbcStatement* statement, const 
char* key,
                                         const char* value, struct AdbcError* 
error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   return (*ptr)->SetOption(*ptr, key, value, error);
@@ -1283,7 +1283,7 @@ AdbcStatusCode SqliteStatementSetOption(struct 
AdbcStatement* statement, const c
 
 AdbcStatusCode SqliteStatementSetSqlQuery(struct AdbcStatement* statement,
                                           const char* query, struct AdbcError* 
error) {
-  if (!statement->private_data) return ADBC_STATUS_UNINITIALIZED;
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
   auto* ptr =
       
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
   return (*ptr)->SetSqlQuery(*ptr, query, error);

Reply via email to