sqlspec 0.9.1__tar.gz → 0.10.0__tar.gz

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.

Potentially problematic release.


This version of sqlspec might be problematic. Click here for more details.

Files changed (147) hide show
  1. {sqlspec-0.9.1 → sqlspec-0.10.0}/PKG-INFO +8 -3
  2. {sqlspec-0.9.1 → sqlspec-0.10.0}/README.md +6 -2
  3. {sqlspec-0.9.1 → sqlspec-0.10.0}/pyproject.toml +3 -3
  4. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/__init__.py +2 -1
  5. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/adbc/__init__.py +2 -1
  6. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/adbc/config.py +7 -13
  7. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/adbc/driver.py +37 -30
  8. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/aiosqlite/__init__.py +2 -1
  9. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/aiosqlite/config.py +10 -12
  10. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/aiosqlite/driver.py +36 -31
  11. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/asyncmy/__init__.py +2 -1
  12. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/asyncmy/driver.py +34 -31
  13. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/asyncpg/config.py +1 -3
  14. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/asyncpg/driver.py +7 -3
  15. sqlspec-0.10.0/sqlspec/adapters/bigquery/__init__.py +4 -0
  16. sqlspec-0.10.0/sqlspec/adapters/bigquery/config/__init__.py +3 -0
  17. sqlspec-0.10.0/sqlspec/adapters/bigquery/config/_common.py +40 -0
  18. sqlspec-0.10.0/sqlspec/adapters/bigquery/config/_sync.py +87 -0
  19. sqlspec-0.10.0/sqlspec/adapters/bigquery/driver.py +701 -0
  20. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/duckdb/__init__.py +2 -1
  21. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/duckdb/config.py +17 -18
  22. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/duckdb/driver.py +38 -30
  23. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/oracledb/__init__.py +8 -1
  24. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/oracledb/config/_asyncio.py +7 -8
  25. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/oracledb/config/_sync.py +6 -7
  26. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/oracledb/driver.py +65 -62
  27. sqlspec-0.10.0/sqlspec/adapters/psqlpy/__init__.py +9 -0
  28. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/psqlpy/config.py +5 -5
  29. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/psqlpy/driver.py +34 -28
  30. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/psycopg/__init__.py +8 -1
  31. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/psycopg/config/__init__.py +10 -0
  32. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/psycopg/config/_async.py +6 -7
  33. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/psycopg/config/_sync.py +7 -8
  34. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/psycopg/driver.py +63 -53
  35. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/sqlite/__init__.py +2 -1
  36. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/sqlite/config.py +12 -11
  37. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/sqlite/driver.py +36 -29
  38. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/base.py +1 -66
  39. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/exceptions.py +9 -0
  40. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/extensions/litestar/config.py +3 -11
  41. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/extensions/litestar/handlers.py +2 -1
  42. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/extensions/litestar/plugin.py +4 -2
  43. sqlspec-0.10.0/sqlspec/mixins.py +156 -0
  44. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/typing.py +19 -1
  45. sqlspec-0.10.0/tests/integration/test_adapters/test_bigquery/conftest.py +31 -0
  46. sqlspec-0.10.0/tests/integration/test_adapters/test_bigquery/test_connection.py +14 -0
  47. sqlspec-0.10.0/tests/integration/test_adapters/test_bigquery/test_driver.py +288 -0
  48. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_aiosqlite/test_config.py +0 -3
  49. {sqlspec-0.9.1 → sqlspec-0.10.0}/uv.lock +6 -4
  50. {sqlspec-0.9.1 → sqlspec-0.10.0}/.gitignore +0 -0
  51. {sqlspec-0.9.1 → sqlspec-0.10.0}/.pre-commit-config.yaml +0 -0
  52. {sqlspec-0.9.1 → sqlspec-0.10.0}/CONTRIBUTING.rst +0 -0
  53. {sqlspec-0.9.1 → sqlspec-0.10.0}/LICENSE +0 -0
  54. {sqlspec-0.9.1 → sqlspec-0.10.0}/Makefile +0 -0
  55. {sqlspec-0.9.1 → sqlspec-0.10.0}/NOTICE +0 -0
  56. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/__metadata__.py +0 -0
  57. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/_serialization.py +0 -0
  58. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/_typing.py +0 -0
  59. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/__init__.py +0 -0
  60. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/asyncmy/config.py +0 -0
  61. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/asyncpg/__init__.py +0 -0
  62. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/oracledb/config/__init__.py +0 -0
  63. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/oracledb/config/_common.py +0 -0
  64. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/adapters/psycopg/config/_common.py +0 -0
  65. {sqlspec-0.9.1/sqlspec/adapters/psqlpy → sqlspec-0.10.0/sqlspec/extensions}/__init__.py +0 -0
  66. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/extensions/litestar/__init__.py +0 -0
  67. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/extensions/litestar/_utils.py +0 -0
  68. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/filters.py +0 -0
  69. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/py.typed +0 -0
  70. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/statement.py +0 -0
  71. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/utils/__init__.py +0 -0
  72. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/utils/deprecation.py +0 -0
  73. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/utils/fixtures.py +0 -0
  74. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/utils/module_loader.py +0 -0
  75. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/utils/sync_tools.py +0 -0
  76. {sqlspec-0.9.1 → sqlspec-0.10.0}/sqlspec/utils/text.py +0 -0
  77. {sqlspec-0.9.1/sqlspec/extensions → sqlspec-0.10.0/tests}/__init__.py +0 -0
  78. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/conftest.py +0 -0
  79. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/fixtures/__init__.py +0 -0
  80. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/fixtures/example_usage.py +0 -0
  81. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/fixtures/sql_utils.py +0 -0
  82. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/__init__.py +0 -0
  83. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/__init__.py +0 -0
  84. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_adbc/__init__.py +0 -0
  85. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_adbc/conftest.py +0 -0
  86. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_adbc/test_connection.py +0 -0
  87. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_adbc/test_driver_bigquery.py +0 -0
  88. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_adbc/test_driver_duckdb.py +0 -0
  89. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_adbc/test_driver_postgres.py +0 -0
  90. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_adbc/test_driver_sqlite.py +0 -0
  91. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_aiosqlite/__init__.py +0 -0
  92. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_aiosqlite/test_connection.py +0 -0
  93. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_aiosqlite/test_driver.py +0 -0
  94. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_asyncmy/__init__.py +0 -0
  95. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_asyncmy/test_connection.py +0 -0
  96. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_asyncmy/test_driver.py +0 -0
  97. {sqlspec-0.9.1/tests → sqlspec-0.10.0/tests/integration/test_adapters/test_asyncpg}/__init__.py +0 -0
  98. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_asyncpg/test_connection.py +0 -0
  99. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_asyncpg/test_driver.py +0 -0
  100. {sqlspec-0.9.1/tests/integration/test_adapters/test_asyncpg → sqlspec-0.10.0/tests/integration/test_adapters/test_bigquery}/__init__.py +0 -0
  101. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_duckdb/__init__.py +0 -0
  102. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_duckdb/test_connection.py +0 -0
  103. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_duckdb/test_driver.py +0 -0
  104. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_oracledb/__init__.py +0 -0
  105. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_oracledb/test_connection.py +0 -0
  106. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_oracledb/test_driver_async.py +0 -0
  107. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_oracledb/test_driver_sync.py +0 -0
  108. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_psqlpy/__init__.py +0 -0
  109. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_psqlpy/test_connection.py +0 -0
  110. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_psqlpy/test_driver.py +0 -0
  111. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_psycopg/__init__.py +0 -0
  112. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_psycopg/test_connection.py +0 -0
  113. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_psycopg/test_driver.py +0 -0
  114. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_sqlite/__init__.py +0 -0
  115. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_sqlite/test_connection.py +0 -0
  116. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/integration/test_adapters/test_sqlite/test_driver.py +0 -0
  117. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/__init__.py +0 -0
  118. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/__init__.py +0 -0
  119. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_adbc/__init__.py +0 -0
  120. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_adbc/test_config.py +0 -0
  121. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_aiosqlite/__init__.py +0 -0
  122. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_asyncmy/__init__.py +0 -0
  123. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_asyncmy/test_config.py +0 -0
  124. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_asyncpg/__init__.py +0 -0
  125. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_asyncpg/test_config.py +0 -0
  126. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_duckdb/__init__.py +0 -0
  127. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_duckdb/test_config.py +0 -0
  128. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_oracledb/__init__.py +0 -0
  129. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_oracledb/test_async_config.py +0 -0
  130. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_oracledb/test_sync_config.py +0 -0
  131. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_psycopg/__init__.py +0 -0
  132. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_psycopg/test_async_config.py +0 -0
  133. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_psycopg/test_sync_config.py +0 -0
  134. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_sqlite/__init__.py +0 -0
  135. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_adapters/test_sqlite/test_config.py +0 -0
  136. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_base.py +0 -0
  137. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_typing.py +0 -0
  138. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_utils/__init__.py +0 -0
  139. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_utils/test_module_loader.py +0 -0
  140. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_utils/test_sync_tools.py +0 -0
  141. {sqlspec-0.9.1 → sqlspec-0.10.0}/tests/unit/test_utils/test_text.py +0 -0
  142. {sqlspec-0.9.1 → sqlspec-0.10.0}/tools/__init__.py +0 -0
  143. {sqlspec-0.9.1 → sqlspec-0.10.0}/tools/build_docs.py +0 -0
  144. {sqlspec-0.9.1 → sqlspec-0.10.0}/tools/pypi_readme.py +0 -0
  145. {sqlspec-0.9.1 → sqlspec-0.10.0}/tools/sphinx_ext/__init__.py +0 -0
  146. {sqlspec-0.9.1 → sqlspec-0.10.0}/tools/sphinx_ext/changelog.py +0 -0
  147. {sqlspec-0.9.1 → sqlspec-0.10.0}/tools/sphinx_ext/missing_references.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlspec
