sqlspec 0.63.0__py3-none-any.whl → 0.64.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. sqlspec/__init__.py +193 -73
  2. sqlspec/_typing.py +4 -4
  3. sqlspec/adapters/adbc/_typing.py +30 -3
  4. sqlspec/adapters/adbc/config.py +41 -2
  5. sqlspec/adapters/adbc/core.py +97 -8
  6. sqlspec/adapters/adbc/data_dictionary.py +235 -237
  7. sqlspec/adapters/adbc/driver.py +0 -25
  8. sqlspec/adapters/aiomysql/__init__.py +2 -0
  9. sqlspec/adapters/aiomysql/_typing.py +19 -7
  10. sqlspec/adapters/aiomysql/adk/store.py +10 -11
  11. sqlspec/adapters/aiomysql/config.py +44 -16
  12. sqlspec/adapters/aiomysql/core.py +25 -5
  13. sqlspec/adapters/aiomysql/data_dictionary.py +1 -1
  14. sqlspec/adapters/aiomysql/driver.py +49 -38
  15. sqlspec/adapters/aiomysql/litestar/__init__.py +2 -2
  16. sqlspec/adapters/aiomysql/litestar/store.py +20 -6
  17. sqlspec/adapters/aiosqlite/__init__.py +2 -1
  18. sqlspec/adapters/aiosqlite/_typing.py +6 -2
  19. sqlspec/adapters/aiosqlite/adk/store.py +1 -1
  20. sqlspec/adapters/aiosqlite/config.py +16 -11
  21. sqlspec/adapters/aiosqlite/core.py +15 -3
  22. sqlspec/adapters/aiosqlite/data_dictionary.py +0 -1
  23. sqlspec/adapters/aiosqlite/driver.py +2 -23
  24. sqlspec/adapters/aiosqlite/events/__init__.py +2 -2
  25. sqlspec/adapters/aiosqlite/events/store.py +14 -1
  26. sqlspec/adapters/aiosqlite/litestar/__init__.py +2 -2
  27. sqlspec/adapters/aiosqlite/litestar/store.py +17 -1
  28. sqlspec/adapters/aiosqlite/pool.py +47 -14
  29. sqlspec/adapters/aiosqlite/type_converter.py +30 -30
  30. sqlspec/adapters/arrow_odbc/_typing.py +9 -4
  31. sqlspec/adapters/arrow_odbc/config.py +49 -14
  32. sqlspec/adapters/arrow_odbc/core.py +167 -10
  33. sqlspec/adapters/arrow_odbc/data_dictionary.py +31 -31
  34. sqlspec/adapters/arrow_odbc/driver.py +38 -3
  35. sqlspec/adapters/asyncmy/__init__.py +2 -0
  36. sqlspec/adapters/asyncmy/_typing.py +31 -25
  37. sqlspec/adapters/asyncmy/adk/store.py +10 -10
  38. sqlspec/adapters/asyncmy/config.py +46 -16
  39. sqlspec/adapters/asyncmy/core.py +19 -4
  40. sqlspec/adapters/asyncmy/data_dictionary.py +1 -2
  41. sqlspec/adapters/asyncmy/driver.py +48 -37
  42. sqlspec/adapters/asyncmy/litestar/__init__.py +2 -2
  43. sqlspec/adapters/asyncmy/litestar/store.py +21 -7
  44. sqlspec/adapters/asyncpg/__init__.py +2 -1
  45. sqlspec/adapters/asyncpg/_typing.py +47 -2
  46. sqlspec/adapters/asyncpg/adk/store.py +16 -3
  47. sqlspec/adapters/asyncpg/config.py +56 -20
  48. sqlspec/adapters/asyncpg/core.py +37 -4
  49. sqlspec/adapters/asyncpg/data_dictionary.py +100 -101
  50. sqlspec/adapters/asyncpg/driver.py +38 -40
  51. sqlspec/adapters/asyncpg/events/__init__.py +2 -2
  52. sqlspec/adapters/asyncpg/events/backend.py +45 -45
  53. sqlspec/adapters/asyncpg/events/store.py +21 -1
  54. sqlspec/adapters/asyncpg/litestar/__init__.py +2 -2
  55. sqlspec/adapters/asyncpg/litestar/store.py +20 -1
  56. sqlspec/adapters/bigquery/__init__.py +7 -1
  57. sqlspec/adapters/bigquery/_typing.py +28 -2
  58. sqlspec/adapters/bigquery/adk/store.py +1 -3
  59. sqlspec/adapters/bigquery/config.py +129 -28
  60. sqlspec/adapters/bigquery/core.py +146 -101
  61. sqlspec/adapters/bigquery/driver.py +11 -37
  62. sqlspec/adapters/bigquery/events/__init__.py +2 -2
  63. sqlspec/adapters/bigquery/events/store.py +17 -1
  64. sqlspec/adapters/bigquery/litestar/__init__.py +2 -2
  65. sqlspec/adapters/bigquery/litestar/store.py +20 -1
  66. sqlspec/adapters/cockroach_asyncpg/__init__.py +2 -0
  67. sqlspec/adapters/cockroach_asyncpg/_typing.py +10 -2
  68. sqlspec/adapters/cockroach_asyncpg/adk/store.py +1 -1
  69. sqlspec/adapters/cockroach_asyncpg/config.py +54 -13
  70. sqlspec/adapters/cockroach_asyncpg/core.py +79 -12
  71. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +97 -97
  72. sqlspec/adapters/cockroach_asyncpg/driver.py +47 -17
  73. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +2 -2
  74. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +21 -2
  75. sqlspec/adapters/cockroach_psycopg/__init__.py +2 -0
  76. sqlspec/adapters/cockroach_psycopg/_typing.py +20 -4
  77. sqlspec/adapters/cockroach_psycopg/adk/store.py +4 -4
  78. sqlspec/adapters/cockroach_psycopg/config.py +202 -83
  79. sqlspec/adapters/cockroach_psycopg/core.py +79 -12
  80. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +97 -97
  81. sqlspec/adapters/cockroach_psycopg/driver.py +96 -36
  82. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +6 -2
  83. sqlspec/adapters/cockroach_psycopg/litestar/store.py +21 -3
  84. sqlspec/adapters/duckdb/__init__.py +2 -1
  85. sqlspec/adapters/duckdb/_typing.py +27 -3
  86. sqlspec/adapters/duckdb/config.py +24 -23
  87. sqlspec/adapters/duckdb/core.py +245 -256
  88. sqlspec/adapters/duckdb/driver.py +26 -26
  89. sqlspec/adapters/duckdb/pool.py +61 -60
  90. sqlspec/adapters/mssql_python/_typing.py +9 -3
  91. sqlspec/adapters/mssql_python/adk/store.py +10 -11
  92. sqlspec/adapters/mssql_python/config.py +17 -16
  93. sqlspec/adapters/mssql_python/core.py +63 -3
  94. sqlspec/adapters/mssql_python/driver.py +26 -14
  95. sqlspec/adapters/mssql_python/type_converter.py +1 -0
  96. sqlspec/adapters/mysqlconnector/__init__.py +2 -0
  97. sqlspec/adapters/mysqlconnector/_typing.py +4 -4
  98. sqlspec/adapters/mysqlconnector/adk/store.py +13 -26
  99. sqlspec/adapters/mysqlconnector/config.py +53 -25
  100. sqlspec/adapters/mysqlconnector/core.py +17 -3
  101. sqlspec/adapters/mysqlconnector/data_dictionary.py +4 -4
  102. sqlspec/adapters/mysqlconnector/driver.py +24 -28
  103. sqlspec/adapters/mysqlconnector/litestar/__init__.py +6 -2
  104. sqlspec/adapters/mysqlconnector/litestar/store.py +24 -13
  105. sqlspec/adapters/oracledb/__init__.py +2 -1
  106. sqlspec/adapters/oracledb/_json_handlers.py +15 -4
  107. sqlspec/adapters/oracledb/_typing.py +29 -11
  108. sqlspec/adapters/oracledb/_uuid_handlers.py +36 -33
  109. sqlspec/adapters/oracledb/_vector_handlers.py +42 -29
  110. sqlspec/adapters/oracledb/adk/store.py +1 -2
  111. sqlspec/adapters/oracledb/config.py +13 -11
  112. sqlspec/adapters/oracledb/core.py +122 -35
  113. sqlspec/adapters/oracledb/driver.py +80 -81
  114. sqlspec/adapters/oracledb/events/__init__.py +10 -1
  115. sqlspec/adapters/oracledb/events/_hub.py +34 -73
  116. sqlspec/adapters/oracledb/events/backend.py +49 -94
  117. sqlspec/adapters/oracledb/events/store.py +74 -2
  118. sqlspec/adapters/oracledb/litestar/__init__.py +14 -2
  119. sqlspec/adapters/oracledb/litestar/store.py +65 -2
  120. sqlspec/adapters/psqlpy/__init__.py +2 -1
  121. sqlspec/adapters/psqlpy/_typing.py +34 -2
  122. sqlspec/adapters/psqlpy/adk/store.py +3 -10
  123. sqlspec/adapters/psqlpy/config.py +5 -6
  124. sqlspec/adapters/psqlpy/core.py +69 -102
  125. sqlspec/adapters/psqlpy/data_dictionary.py +100 -100
  126. sqlspec/adapters/psqlpy/driver.py +36 -47
  127. sqlspec/adapters/psqlpy/events/__init__.py +8 -2
  128. sqlspec/adapters/psqlpy/events/store.py +17 -1
  129. sqlspec/adapters/psqlpy/litestar/__init__.py +2 -2
  130. sqlspec/adapters/psqlpy/litestar/store.py +20 -1
  131. sqlspec/adapters/psqlpy/type_converter.py +1 -1
  132. sqlspec/adapters/psycopg/__init__.py +2 -0
  133. sqlspec/adapters/psycopg/_typing.py +63 -0
  134. sqlspec/adapters/psycopg/adk/store.py +19 -4
  135. sqlspec/adapters/psycopg/config.py +175 -85
  136. sqlspec/adapters/psycopg/core.py +56 -51
  137. sqlspec/adapters/psycopg/data_dictionary.py +100 -102
  138. sqlspec/adapters/psycopg/driver.py +47 -67
  139. sqlspec/adapters/psycopg/events/__init__.py +6 -1
  140. sqlspec/adapters/psycopg/events/store.py +22 -1
  141. sqlspec/adapters/psycopg/litestar/__init__.py +2 -2
  142. sqlspec/adapters/psycopg/litestar/store.py +20 -2
  143. sqlspec/adapters/psycopg/type_converter.py +5 -4
  144. sqlspec/adapters/pymssql/__init__.py +2 -1
  145. sqlspec/adapters/pymssql/_typing.py +15 -3
  146. sqlspec/adapters/pymssql/adk/store.py +10 -11
  147. sqlspec/adapters/pymssql/config.py +13 -7
  148. sqlspec/adapters/pymssql/core.py +22 -0
  149. sqlspec/adapters/pymssql/driver.py +7 -17
  150. sqlspec/adapters/pymssql/pool.py +47 -7
  151. sqlspec/adapters/pymysql/__init__.py +2 -0
  152. sqlspec/adapters/pymysql/_typing.py +33 -2
  153. sqlspec/adapters/pymysql/adk/store.py +7 -7
  154. sqlspec/adapters/pymysql/config.py +43 -10
  155. sqlspec/adapters/pymysql/core.py +27 -5
  156. sqlspec/adapters/pymysql/data_dictionary.py +3 -2
  157. sqlspec/adapters/pymysql/driver.py +49 -22
  158. sqlspec/adapters/pymysql/litestar/__init__.py +2 -2
  159. sqlspec/adapters/pymysql/litestar/store.py +24 -8
  160. sqlspec/adapters/pymysql/pool.py +47 -7
  161. sqlspec/adapters/spanner/__init__.py +2 -0
  162. sqlspec/adapters/spanner/_typing.py +87 -0
  163. sqlspec/adapters/spanner/adk/store.py +4 -5
  164. sqlspec/adapters/spanner/config.py +78 -24
  165. sqlspec/adapters/spanner/core.py +24 -10
  166. sqlspec/adapters/spanner/driver.py +11 -33
  167. sqlspec/adapters/spanner/litestar/__init__.py +2 -2
  168. sqlspec/adapters/spanner/litestar/store.py +21 -4
  169. sqlspec/adapters/spanner/type_converter.py +77 -34
  170. sqlspec/adapters/sqlite/__init__.py +2 -1
  171. sqlspec/adapters/sqlite/_typing.py +11 -3
  172. sqlspec/adapters/sqlite/adk/store.py +1 -1
  173. sqlspec/adapters/sqlite/config.py +16 -5
  174. sqlspec/adapters/sqlite/core.py +16 -2
  175. sqlspec/adapters/sqlite/driver.py +20 -23
  176. sqlspec/adapters/sqlite/events/__init__.py +2 -2
  177. sqlspec/adapters/sqlite/events/store.py +14 -1
  178. sqlspec/adapters/sqlite/litestar/__init__.py +2 -2
  179. sqlspec/adapters/sqlite/litestar/store.py +17 -1
  180. sqlspec/adapters/sqlite/pool.py +155 -75
  181. sqlspec/adapters/sqlite/type_converter.py +30 -30
  182. sqlspec/builder/__init__.py +215 -90
  183. sqlspec/builder/_base.py +55 -54
  184. sqlspec/builder/_column.py +21 -6
  185. sqlspec/builder/_ddl.py +12 -12
  186. sqlspec/builder/_dml.py +0 -15
  187. sqlspec/builder/_expression_wrappers.py +8 -1
  188. sqlspec/builder/_factory.py +103 -103
  189. sqlspec/builder/_insert.py +1 -1
  190. sqlspec/builder/_join.py +100 -100
  191. sqlspec/builder/_locking.py +12 -12
  192. sqlspec/builder/_merge.py +36 -41
  193. sqlspec/builder/_parsing_utils.py +36 -38
  194. sqlspec/builder/_select.py +49 -58
  195. sqlspec/builder/_temporal.py +48 -48
  196. sqlspec/builder/_vector_distance.py +19 -19
  197. sqlspec/config.py +145 -229
  198. sqlspec/core/__init__.py +18 -1
  199. sqlspec/core/_cursor.py +263 -0
  200. sqlspec/core/_operators.py +161 -0
  201. sqlspec/core/_ordering.py +151 -0
  202. sqlspec/core/_pagination.py +27 -3
  203. sqlspec/core/_pipeline.py +73 -73
  204. sqlspec/core/_pool.py +12 -12
  205. sqlspec/core/compiler.py +4 -10
  206. sqlspec/core/correlation.py +0 -1
  207. sqlspec/core/filters.py +407 -29
  208. sqlspec/core/hashing.py +28 -23
  209. sqlspec/core/parameters/__init__.py +4 -1
  210. sqlspec/core/parameters/_converter.py +389 -123
  211. sqlspec/core/parameters/_declared.py +5 -5
  212. sqlspec/core/parameters/_processor.py +302 -86
  213. sqlspec/core/parameters/_registry.py +36 -36
  214. sqlspec/core/parameters/_transformers.py +116 -116
  215. sqlspec/core/parameters/_types.py +29 -29
  216. sqlspec/core/parameters/_validator.py +113 -1
  217. sqlspec/core/query_modifiers.py +39 -28
  218. sqlspec/core/splitter.py +53 -53
  219. sqlspec/core/sqlcommenter.py +96 -96
  220. sqlspec/core/statement.py +127 -62
  221. sqlspec/data_dictionary/_registry.py +9 -9
  222. sqlspec/data_dictionary/_types.py +29 -29
  223. sqlspec/data_dictionary/dialects/mysql/config.py +32 -32
  224. sqlspec/dialects/postgres/_operators.py +17 -17
  225. sqlspec/dialects/spanner/_generators.py +0 -14
  226. sqlspec/dialects/spanner/_parsers.py +46 -46
  227. sqlspec/driver/__init__.py +8 -0
  228. sqlspec/driver/_async.py +0 -40
  229. sqlspec/driver/_common.py +94 -92
  230. sqlspec/driver/_exception_handler.py +32 -32
  231. sqlspec/driver/_stream.py +22 -27
  232. sqlspec/driver/_sync.py +1 -41
  233. sqlspec/exceptions.py +5 -5
  234. sqlspec/extensions/adk/artifact/service.py +0 -1
  235. sqlspec/extensions/adk/converters.py +0 -15
  236. sqlspec/extensions/adk/maintenance.py +74 -74
  237. sqlspec/extensions/adk/memory/converters.py +0 -2
  238. sqlspec/extensions/adk/service.py +0 -2
  239. sqlspec/extensions/events/__init__.py +96 -32
  240. sqlspec/extensions/events/_channel.py +29 -0
  241. sqlspec/extensions/events/_payload.py +19 -19
  242. sqlspec/extensions/events/_store.py +5 -3
  243. sqlspec/extensions/fastapi/providers.py +164 -26
  244. sqlspec/extensions/litestar/plugin.py +3 -5
  245. sqlspec/extensions/litestar/providers.py +183 -30
  246. sqlspec/extensions/litestar/store.py +0 -1
  247. sqlspec/extensions/starlette/extension.py +0 -2
  248. sqlspec/extensions/starlette/middleware.py +1 -1
  249. sqlspec/loader.py +12 -12
  250. sqlspec/migrations/__init__.py +72 -13
  251. sqlspec/migrations/base.py +42 -17
  252. sqlspec/migrations/commands.py +7 -7
  253. sqlspec/migrations/runner.py +7 -3
  254. sqlspec/migrations/schema.py +5 -1
  255. sqlspec/migrations/squash.py +0 -11
  256. sqlspec/migrations/tracker.py +24 -7
  257. sqlspec/migrations/version.py +9 -9
  258. sqlspec/observability/_observer.py +55 -55
  259. sqlspec/observability/_sampling.py +0 -3
  260. sqlspec/service/__init__.py +5 -0
  261. sqlspec/{service.py → service/_base.py} +386 -358
  262. sqlspec/service/_core.py +517 -0
  263. sqlspec/storage/_paths.py +33 -33
  264. sqlspec/storage/backends/base.py +19 -19
  265. sqlspec/storage/backends/fsspec.py +0 -1
  266. sqlspec/storage/backends/obstore.py +75 -75
  267. sqlspec/storage/errors.py +29 -29
  268. sqlspec/storage/pipeline.py +136 -136
  269. sqlspec/storage/registry.py +0 -3
  270. sqlspec/utils/config_tools.py +164 -75
  271. sqlspec/utils/correlation.py +6 -6
  272. sqlspec/utils/deprecation.py +13 -13
  273. sqlspec/utils/env.py +17 -17
  274. sqlspec/utils/module_loader.py +30 -39
  275. sqlspec/utils/schema.py +112 -127
  276. sqlspec/utils/serializers/_json.py +42 -45
  277. sqlspec/utils/serializers/_schema.py +92 -92
  278. sqlspec/utils/sync_tools.py +90 -90
  279. sqlspec/utils/type_converters.py +49 -49
  280. sqlspec/utils/type_guards.py +28 -34
  281. {sqlspec-0.63.0.dist-info → sqlspec-0.64.0.dist-info}/METADATA +5 -4
  282. {sqlspec-0.63.0.dist-info → sqlspec-0.64.0.dist-info}/RECORD +285 -280
  283. {sqlspec-0.63.0.dist-info → sqlspec-0.64.0.dist-info}/WHEEL +0 -0
  284. {sqlspec-0.63.0.dist-info → sqlspec-0.64.0.dist-info}/entry_points.txt +0 -0
  285. {sqlspec-0.63.0.dist-info → sqlspec-0.64.0.dist-info}/licenses/LICENSE +0 -0
