Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
318 commits
Select commit Hold shift + click to select a range
95ff052
fix(csharp/src/Drivers/Databricks): Fix parsing of lowercase server s…
alexguo-db May 27, 2025
8ef75b1
feat(csharp/src/Drivers/Databricks): Handle legacy SPARK catalog (#2884)
eric-wang-1990 May 27, 2025
4556c16
docs: fix typo (#2888)
daipom May 28, 2025
aae84d2
feat(csharp/src/Drivers/Databricks): Primary Key and Foreign Key Meta…
eric-wang-1990 May 28, 2025
317c9c9
feat(csharp/src/Drivers/Databricks): Implement CloudFetchUrlManager t…
jadewang-db May 28, 2025
f0dabb9
fix(csharp/src/Drivers/Apache/Hive2): improve foreign key handling in…
eric-wang-1990 Jun 2, 2025
3c19975
feat(csharp/src/Drivers/Databricks): Add cloud fetch heartbeat pollin…
toddmeng-db Jun 2, 2025
8bd6ce8
chore(go/adbc): bump github.com/snowflakedb/gosnowflake from 1.14.0 t…
dependabot[bot] Jun 2, 2025
b108528
chore(java): bump org.junit:junit-bom from 5.12.2 to 5.13.0 in /java …
dependabot[bot] Jun 3, 2025
339c579
chore(java): bump dep.org.checkerframework.version from 3.49.3 to 3.4…
dependabot[bot] Jun 3, 2025
c640f17
chore(go/adbc): bump cloud.google.com/go/bigquery from 1.68.0 to 1.69…
dependabot[bot] Jun 3, 2025
0e1ad65
chore(java): bump com.diffplug.spotless:spotless-maven-plugin from 2.…
dependabot[bot] Jun 3, 2025
22b4fcb
chore(java): bump org.postgresql:postgresql from 42.7.5 to 42.7.6 in …
dependabot[bot] Jun 3, 2025
2acf95d
chore(java): bump com.google.protobuf:protobuf-java from 4.31.0 to 4.…
dependabot[bot] Jun 3, 2025
39ae5f3
chore(go/adbc): bump google.golang.org/api from 0.234.0 to 0.235.0 in…
dependabot[bot] Jun 3, 2025
40c5025
docs: fix target name for c/c++ quickstart (#2906)
daipom Jun 3, 2025
db253b1
feat(csharp/src/Drivers/Databricks): Default catalogs edge cases (#2896)
toddmeng-db Jun 3, 2025
9bda49a
fix(c/driver/postgresql): ingest zoned timestamp as WITH TIME ZONE (#…
lidavidm Jun 5, 2025
09c7711
chore(c): fix typo (#2924)
daipom Jun 5, 2025
1914020
feat(csharp/src/Drivers/Apache): Add escape underscore parameter to m…
eric-wang-1990 Jun 5, 2025
d5d7583
fix(csharp/src/Drivers/Databricks): increase default retry timeout (#…
eric-wang-1990 Jun 5, 2025
46886b9
feat(c/driver/postgresql): add read support for int2vector (#2919)
lidavidm Jun 6, 2025
68e9f73
chore(go): fix typo (#2928)
daipom Jun 6, 2025
7a6fb76
fix(csharp/src/Drivers/Apache): improve metadata query handling (#2926)
eric-wang-1990 Jun 6, 2025
95391d0
feat(csharp/src/Drivers/Databricks): Multiple catalogs with default d…
toddmeng-db Jun 7, 2025
be059d6
feat(go/adbc/driver/snowflake): New setting to set the maximum timest…
davidhcoe Jun 7, 2025
01ac10b
feat(go/adbc/driver): initial tracing instrumentation for Snowflake d…
birschick-bq Jun 8, 2025
4430379
fix(python/adbc_driver_manager): don't leak array streams (#2922)
lidavidm Jun 9, 2025
0ae85a4
chore(csharp): fix typo (#2933)
daipom Jun 9, 2025
08610c8
chore(csharp): Bump Azure.Identity and 4 others (#2942)
dependabot[bot] Jun 9, 2025
c83dcce
chore(rust): bump test-with from 0.14.10 to 0.14.11 in /rust (#2935)
dependabot[bot] Jun 9, 2025
776213d
chore(go/adbc): bump golang.org/x/sync from 0.14.0 to 0.15.0 in /go/a…
dependabot[bot] Jun 9, 2025
18a0e3c
chore(go/adbc): bump modernc.org/sqlite from 1.37.1 to 1.38.0 in /go/…
dependabot[bot] Jun 9, 2025
5e73077
chore: bump conda-incubator/setup-miniconda from 3.1.1 to 3.2.0 (#2941)
dependabot[bot] Jun 9, 2025
2863e8f
chore(java): bump org.junit:junit-bom from 5.13.0 to 5.13.1 in /java …
dependabot[bot] Jun 10, 2025
2ad4db5
chore(java): bump com.github.ben-manes.caffeine:caffeine from 3.2.0 t…
dependabot[bot] Jun 10, 2025
7c762ed
chore(go/adbc): bump golang.org/x/tools from 0.33.0 to 0.34.0 in /go/…
dependabot[bot] Jun 10, 2025
24aee4a
chore(go/adbc): bump google.golang.org/grpc from 1.72.2 to 1.73.0 in …
dependabot[bot] Jun 10, 2025
42aeaea
chore(go/adbc): bump google.golang.org/api from 0.235.0 to 0.236.0 in…
dependabot[bot] Jun 10, 2025
866b17b
chore(csharp/test): fix typo (#2946)
daipom Jun 10, 2025
2a52322
fix(csharp/src/Drivers/Apache/Hive2): Add ServerProtocolVersion in Co…
jackyhu-db Jun 10, 2025
d439e91
fix(.github/workflows): update windows os version for csharp workflow…
birschick-bq Jun 10, 2025
e327ae8
feat(csharp/src/Drivers/Apache): Format HiveServer2Exception messages…
davidhcoe Jun 10, 2025
c08fdfc
fix(csharp/src/Drivers/Databricks): Remove redundant statement close …
alexguo-db Jun 10, 2025
fdb12d2
chore(rust): fix typo (#2955)
daipom Jun 11, 2025
224df19
fix(go/adbc/driver/internal/driverbase): Ensure to propagate the trac…
birschick-bq Jun 11, 2025
3a336f0
chore(deps-dev): bump org.postgresql:postgresql from 42.7.6 to 42.7.7…
dependabot[bot] Jun 12, 2025
42f55bd
docs(rust): add protobuf requirement (#2964)
daipom Jun 14, 2025
a32fecc
chore: the local directory used for building libs should be gitignore…
eitsupi Jun 15, 2025
be46fe5
fix(csharp/src/Drivers/BigQuery): Prevent callers from attempting to …
davidhcoe Jun 16, 2025
c3b915a
fix(go/adbc/driver/snowflake): Adjust the precision of the Timestamp …
davidhcoe Jun 16, 2025
c75f91e
ci: fix typo (#2969)
daipom Jun 16, 2025
0956776
chore(dev): fix typo (#2971)
daipom Jun 16, 2025
2495085
chore: fix typo in changelog (#2973)
daipom Jun 16, 2025
7ebceeb
chore(csharp): Bump BenchmarkDotNet from 0.15.1 to 0.15.2 (#2980)
dependabot[bot] Jun 16, 2025
191ddef
chore(java): bump org.apache:apache from 34 to 35 in /java (#2977)
dependabot[bot] Jun 16, 2025
b5f0dd2
chore(go/adbc): bump google.golang.org/api from 0.236.0 to 0.237.0 in…
dependabot[bot] Jun 17, 2025
6b171b0
chore(rust): bump test-with from 0.14.11 to 0.15.1 in /rust (#2979)
dependabot[bot] Jun 17, 2025
e8b3e32
chore: bump ruby/setup-ruby from 1.244.0 to 1.245.0 (#2978)
dependabot[bot] Jun 17, 2025
f0d2151
docs: update jdbc.rst to fix dependency artifact ID mismatch (#2976)
Jolanrensen Jun 17, 2025
c11955d
chore: bump cpplint version and disable build/c++17 lint (#2989)
lidavidm Jun 18, 2025
c902aa7
ci: fix Windows 3.13 build failing (#2992)
lidavidm Jun 18, 2025
9094306
fix(rust): fix `package.rust-version` fields to match to MSRV (#2997)
eitsupi Jun 18, 2025
1f3bf11
feat(python/adbc_driver_manager): simplify autocommit=True (#2990)
lidavidm Jun 19, 2025
1747f7c
docs: update CONTRIBUTING to use mamba consistently (#2995)
daipom Jun 19, 2025
e54e7b4
docs(rust): add ADBC_SNOWFLAKE_GO_LIB_DIR requirement (#2984)
daipom Jun 19, 2025
bf3620b
ci: bump pipelines to test 3.13 instead of 3.12 or 3.11 (#2999)
lidavidm Jun 19, 2025
c84cc91
fix(go/adbc/driver): inject version to built Go drivers (#2916)
zeroshade Jun 19, 2025
fd85000
chore(r): fix typo (#2975)
daipom Jun 19, 2025
de79fa9
ci(rust): verify MSRV of each package (#2996)
eitsupi Jun 19, 2025
0772ce4
chore(csharp): fix typo (#3002)
daipom Jun 19, 2025
f5ee01e
fix(csharp/src/Drivers): Add FK_NAME and KEQ_SEQ fields to GetColumns…
eric-wang-1990 Jun 19, 2025
9342939
fix(r/adbcsqlite): Don't print results of compilation failure when ch…
paleolimbot Jun 19, 2025
8b1757a
fix(csharp/src/Drivers): Enhance pattern wildcard escaping in metadat…
eric-wang-1990 Jun 20, 2025
46ec7c3
feat(csharp/src/Drivers/Databricks): Protocol feature negotiator (#2985)
toddmeng-db Jun 20, 2025
7190e0b
chore: add codespell (#2864)
daipom Jun 21, 2025
bbf3389
build(csharp): Conditionalise dependencies (#3005)
thompson-tomo Jun 21, 2025
eba5235
chore(csharp): use license expression (#3006)
thompson-tomo Jun 23, 2025
8e1b028
feat(c/driver_manager): add new function to allow loading by manifest…
zeroshade Jun 23, 2025
a38b4e8
fix(go/adbc/driver/internal/driverbase): fix missing interface func (…
zeroshade Jun 23, 2025
59bc377
chore(java): bump com.microsoft.sqlserver:mssql-jdbc from 12.10.0.jre…
dependabot[bot] Jun 23, 2025
70e11ec
chore(go/adbc): bump github.com/apache/arrow-go/v18 from 18.3.0 to 18…
dependabot[bot] Jun 23, 2025
9b5f3a4
chore(csharp): Bump System.Net.Http.WinHttpHandler to 8.0.3 (#3013)
dependabot[bot] Jun 24, 2025
418e3a5
chore(go/adbc): bump google.golang.org/api from 0.237.0 to 0.238.0 in…
dependabot[bot] Jun 24, 2025
d5da910
ci(rust): use `working-directory` to set workdir (#3016)
eitsupi Jun 24, 2025
cde9e7b
feat(csharp/src/Apache.Arrow.Adbc): OpenTelemetry tracing baseline (#…
birschick-bq Jun 24, 2025
0000e8d
feat(csharp/src/Drivers/Databricks): Optimize GetColumnsExtendedAsync…
jackyhu-db Jun 24, 2025
de9f1e7
feat(python/adbc_driver_manager): Update python driver_manager to loa…
zeroshade Jun 25, 2025
7804b2c
feat(python/adbc_driver_manager): support more APIs sans PyArrow (#2839)
lidavidm Jun 26, 2025
77f29cc
chore(rust): separate adbc_core and adbc_datafusion arrow version req…
eitsupi Jun 26, 2025
c867312
ci: update Maven and .NET download URLs (#3030)
lidavidm Jun 27, 2025
75bd7a6
test(c/driver_manager): make new test work on Windows (#3031)
lidavidm Jun 27, 2025
900fe52
feat(python/adbc_driver_manager): accept pathlib.Path in Database (#3…
lidavidm Jun 27, 2025
de342df
chore(glib): Generate version.h automatically (#3037)
kou Jun 27, 2025
a3ea191
chore(ruby): Use rubygems-requirements-system (#3039)
kou Jun 27, 2025
7cc8fa9
chore(glib): Use project_{build,source}_root() instead of {build,sour…
kou Jun 27, 2025
c9f82c5
chore(python): update license field in pyproject.toml (#3044)
lidavidm Jun 27, 2025
05c9430
feat(r/adbcdrivermanager): Add load by manifest to adbcdrivermanager …
paleolimbot Jun 27, 2025
9c766c0
ci: add `_LIBCPP_DISABLE_AVAILABILITY` as required (#3034)
lidavidm Jun 27, 2025
54fb47c
feat(glib): Add gadbc_database_set_load_flags() (#3041)
kou Jun 27, 2025
0713502
chore(ruby): Use require_relative (#3047)
kou Jun 27, 2025
8a300e1
chore: remove deprecated attribute from compose (#3051)
daipom Jun 27, 2025
28982c2
build(python/adbc_driver_manager): fix type declarations (#3049)
lidavidm Jun 27, 2025
df64ed6
docs: add installation of basic Python dependencies to CONTRIBUTING.m…
daipom Jun 27, 2025
ba2f0e0
fix(go/adbc): adding back compatibility for function FlightSQLDriverI…
howareyouman Jun 27, 2025
ec51e95
feat(go/adbc/drivermgr): Set default load flags for drivermgr to load…
zeroshade Jun 27, 2025
19242bc
feat(csharp/src/Drivers/Databricks): Fix initial catalog typo (#3057)
toddmeng-db Jun 27, 2025
8da67a4
build(c): fix warnings in vendored toml.hpp (#3045)
lidavidm Jun 28, 2025
56d1951
docs: describe Snowflake URI creation (#3062)
jhzab Jun 29, 2025
caf9ba1
docs: update installation commands for R (#3060)
eitsupi Jun 30, 2025
7536f45
build(python): enable freethreaded wheel on Linux (#3063)
lidavidm Jun 30, 2025
cbd7647
build(python): keep building driver manager on manylinux2014 (#3065)
lidavidm Jun 30, 2025
ca929ee
test(csharp/src/Drivers): add Spice.ai test target (#2961)
sgrebnov Jun 30, 2025
6708380
chore: regenerate LICENSE (#3067)
lidavidm Jun 30, 2025
02a4219
chore(go/adbc): bump the opentelemetry group in /go/adbc with 6 updat…
dependabot[bot] Jul 1, 2025
13b0880
chore(java): bump com.google.errorprone:error_prone_core from 2.38.0 …
dependabot[bot] Jul 1, 2025
7fa5838
chore(java): bump dep.org.checkerframework.version from 3.49.4 to 3.4…
dependabot[bot] Jul 1, 2025
52aaaae
chore(go/adbc): bump google.golang.org/api from 0.238.0 to 0.239.0 in…
dependabot[bot] Jul 1, 2025
10ab7cb
chore(java): bump org.junit:junit-bom from 5.13.1 to 5.13.2 in /java …
dependabot[bot] Jul 1, 2025
53c92aa
chore(csharp): Bump Azure.Identity and System.Diagnostics.DiagnosticS…
dependabot[bot] Jul 1, 2025
4897d2f
fix(csharp/src/Drivers/Databricks): Align ConnectionTimeout with Temp…
jackyhu-db Jul 1, 2025
ba2efd0
feat(csharp/src/Drivers/Databricks): Fix for older DBR versions incor…
toddmeng-db Jul 1, 2025
bab1efc
chore(rust): fix new clippy lints (#3076)
lidavidm Jul 1, 2025
fdf1659
chore(rust): bump test-with from 0.15.1 to 0.15.2 in /rust (#3070)
dependabot[bot] Jul 1, 2025
b49d821
docs: fix typo in docs/source/driver/jdbc.rst (#3081)
amoeba Jul 1, 2025
4fab33e
fix(go/adbc/driver/snowflake): fix copy concurrency 0 (#2805)
zeroshade Jul 1, 2025
d212b82
fix(r/adbcbigquery,r/adbcflightsql,r/adbcsnowflake): fix warnings on …
eitsupi Jul 2, 2025
c9fc5b9
docs: acknowledge Rust's existence (#3083)
lidavidm Jul 2, 2025
afaa188
chore(dev/release): add Python 3.13 to the default wheel test targets…
kou Jul 2, 2025
0676384
docs: add Snowflake and BigQuery drivers to Python API reference (#3088)
eitsupi Jul 2, 2025
d684439
docs: consistent use of `pushd` instead of `cd` in the contributing g…
eitsupi Jul 2, 2025
7237ddf
docs(rust/core): add simple usage of Driver Manager (#3086)
daipom Jul 2, 2025
a976914
fix(python/adbc_driver_bigquery): correct string value of credential …
jordepic Jul 3, 2025
1b04fca
feat(csharp/src/Drivers/Databricks): Add W3C trace context (#3082)
jadewang-db Jul 3, 2025
031654f
fix(csharp/src/Drivers/Databricks): Set the SqlState of the exception…
jackyhu-db Jul 3, 2025
386c820
fix(csharp/src/Drivers/Apache): generate type-consistent empty result…
birschick-bq Jul 3, 2025
f8d5a5c
fix(csharp/src/Drivers/Databricks): fix CloudFetchResultFetcher initi…
jadewang-db Jul 3, 2025
5649dc9
feat(csharp/src/Drivers/Databricks): Fix EnablePkFk (#3098)
toddmeng-db Jul 3, 2025
e93d181
feat(csharp/src/Drivers/Databricks): Remove redundant closeoperation …
toddmeng-db Jul 3, 2025
8fa2a22
chore(csharp/test/Drivers/Databricks): Split the Databricks test into…
jackyhu-db Jul 3, 2025
4146e56
ci: don't check for pings in PR body when it's Dependabot (#3094)
lidavidm Jul 6, 2025
b64864a
chore: update versions for 20-SNAPSHOT (#3104)
lidavidm Jul 7, 2025
218708c
fix(c/driver_manager): fix expected `;` for musl arch (#3105)
eitsupi Jul 7, 2025
3e481a6
feat(csharp/src/Drivers/BigQuery): Enhanced tracing and large results…
davidhcoe Jul 7, 2025
accec23
chore: go driver makefile now considers more source files as dependen…
VersusFacit Jul 7, 2025
875c0b2
fix(go/adbc): changing the location of FlightSQLDriverInit function (…
howareyouman Jul 7, 2025
49fbda1
chore(java): bump org.junit:junit-bom from 5.13.2 to 5.13.3 in /java …
dependabot[bot] Jul 7, 2025
d9762b0
chore(go/adbc): bump google.golang.org/api from 0.239.0 to 0.240.0 in…
dependabot[bot] Jul 8, 2025
6e0a9e5
chore(java): bump com.microsoft.sqlserver:mssql-jdbc from 12.10.1.jre…
dependabot[bot] Jul 8, 2025
fe23d35
docs: organize Documentation steps of CONTRIBUTING.md (#3100)
daipom Jul 8, 2025
cfb7f82
chore(go/adbc): bump github.com/snowflakedb/gosnowflake from 1.14.1 t…
dependabot[bot] Jul 8, 2025
8a1e55f
chore(rust): bump tokio from 1.45.1 to 1.46.1 in /rust (#3113)
dependabot[bot] Jul 8, 2025
58f1ce6
feat(glib): add AdbcStatementGetParameterSchema() bindings (#3118)
kou Jul 8, 2025
bc48e18
feat(csharp/src/Drivers): update drivers to .NET 8 (#3120)
CurtHagenlocher Jul 8, 2025
573a326
fix(csharp/src/Drivers/Databricks): Change fallback check of Databric…
jackyhu-db Jul 8, 2025
30e8856
feat(go/adbc/sqldriver): handle timestamp/time.Time values for input …
zeroshade Jul 9, 2025
9e90ff7
feat(csharp/src/Drivers/Apache): Add compression support for Spark, I…
kushaman Jul 10, 2025
a56528c
fix(csharp/src/Drivers/Databricks): Set GetObjectsPatternsRequireLowe…
jackyhu-db Jul 10, 2025
50addb4
fix(go/adbc/pkg): add PowerShell option to run when executing in a Wi…
davidhcoe Jul 10, 2025
2126e60
chore: fix typo (#3129)
daipom Jul 11, 2025
5a3bfcd
feat(csharp/src/Drivers/Databricks): Fix StatementTimeoutTest (#3133)
toddmeng-db Jul 11, 2025
241477e
feat(csharp/src/Drivers/Databricks): Remove redundant CloseOperation …
toddmeng-db Jul 11, 2025
bcd2d75
feat(csharp/src/Drivers/Databricks): Move DescribeTableExtended to ve…
toddmeng-db Jul 11, 2025
92c26ec
feat(rust/core): add function to load driver manifests (#3099)
zeroshade Jul 12, 2025
e8bfe17
fix(go/adbc/drivermgr): properly vendor toml++ (#3138)
zeroshade Jul 13, 2025
0fd80bc
chore(format): fix invalid Doxygen documentation (#3141)
rouault Jul 13, 2025
6148162
test(rust/core): ensure unset the env var before the test without the…
eitsupi Jul 13, 2025
442dce1
fix(rust/core): fix build errror on windows and enable ci for windows…
eitsupi Jul 14, 2025
00be00e
chore(csharp/test/Drivers/Databricks): Fix some test cases that have …
jackyhu-db Jul 14, 2025
4002336
chore(csharp/test/Drivers/Databricks): Add IsCITesting in DatabricksT…
jackyhu-db Jul 14, 2025
ef5aa5e
chore(csharp/test/Drivers/Databricks): Skip StatusPollerKeepsQueryAli…
jackyhu-db Jul 14, 2025
f3574fc
test(rust/core): use the temp-env package to test with env var (#3152)
eitsupi Jul 14, 2025
c0cc1dd
chore(rust): bump test-with from 0.15.2 to 0.15.3 in /rust (#3160)
dependabot[bot] Jul 15, 2025
d0cfdbc
chore(java): bump com.github.ben-manes.caffeine:caffeine from 3.2.1 t…
dependabot[bot] Jul 15, 2025
35b9a91
chore(java): bump com.google.errorprone:error_prone_core from 2.39.0 …
dependabot[bot] Jul 15, 2025
a7acf29
chore(go/adbc): bump golang.org/x/sync from 0.15.0 to 0.16.0 in /go/a…
dependabot[bot] Jul 15, 2025
34a3c50
chore(java): bump com.diffplug.spotless:spotless-maven-plugin from 2.…
dependabot[bot] Jul 15, 2025
8683993
chore(go/adbc): bump golang.org/x/tools from 0.34.0 to 0.35.0 in /go/…
dependabot[bot] Jul 15, 2025
e0e544f
chore(go/adbc): bump google.golang.org/api from 0.240.0 to 0.241.0 in…
dependabot[bot] Jul 15, 2025
f8ce11d
chore(rust): bump toml from 0.9.0 to 0.9.2 in /rust (#3163)
dependabot[bot] Jul 15, 2025
a7b546d
fix(csharp/src/Drivers/Databricks): correct tracing instrumentation f…
birschick-bq Jul 16, 2025
5338294
feat(csharp/test/Drivers/Databricks): Enable RunAsync option in TExec…
jackyhu-db Jul 16, 2025
fb9fca5
chore(rust/driver/datafusion)!: update to datafusion 48 (#3167)
mbrobbel Jul 17, 2025
65fd705
test(rust/driver/datafusion): don't use ffi for tests (#3172)
mbrobbel Jul 18, 2025
fab11bb
docs: generate driver status from README badges (#2890)
lidavidm Jul 18, 2025
ce56357
feat(go/adbc): add IngestStream helper for one-call ingestion and add…
Mandukhai-Alimaa Jul 18, 2025
ebb2fd0
fix(csharp/test/Drivers/Databricks): Change the default QueryTimeoutS…
jackyhu-db Jul 18, 2025
2528745
docs: add docs for driver manifests (#3176)
zeroshade Jul 21, 2025
593199d
chore(c/vendor): Update vendored nanoarrow to 0.7.0 (#2930)
paleolimbot Jul 21, 2025
49585fd
ci: keep testing sdists with manylinux2014 (#3184)
lidavidm Jul 22, 2025
e5c25e1
feat(csharp/test/Drivers/Databricks): Support token refresh to extend…
alexguo-db Jul 22, 2025
9e4e240
ci: bump Maven version used in nightly verification (#3185)
lidavidm Jul 22, 2025
34bc364
docs: minor edits for first version of driver manager docs (#3180)
amoeba Jul 22, 2025
cf68f9c
fix(csharp/test/Drivers/Databricks): Enrich RetryHttpHandler with oth…
alexguo-db Jul 22, 2025
a66d1e1
fix(csharp/test/Drivers/Databricks): Run token exchange in a backgrou…
alexguo-db Jul 22, 2025
cd2f264
fix(csharp/src/Drivers/Apache/Hive2): Remove unnecessary CloseOperati…
jackyhu-db Jul 23, 2025
298977a
fix(csharp/src/Drivers/BigQuery): Adjust default dataset id (#3187)
davidhcoe Jul 23, 2025
5cb4cf7
docs: fix typo in python/adbc_driver_postgresql/README.md (#3194)
amoeba Jul 24, 2025
04dbef5
feat(csharp/src/Drivers/Databricks): Use ArrowSchema for Response Sch…
toddmeng-db Jul 24, 2025
6182cdc
fix(csharp/test/Drivers/Databricks): Fix Pkfk Testcase (#3193)
toddmeng-db Jul 24, 2025
a4e32db
ci(rust): add test on windows with minimal deps versions (#3200)
eitsupi Jul 25, 2025
38dc738
fix(go/adbc/pkg): Run make regenerate to keep generated code in sync …
felipecrv Jul 25, 2025
9447523
feat(go/adbc/driver/bigquery): support service account impersonation …
yu-iskw Jul 26, 2025
e227b96
fix(go/adbc): Forward SQLSTATE and vendor code (#2801)
felipecrv Jul 28, 2025
c4c2977
chore: bump ruby/setup-ruby from 1.245.0 to 1.253.0 (#3205)
dependabot[bot] Jul 29, 2025
2ce7210
chore: bump google-github-actions/auth from 2.1.10 to 2.1.11 (#3207)
dependabot[bot] Jul 29, 2025
1056e64
chore(go/adbc): bump google.golang.org/grpc from 1.73.0 to 1.74.2 in …
dependabot[bot] Jul 29, 2025
a32a5e7
chore(java): bump com.microsoft.sqlserver:mssql-jdbc from 13.1.0.jre1…
dependabot[bot] Jul 29, 2025
9b359f3
chore(java): bump com.diffplug.spotless:spotless-maven-plugin from 2.…
dependabot[bot] Jul 29, 2025
d83d1e1
chore(go/adbc): bump github.com/apache/arrow-go/v18 from 18.3.1 to 18…
dependabot[bot] Jul 29, 2025
f0192b5
chore(go/adbc): bump modernc.org/sqlite from 1.38.0 to 1.38.1 in /go/…
dependabot[bot] Jul 29, 2025
e56cb1b
chore(go/adbc): bump google.golang.org/api from 0.241.0 to 0.243.0 in…
dependabot[bot] Jul 29, 2025
c00dbf4
chore(java): bump org.junit:junit-bom from 5.13.3 to 5.13.4 in /java …
dependabot[bot] Jul 29, 2025
ac90ff5
chore(rust): bump tokio from 1.46.1 to 1.47.0 in /rust (#3211)
dependabot[bot] Jul 30, 2025
b8e3e76
chore(java): bump com.google.errorprone:error_prone_core from 2.40.0 …
dependabot[bot] Jul 30, 2025
f41fa0d
fix(csharp/src/Drivers/Databricks): Add another fallback check of Get…
jackyhu-db Jul 30, 2025
4906532
feat(ruby): don't use adbc-arrow-glib (#3221)
kou Jul 30, 2025
314f009
docs: Fix pip install command for arrow-adbc-nightlies (#3222)
amoeba Jul 31, 2025
17b6ca9
feat(csharp/src/Apache.Arrow.Adbc/Tracing): allow ActivitySource tags…
birschick-bq Jul 31, 2025
7ff3364
feat(csharp/test/Drivers/Databricks): Add mandatory token exchange (#…
alexguo-db Jul 31, 2025
3b4ede4
docs: link to AdbcDriverInitFunc in how_manager.rst (#3227)
amoeba Aug 2, 2025
8f987fe
chore(rust/driver/datafusion): bump dependent datafusion and update m…
eitsupi Aug 4, 2025
003ed39
chore(rust): support arrow 56 (#3230)
eitsupi Aug 5, 2025
8b2e244
docs: clarify relationship specification.rst to adbc.h (#3226)
amoeba Aug 5, 2025
8775b20
fix(csharp/src/Drivers/Databricks): Set enable_run_async_thrift defau…
jackyhu-db Aug 5, 2025
0e3f485
chore: bump ruby/setup-ruby from 1.253.0 to 1.254.0 (#3237)
dependabot[bot] Aug 5, 2025
785ebdf
chore: bump google-github-actions/auth from 2.1.11 to 2.1.12 (#3236)
dependabot[bot] Aug 5, 2025
122a9a1
chore: bump docker/login-action from 3.4.0 to 3.5.0 (#3234)
dependabot[bot] Aug 5, 2025
5e9e19f
chore(go/adbc): bump google.golang.org/api from 0.243.0 to 0.244.0 in…
dependabot[bot] Aug 5, 2025
10ff466
chore(go/adbc): bump modernc.org/sqlite from 1.38.1 to 1.38.2 in /go/…
dependabot[bot] Aug 5, 2025
73890b6
feat(csharp/src/Drivers/Apache): Implement self signed ssl certificat…
sudhiremmadi Aug 5, 2025
15e161e
refactor(rust/core)!: move the driver_manager feature to the new adbc…
eitsupi Aug 5, 2025
0489d94
docs: improve go docs by adding a readme (#3204)
amoeba Aug 5, 2025
16269af
fix(c/driver_manager): use Driver.entrypoint as per docs (#3242)
zeroshade Aug 6, 2025
637fc28
fix(go/adbc/driver/bigquery): fix parsing repeated records with neste…
felipecrv Aug 7, 2025
6a8c2ae
fix(csharp/src/Drivers/BigQuery): add details for retried error messa…
davidhcoe Aug 7, 2025
c48f6fb
docs: fix invalid link in snowflake docs (#3246)
amoeba Aug 8, 2025
78b5c0e
fix(c/driver_manager): modify SYSTEM path behavior on macOS (#3250)
amoeba Aug 8, 2025
f0f36da
fix(csharp/src/Drivers/Databricks): Correct DatabricksCompositeReader…
toddmeng-db Aug 8, 2025
ba7f993
fix(csharp/src/Drivers/Databricks): Fix null pointer exception (#3261)
toddmeng-db Aug 9, 2025
a739955
test(c/driver_manager): Make DriverManifest::SetUp more resilient (#3…
amoeba Aug 10, 2025
d3d068e
fix(csharp/src/Drivers/Databricks): Reader Refactors (#3254)
toddmeng-db Aug 11, 2025
5f301d3
ci(rust): fix build issue on macos (#3264)
eitsupi Aug 12, 2025
864cb92
fix(rust/driver_manager): modify SYSTEM path behavior on macOS (#3252)
amoeba Aug 12, 2025
86fa773
chore: bump ruby/setup-ruby from 1.254.0 to 1.255.0 (#3273)
dependabot[bot] Aug 12, 2025
e004abd
chore(go/adbc): bump golang.org/x/tools from 0.35.0 to 0.36.0 in /go/…
dependabot[bot] Aug 12, 2025
d6c0144
chore(java): bump com.uber.nullaway:nullaway from 0.12.7 to 0.12.8 in…
dependabot[bot] Aug 12, 2025
0054b84
chore(go/adbc): bump google.golang.org/protobuf from 1.36.6 to 1.36.7…
dependabot[bot] Aug 12, 2025
d7c57ba
chore(java): bump org.assertj:assertj-core from 3.27.3 to 3.27.4 in /…
dependabot[bot] Aug 12, 2025
7ba29d2
chore(go/adbc): bump google.golang.org/api from 0.244.0 to 0.246.0 in…
dependabot[bot] Aug 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
docs: add docs for driver manifests (apache#3176)
With the driver manager implementations for C/C++, Go, Rust and Python
updated to utilize and leverage driver manifests, we should properly
document how manifests work and what the format is.

This change updates the docs to include a description of the driver
manifest file and the process used to search for a driver manifest or
driver given just a name. This includes the Load Flags and example code.

---------

Co-authored-by: Sutou Kouhei <[email protected]>
  • Loading branch information
zeroshade and kou authored Jul 21, 2025
commit 252874584280d849e02a095a12c67b4f5b5b2916
382 changes: 382 additions & 0 deletions docs/source/format/driver_manifests.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,382 @@
.. Licensed to the Apache Software Foundation (ASF) under one
.. or more contributor license agreements. See the NOTICE file
.. distributed with this work for additional information
.. regarding copyright ownership. The ASF licenses this file
.. to you under the Apache License, Version 2.0 (the
.. "License"); you may not use this file except in compliance
.. with the License. You may obtain a copy of the License at
..
.. http://www.apache.org/licenses/LICENSE-2.0
..
.. Unless required by applicable law or agreed to in writing,
.. software distributed under the License is distributed on an
.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
.. KIND, either express or implied. See the License for the
.. specific language governing permissions and limitations
.. under the License.

=================================
ADBC Driver Manager and Manifests
=================================

.. note:: This document focuses on scenarios that utilize the driver manager
to load drivers. The driver manager is not required to utilize ADBC
in general, but allows a convenient experience for dynamically
loading arbitrary drivers.

The ADBC driver manager is itself, an ADBC driver which simply loads another driver
dynamically and forwards the calls to the loaded driver. For more information on the
driver manager see :doc:`how_manager`.

There are essentially two ways to specify a driver for the driver manager to load:

1. Directly specifying the dynamic library to load
2. Referring to a driver manifest file which contains metadata along with the
location of the dynamic library to be loaded

When using the driver manager, you can either utilize the ``driver`` option to the
driver manager, or you can use functions in the language bindings which explicitly
load a driver by name.

.. note:: In addition to the ``driver`` option, there is also an ``entrypoint`` option
which can be used to specify the entrypoint function to call for populating
the driver function table. If the driver does not use the default entrypoint
function, it can be indicated with this option.

Directly Loading a Driver
=========================

The simplest mechanism for loading a driver via the driver manager is to provide a
direct file path to the dynamic library as the driver name.

.. tab-set::

.. tab-item:: C/C++
:sync: cpp

You can use the :c:func:`AdbcLoadDriver` function to load the driver directly or you can use it as a driver
itself via :c:struct:`AdbcDatabase`.

.. code-block:: cpp

// load directly
struct AdbcDriver driver;
struct AdbcError error;

std::memset(&driver, 0, sizeof(driver));
std::memset(&error, 0, sizeof(error));

auto status = AdbcLoadDriver("/path/to/libadbc_driver.so", nullptr,
ADBC_VERSION_1_1_0, &driver, &error);
// if status != ADBC_STATUS_OK then handle the error

// or use the Driver Manager as a driver itself
struct AdbcDatabase database;
struct AdbcError error;
std::memset(&database, 0, sizeof(database));
std::memset(&error, 0, sizeof(error));
auto status = AdbcDatabaseNew(&database, &error);
// check status
status = AdbcDatabaseSetOption(&database, "driver", "/path/to/libadbc_driver.so", &error);
// check status

.. tab-item:: GLib
:sync: glib

You can use it as a driver via ``GADBCDatabase``

.. code-block:: c

GError *error = NULL;
GADBCDatabase *database = gadbc_database_new(&error);
if (!database) {
/* handle error */
}
if (!gadbc_database_set_option(database, "driver", "/path/to/libadbc_driver.so", &error)) {
/* handle error */
}

.. tab-item:: Go
:sync: go

Loading a driver in Go is similar:

.. code-block:: go

import (
"context"

"github.com/apache/arrow-adbc/go/adbc"
"github.com/apache/arrow-adbc/go/adbc/drivermgr"
)

func main() {
var drv drivermgr.Driver
db, err := drv.NewDatabase(map[string]string{
"driver": "/path/to/libadbc_driver.so",
})
if err != nil {
// handle error
}
defer db.Close()

// ... do stuff
}

.. tab-item:: Python
:sync: python

You can use the ``DBAPI`` interface as follows:

.. code-block:: python

import adbc_driver_manager

with adbc_driver_manager.dbapi.connect(driver="/path/to/libadbc_driver.so") as conn:
# use the connection
pass

.. tab-item:: R
:sync: r

You can use the ``DBAPI`` interface as follows:

.. code-block:: r

library(adbcdrivermanager)
con <- adbc_driver("/path/to/libadbc_driver.so") |>
adbc_database_init(uri = "...") |>
adbc_connection_init()

.. tab-item:: Ruby
:sync: ruby

You can use the ``ADBC::Database`` as follows:

.. code-block:: ruby

require "adbc"

ADBC::Database.open(driver: "/path/to/libadbc_driver.so") do |database|
# use the database
end

.. tab-item:: Rust
:sync: rust

Rust has a ``ManagedDriver`` type with static methods for loading drivers:

.. code-block:: rust

use adbc_core::options::AdbcVersion;
use adbc_core::driver_manager::ManagedDriver;

fn get_driver() -> ManagedDriver {
ManagedDriver::load_dynamic_from_name("/path/to/libadbc_driver.so", None, AdbcVersion::V100).unwrap()
}

In addition to passing the full path to the dynamic library, you can also pass the
name of the dynamic library if it is on your ``LD_LIBRARY_PATH``. Such as using ``adbc_driver``
instead of ``/path/to/libadbc_driver.so``.

However, the requirement to having the path to the dynamic library or having it
on your ``LD_LIBRARY_PATH`` can prove difficult for ensuring security, reproducibility,
and ease of use. For this reason, there is the concept of a driver manifest.

Driver Manifests
================

A ``driver manifest`` is a `TOML`_ file that contains both metadata about the driver along with the location
of the shared library to load. The driver manager can then locate the manifest and utilize it to load the
driver if it was given the shared library path directly. This allows for more portable installations of
drivers, and sharing of configurations. Tools can even be created and written to automatically manage driver
installations.

.. _TOML: https://toml.io/en/

Manifest Structure
------------------

While most of the keys are optional, we define a set of keys and structure which are expected to be present in
a driver manifest. This provides for consistent handling of manifests by the driver manager implementations and
by tools that may be written to manage driver installations.

Below is an example of a driver manifest:

.. code-block:: toml

name = 'Driver Display Name'
version = '1.0.0' # driver version
publisher = 'string to identify the publisher'
license = 'Apache-2.0' # or otherwise
url = 'https://example.com' # URL with more info about the driver
# such as a github link or documentation.

[ADBC]
version = '1.1.0' # Maximum supported ADBC spec version

[ADBC.features]
supported = [] # list of strings such as 'bulk insert'
unsupported = [] # list of strings such as 'async'

[Driver]
entrypoint = 'AdbcDriverInit' # entrypoint to use if not using default
# You can provide just a single path
# shared = '/path/to/libadbc_driver.so'

# or you can provide platform-specific paths for scenarios where the driver
# is distributed with multiple platforms supported by a single package.
[Driver.shared]
# paths to shared libraries to load based on platform tuple
linux_amd64 = '/path/to/libadbc_driver.so'
osx_amd64 = '/path/to/libadbc_driver.dylib'
windows_amd64 = 'C:\\path\\to\\adbc_driver.dll'
# ... other platforms as needed

In general, the only *required* key is the ``Driver.shared`` key, which must exist and must either be
a string (single path) or a table of platform-specific paths. The ``Driver.shared`` key is the only key
needed to successfully load a driver manifest. The other keys are optional, but provide useful metadata
about the driver.

Manifest Location and Discovery
-------------------------------

When the driver manager is provided a driver name to load, there is defined behavior for how it will attempt
to locate the driver to load. This defined behavior will allow for consistent behavior across different
implementations of the driver manager and bindings, while also providing for flexibility in how drivers are installed.

Given the name of a driver, the name first has to be resolved to either a dynamic library to load, or a driver manifest
that contains the path to the dynamic library to load. The following flowchart describes how this resolution is done:

.. figure:: manifest_load.mmd.svg

Driver manager attempting to resolve the passed in driver name

Thus, if the driver name is a path to a file the driver manager will attempt to load that file directly. If there's no
extension provided, it will first look for a file with a ``.toml`` extension, and if that fails, it will look for the
extension appropriate to the platform being used (e.g., ``.so`` for Linux, ``.dylib`` for macOS, and ``.dll`` for Windows).

.. note:: If the driver name is a relative path, it will be resolved relative to the current working directory. As such, for security
reasons, this needs to be explicitly enabled by an option to enable relative paths, otherwise it will produce an error instead.

As you can see in the flowchart, if the driver name is a string which does not have an extension and is not a file path, the
driver manager will then search for a corresponding manifest file, before falling back seeing if ``LD_LIBRARY_PATH`` can find
a library with the name provided. Searching for a manifest file is done by looking for a file with the name provided, but with
a ``.toml`` extension (e.g. if you pass ``sqlite`` as the driver name, it will look for ``sqlite.toml``). Options are provided
to control which directories will be searched for manifests, with the behavior being slightly different based on the platform.

.. tab-set::

.. tab-item:: C/C++
:sync: cpp

The type :c:type:`AdbcLoadFlags` is a set of bitflags to control the directories to be searched. The flags are
* :c:macro:`ADBC_LOAD_FLAG_SEARCH_ENV` - search the environment variable ``ADBC_CONFIG_PATH``
* :c:macro:`ADBC_LOAD_FLAG_SEARCH_USER` - search the user configuration directory
* :c:macro:`ADBC_LOAD_FLAG_SEARCH_SYSTEM` - search the system configuration directory
* :c:macro:`ADBC_LOAD_FLAG_ALLOW_RELATIVE_PATHS` - allow a relative path to be provided
* :c:macro:`ADBC_LOAD_FLAG_DEFAULT` - default value with all flags set

These can either be provided to :c:func:`AdbcFindLoadDriver` or by using :c:func:`AdbcDriverManagerDatabaseSetLoadFlags`.

.. tab-item:: GLib
:sync: glib

The type ``GADBCLoadFlags`` is a set of bitflags to control the directories to be searched. The flags are
* ``GADBC_LOAD_SEARCH_ENV` - search the environment variable ``ADBC_CONFIG_PATH``
* ``GADBC_LOAD_FLAG_SEARCH_USER`` - search the user configuration directory
* ``GADBC_LOAD_FLAG_SEARCH_SYSTEM`` - search the system configuration directory
* ``GADBC_LOAD_FLAG_ALLOW_RELATIVE_PATHS`` - allow a relative path to be provided
* ``GADBC_LOAD_FLAG_DEFAULT`` - default value with all flags set

These can be provided by using ``gadbc_database_set_load_flags()``.

.. tab-item:: Go
:sync: go

The ``drivermgr`` package by default will use the default load flags, which enable searching the environment variable, user
configuration directory, and system configuration directory. You can set the flags to use by passing the option
``drivermgr.LoadFlagsOptionKey`` with the value being the ``strconv.Itoa`` of the flags you want to use when you call ``NewDatabase``
or ``NewDatabaseWithContext``. The flags are defined in the ``drivermgr`` package as constants:
* ``drivermgr.LoadFlagsSearchEnv`` - search the environment variable ``ADBC_CONFIG_PATH``
* ``drivermgr.LoadFlagsSearchUser`` - search the user configuration directory
* ``drivermgr.LoadFlagsSearchSystem`` - search the system configuration directory
* ``drivermgr.LoadFlagsAllowRelativePaths`` - allow a relative path to be used
* ``drivermgr.LoadFlagsDefault`` - default value with all flags set

.. tab-item:: Python
:sync: python

Passing the option ``load_flags`` as an option to ``AdbcDatabase`` (or via ``db_kwargs`` in ``adbc_driver_manager.dbapi.connect``) will
allow you to control the directories to be searched by using the value of the option as the bitmask for the load flag desired.

.. tab-item:: R
:sync: r

Use ``adbc_driver(... , load_flags = adbc_load_flags())`` to pass options to the driver manager
regarding how to locate drivers specified by manifest.

.. tab-item:: Ruby
:sync: ruby

The class ``ADBC::LoadFlags`` is a set of bitflags to control the directories to be searched. The flags are
* ``ADBC::LoadFlags::SEARCH_ENV` - search the environment variable ``ADBC_CONFIG_PATH``
* ``ADBC::LoadFlags::SEARCH_USER`` - search the user configuration directory
* ``ADBC::LoadFlags::SEARCH_SYSTEM`` - search the system configuration directory
* ``ADBC::LoadFlags::ALLOW_RELATIVE_PATHS`` - allow a relative path to be provided
* ``ADBC::LoadFlags::DEFAULT`` - default value with all flags set

These can be provided by using ``ADBC::Database#load_flags=``.
Passing the option ``load_flags`` as an option to ``AdbcDatabase`` (or via ``db_kwargs`` in ``adbc_driver_qmanager.dbapi.connect``) will
allow you to control the directories to be searched by using the value of the option as the bitmask for the load flag desired.

.. tab-item:: Rust
:sync: rust

The ``ManagedDriver`` type has a method ``load_dynamic_from_name`` which takes an optional ``load_flags`` parameter. The flags as a ``u32`` with
the type ``adbc_core::driver_manager::LoadFlags``, which has the following constants:
* `LOAD_FLAG_SEARCH_ENV` - search the environment variable ``ADBC_CONFIG_PATH``
* `LOAD_FLAG_SEARCH_USER` - search the user configuration directory
* `LOAD_FLAG_SEARCH_SYSTEM` - search the system configuration directory
* `LOAD_FLAG_ALLOW_RELATIVE_PATHS` - allow a relative path to be used
* `LOAD_FLAG_DEFAULT` - default value with all flags set

For unix-like platforms, (e.g. Linux, macOS), the driver manager will search the following directories based on the options provided, in
the given order:

#. If the ``LOAD_FLAG_SEARCH_ENV`` load option is set, then the environment variable ``ADBC_CONFIG_PATH`` will be searched

* ``ADBC_CONFIG_PATH`` is a colon-separated list of directories to search for ``${name}.toml``

#. If the ``LOAD_FLAG_SEARCH_USER`` load option is set, then a user-level configuration directory will be searched

* On macOS, this will be ``~/Library/Application Support/ADBC``
* On Linux (and other unix-like platforms), the ``XDG_CONFIG_HOME`` environment variable is checked first. If it is set, the driver manager
will search ``$XDG_CONFIG_HOME/adbc``, otherwise it will search ``~/.config/adbc``

#. If the ``LOAD_FLAG_SEARCH_SYSTEM`` load option is set, the driver manager will search ``/etc/adbc`` if it exists

Things are slightly different on Windows, where the driver manager will also search for driver information in the registry just as
would happen for ODBC drivers. The search for a manifest on windows would be the following:

#. If the ``LOAD_FLAG_SEARCH_ENV`` load option is set, then the environment variable ``ADBC_CONFIG_PATH`` will be searched

* ``ADBC_CONFIG_PATH`` is a semicolon-separated list of directories to search for ``${name}.toml``

#. If the ``LOAD_FLAG_SEARCH_USER`` load option is set, then a user-level configuration is searched for

* First, the registry is searched for the key ``HKEY_CURRENT_USER\SOFTWARE\ADBC\Drivers\${name}``. If it exists, then the following sub-keys
are used:

* ``name`` - the display name of the driver
* ``version`` - the version of the driver
* ``source`` - the source of the driver
* ``entrypoint`` - the entrypoint to use for the driver if a non-default entrypoint is needed
* ``driver`` - the path to the driver shared library

* If no registry key is found, then the directory ``%LOCAL_APPDATA%\ADBC\drivers`` is searched for ``${name}.toml``

#. If the ``LOAD_FLAG_SEARCH_SYSTEM`` load option is set, the driver manager will search for a system-level configuration

* The registry is searched for the key ``HKEY_LOCAL_MACHINE\SOFTWARE\ADBC\Drivers\${name}``. If it exists, then the same sub-keys
as above are used.
Loading