3
- Version: 0.9.1
3
+ Version: 0.10.0
4
4
  Summary: SQL Experiments in Python
5
5
  Author-email: Cody Fincher <cody@litestar.dev>
6
6
  Maintainer-email: Litestar Developers <hello@litestar.dev>
@@ -41,6 +41,7 @@ Requires-Dist: oracledb; extra == 'oracledb'
41
41
  Provides-Extra: orjson
42
42
  Requires-Dist: orjson; extra == 'orjson'
43
43
  Provides-Extra: performance
44
+ Requires-Dist: msgspec; extra == 'performance'
44
45
  Requires-Dist: sqlglot[rs]; extra == 'performance'
45
46
  Provides-Extra: psqlpy
46
47
  Requires-Dist: psqlpy; extra == 'psqlpy'
@@ -131,7 +132,11 @@ etl_config = sql.add_config(
131
132
  )
132
133
  )
133
134
  with sql.provide_session(etl_config) as session:
134
- result = session.select_one("SELECT open_prompt(?)", data.message, schema_type=ChatMessage)
135
+ result = session.select_one(
136
+ "SELECT open_prompt(?)",
137
+ "Can you write a haiku about DuckDB?",
138
+ schema_type=ChatMessage
139
+ )
135
140
  print(result) # result is a ChatMessage pydantic model