sqlspec/__init__.py CHANGED
@@ -13,79 +13,98 @@ _warnings.filterwarnings(
13
13
  )
14
14
  del _warnings
15
15
 
16
+ from importlib import import_module
17
+ from importlib.machinery import EXTENSION_SUFFIXES
16
18
  from typing import TYPE_CHECKING, Any
17
19
 
18
- from sqlspec import adapters, base, builder, core, driver, exceptions, extensions, loader, migrations, typing, utils
19
20
  from sqlspec.__metadata__ import __version__
20
- from sqlspec.base import SQLSpec
21
- from sqlspec.builder import (
22
- Column,
23
- ColumnExpression,
24
- CreateTable,
25
- Delete,
26
- DropTable,
27
- FunctionColumn,
28
- Insert,
29
- Merge,
30
- QueryBuilder,
31
- Select,
32
- SQLFactory,
33
- Update,
34
- sql,
35
- )
36
- from sqlspec.config import AsyncDatabaseConfig, SyncDatabaseConfig
37
- from sqlspec.core import (
38
- SQL,
39
- ArrowResult,
40
- CacheConfig,
41
- CacheStats,
42
- ParameterConverter,
43
- ParameterDeclaration,
44
- ParameterProcessor,
45
- ParameterStyle,
46
- ParameterStyleConfig,
47
- ParamTypeMatcher,
48
- ProcessedState,
49
- SQLResult,
50
- StackOperation,
51
- StackResult,
52
- Statement,
53
- StatementConfig,
54
- StatementStack,
55
- matches_param_type,
56
- register_param_type,
57
- resolve_param_type,
58
- )
59
- from sqlspec.core import filters as filters
60
- from sqlspec.driver import AsyncDriverAdapterBase, ExecutionResult, SyncDriverAdapterBase
61
- from sqlspec.exceptions import StackExecutionError
62
- from sqlspec.extensions.events import (
63
- AsyncEventChannel,
64
- AsyncEventListener,
65
- EventMessage,
66
- SyncEventChannel,
67
- SyncEventListener,
68
- )
69
- from sqlspec.loader import SQLFile, SQLFileLoader
70
- from sqlspec.observability import (
71
- LoggingConfig,
72
- ObservabilityConfig,
73
- ObservabilityRuntime,
74
- RedactionConfig,
75
- StatementEvent,
76
- StatementObserver,
77
- TelemetryConfig,
78
- create_event,
79
- create_statement_observer,
80
- default_statement_observer,
81
- format_statement_event,
82
- )
83
- from sqlspec.typing import ConnectionT, PoolT, SchemaT, StatementParameters, SupportedSchemaModel
21
+ from sqlspec.utils import logging as _logging
84
22
  from sqlspec.utils.logging import suppress_erroneous_sqlglot_log_messages
