Skip to content
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

refactor(c/driver/postgresql): Use AdbcGetInfoData structure #769

Merged
merged 19 commits into from
Jun 13, 2023
Merged
467 changes: 466 additions & 1 deletion c/driver/common/utils.c

Large diffs are not rendered by default.

126 changes: 126 additions & 0 deletions c/driver/common/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@

#pragma once

#include <stdbool.h>
#include <stdint.h>

#include <adbc.h>
#include "nanoarrow/nanoarrow.h"

#if defined(__GNUC__)
#define SET_ERROR_ATTRIBUTE __attribute__((format(printf, 2, 3)))
Expand Down Expand Up @@ -122,6 +124,130 @@ AdbcStatusCode AdbcInitConnectionObjectsSchema(struct ArrowSchema* schema,
struct AdbcError* error);
/// @}

struct AdbcGetObjectsUsage {
struct ArrowStringView fk_catalog;
struct ArrowStringView fk_db_schema;
struct ArrowStringView fk_table;
struct ArrowStringView fk_column_name;
};

struct AdbcGetObjectsConstraint {
struct ArrowStringView constraint_name;
struct ArrowStringView constraint_type;
struct ArrowStringView* constraint_column_names;
int n_column_names;
struct AdbcGetObjectsUsage** constraint_column_usages;
int n_column_usages;
};

struct AdbcGetObjectsColumn {
struct ArrowStringView column_name;
int32_t ordinal_position;
struct ArrowStringView remarks;
int16_t xdbc_data_type;
struct ArrowStringView xdbc_type_name;
int32_t xdbc_column_size;
int16_t xdbc_decimal_digits;
int16_t xdbc_num_prec_radix;
int16_t xdbc_nullable;
struct ArrowStringView xdbc_column_def;
int16_t xdbc_sql_data_type;
int16_t xdbc_datetime_sub;
int32_t xdbc_char_octet_length;
struct ArrowStringView xdbc_is_nullable;
struct ArrowStringView xdbc_scope_catalog;
struct ArrowStringView xdbc_scope_schema;
struct ArrowStringView xdbc_scope_table;
bool xdbc_is_autoincrement;
bool xdbc_is_generatedcolumn;
};

struct AdbcGetObjectsTable {
struct ArrowStringView table_name;
struct ArrowStringView table_type;
struct AdbcGetObjectsColumn** table_columns;
int n_table_columns;
struct AdbcGetObjectsConstraint** table_constraints;
int n_table_constraints;
};

struct AdbcGetObjectsSchema {
struct ArrowStringView db_schema_name;
struct AdbcGetObjectsTable** db_schema_tables;
int n_db_schema_tables;
};

struct AdbcGetObjectsCatalog {
struct ArrowStringView catalog_name;
struct AdbcGetObjectsSchema** catalog_db_schemas;
int n_db_schemas;
};

struct AdbcGetObjectsData {
struct AdbcGetObjectsCatalog** catalogs;
int n_catalogs;
struct ArrowArrayView* catalog_name_array;
struct ArrowArrayView* catalog_schemas_array;
struct ArrowArrayView* db_schema_name_array;
struct ArrowArrayView* db_schema_tables_array;
struct ArrowArrayView* table_name_array;
struct ArrowArrayView* table_type_array;
struct ArrowArrayView* table_columns_array;
struct ArrowArrayView* table_constraints_array;
struct ArrowArrayView* column_name_array;
struct ArrowArrayView* column_position_array;
struct ArrowArrayView* column_remarks_array;
struct ArrowArrayView* xdbc_data_type_array;
struct ArrowArrayView* xdbc_type_name_array;
struct ArrowArrayView* xdbc_column_size_array;
struct ArrowArrayView* xdbc_decimal_digits_array;
struct ArrowArrayView* xdbc_num_prec_radix_array;
struct ArrowArrayView* xdbc_nullable_array;
struct ArrowArrayView* xdbc_column_def_array;
struct ArrowArrayView* xdbc_sql_data_type_array;
struct ArrowArrayView* xdbc_datetime_sub_array;
struct ArrowArrayView* xdbc_char_octet_length_array;
struct ArrowArrayView* xdbc_is_nullable_array;
struct ArrowArrayView* xdbc_scope_catalog_array;
struct ArrowArrayView* xdbc_scope_schema_array;
struct ArrowArrayView* xdbc_scope_table_array;
struct ArrowArrayView* xdbc_is_autoincrement_array;
struct ArrowArrayView* xdbc_is_generatedcolumn_array;
struct ArrowArrayView* constraint_name_array;
struct ArrowArrayView* constraint_type_array;
struct ArrowArrayView* constraint_column_names_array;
struct ArrowArrayView* constraint_column_name_array;
struct ArrowArrayView* constraint_column_usages_array;
struct ArrowArrayView* fk_catalog_array;
struct ArrowArrayView* fk_db_schema_array;
struct ArrowArrayView* fk_table_array;
struct ArrowArrayView* fk_column_name_array;
};

