From dca687dae9cfb9b9b02a12a5069067ea59b7bce8 Mon Sep 17 00:00:00 2001 From: David Li Date: Mon, 2 Mar 2026 09:56:05 +0900 Subject: [PATCH 1/2] feat(format): expose functions/procedures in catalog metadata Closes #3983. --- c/include/arrow-adbc/adbc.h | 90 +++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/c/include/arrow-adbc/adbc.h b/c/include/arrow-adbc/adbc.h index 3733daad17..ef8f81a9de 100644 --- a/c/include/arrow-adbc/adbc.h +++ b/c/include/arrow-adbc/adbc.h @@ -1989,6 +1989,96 @@ AdbcStatusCode AdbcConnectionGetObjects(struct AdbcConnection* connection, int d struct ArrowArrayStream* out, struct AdbcError* error); +/// \brief Get a hierarchical view of all functions and procedures. +/// +/// The result is an Arrow dataset with the following schema: +/// +/// | Field Name | Field Type | +/// |--------------------------|-------------------------| +/// | catalog_name | utf8 | +/// | catalog_db_schemas | list | +/// +/// DB_SCHEMA_SCHEMA is a Struct with fields: +/// +/// | Field Name | Field Type | +/// |--------------------------|-------------------------| +/// | db_schema_name | utf8 | +/// | db_schema_routines | list | +/// +/// ROUTINE_SCHEMA is a Struct with fields: +/// +/// | Field Name | Field Type | Comments | +/// |--------------------------|-------------------------|----------| +/// | routine_name | utf8 not null | | +/// | routine_specific_name | utf8 not null | (1) | +/// | routine_type | utf8 not null | (2) | +/// | routine_remarks | utf8 | (3) | +/// | routine_parameters | list | (4) | +/// | routine_result | list | (4) | +/// | routine_parameter_schema | binary | (5) | +/// | routine_result_schema | binary | (5) | +/// +/// 1. A name that uniquely identifies the routine, to disambiguate +/// overloads. +/// 2. 'FUNCTION', 'PROCEDURE', or a vendor-specific name (e.g. 'TABLE +/// FUNCTION'). +/// 3. Vendor-specific description of the routine. +/// 4. Metadata about the accepted parameters and return values as structured +/// Arrow data. Only populated if include_columns is set, otherwise null. +/// 5. Metadata about the accepted parameters and return values as an Arrow +/// schema, serialized as an IPC message containing a schema Flatbuffers +/// structure. Only populated if include_arrow_schema is set, otherwise +/// null. +/// +/// PARAMETER_SCHEMA is a Struct with fields: +/// +/// | Field Name | Field Type | Comments | +/// |--------------------------|-------------------------|----------| +/// | param_name | utf8 not null | | +/// | ordinal_position | int32 | (1) | +/// | remarks | utf8 | (2) | +/// | param_type | utf8 | (3) | +/// | xdbc_data_type | int16 | (3) | +/// | xdbc_type_name | utf8 | (3) | +/// | xdbc_precision | int32 | (3) | +/// | xdbc_length | int32 | (3) | +/// | xdbc_scale | int16 | (3) | +/// | xdbc_num_prec_radix | int16 | (3) | +/// | xdbc_nullable | int16 | (3) | +/// | xdbc_char_octet_length | int32 | (3) | +/// | xdbc_is_nullable | utf8 | (3) | +/// +/// 1. The ordinal position of the parameter or return value (1-indexed). +/// 2. Vendor-specific description of the parameter or return value. +/// 3. 'IN', 'OUT', 'INOUT', or a vendor-specific name. +/// 3. Optional value. Should be null if not supported by the driver. +/// xdbc_ values are meant to provide JDBC/ODBC-compatible metadata +/// in an agnostic manner. +/// +/// \param[in] connection The database connection. +/// \param[in] catalog Only show routines in the given catalog. If NULL, +/// do not filter by catalog. If an empty string, only show routines +/// without a catalog. May be a search pattern (see section +/// documentation). +/// \param[in] db_schema Only show routines in the given database schema. If +/// NULL, do not filter by database schema. If an empty string, only show +/// routines without a database schema. May be a search pattern (see section +/// documentation). +/// \param[in] routine_name Only show routines with the given name. If NULL, do not +/// filter by name. May be a search pattern (see section documentation). +/// \param[in] include_columns If non-zero, include (if applicable) metadata +/// about parameters and return values as structured data. +/// \param[in] include_arrow_schema If non-zero, include (if applicable) +/// metadata about parameters and return values as a serialized Arrow +/// schema. +/// \param[out] out The result set. +/// \param[out] error Error details, if an error occurs. +ADBC_EXPORT +AdbcStatusCode AdbcConnectionGetObjectsRoutines( + struct AdbcConnection* connection, const char* catalog, const char* db_schema, + const char* routine_name, int include_columns, int include_arrow_schema, + struct ArrowArrayStream* out, struct AdbcError* error); + /// \brief Get a string option of the connection. /// /// This must always be thread-safe (other operations are not), though From 005a9eecf84a8207630a50c1ef83d25ca2039499 Mon Sep 17 00:00:00 2001 From: David Li Date: Thu, 5 Mar 2026 16:51:36 +0900 Subject: [PATCH 2/2] add examples/definition --- c/include/arrow-adbc/adbc.h | 83 +++++++++++++---------- go/adbc/drivermgr/arrow-adbc/adbc.h | 101 ++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 36 deletions(-) diff --git a/c/include/arrow-adbc/adbc.h b/c/include/arrow-adbc/adbc.h index ef8f81a9de..3e52fda720 100644 --- a/c/include/arrow-adbc/adbc.h +++ b/c/include/arrow-adbc/adbc.h @@ -1411,6 +1411,10 @@ struct ADBC_EXPORT AdbcDriver { struct AdbcError*); AdbcStatusCode (*MultiResultSetRelease)(struct AdbcMultiResultSet*, struct AdbcError*); + AdbcStatusCode (*ConnectionGetObjectsRoutines)(struct AdbcConnection*, const char*, + const char*, const char*, int, int, + struct ArrowArrayStream*, + struct AdbcError*); AdbcStatusCode (*ConnectionSetWarningHandler)(struct AdbcConnection*, AdbcWarningHandler handler, void* user_data, struct AdbcError*); @@ -1993,60 +1997,66 @@ AdbcStatusCode AdbcConnectionGetObjects(struct AdbcConnection* connection, int d /// /// The result is an Arrow dataset with the following schema: /// -/// | Field Name | Field Type | -/// |--------------------------|-------------------------| -/// | catalog_name | utf8 | -/// | catalog_db_schemas | list | +/// | Field Name | Field Type | +/// |-----------------------------|-------------------------| +/// | catalog_name | utf8 | +/// | catalog_db_schemas | list | /// /// DB_SCHEMA_SCHEMA is a Struct with fields: /// -/// | Field Name | Field Type | -/// |--------------------------|-------------------------| -/// | db_schema_name | utf8 | -/// | db_schema_routines | list | +/// | Field Name | Field Type | +/// |-----------------------------|-------------------------| +/// | db_schema_name | utf8 | +/// | db_schema_routines | list | /// /// ROUTINE_SCHEMA is a Struct with fields: /// -/// | Field Name | Field Type | Comments | -/// |--------------------------|-------------------------|----------| -/// | routine_name | utf8 not null | | -/// | routine_specific_name | utf8 not null | (1) | -/// | routine_type | utf8 not null | (2) | -/// | routine_remarks | utf8 | (3) | -/// | routine_parameters | list | (4) | -/// | routine_result | list | (4) | -/// | routine_parameter_schema | binary | (5) | -/// | routine_result_schema | binary | (5) | +/// | Field Name | Field Type | Comments | +/// |-----------------------------|-------------------------|----------| +/// | routine_name | utf8 not null | | +/// | routine_specific_name | utf8 not null | (1) | +/// | routine_type | utf8 not null | (2) | +/// | routine_remarks | utf8 | (3) | +/// | routine_examples | list | (3) | +/// | routine_definition | utf8 | (4) | +/// | routine_definition_language | utf8 | (4) | +/// | routine_parameters | list | (5) | +/// | routine_result | list | (5) | +/// | routine_parameter_schema | binary | (6) | +/// | routine_result_schema | binary | (6) | /// /// 1. A name that uniquely identifies the routine, to disambiguate /// overloads. /// 2. 'FUNCTION', 'PROCEDURE', or a vendor-specific name (e.g. 'TABLE /// FUNCTION'). -/// 3. Vendor-specific description of the routine. -/// 4. Metadata about the accepted parameters and return values as structured +/// 3. Vendor-specific description or help text, along with examples of the +/// syntax. +/// 4. The definition (e.g. SQL text used to create a procedure) and the +/// language of the definition (e.g. SQL, Python) +/// 5. Metadata about the accepted parameters and return values as structured /// Arrow data. Only populated if include_columns is set, otherwise null. -/// 5. Metadata about the accepted parameters and return values as an Arrow +/// 6. Metadata about the accepted parameters and return values as an Arrow /// schema, serialized as an IPC message containing a schema Flatbuffers /// structure. Only populated if include_arrow_schema is set, otherwise /// null. /// /// PARAMETER_SCHEMA is a Struct with fields: /// -/// | Field Name | Field Type | Comments | -/// |--------------------------|-------------------------|----------| -/// | param_name | utf8 not null | | -/// | ordinal_position | int32 | (1) | -/// | remarks | utf8 | (2) | -/// | param_type | utf8 | (3) | -/// | xdbc_data_type | int16 | (3) | -/// | xdbc_type_name | utf8 | (3) | -/// | xdbc_precision | int32 | (3) | -/// | xdbc_length | int32 | (3) | -/// | xdbc_scale | int16 | (3) | -/// | xdbc_num_prec_radix | int16 | (3) | -/// | xdbc_nullable | int16 | (3) | -/// | xdbc_char_octet_length | int32 | (3) | -/// | xdbc_is_nullable | utf8 | (3) | +/// | Field Name | Field Type | Comments | +/// |-----------------------------|-------------------------|----------| +/// | param_name | utf8 not null | | +/// | ordinal_position | int32 | (1) | +/// | remarks | utf8 | (2) | +/// | param_type | utf8 | (3) | +/// | xdbc_data_type | int16 | (3) | +/// | xdbc_type_name | utf8 | (3) | +/// | xdbc_precision | int32 | (3) | +/// | xdbc_length | int32 | (3) | +/// | xdbc_scale | int16 | (3) | +/// | xdbc_num_prec_radix | int16 | (3) | +/// | xdbc_nullable | int16 | (3) | +/// | xdbc_char_octet_length | int32 | (3) | +/// | xdbc_is_nullable | utf8 | (3) | /// /// 1. The ordinal position of the parameter or return value (1-indexed). /// 2. Vendor-specific description of the parameter or return value. @@ -2055,6 +2065,7 @@ AdbcStatusCode AdbcConnectionGetObjects(struct AdbcConnection* connection, int d /// xdbc_ values are meant to provide JDBC/ODBC-compatible metadata /// in an agnostic manner. /// +/// \since ADBC API revision 1.2.0 /// \param[in] connection The database connection. /// \param[in] catalog Only show routines in the given catalog. If NULL, /// do not filter by catalog. If an empty string, only show routines diff --git a/go/adbc/drivermgr/arrow-adbc/adbc.h b/go/adbc/drivermgr/arrow-adbc/adbc.h index 3733daad17..3e52fda720 100644 --- a/go/adbc/drivermgr/arrow-adbc/adbc.h +++ b/go/adbc/drivermgr/arrow-adbc/adbc.h @@ -1411,6 +1411,10 @@ struct ADBC_EXPORT AdbcDriver { struct AdbcError*); AdbcStatusCode (*MultiResultSetRelease)(struct AdbcMultiResultSet*, struct AdbcError*); + AdbcStatusCode (*ConnectionGetObjectsRoutines)(struct AdbcConnection*, const char*, + const char*, const char*, int, int, + struct ArrowArrayStream*, + struct AdbcError*); AdbcStatusCode (*ConnectionSetWarningHandler)(struct AdbcConnection*, AdbcWarningHandler handler, void* user_data, struct AdbcError*); @@ -1989,6 +1993,103 @@ AdbcStatusCode AdbcConnectionGetObjects(struct AdbcConnection* connection, int d struct ArrowArrayStream* out, struct AdbcError* error); +/// \brief Get a hierarchical view of all functions and procedures. +/// +/// The result is an Arrow dataset with the following schema: +/// +/// | Field Name | Field Type | +/// |-----------------------------|-------------------------| +/// | catalog_name | utf8 | +/// | catalog_db_schemas | list | +/// +/// DB_SCHEMA_SCHEMA is a Struct with fields: +/// +/// | Field Name | Field Type | +/// |-----------------------------|-------------------------| +/// | db_schema_name | utf8 | +/// | db_schema_routines | list | +/// +/// ROUTINE_SCHEMA is a Struct with fields: +/// +/// | Field Name | Field Type | Comments | +/// |-----------------------------|-------------------------|----------| +/// | routine_name | utf8 not null | | +/// | routine_specific_name | utf8 not null | (1) | +/// | routine_type | utf8 not null | (2) | +/// | routine_remarks | utf8 | (3) | +/// | routine_examples | list | (3) | +/// | routine_definition | utf8 | (4) | +/// | routine_definition_language | utf8 | (4) | +/// | routine_parameters | list | (5) | +/// | routine_result | list | (5) | +/// | routine_parameter_schema | binary | (6) | +/// | routine_result_schema | binary | (6) | +/// +/// 1. A name that uniquely identifies the routine, to disambiguate +/// overloads. +/// 2. 'FUNCTION', 'PROCEDURE', or a vendor-specific name (e.g. 'TABLE +/// FUNCTION'). +/// 3. Vendor-specific description or help text, along with examples of the +/// syntax. +/// 4. The definition (e.g. SQL text used to create a procedure) and the +/// language of the definition (e.g. SQL, Python) +/// 5. Metadata about the accepted parameters and return values as structured +/// Arrow data. Only populated if include_columns is set, otherwise null. +/// 6. Metadata about the accepted parameters and return values as an Arrow +/// schema, serialized as an IPC message containing a schema Flatbuffers +/// structure. Only populated if include_arrow_schema is set, otherwise +/// null. +/// +/// PARAMETER_SCHEMA is a Struct with fields: +/// +/// | Field Name | Field Type | Comments | +/// |-----------------------------|-------------------------|----------| +/// | param_name | utf8 not null | | +/// | ordinal_position | int32 | (1) | +/// | remarks | utf8 | (2) | +/// | param_type | utf8 | (3) | +/// | xdbc_data_type | int16 | (3) | +/// | xdbc_type_name | utf8 | (3) | +/// | xdbc_precision | int32 | (3) | +/// | xdbc_length | int32 | (3) | +/// | xdbc_scale | int16 | (3) | +/// | xdbc_num_prec_radix | int16 | (3) | +/// | xdbc_nullable | int16 | (3) | +/// | xdbc_char_octet_length | int32 | (3) | +/// | xdbc_is_nullable | utf8 | (3) | +/// +/// 1. The ordinal position of the parameter or return value (1-indexed). +/// 2. Vendor-specific description of the parameter or return value. +/// 3. 'IN', 'OUT', 'INOUT', or a vendor-specific name. +/// 3. Optional value. Should be null if not supported by the driver. +/// xdbc_ values are meant to provide JDBC/ODBC-compatible metadata +/// in an agnostic manner. +/// +/// \since ADBC API revision 1.2.0 +/// \param[in] connection The database connection. +/// \param[in] catalog Only show routines in the given catalog. If NULL, +/// do not filter by catalog. If an empty string, only show routines +/// without a catalog. May be a search pattern (see section +/// documentation). +/// \param[in] db_schema Only show routines in the given database schema. If +/// NULL, do not filter by database schema. If an empty string, only show +/// routines without a database schema. May be a search pattern (see section +/// documentation). +/// \param[in] routine_name Only show routines with the given name. If NULL, do not +/// filter by name. May be a search pattern (see section documentation). +/// \param[in] include_columns If non-zero, include (if applicable) metadata +/// about parameters and return values as structured data. +/// \param[in] include_arrow_schema If non-zero, include (if applicable) +/// metadata about parameters and return values as a serialized Arrow +/// schema. +/// \param[out] out The result set. +/// \param[out] error Error details, if an error occurs. +ADBC_EXPORT +AdbcStatusCode AdbcConnectionGetObjectsRoutines( + struct AdbcConnection* connection, const char* catalog, const char* db_schema, + const char* routine_name, int include_columns, int include_arrow_schema, + struct ArrowArrayStream* out, struct AdbcError* error); + /// \brief Get a string option of the connection. /// /// This must always be thread-safe (other operations are not), though