85
- from sqlspec.utils.uuids import nanoid, uuid4, uuid6, uuid7
23
+
24
+ _COMPILED = (_logging.__file__ or "").endswith(tuple(EXTENSION_SUFFIXES))
86
25
 
87
26
  if TYPE_CHECKING:
88
- from sqlspec import dialects
27
+ from sqlspec import (
28
+ adapters,
29
+ base,
30
+ builder,
31
+ core,
32
+ dialects,
33
+ driver,
34
+ exceptions,
35
+ extensions,
36
+ loader,
37
+ migrations,
38
+ typing,
39
+ utils,
40
+ )
41
+ from sqlspec import config as config
42
+ from sqlspec import observability as observability
43
+ from sqlspec.base import SQLSpec
44
+ from sqlspec.builder import (
45
+ Column,
46
+ ColumnExpression,
47
+ CreateTable,
48
+ Delete,
49
+ DropTable,
50
+ FunctionColumn,
51
+ Insert,
52
+ Merge,
53
+ QueryBuilder,
54
+ Select,
55
+ SQLFactory,
56
+ Update,
57
+ sql,
58
+ )
59
+ from sqlspec.config import AsyncDatabaseConfig, SyncDatabaseConfig
60
+ from sqlspec.core import (
61
+ SQL,
62
+ ArrowResult,
63
+ CacheConfig,
64
+ CacheStats,
65
+ ParameterConverter,
66
+ ParameterDeclaration,
67
+ ParameterProcessor,
68
+ ParameterStyle,
69
+ ParameterStyleConfig,
70
+ ParamTypeMatcher,
71
+ ProcessedState,
72
+ SQLResult,
73
+ StackOperation,
74
+ StackResult,
75
+ Statement,
76
+ StatementConfig,
77
+ StatementStack,
78
+ matches_param_type,
79
+ register_param_type,
80
+ resolve_param_type,
81
+ )
82
+ from sqlspec.core import filters as filters
83
+ from sqlspec.driver import AsyncDriverAdapterBase, ExecutionResult, SyncDriverAdapterBase
84
+ from sqlspec.exceptions import StackExecutionError
85
+ from sqlspec.extensions.events import (
86
+ AsyncEventChannel,
87
+ AsyncEventListener,
88
+ EventMessage,
89
+ SyncEventChannel,
90
+ SyncEventListener,
91
+ )
92
+ from sqlspec.loader import SQLFile, SQLFileLoader
93
+ from sqlspec.observability import (
94
+ LoggingConfig,
95
+ ObservabilityConfig,
96
+ ObservabilityRuntime,
97
+ RedactionConfig,
98
+ StatementEvent,
99
+ StatementObserver,
100
+ TelemetryConfig,
101
+ create_event,
102
+ create_statement_observer,
103
+ default_statement_observer,
104
+ format_statement_event,
105
+ )
106
+ from sqlspec.typing import ConnectionT, PoolT, SchemaT, StatementParameters, SupportedSchemaModel
107
+ from sqlspec.utils.uuids import nanoid, uuid4, uuid6, uuid7
89
108
 