136
141
  ```
137
142
 
@@ -249,7 +254,7 @@ This list is not final. If you have a driver you'd like to see added, please ope
249
254
  | [`oracledb`](https://oracle.github.io/python-oracledb/) | Oracle | Async | ✅ |
250
255
  | [`oracledb`](https://oracle.github.io/python-oracledb/) | Oracle | Sync | ✅ |
251
256
  | [`duckdb`](https://duckdb.org/) | DuckDB | Sync | ✅ |
252
- | [`bigquery`](https://googleapis.dev/python/bigquery/latest/index.html) | BigQuery | Sync | 🗓️ |
257
+ | [`bigquery`](https://googleapis.dev/python/bigquery/latest/index.html) | BigQuery | Sync | |
253
258
  | [`spanner`](https://googleapis.dev/python/spanner/latest/index.html) | Spanner | Sync | 🗓️ |
254
259
  | [`sqlserver`](https://docs.microsoft.com/en-us/sql/connect/python/pyodbc/python-sql-driver-for-pyodbc?view=sql-server-ver16) | SQL Server | Sync | 🗓️ |
255
260
  | [`mysql`](https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysql-connector-python.html) | MySQL | Sync | 🗓️ |
@@ -70,7 +70,11 @@ etl_config = sql.add_config(
70
70
  )
71
71
  )
72
72
  with sql.provide_session(etl_config) as session:
73
- result = session.select_one("SELECT open_prompt(?)", data.message, schema_type=ChatMessage)
73
+ result = session.select_one(
74
+ "SELECT open_prompt(?)",
75
+ "Can you write a haiku about DuckDB?",
76
+ schema_type=ChatMessage
77
+ )
74
78
  print(result) # result is a ChatMessage pydantic model
75
79
  ```
76
80
 