// does not copy any data from array
// returns NULL on error
struct AdbcGetObjectsData* AdbcGetObjectsDataInit(struct ArrowArrayView* array_view);
void AdbcGetObjectsDataDelete(struct AdbcGetObjectsData* get_objects_data);

// returns NULL on error
// for now all arguments are required
struct AdbcGetObjectsCatalog* AdbcGetObjectsDataGetCatalogByName(
struct AdbcGetObjectsData* get_objects_data, const char* const catalog_name);
struct AdbcGetObjectsSchema* AdbcGetObjectsDataGetSchemaByName(
struct AdbcGetObjectsData* get_objects_data, const char* const catalog_name,
const char* const schema_name);
struct AdbcGetObjectsTable* AdbcGetObjectsDataGetTableByName(
struct AdbcGetObjectsData* get_objects_data, const char* const catalog_name,
const char* const schema_name, const char* const table_name);
struct AdbcGetObjectsColumn* AdbcGetObjectsDataGetColumnByName(
struct AdbcGetObjectsData* get_objects_data, const char* const catalog_name,
const char* const schema_name, const char* const table_name,
const char* const column_name);
struct AdbcGetObjectsConstraint* AdbcGetObjectsDataGetConstraintByName(
struct AdbcGetObjectsData* get_objects_data, const char* const catalog_name,
const char* const schema_name, const char* const table_name,
const char* const constraint_name);

#ifdef __cplusplus
}
#endif
2 changes: 2 additions & 0 deletions c/driver/flightsql/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ else()
endif()

if(ADBC_BUILD_TESTS)
include_directories(SYSTEM ${REPOSITORY_ROOT}/c/driver/common)
add_test_case(driver_flightsql_test
PREFIX
adbc
Expand All @@ -51,6 +52,7 @@ if(ADBC_BUILD_TESTS)
dremio_flightsql_test.cc
sqlite_flightsql_test.cc
EXTRA_LINK_LIBS
adbc_driver_common
adbc_validation
nanoarrow
${TEST_LINK_LIBS})
Expand Down
6 changes: 4 additions & 2 deletions c/driver/postgresql/connection.cc
Original file line number Diff line number Diff line change
Expand Up @@ -508,6 +508,8 @@ class PqGetObjectsHelper {
" SELECT "
" fk_unnest.conname, "
" fk_unnest.contype, "
" fk_unnest.conkey, "
" fk_unnest.confkey, "
" attr.attname, "
" fnsp.nspname AS fschema, "
" fcls.relname AS ftable, "
Expand All @@ -527,10 +529,10 @@ class PqGetObjectsHelper {
" SELECT "
" conname, "
" contype, "
" ARRAY_AGG(attname) AS colnames, "
" ARRAY_AGG(attname ORDER BY conkey) AS colnames, "
" fschema, "
" ftable, "
" ARRAY_AGG(fattname) AS fcolnames "
" ARRAY_AGG(fattname ORDER BY confkey) AS fcolnames "
" FROM fk_names "
" GROUP BY "
" conname, "
Expand Down
Loading