90
109
  __all__ = (
91
110
  "SQL",
@@ -174,10 +193,111 @@ __all__ = (
174
193
  suppress_erroneous_sqlglot_log_messages()
175
194
 
176
195
 
177
- def __getattr__(name: str) -> "Any":
178
- if name == "dialects":
179
- import importlib
196
+ _EXPORTS: dict[str, tuple[str, str | None]] = {
197
+ "ArrowResult": ("sqlspec.core", "ArrowResult"),
198
+ "AsyncDatabaseConfig": ("sqlspec.config", "AsyncDatabaseConfig"),
199
+ "AsyncDriverAdapterBase": ("sqlspec.driver", "AsyncDriverAdapterBase"),
200
+ "AsyncEventChannel": ("sqlspec.extensions.events", "AsyncEventChannel"),
201
+ "AsyncEventListener": ("sqlspec.extensions.events", "AsyncEventListener"),
202
+ "CacheConfig": ("sqlspec.core", "CacheConfig"),
203
+ "CacheStats": ("sqlspec.core", "CacheStats"),
204
+ "Column": ("sqlspec.builder", "Column"),
205
+ "ColumnExpression": ("sqlspec.builder", "ColumnExpression"),
206
+ "ConnectionT": ("sqlspec.typing", "ConnectionT"),
207
+ "CreateTable": ("sqlspec.builder", "CreateTable"),
208
+ "Delete": ("sqlspec.builder", "Delete"),
209
+ "DropTable": ("sqlspec.builder", "DropTable"),
210
+ "EventMessage": ("sqlspec.extensions.events", "EventMessage"),
211
+ "ExecutionResult": ("sqlspec.driver", "ExecutionResult"),
212
+ "FunctionColumn": ("sqlspec.builder", "FunctionColumn"),
213
+ "Insert": ("sqlspec.builder", "Insert"),
214
+ "LoggingConfig": ("sqlspec.observability", "LoggingConfig"),
215
+ "Merge": ("sqlspec.builder", "Merge"),
216
+ "ObservabilityConfig": ("sqlspec.observability", "ObservabilityConfig"),
217
+ "ObservabilityRuntime": ("sqlspec.observability", "ObservabilityRuntime"),
218
+ "ParamTypeMatcher": ("sqlspec.core", "ParamTypeMatcher"),
219
+ "ParameterConverter": ("sqlspec.core", "ParameterConverter"),
220
+ "ParameterDeclaration": ("sqlspec.core", "ParameterDeclaration"),
221
+ "ParameterProcessor": ("sqlspec.core", "ParameterProcessor"),
222
+ "ParameterStyle": ("sqlspec.core", "ParameterStyle"),
223
+ "ParameterStyleConfig": ("sqlspec.core", "ParameterStyleConfig"),
224
+ "PoolT": ("sqlspec.typing", "PoolT"),
225
+ "ProcessedState": ("sqlspec.core", "ProcessedState"),
226
+ "QueryBuilder": ("sqlspec.builder", "QueryBuilder"),
227
+ "RedactionConfig": ("sqlspec.observability", "RedactionConfig"),
228
+ "SQL": ("sqlspec.core", "SQL"),
229
+ "SQLFactory": ("sqlspec.builder", "SQLFactory"),
230
+ "SQLFile": ("sqlspec.loader", "SQLFile"),
231
+ "SQLFileLoader": ("sqlspec.loader", "SQLFileLoader"),
232
+ "SQLResult": ("sqlspec.core", "SQLResult"),
233
+ "SQLSpec": ("sqlspec.base", "SQLSpec"),
234
+ "SchemaT": ("sqlspec.typing", "SchemaT"),
235
+ "Select": ("sqlspec.builder", "Select"),
236
+ "StackExecutionError": ("sqlspec.exceptions", "StackExecutionError"),
237
+ "StackOperation": ("sqlspec.core", "StackOperation"),
238
+ "StackResult": ("sqlspec.core", "StackResult"),
239
+ "Statement": ("sqlspec.core", "Statement"),
240
+ "StatementConfig": ("sqlspec.core", "StatementConfig"),
241
+ "StatementEvent": ("sqlspec.observability", "StatementEvent"),
242
+ "StatementObserver": ("sqlspec.observability", "StatementObserver"),
243
+ "StatementParameters": ("sqlspec.typing", "StatementParameters"),
244
+ "StatementStack": ("sqlspec.core", "StatementStack"),
245
+ "SupportedSchemaModel": ("sqlspec.typing", "SupportedSchemaModel"),
246
+ "SyncDatabaseConfig": ("sqlspec.config", "SyncDatabaseConfig"),
247
+ "SyncDriverAdapterBase": ("sqlspec.driver", "SyncDriverAdapterBase"),
248
+ "SyncEventChannel": ("sqlspec.extensions.events", "SyncEventChannel"),
249
+ "SyncEventListener": ("sqlspec.extensions.events", "SyncEventListener"),
250
+ "TelemetryConfig": ("sqlspec.observability", "TelemetryConfig"),
251
+ "Update": ("sqlspec.builder", "Update"),
252
+ "adapters": ("sqlspec.adapters", None),
253
+ "base": ("sqlspec.base", None),
254
+ "builder": ("sqlspec.builder", None),
255
+ "config": ("sqlspec.config", None),
256
+ "core": ("sqlspec.core", None),
257
+ "create_event": ("sqlspec.observability", "create_event"),
258
+ "create_statement_observer": ("sqlspec.observability", "create_statement_observer"),
259
+ "default_statement_observer": ("sqlspec.observability", "default_statement_observer"),
260
+ "dialects": ("sqlspec.dialects", None),
261
+ "driver": ("sqlspec.driver", None),
262
+ "exceptions": ("sqlspec.exceptions", None),
263
+ "extensions": ("sqlspec.extensions", None),
264
+ "filters": ("sqlspec.core", "filters"),
265
+ "format_statement_event": ("sqlspec.observability", "format_statement_event"),
266
+ "loader": ("sqlspec.loader", None),
267
+ "matches_param_type": ("sqlspec.core", "matches_param_type"),
268
+ "migrations": ("sqlspec.migrations", None),
269
+ "nanoid": ("sqlspec.utils.uuids", "nanoid"),
270
+ "observability": ("sqlspec.observability", None),
271
+ "register_param_type": ("sqlspec.core", "register_param_type"),
272
+ "resolve_param_type": ("sqlspec.core", "resolve_param_type"),
273
+ "sql": ("sqlspec.builder._factory", "sql"),
274
+ "typing": ("sqlspec.typing", None),
275
+ "utils": ("sqlspec.utils", None),
276
+ "uuid4": ("sqlspec.utils.uuids", "uuid4"),
277
+ "uuid6": ("sqlspec.utils.uuids", "uuid6"),
278
+ "uuid7": ("sqlspec.utils.uuids", "uuid7"),
279
+ }
280
+
281
+
282
+ def __getattr__(name: str) -> Any:
283
+ target = _EXPORTS.get(name)
284
+ if target is None:
285
+ msg = f"module {__name__!r} has no attribute {name!r}"
286
+ raise AttributeError(msg)
287
+ module_name, attribute = target
288
+ module = import_module(module_name)
289
+ value = module if attribute is None else getattr(module, attribute)
290
+ globals()[name] = value
291
+ return value
292
+
293
+
294
+ def __dir__() -> list[str]:
295
+ return sorted(set(globals()) | _EXPORTS.keys())
296
+
180
297
 
181
- return importlib.import_module("sqlspec.dialects")
182
- msg = f"module {__name__!r} has no attribute {name!r}"
183
- raise AttributeError(msg)
298
+ # Native cross-module initialization is not protected by Python import locks.
299
+ # Retain eager exports in compiled wheels until mypyc supports lazy concurrency.
300
+ if _COMPILED:
301
+ for _name in __all__:
302
+ if _name not in globals():
303
+ __getattr__(_name)
sqlspec/_typing.py CHANGED
@@ -336,10 +336,6 @@ def attrs_define_stub(*args: Any, **kwargs: Any) -> Any: # noqa: ARG001
336
336
  return _attrs_define_identity
337
337
 
338
338
 
339
- def _attrs_define_identity(cls: Any) -> Any:
340
- return cls
341
-
342
-
343
339
  def attrs_field_stub(*args: Any, **kwargs: Any) -> Any: # noqa: ARG001
344
340
  """Placeholder implementation"""
345
341
  return None
@@ -751,3 +747,7 @@ def __dir__() -> "list[str]":
751
747
  """Expose the public surface for autocomplete and ``dir()``."""
752
748
 
753
749
  return sorted(set(globals()) | set(__all__))
750
+
751
+
752
+ def _attrs_define_identity(cls: Any) -> Any:
753
+ return cls
@@ -9,9 +9,13 @@ import contextlib
9
9
  from typing import TYPE_CHECKING, Any
10
10
 
11
11
  from adbc_driver_manager import Error as _AdbcNativeError
12
+ from adbc_driver_manager import NotSupportedError as AdbcNotSupportedError
13
+ from adbc_driver_manager import OperationalError as AdbcOperationalError
12
14
  from adbc_driver_manager.dbapi import Connection
13
15
  from adbc_driver_manager.dbapi import Cursor as _AdbcRawCursor
14
16
 
17
+ from sqlspec.typing import import_optional_attr
18
+
15
19
  _AdbcConnection = Connection
16
20
 
17
21
  if TYPE_CHECKING:
@@ -19,6 +23,8 @@ if TYPE_CHECKING:
19
23
  from types import TracebackType
20
24
  from typing import TypeAlias
21
25
 
26
+ from adbc_driver_flightsql import DatabaseOptions as AdbcFlightSqlDatabaseOptions
27
+
22
28
  from sqlspec.adapters.adbc.driver import AdbcDriver
23
29
  from sqlspec.core import StatementConfig
24
30
 
@@ -31,7 +37,16 @@ if not TYPE_CHECKING:
31
37
  AdbcRawCursor = _AdbcRawCursor
32
38
  AdbcNativeError = _AdbcNativeError
33
39
 
34
- __all__ = ("AdbcConnection", "AdbcCursor", "AdbcNativeError", "AdbcRawCursor", "AdbcSessionContext")
40
+ __all__ = (
41
+ "AdbcConnection",
42
+ "AdbcCursor",
43
+ "AdbcFlightSqlDatabaseOptions",
44
+ "AdbcNativeError",
45
+ "AdbcNotSupportedError",
46
+ "AdbcOperationalError",
47
+ "AdbcRawCursor",
48
+ "AdbcSessionContext",
49
+ )
35
50
 
36
51
 
37
52
  class AdbcCursor:
@@ -77,7 +92,7 @@ class AdbcSessionContext:
77
92
  def __init__(
78
93
  self,
79
94
  acquire_connection: "Callable[[], Any]",
80
- release_connection: "Callable[[Any], Any]",
95
+ release_connection: "Callable[..., Any]",
81
96
  statement_config: "StatementConfig",
82
97
  driver_features: "dict[str, Any]",
83
98
  prepare_driver: "Callable[[AdbcDriver], AdbcDriver]",
@@ -108,6 +123,18 @@ class AdbcSessionContext:
108
123
  self, exc_type: "type[BaseException] | None", exc_val: "BaseException | None", exc_tb: "TracebackType | None"
109
124
  ) -> "bool | None":
110
125
  if self._connection is not None:
111
- self._release_connection(self._connection)
126
+ self._release_connection(self._connection, exc_type=exc_type, exc_val=exc_val, exc_tb=exc_tb)
112
127
  self._connection = None
113
128
  return None
129
+
130
+
131
+ def __getattr__(name: str) -> Any:
132
+ """Load Flight SQL options only when that optional driver is used."""
133
+ if name != "AdbcFlightSqlDatabaseOptions":
134
+ msg = f"module {__name__!r} has no attribute {name!r}"
135
+ raise AttributeError(msg)
136
+ value = import_optional_attr("adbc_driver_flightsql", "DatabaseOptions")
137
+ if value is None:
138
+ msg = "Cannot import DatabaseOptions from adbc_driver_flightsql"
139
+ raise ImportError(msg)
140
+ return value
@@ -25,7 +25,7 @@ from sqlspec.core.config_runtime import (
25
25
  resolve_postgres_extension_state,
26
26
  resolve_runtime_statement_config,
27
27
  )
28
- from sqlspec.driver._sync import SyncPoolConnectionContext, SyncPoolSessionFactory
28
+ from sqlspec.driver import SyncPoolConnectionContext, SyncPoolSessionFactory
29
29
  from sqlspec.exceptions import ImproperConfigurationError
30
30
  from sqlspec.extensions.events import EventRuntimeHints
31
31
  from sqlspec.utils.config_tools import normalize_connection_config
@@ -44,6 +44,11 @@ class AdbcConnectionParams(TypedDict):
44
44
  """ADBC connection parameters."""
45
45
 
46
46
  uri: NotRequired[str]
47
+ dsn: NotRequired[str]
48
+ url: NotRequired[str]
49
+ connection_string: NotRequired[str]
50
+ db: NotRequired[str]
51
+ path: NotRequired[str]
47
52
  driver_name: NotRequired[str]
48
53
  db_kwargs: NotRequired[dict[str, Any]]
49
54
  conn_kwargs: NotRequired[dict[str, Any]]
@@ -241,7 +246,41 @@ class AdbcConfig(NoPoolSyncConfig[AdbcConnection, AdbcDriver]):
241
246
  observability_config: Adapter-level observability overrides for lifecycle hooks and observers
242
247
  **kwargs: Additional keyword arguments passed to the base configuration.
243
248
  """
244
- self.connection_config = normalize_connection_config(connection_config)
249
+ config_dict = normalize_connection_config(connection_config)
250
+ if "uri" not in config_dict:
251
+ uri = (
252
+ config_dict.pop("url", None)
253
+ or config_dict.pop("dsn", None)
254
+ or config_dict.pop("connection_string", None)
255
+ )
256
+ if uri is not None:
257
+ config_dict["uri"] = uri
258
+ else:
259
+ config_dict.pop("url", None)
260
+ config_dict.pop("dsn", None)
261
+ config_dict.pop("connection_string", None)
262
+
263
+ driver_name = config_dict.get("driver_name")
264
+ if (driver_name in {"sqlite", "adbc_driver_sqlite"} or driver_name is None) and "uri" not in config_dict:
265
+ db_path = (
266
+ config_dict.pop("database", None)
267
+ or config_dict.pop("db", None)
268
+ or config_dict.pop("path", None)
269
+ or config_dict.pop("file", None)
270
+ )
271
+ if db_path is not None:
272
+ config_dict["uri"] = db_path
273
+ elif driver_name in {"duckdb", "adbc_driver_duckdb"} and "path" not in config_dict:
274
+ duck_path = (
275
+ config_dict.pop("database", None)
276
+ or config_dict.pop("db", None)
277
+ or config_dict.pop("file", None)
278
+ or config_dict.pop("path", None)
279
+ )
280
+ if duck_path is not None:
281
+ config_dict["path"] = duck_path
282
+
283
+ self.connection_config = config_dict
245
284
  self._pgvector_available: bool | None = None
246
285
  self._paradedb_available: bool | None = None
247
286
  self._pg_textsearch_available: bool | None = None
@@ -76,6 +76,7 @@ __all__ = (
76
76
  "handle_postgres_rollback",
77
77
  "is_postgres_dialect",
78
78
  "is_postgres_extension_active",
79
+ "is_shared_object_driver",
79
80
  "normalize_driver_path",
80
81
  "normalize_postgres_empty_parameters",
81
82
  "normalize_script_rowcount",
@@ -170,7 +171,13 @@ _PARAMETER_STYLES_BY_KEYWORD: "tuple[tuple[str, tuple[tuple[str, ...], str]], ..
170
171
  ("snowflake", (("qmark", "numeric"), "qmark")),
171
172
  )
172
173
 
173
- _BIGQUERY_DB_KWARGS_FIELDS: "tuple[str, ...]" = ("project_id", "dataset_id", "token")
174
+ _BIGQUERY_DB_KWARGS_OPTIONS: "tuple[tuple[str, str], ...]" = (
175
+ ("project_id", "adbc.bigquery.sql.project_id"),
176
+ ("dataset_id", "adbc.bigquery.sql.dataset_id"),
177
+ ("token", "adbc.bigquery.sql.auth.refresh_token"),
178
+ )
179
+ _SHARED_OBJECT_SUFFIXES: "tuple[str, ...]" = (".so", ".dylib", ".dll")
180
+ _DRIVER_MANAGER_CONNECT: Final[str] = "adbc_driver_manager.dbapi.connect"
174
181
  _FLIGHTSQL_DB_KWARGS_FIELDS: "tuple[str, ...]" = ("username", "password")
175
182
  _FLIGHTSQL_TLS_SKIP_VERIFY_KEY: Final[str] = "adbc.flight.sql.client_option.tls_skip_verify"
176
183
  _FLIGHTSQL_AUTHORIZATION_HEADER_KEY: Final[str] = "adbc.flight.sql.authorization_header"
@@ -273,9 +280,27 @@ def detect_postgres_extensions(
273
280
  return False, False, False
274
281
 
275
282
 
283
+ def is_shared_object_driver(driver_name: str) -> bool:
284
+ """Return whether a driver name points at a shared library rather than a module.
285
+
286
+ Args:
287
+ driver_name: Raw driver name or path from configuration.
288
+
289
+ Returns:
290
+ True when the value is a filesystem path to a driver shared object.
291
+ """
292
+ stripped = driver_name.strip()
293
+ if not stripped:
294
+ return False
295
+ lowered = stripped.lower()
296
+ return lowered.endswith(_SHARED_OBJECT_SUFFIXES) or "/" in stripped or "\\" in stripped
297
+
298
+
276
299
  def normalize_driver_path(driver_name: str) -> str:
277
300
  """Normalize a driver name to an importable connect function path."""
278
301
  stripped = driver_name.strip()
302
+ if is_shared_object_driver(stripped):
303
+ return _DRIVER_MANAGER_CONNECT
279
304
  if stripped.endswith(".dbapi.connect"):
280
305
  return stripped
281
306
  if stripped.endswith(".dbapi"):
@@ -320,6 +345,8 @@ def driver_kind_from_uri(uri: str) -> "str | None":
320
345
  def resolve_driver_name(driver_name: str | None, uri: str | None) -> str:
321
346
  """Resolve and normalize the driver name."""
322
347
  if isinstance(driver_name, str):
348
+ if is_shared_object_driver(driver_name):
349
+ return _DRIVER_MANAGER_CONNECT
323
350
  lowered_driver = driver_name.lower()
324
351
  alias = _DRIVER_ALIASES.get(lowered_driver)
325
352
  if alias is not None:
@@ -336,7 +363,13 @@ def resolve_driver_name(driver_name: str | None, uri: str | None) -> str:
336
363
 
337
364
  def resolve_driver_name_from_config(connection_config: "Mapping[str, Any]") -> str:
338
365
  """Resolve and normalize the driver name from a connection config mapping."""
339
- return resolve_driver_name(connection_config.get("driver_name"), connection_config.get("uri"))
366
+ uri = (
367
+ connection_config.get("uri")
368
+ or connection_config.get("url")
369
+ or connection_config.get("dsn")
370
+ or connection_config.get("connection_string")
371
+ )
372
+ return resolve_driver_name(connection_config.get("driver_name"), uri)
340
373
 
341
374
 
342
375
  def resolve_driver_connect_func(driver_name: str | None, uri: str | None) -> "Callable[..., Any]":
@@ -360,9 +393,14 @@ def resolve_driver_connect_func(driver_name: str | None, uri: str | None) -> "Ca
360
393
 
361
394
 
362
395
  def resolve_dialect_from_driver_path(driver_path: str) -> str:
363
- """Get the SQL dialect type based on the driver path."""
396
+ """Get the SQL dialect type based on the driver path.
397
+
398
+ Only the final path segment is considered, because a directory on the way to
399
+ the driver can carry the name of an unrelated database.
400
+ """
401
+ candidate = driver_path.replace("\\", "/").rsplit("/", 1)[-1] or driver_path
364
402
  for keyword, dialect in _DRIVER_PATH_KEYWORDS_TO_DIALECT:
365
- if keyword in driver_path:
403
+ if keyword in candidate:
366
404
  return dialect
367
405
  return "sqlite"
368
406
 
@@ -382,7 +420,15 @@ def resolve_dialect_from_config(connection_config: "Mapping[str, Any]") -> str:
382
420
  if isinstance(driver_name, str) and driver_name.lower() in {"gizmosql", "gizmo"}:
383
421
  return "duckdb"
384
422
 
385
- uri = connection_config.get("uri")
423
+ if isinstance(driver_name, str) and is_shared_object_driver(driver_name):
424
+ return resolve_dialect_from_driver_path(driver_name.lower())
425
+
426
+ uri = (
427
+ connection_config.get("uri")
428
+ or connection_config.get("url")
429
+ or connection_config.get("dsn")
430
+ or connection_config.get("connection_string")
431
+ )
386
432
  if isinstance(uri, str):
387
433
  lowered_uri = uri.lower()
388
434
  if lowered_uri.startswith(("gizmosql://", "gizmo://", "grpc+tls://")):
@@ -422,6 +468,15 @@ def build_connection_config(connection_config: "Mapping[str, Any]") -> "dict[str
422
468
  """
423
469
  config = dict(connection_config)
424
470
 
471
+ if "uri" not in config:
472
+ uri_alias = config.pop("url", None) or config.pop("dsn", None) or config.pop("connection_string", None)
473
+ if uri_alias is not None:
474
+ config["uri"] = uri_alias
475
+ else:
476
+ config.pop("url", None)
477
+ config.pop("dsn", None)
478
+ config.pop("connection_string", None)
479
+
425
480
  driver_name = config.get("driver_name")
426
481
  uri = config.get("uri")
427
482
  driver_kind: str | None = None
@@ -430,6 +485,29 @@ def build_connection_config(connection_config: "Mapping[str, Any]") -> "dict[str
430
485
  if driver_kind is None and isinstance(uri, str):
431
486
  driver_kind = driver_kind_from_uri(uri)
432
487
 
488
+ if (driver_kind == "sqlite" or driver_kind is None) and "uri" not in config:
489
+ db_path = (
490
+ config.pop("database", None)
491
+ or config.pop("db", None)
492
+ or config.pop("path", None)
493
+ or config.pop("file", None)
494
+ )
495
+ if db_path is not None:
496
+ config["uri"] = db_path
497
+ uri = db_path
498
+ if driver_kind is None:
499
+ driver_kind = "sqlite"
500
+
501
+ if driver_kind == "duckdb" and "path" not in config:
502
+ duck_path = (
503
+ config.pop("database", None)
504
+ or config.pop("db", None)
505
+ or config.pop("file", None)
506
+ or config.pop("path", None)
507
+ )
508
+ if duck_path is not None:
509
+ config["path"] = duck_path
510
+
433
511
  if isinstance(uri, str) and driver_kind == "sqlite" and uri.startswith("sqlite://"):
434
512
  config["uri"] = uri[9:]
435
513
  if isinstance(uri, str) and driver_kind == "duckdb" and uri.startswith("duckdb://"):
@@ -440,18 +518,29 @@ def build_connection_config(connection_config: "Mapping[str, Any]") -> "dict[str
440
518
  if legacy_entrypoint is not None:
441
519
  config.setdefault("entrypoint", legacy_entrypoint)
442
520
 
521
+ uses_driver_manager = (
522
+ resolve_driver_name(
523
+ driver_name if isinstance(driver_name, str) else None, uri if isinstance(uri, str) else None
524
+ )
525
+ == _DRIVER_MANAGER_CONNECT
526
+ )
527
+ if not uses_driver_manager:
528
+ config.pop("entrypoint", None)
529
+
443
530
  if driver_kind in {"gizmosql", "flightsql"}:
444
531
  _lift_flightsql_db_kwargs(config)
445
532
  elif driver_kind == "bigquery":
446
533
  db_kwargs = config.get("db_kwargs")
447
534
  db_kwargs_dict: dict[str, Any] = dict(db_kwargs) if isinstance(db_kwargs, dict) else {}
448
- for param in _BIGQUERY_DB_KWARGS_FIELDS:
535
+ for param, option in _BIGQUERY_DB_KWARGS_OPTIONS:
449
536
  if param in config:
450
- db_kwargs_dict[param] = config.pop(param)
537
+ db_kwargs_dict[option] = config.pop(param)
451
538
  if db_kwargs_dict:
452
539
  config["db_kwargs"] = db_kwargs_dict
453
540
 
454
541
  config.pop("driver_name", None)
542
+ if uses_driver_manager and isinstance(driver_name, str) and "driver" not in config:
543
+ config["driver"] = driver_name.strip()
455
544
 
456
545
  return config
457
546
 
@@ -1299,7 +1388,7 @@ def _prepare_batch_with_casts(
1299
1388
 
1300
1389
  def _resolve_flightsql_db_kwargs_keys() -> "tuple[str, str]":
1301
1390
  try:
1302
- from adbc_driver_flightsql import DatabaseOptions
1391
+ from sqlspec.adapters.adbc._typing import AdbcFlightSqlDatabaseOptions as DatabaseOptions
1303
1392
  except ImportError:
1304
1393
  return _FLIGHTSQL_TLS_SKIP_VERIFY_KEY, _FLIGHTSQL_AUTHORIZATION_HEADER_KEY
1305
1394
  return DatabaseOptions.TLS_SKIP_VERIFY.value, DatabaseOptions.AUTHORIZATION_HEADER.value