@@ -188,7 +192,7 @@ This list is not final. If you have a driver you'd like to see added, please ope
188
192
  | [`oracledb`](https://oracle.github.io/python-oracledb/) | Oracle | Async | ✅ |
189
193
  | [`oracledb`](https://oracle.github.io/python-oracledb/) | Oracle | Sync | ✅ |
190
194
  | [`duckdb`](https://duckdb.org/) | DuckDB | Sync | ✅ |
191
- | [`bigquery`](https://googleapis.dev/python/bigquery/latest/index.html) | BigQuery | Sync | 🗓️ |
195
+ | [`bigquery`](https://googleapis.dev/python/bigquery/latest/index.html) | BigQuery | Sync | |
192
196
  | [`spanner`](https://googleapis.dev/python/spanner/latest/index.html) | Spanner | Sync | 🗓️ |
193
197
  | [`sqlserver`](https://docs.microsoft.com/en-us/sql/connect/python/pyodbc/python-sql-driver-for-pyodbc?view=sql-server-ver16) | SQL Server | Sync | 🗓️ |
194
198
  | [`mysql`](https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysql-connector-python.html) | MySQL | Sync | 🗓️ |
@@ -7,7 +7,7 @@ maintainers = [{ name = "Litestar Developers", email = "hello@litestar.dev" }]
7
7
  name = "sqlspec"
8
8
  readme = "README.md"
9
9
  requires-python = ">=3.9, <4.0"
10
- version = "0.9.1"
10
+ version = "0.10.0"
11
11
 
12
12
  [project.optional-dependencies]
13
13
  adbc = ["adbc_driver_manager", "pyarrow"]
@@ -24,7 +24,7 @@ msgspec = ["msgspec"]
24
24
  nanoid = ["fastnanoid>=0.4.1"]
25
25
  oracledb = ["oracledb"]
26
26
  orjson = ["orjson"]
27
- performance = ["sqlglot[rs]"]
27
+ performance = ["sqlglot[rs]", "msgspec"]
28
28
  psqlpy = ["psqlpy"]
29
29
  psycopg = ["psycopg[binary,pool]"]
30
30
  pydantic = ["pydantic", "pydantic-extra-types"]
@@ -109,7 +109,7 @@ packages = ["sqlspec"]
109
109
  allow_dirty = true
110
110
  commit = false
111
111
  commit_args = "--no-verify"
112
- current_version = "0.9.1"
112
+ current_version = "0.10.0"
113
113
  ignore_missing_files = false
114
114
  ignore_missing_version = false
115
115
  message = "chore(release): bump to v{new_version}"
@@ -1,4 +1,4 @@
1
- from sqlspec import adapters, base, exceptions, extensions, filters, typing, utils
1
+ from sqlspec import adapters, base, exceptions, extensions, filters, mixins, typing, utils
2
2
  from sqlspec.__metadata__ import __version__
3
3
  from sqlspec.base import SQLSpec
4
4
 
@@ -10,6 +10,7 @@ __all__ = (
10
10
  "exceptions",
11
11
  "extensions",
12
12
  "filters",
13
+ "mixins",
13
14
  "typing",
14
15
  "utils",
15
16
  )
@@ -1,7 +1,8 @@
1
1
  from sqlspec.adapters.adbc.config import AdbcConfig
2
- from sqlspec.adapters.adbc.driver import AdbcDriver
2
+ from sqlspec.adapters.adbc.driver import AdbcConnection, AdbcDriver
3
3
 
4
4
  __all__ = (
5
5
  "AdbcConfig",
6
+ "AdbcConnection",
6
7
  "AdbcDriver",
7
8
  )
@@ -2,9 +2,7 @@ from contextlib import contextmanager
2
2
  from dataclasses import dataclass, field
3
3
  from typing import TYPE_CHECKING, Any, Callable, Optional, Union, cast
4
4
 
5
- from adbc_driver_manager.dbapi import Connection
6
-
7
- from sqlspec.adapters.adbc.driver import AdbcDriver
5
+ from sqlspec.adapters.adbc.driver import AdbcConnection, AdbcDriver
8
6
  from sqlspec.base import NoPoolSyncConfig
9
7
  from sqlspec.exceptions import ImproperConfigurationError
10
8
  from sqlspec.typing import Empty, EmptyType
@@ -18,7 +16,7 @@ __all__ = ("AdbcConfig",)
18
16
 
19
17
 
20
18
  @dataclass
21
- class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
19
+ class AdbcConfig(NoPoolSyncConfig["AdbcConnection", "AdbcDriver"]):
22
20
  """Configuration for ADBC connections.
23
21
 
24
22
  This class provides configuration options for ADBC database connections using the
@@ -33,20 +31,16 @@ class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
33
31
  """Additional database-specific connection parameters"""
34
32
  conn_kwargs: "Optional[dict[str, Any]]" = None
35
33
  """Additional database-specific connection parameters"""
36
- connection_type: "type[Connection]" = field(init=False, default_factory=lambda: Connection)
34
+ connection_type: "type[AdbcConnection]" = field(init=False, default_factory=lambda: AdbcConnection)
37
35
  """Type of the connection object"""
38
36
  driver_type: "type[AdbcDriver]" = field(init=False, default_factory=lambda: AdbcDriver) # type: ignore[type-abstract,unused-ignore]
39
37
  """Type of the driver object"""
40
- pool_instance: None = field(init=False, default=None)
38
+ pool_instance: None = field(init=False, default=None, hash=False)
41
39
  """No connection pool is used for ADBC connections"""
42
- _is_in_memory: bool = field(init=False, default=False)
43
- """Flag indicating if the connection is for an in-memory database"""
44
40
 
45
41
  def _set_adbc(self) -> str: # noqa: PLR0912
46
42
  """Identify the driver type based on the URI (if provided) or preset driver name.
47
43
 
48
- Also sets the `_is_in_memory` flag for specific in-memory URIs.
49
-
50
44
  Raises:
51
45
  ImproperConfigurationError: If the driver name is not recognized or supported.
52
46
 
@@ -143,7 +137,7 @@ class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
143
137
  config["conn_kwargs"] = conn_kwargs
144
138
  return config
145
139
 
146
- def _get_connect_func(self) -> "Callable[..., Connection]":
140
+ def _get_connect_func(self) -> "Callable[..., AdbcConnection]":
147
141
  self._set_adbc()
148
142
  driver_path = cast("str", self.driver_name)
149
143
  try:
@@ -166,7 +160,7 @@ class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
166
160
  raise ImproperConfigurationError(msg)
167
161
  return connect_func # type: ignore[no-any-return]
168
162
 
169
- def create_connection(self) -> "Connection":
163
+ def create_connection(self) -> "AdbcConnection":
170
164
  """Create and return a new database connection using the specific driver.
171
165
 
172
166
  Returns:
@@ -189,7 +183,7 @@ class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
189
183
  raise ImproperConfigurationError(msg) from e
190
184
 
191
185
  @contextmanager
192
- def provide_connection(self, *args: "Any", **kwargs: "Any") -> "Generator[Connection, None, None]":
186
+ def provide_connection(self, *args: "Any", **kwargs: "Any") -> "Generator[AdbcConnection, None, None]":
193
187
  """Create and provide a database connection using the specific driver.
194
188
 
195
189
  Yields:
@@ -7,15 +7,16 @@ from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast, overload
7
7
 
8
8
  from adbc_driver_manager.dbapi import Connection, Cursor
9
9
 
10
- from sqlspec.base import SyncArrowBulkOperationsMixin, SyncDriverAdapterProtocol, T
10
+ from sqlspec.base import SyncDriverAdapterProtocol
11
11
  from sqlspec.exceptions import ParameterStyleMismatchError, SQLParsingError
12
+ from sqlspec.mixins import SQLTranslatorMixin, SyncArrowBulkOperationsMixin
12
13
  from sqlspec.statement import SQLStatement
13
14
  from sqlspec.typing import ArrowTable, StatementParameterType
14
15
 
15
16
  if TYPE_CHECKING:
16
- from sqlspec.typing import ArrowTable, ModelDTOT, StatementParameterType
17
+ from sqlspec.typing import ArrowTable, ModelDTOT, StatementParameterType, T
17
18
 
18
- __all__ = ("AdbcDriver",)
19
+ __all__ = ("AdbcConnection", "AdbcDriver")
19
20
 
20
21
  logger = logging.getLogger("sqlspec")
21
22
 
@@ -32,20 +33,26 @@ PARAM_REGEX = re.compile(
32
33
  re.VERBOSE | re.DOTALL,
33
34
  )
34
35
 
36
+ AdbcConnection = Connection
35
37
 
36
- class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterProtocol["Connection"]):
38
+
39
+ class AdbcDriver(
40
+ SyncArrowBulkOperationsMixin["AdbcConnection"],
41
+ SQLTranslatorMixin["AdbcConnection"],
42
+ SyncDriverAdapterProtocol["AdbcConnection"],
43
+ ):
37
44
  """ADBC Sync Driver Adapter."""
38
45
 
39
- connection: Connection
46
+ connection: AdbcConnection
40
47
  __supports_arrow__: ClassVar[bool] = True
41
48
 
42
- def __init__(self, connection: "Connection") -> None:
49
+ def __init__(self, connection: "AdbcConnection") -> None:
43
50
  """Initialize the ADBC driver adapter."""
44
51
  self.connection = connection
45
52
  self.dialect = self._get_dialect(connection)
46
53
 
47
54
  @staticmethod
48
- def _get_dialect(connection: "Connection") -> str: # noqa: PLR0911
55
+ def _get_dialect(connection: "AdbcConnection") -> str: # noqa: PLR0911
49
56
  """Get the database dialect based on the driver name.
50
57
 
51
58
  Args:
@@ -70,11 +77,11 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
70
77
  return "postgres" # default to postgresql dialect
71
78
 
72
79
  @staticmethod
73
- def _cursor(connection: "Connection", *args: Any, **kwargs: Any) -> "Cursor":
80
+ def _cursor(connection: "AdbcConnection", *args: Any, **kwargs: Any) -> "Cursor":
74
81
  return connection.cursor(*args, **kwargs)
75
82
 
76
83
  @contextmanager
77
- def _with_cursor(self, connection: "Connection") -> Generator["Cursor", None, None]:
84
+ def _with_cursor(self, connection: "AdbcConnection") -> Generator["Cursor", None, None]:
78
85
  cursor = self._cursor(connection)
79
86
  try:
80
87
  yield cursor
@@ -167,7 +174,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
167
174
  parameters: "Optional[StatementParameterType]" = None,
168
175
  /,
169
176
  *,
170
- connection: "Optional[Connection]" = None,
177
+ connection: "Optional[AdbcConnection]" = None,
171
178
  schema_type: None = None,
172
179
  **kwargs: Any,
173
180
  ) -> "Sequence[dict[str, Any]]": ...
@@ -178,7 +185,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
178
185
  parameters: "Optional[StatementParameterType]" = None,
179
186
  /,
180
187
  *,
181
- connection: "Optional[Connection]" = None,
188
+ connection: "Optional[AdbcConnection]" = None,
182
189
  schema_type: "type[ModelDTOT]",
183
190
  **kwargs: Any,
184
191
  ) -> "Sequence[ModelDTOT]": ...
@@ -188,7 +195,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
188
195
  parameters: Optional["StatementParameterType"] = None,
189
196
  /,
190
197
  *,
191
- connection: Optional["Connection"] = None,
198
+ connection: Optional["AdbcConnection"] = None,
192
199
  schema_type: "Optional[type[ModelDTOT]]" = None,
193
200
  **kwargs: Any,
194
201
  ) -> "Sequence[Union[ModelDTOT, dict[str, Any]]]":
@@ -218,7 +225,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
218
225
  parameters: "Optional[StatementParameterType]" = None,
219
226
  /,
220
227
  *,
221
- connection: "Optional[Connection]" = None,
228
+ connection: "Optional[AdbcConnection]" = None,
222
229
  schema_type: None = None,
223
230
  **kwargs: Any,
224
231
  ) -> "dict[str, Any]": ...
@@ -229,7 +236,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
229
236
  parameters: "Optional[StatementParameterType]" = None,
230
237
  /,
231
238
  *,
232
- connection: "Optional[Connection]" = None,
239
+ connection: "Optional[AdbcConnection]" = None,
233
240
  schema_type: "type[ModelDTOT]",
234
241
  **kwargs: Any,
235
242
  ) -> "ModelDTOT": ...
@@ -239,7 +246,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
239
246
  parameters: Optional["StatementParameterType"] = None,
240
247
  /,
241
248
  *,
242
- connection: Optional["Connection"] = None,
249
+ connection: Optional["AdbcConnection"] = None,
243
250
  schema_type: "Optional[type[ModelDTOT]]" = None,
244
251
  **kwargs: Any,
245
252
  ) -> "Union[ModelDTOT, dict[str, Any]]":
@@ -266,7 +273,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
266
273
  parameters: "Optional[StatementParameterType]" = None,
267
274
  /,
268
275
  *,
269
- connection: "Optional[Connection]" = None,
276
+ connection: "Optional[AdbcConnection]" = None,
270
277
  schema_type: None = None,
271
278
  **kwargs: Any,
272
279
  ) -> "Optional[dict[str, Any]]": ...
@@ -277,7 +284,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
277
284
  parameters: "Optional[StatementParameterType]" = None,
278
285
  /,
279
286
  *,
280
- connection: "Optional[Connection]" = None,
287
+ connection: "Optional[AdbcConnection]" = None,
281
288
  schema_type: "type[ModelDTOT]",
282
289
  **kwargs: Any,
283
290
  ) -> "Optional[ModelDTOT]": ...
@@ -287,7 +294,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
287
294
  parameters: Optional["StatementParameterType"] = None,
288
295
  /,
289
296
  *,
290
- connection: Optional["Connection"] = None,
297
+ connection: Optional["AdbcConnection"] = None,
291
298
  schema_type: "Optional[type[ModelDTOT]]" = None,
292
299
  **kwargs: Any,
293
300
  ) -> "Optional[Union[ModelDTOT, dict[str, Any]]]":
@@ -315,7 +322,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
315
322
  parameters: "Optional[StatementParameterType]" = None,
316
323
  /,
317
324
  *,
318
- connection: "Optional[Connection]" = None,
325
+ connection: "Optional[AdbcConnection]" = None,
319
326
  schema_type: None = None,
320
327
  **kwargs: Any,
321
328
  ) -> "Any": ...
@@ -326,7 +333,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
326
333
  parameters: "Optional[StatementParameterType]" = None,
327
334
  /,
328
335
  *,
329
- connection: "Optional[Connection]" = None,
336
+ connection: "Optional[AdbcConnection]" = None,
330
337
  schema_type: "type[T]",
331
338
  **kwargs: Any,
332
339
  ) -> "T": ...
@@ -336,7 +343,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
336
343
  parameters: Optional["StatementParameterType"] = None,
337
344
  /,
338
345
  *,
339
- connection: Optional["Connection"] = None,
346
+ connection: Optional["AdbcConnection"] = None,
340
347
  schema_type: "Optional[type[T]]" = None,
341
348
  **kwargs: Any,
342
349
  ) -> "Union[T, Any]":
@@ -362,7 +369,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
362
369
  parameters: "Optional[StatementParameterType]" = None,
363
370
  /,
364
371
  *,
365
- connection: "Optional[Connection]" = None,
372
+ connection: "Optional[AdbcConnection]" = None,
366
373
  schema_type: None = None,
367
374
  **kwargs: Any,
368
375
  ) -> "Optional[Any]": ...
@@ -373,7 +380,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
373
380
  parameters: "Optional[StatementParameterType]" = None,
374
381
  /,
375
382
  *,
376
- connection: "Optional[Connection]" = None,
383
+ connection: "Optional[AdbcConnection]" = None,
377
384
  schema_type: "type[T]",
378
385
  **kwargs: Any,
379
386
  ) -> "Optional[T]": ...
@@ -383,7 +390,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
383
390
  parameters: Optional["StatementParameterType"] = None,
384
391
  /,
385
392
  *,
386
- connection: Optional["Connection"] = None,
393
+ connection: Optional["AdbcConnection"] = None,
387
394
  schema_type: "Optional[type[T]]" = None,
388
395
  **kwargs: Any,
389
396
  ) -> "Optional[Union[T, Any]]":
@@ -409,7 +416,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
409
416
  parameters: Optional["StatementParameterType"] = None,
410
417
  /,
411
418
  *,
412
- connection: Optional["Connection"] = None,
419
+ connection: Optional["AdbcConnection"] = None,
413
420
  **kwargs: Any,
414
421
  ) -> int:
415
422
  """Insert, update, or delete data from the database.
@@ -431,7 +438,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
431
438
  parameters: "Optional[StatementParameterType]" = None,
432
439
  /,
433
440
  *,
434
- connection: "Optional[Connection]" = None,
441
+ connection: "Optional[AdbcConnection]" = None,
435
442
  schema_type: None = None,
436
443
  **kwargs: Any,
437
444
  ) -> "dict[str, Any]": ...
@@ -442,7 +449,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
442
449
  parameters: "Optional[StatementParameterType]" = None,
443
450
  /,
444
451
  *,
445
- connection: "Optional[Connection]" = None,
452
+ connection: "Optional[AdbcConnection]" = None,
446
453
  schema_type: "type[ModelDTOT]",
447
454
  **kwargs: Any,
448
455
  ) -> "ModelDTOT": ...
@@ -452,7 +459,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
452
459
  parameters: Optional["StatementParameterType"] = None,
453
460
  /,
454
461
  *,
455
- connection: Optional["Connection"] = None,
462
+ connection: Optional["AdbcConnection"] = None,
456
463
  schema_type: "Optional[type[ModelDTOT]]" = None,
457
464
  **kwargs: Any,
458
465
  ) -> "Optional[Union[dict[str, Any], ModelDTOT]]":
@@ -485,7 +492,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
485
492
  parameters: Optional["StatementParameterType"] = None,
486
493
  /,
487
494
  *,
488
- connection: Optional["Connection"] = None,
495
+ connection: Optional["AdbcConnection"] = None,
489
496
  **kwargs: Any,
490
497
  ) -> str:
491
498
  """Execute a script.
@@ -508,7 +515,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
508
515
  parameters: "Optional[StatementParameterType]" = None,
509
516
  /,
510
517
  *,
511
- connection: "Optional[Connection]" = None,
518
+ connection: "Optional[AdbcConnection]" = None,
512
519
  **kwargs: Any,
513
520
  ) -> "ArrowTable":
514
521
  """Execute a SQL query and return results as an Apache Arrow Table.
@@ -1,7 +1,8 @@
1
1
  from sqlspec.adapters.aiosqlite.config import AiosqliteConfig
2
- from sqlspec.adapters.aiosqlite.driver import AiosqliteDriver
2
+ from sqlspec.adapters.aiosqlite.driver import AiosqliteConnection, AiosqliteDriver
3
3
 
4
4
  __all__ = (
5
5
  "AiosqliteConfig",
6
+ "AiosqliteConnection",
6
7
  "AiosqliteDriver",
7
8
  )
@@ -2,16 +2,15 @@ from contextlib import asynccontextmanager
2
2
  from dataclasses import dataclass, field
3
3
  from typing import TYPE_CHECKING, Any, Optional, Union
4
4
 
5
- from aiosqlite import Connection
5
+ import aiosqlite
6
6
 
7
- from sqlspec.adapters.aiosqlite.driver import AiosqliteDriver
7
+ from sqlspec.adapters.aiosqlite.driver import AiosqliteConnection, AiosqliteDriver
8
8
  from sqlspec.base import NoPoolAsyncConfig
9
9
  from sqlspec.exceptions import ImproperConfigurationError
10
10
  from sqlspec.typing import Empty, EmptyType, dataclass_to_dict
11
11
 
12
12
  if TYPE_CHECKING:
13
13
  from collections.abc import AsyncGenerator
14
- from sqlite3 import Connection as SQLite3Connection
15
14
  from typing import Literal
16
15
 
17
16
 
@@ -19,7 +18,7 @@ __all__ = ("AiosqliteConfig",)
19
18
 
20
19
 
21
20
  @dataclass
22
- class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
21
+ class AiosqliteConfig(NoPoolAsyncConfig["AiosqliteConnection", "AiosqliteDriver"]):
23
22
  """Configuration for Aiosqlite database connections.
24
23
 
25
24
  This class provides configuration options for Aiosqlite database connections, wrapping all parameters
@@ -38,13 +37,11 @@ class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
38
37
  """The isolation_level of the connection. This can be None for autocommit mode or one of "DEFERRED", "IMMEDIATE" or "EXCLUSIVE"."""
39
38
  check_same_thread: "Union[bool, EmptyType]" = field(default=Empty)
40
39
  """If True (default), ProgrammingError is raised if the database connection is used by a thread other than the one that created it. If False, the connection may be shared across multiple threads."""
41
- factory: "Union[type[SQLite3Connection], EmptyType]" = field(default=Empty)
42
- """A custom Connection class factory. If given, must be a callable that returns a Connection instance."""
43
40
  cached_statements: "Union[int, EmptyType]" = field(default=Empty)
44
41
  """The number of statements that SQLite will cache for this connection. The default is 128."""
45
42
  uri: "Union[bool, EmptyType]" = field(default=Empty)
46
43
  """If set to True, database is interpreted as a URI with supported options."""
47
- connection_type: "type[Connection]" = field(init=False, default_factory=lambda: Connection)
44
+ connection_type: "type[AiosqliteConnection]" = field(init=False, default_factory=lambda: AiosqliteConnection)
48
45
  """Type of the connection object"""
49
46
  driver_type: "type[AiosqliteDriver]" = field(init=False, default_factory=lambda: AiosqliteDriver) # type: ignore[type-abstract,unused-ignore]
50
47
  """Type of the driver object"""
@@ -57,10 +54,13 @@ class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
57
54
  A string keyed dict of config kwargs for the aiosqlite.connect() function.
58
55
  """
59
56
  return dataclass_to_dict(
60
- self, exclude_empty=True, convert_nested=False, exclude={"pool_instance", "connection_type", "driver_type"}
57
+ self,
58
+ exclude_empty=True,
59
+ convert_nested=False,
60
+ exclude={"pool_instance", "connection_type", "driver_type"},
61
61
  )
62
62
 
63
- async def create_connection(self) -> "Connection":
63
+ async def create_connection(self) -> "AiosqliteConnection":
64
64
  """Create and return a new database connection.
65
65
 
66
66
  Returns:
@@ -69,8 +69,6 @@ class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
69
69
  Raises:
70
70
  ImproperConfigurationError: If the connection could not be established.
71
71
  """
72
- import aiosqlite
73
-
74
72
  try:
75
73
  return await aiosqlite.connect(**self.connection_config_dict)
76
74
  except Exception as e:
@@ -78,7 +76,7 @@ class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
78
76
  raise ImproperConfigurationError(msg) from e
79
77
 
80
78
  @asynccontextmanager
81
- async def provide_connection(self, *args: "Any", **kwargs: "Any") -> "AsyncGenerator[Connection, None]":
79
+ async def provide_connection(self, *args: "Any", **kwargs: "Any") -> "AsyncGenerator[AiosqliteConnection, None]":
82
80
  """Create and provide a database connection.
83
81
 
84
82
  Yields: