65 using Value = std::variant<Unset, std::string, std::vector<uint8_t>, int64_t,
double>;
67 Option() : value_(
Unset{}) {}
72 explicit Option(std::string value) : value_(std::move(value)) {}
73 explicit Option(std::vector<uint8_t> value) : value_(std::move(value)) {}
74 explicit Option(
double value) : value_(value) {}
75 explicit Option(int64_t value) : value_(value) {}
77 const Value& value() const& {
return value_; }
78 Value& value() && {
return value_; }
81 bool has_value()
const {
return !std::holds_alternative<Unset>(value_); }
87 using T = std::decay_t<
decltype(value)>;
88 if constexpr (std::is_same_v<T, std::string>) {
95 return status::InvalidArgument(
"Invalid boolean value ", this->
Format());
104 using T = std::decay_t<
decltype(value)>;
105 if constexpr (std::is_same_v<T, int64_t>) {
107 }
else if constexpr (std::is_same_v<T, std::string>) {
109 auto begin = value.data();
110 auto end = value.data() + value.size();
111 auto result = std::from_chars(begin, end, parsed);
112 if (result.ec != std::errc()) {
113 return status::InvalidArgument(
"Invalid integer value '", value,
114 "': not an integer", value);
115 }
else if (result.ptr != end) {
116 return status::InvalidArgument(
"Invalid integer value '", value,
117 "': trailing data", value);
121 return status::InvalidArgument(
"Invalid integer value ", this->
Format());
131 using T = std::decay_t<
decltype(value)>;
132 if constexpr (std::is_same_v<T, std::string>) {
135 return status::InvalidArgument(
"Invalid string value ", this->
Format());
144 [&](
auto&& value) -> std::string {
145 using T = std::decay_t<
decltype(value)>;
146 if constexpr (std::is_same_v<T, adbc::driver::Option::Unset>) {
148 }
else if constexpr (std::is_same_v<T, std::string>) {
149 return std::string(
"'") + value +
"'";
150 }
else if constexpr (std::is_same_v<T, std::vector<uint8_t>>) {
151 return std::string(
"(") + std::to_string(value.size()) +
" bytes)";
153 return std::to_string(value);
166 if (!length || (!out && *length > 0)) {
167 return status::InvalidArgument(
"Must provide both out and length to GetOption")
172 using T = std::decay_t<
decltype(value)>;
173 if constexpr (std::is_same_v<T, std::string> || std::is_same_v<T, int64_t> ||
174 std::is_same_v<T, double>) {
175 std::string_view string_value;
176 std::string allocated_value;
177 if constexpr (std::is_same_v<T, int64_t>) {
178 allocated_value = fmt::format(
"{}", value);
179 string_value = allocated_value;
180 }
else if constexpr (std::is_same_v<T, double>) {
181 allocated_value = fmt::format(
"{}", value);
182 string_value = allocated_value;
184 string_value = value;
186 size_t value_size_with_terminator = string_value.size() + 1;
187 if (*length >= value_size_with_terminator) {
188 std::memcpy(out, string_value.data(), string_value.size());
189 out[string_value.size()] = 0;
191 *length = value_size_with_terminator;
193 }
else if constexpr (std::is_same_v<T, Unset>) {
194 return status::NotFound(
"Unknown option").ToAdbc(error);
196 return status::NotFound(
"Option value is not a string").ToAdbc(error);
202 AdbcStatusCode CGet(uint8_t* out,
size_t* length, AdbcError* error)
const {
203 if (!length || (!out && *length > 0)) {
204 return status::InvalidArgument(
"Must provide both out and length to GetOption")
209 using T = std::decay_t<
decltype(value)>;
210 if constexpr (std::is_same_v<T, std::string> ||
211 std::is_same_v<T, std::vector<uint8_t>>) {
212 if (*length >= value.size()) {
213 std::memcpy(out, value.data(), value.size());
215 *length = value.size();
217 }
else if constexpr (std::is_same_v<T, Unset>) {
218 return status::NotFound(
"Unknown option").ToAdbc(error);
220 return status::NotFound(
"Option value is not a bytestring").ToAdbc(error);
228 return status::InvalidArgument(
"Must provide out to GetOption").ToAdbc(error);
232 using T = std::decay_t<
decltype(value)>;
233 if constexpr (std::is_same_v<T, int64_t>) {
236 }
else if constexpr (std::is_same_v<T, Unset>) {
237 return status::NotFound(
"Unknown option").ToAdbc(error);
239 return status::NotFound(
"Option value is not an integer").ToAdbc(error);
247 return status::InvalidArgument(
"Must provide out to GetOption").ToAdbc(error);
251 using T = std::decay_t<
decltype(value)>;
252 if constexpr (std::is_same_v<T, double> || std::is_same_v<T, int64_t>) {
253 *out =
static_cast<double>(value);
255 }
else if constexpr (std::is_same_v<T, Unset>) {
256 return status::NotFound(
"Unknown option").ToAdbc(error);
258 return status::NotFound(
"Option value is not a double").ToAdbc(error);
387 auto* driver =
reinterpret_cast<AdbcDriver*
>(raw_driver);
391 driver->ErrorGetDetailCount = &CErrorGetDetailCount;
392 driver->ErrorGetDetail = &CErrorGetDetail;
394 driver->DatabaseGetOption = &CGetOption<AdbcDatabase>;
395 driver->DatabaseGetOptionBytes = &CGetOptionBytes<AdbcDatabase>;
396 driver->DatabaseGetOptionInt = &CGetOptionInt<AdbcDatabase>;
397 driver->DatabaseGetOptionDouble = &CGetOptionDouble<AdbcDatabase>;
398 driver->DatabaseSetOptionBytes = &CSetOptionBytes<AdbcDatabase>;
399 driver->DatabaseSetOptionInt = &CSetOptionInt<AdbcDatabase>;
400 driver->DatabaseSetOptionDouble = &CSetOptionDouble<AdbcDatabase>;
402 driver->ConnectionCancel = &CConnectionCancel;
403 driver->ConnectionGetOption = &CGetOption<AdbcConnection>;
404 driver->ConnectionGetOptionBytes = &CGetOptionBytes<AdbcConnection>;
405 driver->ConnectionGetOptionInt = &CGetOptionInt<AdbcConnection>;
406 driver->ConnectionGetOptionDouble = &CGetOptionDouble<AdbcConnection>;
407 driver->ConnectionGetStatistics = &CConnectionGetStatistics;
408 driver->ConnectionGetStatisticNames = &CConnectionGetStatisticNames;
409 driver->ConnectionSetOptionBytes = &CSetOptionBytes<AdbcConnection>;
410 driver->ConnectionSetOptionInt = &CSetOptionInt<AdbcConnection>;
411 driver->ConnectionSetOptionDouble = &CSetOptionDouble<AdbcConnection>;
413 driver->StatementCancel = &CStatementCancel;
414 driver->StatementExecuteSchema = &CStatementExecuteSchema;
415 driver->StatementGetOption = &CGetOption<AdbcStatement>;
416 driver->StatementGetOptionBytes = &CGetOptionBytes<AdbcStatement>;
417 driver->StatementGetOptionInt = &CGetOptionInt<AdbcStatement>;
418 driver->StatementGetOptionDouble = &CGetOptionDouble<AdbcStatement>;
419 driver->StatementSetOptionBytes = &CSetOptionBytes<AdbcStatement>;
420 driver->StatementSetOptionInt = &CSetOptionInt<AdbcStatement>;
421 driver->StatementSetOptionDouble = &CSetOptionDouble<AdbcStatement>;
427 driver->release = &CDriverRelease;
429 driver->DatabaseInit = &CDatabaseInit;
430 driver->DatabaseNew = &CNew<AdbcDatabase>;
431 driver->DatabaseRelease = &CRelease<AdbcDatabase>;
432 driver->DatabaseSetOption = &CSetOption<AdbcDatabase>;
434 driver->ConnectionCommit = &CConnectionCommit;
435 driver->ConnectionGetInfo = &CConnectionGetInfo;
436 driver->ConnectionGetObjects = &CConnectionGetObjects;
437 driver->ConnectionGetTableSchema = &CConnectionGetTableSchema;
438 driver->ConnectionGetTableTypes = &CConnectionGetTableTypes;
439 driver->ConnectionInit = &CConnectionInit;
440 driver->ConnectionNew = &CNew<AdbcConnection>;
441 driver->ConnectionRelease = &CRelease<AdbcConnection>;
442 driver->ConnectionReadPartition = &CConnectionReadPartition;
443 driver->ConnectionRollback = &CConnectionRollback;
444 driver->ConnectionSetOption = &CSetOption<AdbcConnection>;
446 driver->StatementBind = &CStatementBind;
447 driver->StatementBindStream = &CStatementBindStream;
448 driver->StatementExecutePartitions = &CStatementExecutePartitions;
449 driver->StatementExecuteQuery = &CStatementExecuteQuery;
450 driver->StatementGetParameterSchema = &CStatementGetParameterSchema;
451 driver->StatementNew = &CStatementNew;
452 driver->StatementPrepare = &CStatementPrepare;
453 driver->StatementRelease = &CRelease<AdbcStatement>;
454 driver->StatementSetOption = &CSetOption<AdbcStatement>;
455 driver->StatementSetSqlQuery = &CStatementSetSqlQuery;
456 driver->StatementSetSubstraitPlan = &CStatementSetSubstraitPlan;
463 auto driver_private =
reinterpret_cast<Driver*
>(driver->private_data);
464 delete driver_private;
465 driver->private_data =
nullptr;
469 static int CErrorGetDetailCount(
const AdbcError* error) {
478 return error_obj->CDetailCount();
483 return {
nullptr,
nullptr, 0};
488 return {
nullptr,
nullptr, 0};
491 return error_obj->CDetail(index);
496 template <
typename T>
498 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
499 auto private_data =
new ObjectT();
500 obj->private_data = private_data;
504 template <
typename T>
506 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
508 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
516 obj->private_data =
nullptr;
520 template <
typename T>
521 static AdbcStatusCode CSetOption(T* obj,
const char* key,
const char* value,
523 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
524 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
525 return private_data->template CSetOption<>(key, value, error);
528 template <
typename T>
529 static AdbcStatusCode CSetOptionBytes(T* obj,
const char* key,
const uint8_t* value,
531 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
532 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
533 return private_data->CSetOptionBytes(key, value, length, error);
536 template <
typename T>
537 static AdbcStatusCode CSetOptionInt(T* obj,
const char* key, int64_t value,
539 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
540 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
541 return private_data->template CSetOption<>(key, value, error);
544 template <
typename T>
545 static AdbcStatusCode CSetOptionDouble(T* obj,
const char* key,
double value,
547 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
548 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
549 return private_data->template CSetOption<>(key, value, error);
552 template <
typename T>
553 static AdbcStatusCode CGetOption(T* obj,
const char* key,
char* value,
size_t* length,
555 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
556 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
557 return private_data->template CGetOptionStringLike<>(key, value, length, error);
560 template <
typename T>
561 static AdbcStatusCode CGetOptionBytes(T* obj,
const char* key, uint8_t* value,
563 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
564 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
565 return private_data->template CGetOptionStringLike<>(key, value, length, error);
568 template <
typename T>
569 static AdbcStatusCode CGetOptionInt(T* obj,
const char* key, int64_t* value,
571 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
572 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
573 return private_data->template CGetOptionNumeric<>(key, value, error);
576 template <
typename T>
577 static AdbcStatusCode CGetOptionDouble(T* obj,
const char* key,
double* value,
579 using ObjectT = ResolveObjectT<DatabaseT, ConnectionT, StatementT, T>;
580 auto private_data =
reinterpret_cast<ObjectT*
>(obj->private_data);
581 return private_data->template CGetOptionNumeric<>(key, value, error);
584#define CHECK_INIT(DATABASE, ERROR) \
585 if (!(DATABASE) || !(DATABASE)->private_data) { \
586 return status::InvalidState("Database is uninitialized").ToAdbc(ERROR); \
591 CHECK_INIT(database, error);
592 auto private_data =
reinterpret_cast<DatabaseT*
>(database->
private_data);
593 return private_data->Init(
nullptr, error);
597#define CHECK_INIT(CONNECTION, ERROR) \
598 if (!(CONNECTION) || !(CONNECTION)->private_data) { \
599 return status::InvalidState("Connection is uninitialized").ToAdbc(ERROR); \
605 CHECK_INIT(connection, error);
607 return status::InvalidState(
"Database is uninitialized").ToAdbc(error);
609 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
610 return private_data->Init(database->
private_data, error);
614 CHECK_INIT(connection, error);
615 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
616 return private_data->Cancel(error);
620 const uint32_t* info_codes,
621 size_t info_codes_length,
622 ArrowArrayStream* out,
AdbcError* error) {
623 CHECK_INIT(connection, error);
624 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
625 return private_data->GetInfo(info_codes, info_codes_length, out, error);
629 const char* catalog,
const char* db_schema,
630 const char* table_name,
631 const char** table_type,
632 const char* column_name,
633 ArrowArrayStream* out,
AdbcError* error) {
634 CHECK_INIT(connection, error);
635 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
636 return private_data->GetObjects(depth, catalog, db_schema, table_name, table_type,
637 column_name, out, error);
641 AdbcConnection* connection,
const char* catalog,
const char* db_schema,
642 const char* table_name,
char approximate, ArrowArrayStream* out,
AdbcError* error) {
643 CHECK_INIT(connection, error);
644 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
645 return private_data->GetStatistics(catalog, db_schema, table_name, approximate, out,
650 ArrowArrayStream* out,
652 CHECK_INIT(connection, error);
653 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
654 return private_data->GetStatisticNames(out, error);
659 const char* db_schema,
660 const char* table_name,
662 CHECK_INIT(connection, error);
663 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
664 return private_data->GetTableSchema(catalog, db_schema, table_name, schema, error);
668 ArrowArrayStream* out,
670 CHECK_INIT(connection, error);
671 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
672 return private_data->GetTableTypes(out, error);
676 const uint8_t* serialized_partition,
677 size_t serialized_length,
678 ArrowArrayStream* out,
680 CHECK_INIT(connection, error);
681 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
682 return private_data->ReadPartition(serialized_partition, serialized_length, out,
687 CHECK_INIT(connection, error);
688 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
689 return private_data->Commit(error);
694 CHECK_INIT(connection, error);
695 auto private_data =
reinterpret_cast<ConnectionT*
>(connection->
private_data);
696 return private_data->Rollback(error);
700#define CHECK_INIT(STATEMENT, ERROR) \
701 if (!(STATEMENT) || !(STATEMENT)->private_data) { \
702 return status::InvalidState("Statement is uninitialized").ToAdbc(ERROR); \
709 return status::InvalidState(
"Connection is uninitialized").ToAdbc(error);
711 auto private_data =
new StatementT();
723 CHECK_INIT(statement, error);
724 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
725 return private_data->Bind(values, schema, error);
729 ArrowArrayStream* stream,
AdbcError* error) {
730 CHECK_INIT(statement, error);
731 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
732 return private_data->BindStream(stream, error);
736 CHECK_INIT(statement, error);
737 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
738 return private_data->Cancel(error);
742 struct ArrowSchema* schema,
744 int64_t* rows_affected,
746 CHECK_INIT(statement, error);
747 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
748 return private_data->ExecutePartitions(schema, partitions, rows_affected, error);
752 ArrowArrayStream* stream,
753 int64_t* rows_affected,
AdbcError* error) {
754 CHECK_INIT(statement, error);
755 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
756 return private_data->ExecuteQuery(stream, rows_affected, error);
761 CHECK_INIT(statement, error);
762 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
763 return private_data->ExecuteSchema(schema, error);
769 CHECK_INIT(statement, error);
770 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
771 return private_data->GetParameterSchema(schema, error);
775 CHECK_INIT(statement, error);
776 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
777 return private_data->Prepare(error);
782 CHECK_INIT(statement, error);
783 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
784 return private_data->SetSqlQuery(query, error);
788 const uint8_t* plan,
size_t length,
790 CHECK_INIT(statement, error);
791 auto private_data =
reinterpret_cast<StatementT*
>(statement->
private_data);
792 return private_data->SetSubstraitPlan(plan, length, error);
842class BaseConnection :
public ObjectBase {
844 using Base = BaseConnection<Derived>;
853 ~BaseConnection() =
default;
867 Status CancelImpl() {
return status::NotImplemented(
"Cancel"); }
872 Status CommitImpl() {
return status::NotImplemented(
"Commit"); }
875 AdbcStatusCode GetInfo(
const uint32_t* info_codes,
size_t info_codes_length,
876 ArrowArrayStream* out, AdbcError* error) {
877 std::vector<uint32_t> codes(info_codes, info_codes + info_codes_length);
882 Status GetInfoImpl(
const std::vector<uint32_t> info_codes, ArrowArrayStream* out) {
883 return status::NotImplemented(
"GetInfo");
887 AdbcStatusCode GetObjects(
int c_depth,
const char* catalog,
const char* db_schema,
888 const char* table_name,
const char** table_type,
889 const char* column_name, ArrowArrayStream* out,
891 const auto catalog_filter =
892 catalog ? std::make_optional(std::string_view(catalog)) : std::nullopt;
893 const auto schema_filter =
894 db_schema ? std::make_optional(std::string_view(db_schema)) : std::nullopt;
895 const auto table_filter =
896 table_name ? std::make_optional(std::string_view(table_name)) : std::nullopt;
897 const auto column_filter =
898 column_name ? std::make_optional(std::string_view(column_name)) : std::nullopt;
899 std::vector<std::string_view> table_type_filter;
900 while (table_type && *table_type) {
902 table_type_filter.push_back(std::string_view(*table_type));
908 error, impl().GetObjectsImpl(c_depth, catalog_filter, schema_filter, table_filter,
909 column_filter, table_type_filter, out));
914 Status GetObjectsImpl(
int c_depth, std::optional<std::string_view> catalog_filter,
915 std::optional<std::string_view> schema_filter,
916 std::optional<std::string_view> table_filter,
917 std::optional<std::string_view> column_filter,
918 const std::vector<std::string_view>& table_types,
919 struct ArrowArrayStream* out) {
920 return status::NotImplemented(
"GetObjects");
924 AdbcStatusCode GetStatistics(
const char* catalog,
const char* db_schema,
925 const char* table_name,
char approximate,
926 ArrowArrayStream* out, AdbcError* error) {
927 const auto catalog_filter =
928 catalog ? std::make_optional(std::string_view(catalog)) : std::nullopt;
929 const auto schema_filter =
930 db_schema ? std::make_optional(std::string_view(db_schema)) : std::nullopt;
931 const auto table_filter =
932 table_name ? std::make_optional(std::string_view(table_name)) : std::nullopt;
933 RAISE_STATUS(error, impl().GetStatisticsImpl(catalog_filter, schema_filter,
934 table_filter, approximate != 0, out));
938 Status GetStatisticsImpl(std::optional<std::string_view> catalog,
939 std::optional<std::string_view> db_schema,
940 std::optional<std::string_view> table_name,
bool approximate,
941 ArrowArrayStream* out) {
942 return status::NotImplemented(
"GetStatistics");
946 AdbcStatusCode GetStatisticNames(ArrowArrayStream* out, AdbcError* error) {
951 Status GetStatisticNames(ArrowArrayStream* out) {
952 return status::NotImplemented(
"GetStatisticNames");
956 AdbcStatusCode GetTableSchema(
const char* catalog,
const char* db_schema,
957 const char* table_name, ArrowSchema* schema,
960 return status::InvalidArgument(Derived::kErrorPrefix,
961 " GetTableSchema: must provide table_name")
965 std::optional<std::string_view> catalog_param =
966 catalog ? std::make_optional(std::string_view(catalog)) : std::nullopt;
967 std::optional<std::string_view> db_schema_param =
968 db_schema ? std::make_optional(std::string_view(db_schema)) : std::nullopt;
970 RAISE_STATUS(error, impl().GetTableSchemaImpl(catalog_param, db_schema_param,
971 table_name, schema));
975 Status GetTableSchemaImpl(std::optional<std::string_view> catalog,
976 std::optional<std::string_view> db_schema,
977 std::string_view table_name, ArrowSchema* out) {
978 return status::NotImplemented(
"GetTableSchema");
982 AdbcStatusCode GetTableTypes(ArrowArrayStream* out, AdbcError* error) {
987 Status GetTableTypesImpl(ArrowArrayStream* out) {
988 return status::NotImplemented(
"GetTableTypes");
993 size_t serialized_length, ArrowArrayStream* out,
995 std::string_view partition(
reinterpret_cast<const char*
>(serialized_partition),
997 RAISE_STATUS(error, impl().ReadPartitionImpl(partition, out));
1001 Status ReadPartitionImpl(std::string_view serialized_partition, ArrowArrayStream* out) {
1002 return status::NotImplemented(
"ReadPartition");
1011 Status ReleaseImpl() {
return status::Ok(); }
1019 Status RollbackImpl() {
return status::NotImplemented(
"Rollback"); }
1030 return status::NotImplemented(Derived::kErrorPrefix,
" Unknown connection option ",
1031 key,
"=", value.
Format());
1035 Derived& impl() {
return static_cast<Derived&
>(*this); }
1058 Status ReleaseImpl() {
return status::Ok(); }
1069 return status::NotImplemented(Derived::kErrorPrefix,
" Unknown statement option ",
1070 key,
"=", value.
Format());
1073 AdbcStatusCode ExecuteQuery(ArrowArrayStream* stream, int64_t* rows_affected,
1075 int64_t rows_affected_result;
1076 RAISE_RESULT(error, rows_affected_result, impl().ExecuteQueryImpl(stream));
1077 if (rows_affected) {
1078 *rows_affected = rows_affected_result;
1084 Result<int64_t> ExecuteQueryImpl(ArrowArrayStream* stream) {
1085 return status::NotImplemented(
"ExecuteQuery");
1088 AdbcStatusCode ExecuteSchema(ArrowSchema* schema, AdbcError* error) {
1093 Status ExecuteSchemaImpl(ArrowSchema* schema) {
1094 return status::NotImplemented(
"ExecuteSchema");
1102 Status PrepareImpl() {
return status::NotImplemented(
"Prepare"); }
1104 AdbcStatusCode SetSqlQuery(
const char* query, AdbcError* error) {
1109 Status SetSqlQueryImpl(std::string_view query) {
1110 return status::NotImplemented(
"SetSqlQuery");
1113 AdbcStatusCode SetSubstraitPlan(
const uint8_t* plan,
size_t length, AdbcError* error) {
1114 RAISE_STATUS(error, impl().SetSubstraitPlanImpl(std::string_view(
1115 reinterpret_cast<const char*
>(plan), length)));
1119 Status SetSubstraitPlanImpl(std::string_view plan) {
1120 return status::NotImplemented(
"SetSubstraitPlan");
1123 AdbcStatusCode Bind(ArrowArray* values, ArrowSchema* schema, AdbcError* error) {
1128 Status BindImpl(ArrowArray* values, ArrowSchema* schema) {
1129 return status::NotImplemented(
"Bind");
1132 AdbcStatusCode BindStream(ArrowArrayStream* stream, AdbcError* error) {
1137 Status BindStreamImpl(ArrowArrayStream* stream) {
1138 return status::NotImplemented(
"BindStream");
1141 AdbcStatusCode GetParameterSchema(ArrowSchema* schema, AdbcError* error) {
1142 RAISE_STATUS(error, impl().GetParameterSchemaImpl(schema));
1146 Status GetParameterSchemaImpl(
struct ArrowSchema* schema) {
1147 return status::NotImplemented(
"GetParameterSchema");
1150 AdbcStatusCode ExecutePartitions(ArrowSchema* schema, AdbcPartitions* partitions,
1151 int64_t* rows_affected, AdbcError* error) {
1160 Status Cancel() {
return status::NotImplemented(
"Cancel"); }
1163 Derived& impl() {
return static_cast<Derived&
>(*this); }