-
Notifications
You must be signed in to change notification settings - Fork 86
Implement the Go ADBC Interface and build script #865
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
#include "ADBCDriver.h" | ||
#include <adbc.h> | ||
#include <adbc_driver_manager.h> | ||
#include <arrow/flight/sql/client.h> | ||
#include <arrow/flight/sql/driver.h> | ||
#include <arrow/flight/sql/server.h> | ||
#include <arrow/flight/sql/types.h> | ||
#include <arrow/flight/sql/utils.h> | ||
#include <arrow/flight/types.h> | ||
#include <arrow/flight/utils.h> | ||
#include <arrow/io/api.h> | ||
#include <arrow/ipc/api.h> | ||
#include <arrow/result.h> | ||
#include <arrow/status.h> | ||
#include <arrow/table.h> | ||
#include <arrow/util/logging.h> | ||
#include <arrow/util/memory.h> | ||
#include <arrow/util/uri.h> | ||
#include <iostream> | ||
#include <memory> | ||
#include <string> | ||
|
||
namespace ADBC { | ||
|
||
class ADBCDriver { | ||
public: | ||
ADBCDriver() { | ||
// Initialize the ADBC driver manager | ||
AdbcStatusCode status = AdbcDriverManagerInitialize(); | ||
if (status != ADBC_STATUS_OK) { | ||
std::cerr << "Failed to initialize ADBC driver manager: " << AdbcStatusCodeToString(status) << std::endl; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
throw std::runtime_error("Failed to initialize ADBC driver manager"); | ||
} | ||
|
||
// Register the Arrow Flight SQL driver | ||
status = AdbcDriverManagerRegisterDriver("arrow-flight-sql", &arrow_flight_sql_driver); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this function doesn't exist either, did you mean Also, if you are only using the flightsql driver, why use the driver manager? Why not just link against |
||
if (status != ADBC_STATUS_OK) { | ||
std::cerr << "Failed to register Arrow Flight SQL driver: " << AdbcStatusCodeToString(status) << std::endl; | ||
throw std::runtime_error("Failed to register Arrow Flight SQL driver"); | ||
} | ||
} | ||
|
||
~ADBCDriver() { | ||
// Cleanup the ADBC driver manager | ||
AdbcDriverManagerCleanup(); | ||
} | ||
|
||
std::shared_ptr<arrow::Table> ExecuteQuery(const std::string& query) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You should return an |
||
// Create a connection to the Arrow Flight SQL server | ||
AdbcConnection connection; | ||
AdbcStatusCode status = AdbcConnectionInitialize(&connection, "arrow-flight-sql", nullptr); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
if (status != ADBC_STATUS_OK) { | ||
std::cerr << "Failed to initialize ADBC connection: " << AdbcStatusCodeToString(status) << std::endl; | ||
throw std::runtime_error("Failed to initialize ADBC connection"); | ||
} | ||
|
||
// Execute the query | ||
AdbcStatement statement; | ||
status = AdbcStatementInitialize(&statement, &connection); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
if (status != ADBC_STATUS_OK) { | ||
std::cerr << "Failed to initialize ADBC statement: " << AdbcStatusCodeToString(status) << std::endl; | ||
throw std::runtime_error("Failed to initialize ADBC statement"); | ||
} | ||
|
||
status = AdbcStatementSetSqlQuery(&statement, query.c_str()); | ||
if (status != ADBC_STATUS_OK) { | ||
std::cerr << "Failed to set SQL query: " << AdbcStatusCodeToString(status) << std::endl; | ||
throw std::runtime_error("Failed to set SQL query"); | ||
} | ||
|
||
AdbcResult result; | ||
status = AdbcStatementExecuteQuery(&statement, &result); | ||
if (status != ADBC_STATUS_OK) { | ||
std::cerr << "Failed to execute query: " << AdbcStatusCodeToString(status) << std::endl; | ||
throw std::runtime_error("Failed to execute query"); | ||
} | ||
|
||
// Convert the result to an Arrow Table | ||
std::shared_ptr<arrow::Table> table; | ||
arrow::Status arrow_status = arrow::flight::sql::ResultToTable(result, &table); | ||
if (!arrow_status.ok()) { | ||
std::cerr << "Failed to convert result to Arrow Table: " << arrow_status.ToString() << std::endl; | ||
throw std::runtime_error("Failed to convert result to Arrow Table"); | ||
} | ||
Comment on lines
+71
to
+84
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. execute query uses an |
||
|
||
// Cleanup | ||
AdbcResultRelease(&result); | ||
AdbcStatementRelease(&statement); | ||
AdbcConnectionRelease(&connection); | ||
|
||
return table; | ||
} | ||
|
||
private: | ||
AdbcDriver arrow_flight_sql_driver; | ||
}; | ||
|
||
} // namespace ADBC |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
#pragma once | ||
|
||
#include <adbc.h> | ||
#include <adbc_driver_manager.h> | ||
Comment on lines
+3
to
+4
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. include paths should be |
||
#include <arrow/flight/sql/client.h> | ||
#include <arrow/flight/sql/driver.h> | ||
#include <arrow/flight/sql/server.h> | ||
#include <arrow/flight/sql/types.h> | ||
#include <arrow/flight/sql/utils.h> | ||
#include <arrow/flight/types.h> | ||
#include <arrow/flight/utils.h> | ||
#include <arrow/io/api.h> | ||
#include <arrow/ipc/api.h> | ||
#include <arrow/result.h> | ||
#include <arrow/status.h> | ||
#include <arrow/table.h> | ||
#include <arrow/util/logging.h> | ||
#include <arrow/util/memory.h> | ||
#include <arrow/util/uri.h> | ||
#include <iostream> | ||
#include <memory> | ||
#include <string> | ||
|
||
namespace ADBC { | ||
|
||
class ADBCDriver { | ||
public: | ||
ADBCDriver(); | ||
~ADBCDriver(); | ||
|
||
std::shared_ptr<arrow::Table> ExecuteQuery(const std::string& query); | ||
|
||
private: | ||
AdbcDriver arrow_flight_sql_driver; | ||
}; | ||
|
||
} // namespace ADBC |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
package main | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this file seems wrong? there's nothing here and it's using the wrong library version |
||
|
||
import ( | ||
"context" | ||
"database/sql" | ||
"database/sql/driver" | ||
"fmt" | ||
"github.com/apache/arrow/go/v8/arrow" | ||
"github.com/apache/arrow/go/v8/arrow/array" | ||
"github.com/apache/arrow/go/v8/arrow/flight" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql" | ||
"github.com/apache/arrow/go/v8/arrow/memory" | ||
"github.com/apache/arrow/go/v8/arrow/scalar" | ||
"github.com/apache/arrow/go/v8/arrow/util" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver" | ||
"github.com/apache/arrow/go/v8/arrow/flight/flightsql/adbc/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/driver/manager/ |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#!/bin/bash | ||
|
||
# Set the Go environment variables | ||
export GO111MODULE=on | ||
export CGO_ENABLED=1 | ||
|
||
# Build the Go ADBC Interface as a C shared object | ||
go build -o adbc_driver.so -buildmode=c-shared adbc_driver.go |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Where is this function defined? There is no
AdbcDriverManagerInitialize()
in adbc_driver_manager.h`