sqlspec 0.9.0__py3-none-any.whl → 0.10.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.

Potentially problematic release.


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

Files changed (47) hide show
  1. sqlspec/__init__.py +2 -1
  2. sqlspec/adapters/adbc/__init__.py +2 -1
  3. sqlspec/adapters/adbc/config.py +7 -13
  4. sqlspec/adapters/adbc/driver.py +160 -21
  5. sqlspec/adapters/aiosqlite/__init__.py +2 -1
  6. sqlspec/adapters/aiosqlite/config.py +10 -12
  7. sqlspec/adapters/aiosqlite/driver.py +160 -22
  8. sqlspec/adapters/asyncmy/__init__.py +2 -1
  9. sqlspec/adapters/asyncmy/driver.py +158 -22
  10. sqlspec/adapters/asyncpg/config.py +1 -3
  11. sqlspec/adapters/asyncpg/driver.py +143 -5
  12. sqlspec/adapters/bigquery/__init__.py +4 -0
  13. sqlspec/adapters/bigquery/config/__init__.py +3 -0
  14. sqlspec/adapters/bigquery/config/_common.py +40 -0
  15. sqlspec/adapters/bigquery/config/_sync.py +87 -0
  16. sqlspec/adapters/bigquery/driver.py +701 -0
  17. sqlspec/adapters/duckdb/__init__.py +2 -1
  18. sqlspec/adapters/duckdb/config.py +17 -18
  19. sqlspec/adapters/duckdb/driver.py +165 -27
  20. sqlspec/adapters/oracledb/__init__.py +8 -1
  21. sqlspec/adapters/oracledb/config/_asyncio.py +7 -8
  22. sqlspec/adapters/oracledb/config/_sync.py +6 -7
  23. sqlspec/adapters/oracledb/driver.py +311 -42
  24. sqlspec/adapters/psqlpy/__init__.py +9 -0
  25. sqlspec/adapters/psqlpy/config.py +11 -19
  26. sqlspec/adapters/psqlpy/driver.py +171 -19
  27. sqlspec/adapters/psycopg/__init__.py +8 -1
  28. sqlspec/adapters/psycopg/config/__init__.py +10 -0
  29. sqlspec/adapters/psycopg/config/_async.py +6 -7
  30. sqlspec/adapters/psycopg/config/_sync.py +7 -8
  31. sqlspec/adapters/psycopg/driver.py +344 -86
  32. sqlspec/adapters/sqlite/__init__.py +2 -1
  33. sqlspec/adapters/sqlite/config.py +12 -11
  34. sqlspec/adapters/sqlite/driver.py +160 -51
  35. sqlspec/base.py +402 -63
  36. sqlspec/exceptions.py +9 -0
  37. sqlspec/extensions/litestar/config.py +3 -11
  38. sqlspec/extensions/litestar/handlers.py +2 -1
  39. sqlspec/extensions/litestar/plugin.py +6 -2
  40. sqlspec/mixins.py +156 -0
  41. sqlspec/typing.py +19 -1
  42. {sqlspec-0.9.0.dist-info → sqlspec-0.10.0.dist-info}/METADATA +147 -3
  43. sqlspec-0.10.0.dist-info/RECORD +67 -0
  44. sqlspec-0.9.0.dist-info/RECORD +0 -61
  45. {sqlspec-0.9.0.dist-info → sqlspec-0.10.0.dist-info}/WHEEL +0 -0
  46. {sqlspec-0.9.0.dist-info → sqlspec-0.10.0.dist-info}/licenses/LICENSE +0 -0
  47. {sqlspec-0.9.0.dist-info → sqlspec-0.10.0.dist-info}/licenses/NOTICE +0 -0
@@ -19,7 +19,8 @@ if TYPE_CHECKING:
19
19
  from litestar.datastructures.state import State
20
20
  from litestar.types import Message, Scope
21
21
 
22
- from sqlspec.base import ConnectionT, DatabaseConfigProtocol, DriverT, PoolT
22
+ from sqlspec.base import DatabaseConfigProtocol, DriverT
23
+ from sqlspec.typing import ConnectionT, PoolT
23
24
 
24
25
 
25
26
  SESSION_TERMINUS_ASGI_EVENTS = {HTTP_RESPONSE_START, HTTP_DISCONNECT, WEBSOCKET_DISCONNECT, WEBSOCKET_CLOSE}
@@ -5,14 +5,14 @@ from litestar.plugins import InitPluginProtocol
5
5
 
6
6
  from sqlspec.base import (
7
7
  AsyncConfigT,
8
- ConnectionT,
9
8
  DatabaseConfigProtocol,
10
- PoolT,
9
+ DriverT,
11
10
  SyncConfigT,
12
11
  )
13
12
  from sqlspec.base import SQLSpec as SQLSpecBase
14
13
  from sqlspec.exceptions import ImproperConfigurationError
15
14
  from sqlspec.extensions.litestar.config import DatabaseConfig
15
+ from sqlspec.typing import ConnectionT, PoolT
16
16
 
17
17
  if TYPE_CHECKING:
18
18
  from click import Group
@@ -75,6 +75,7 @@ class SQLSpec(InitPluginProtocol, SQLSpecBase):
75
75
  SQLSpec,
76
76
  ConnectionT,
77
77
  PoolT,
78
+ DriverT,
78
79
  DatabaseConfig,
79
80
  DatabaseConfigProtocol,
80
81
  SyncConfigT,
@@ -83,6 +84,9 @@ class SQLSpec(InitPluginProtocol, SQLSpecBase):
83
84
  )
84
85
  for c in self._plugin_configs:
85
86
  c.annotation = self.add_config(c.config)
87
+ app_config.signature_types.append(c.annotation)
88
+ app_config.signature_types.append(c.config.connection_type) # type: ignore[union-attr]
89
+ app_config.signature_types.append(c.config.driver_type) # type: ignore[union-attr]
86
90
  app_config.before_send.append(c.before_send_handler)
87
91
  app_config.lifespan.append(c.lifespan_handler) # pyright: ignore[reportUnknownMemberType]
88
92
  app_config.dependencies.update(
sqlspec/mixins.py ADDED
@@ -0,0 +1,156 @@
1
+ from abc import abstractmethod
2
+ from typing import (
3
+ TYPE_CHECKING,
4
+ Any,
5
+ ClassVar,
6
+ Generic,
7
+ Optional,
8
+ )
9
+
10
+ from sqlglot import parse_one
11
+ from sqlglot.dialects.dialect import DialectType
12
+
13
+ from sqlspec.exceptions import SQLConversionError, SQLParsingError
14
+ from sqlspec.typing import ConnectionT, StatementParameterType
15
+
16
+ if TYPE_CHECKING:
17
+ from sqlspec.typing import ArrowTable
18
+
19
+ __all__ = (
20
+ "AsyncArrowBulkOperationsMixin",
21
+ "AsyncParquetExportMixin",
22
+ "SQLTranslatorMixin",
23
+ "SyncArrowBulkOperationsMixin",
24
+ "SyncParquetExportMixin",
25
+ )
26
+
27
+
28
+ class SyncArrowBulkOperationsMixin(Generic[ConnectionT]):
29
+ """Mixin for sync drivers supporting bulk Apache Arrow operations."""
30
+
31
+ __supports_arrow__: "ClassVar[bool]" = True
32
+
33
+ @abstractmethod
34
+ def select_arrow( # pyright: ignore[reportUnknownParameterType]
35
+ self,
36
+ sql: str,
37
+ parameters: "Optional[StatementParameterType]" = None,
38
+ /,
39
+ *,
40
+ connection: "Optional[ConnectionT]" = None,
41
+ **kwargs: Any,
42
+ ) -> "ArrowTable": # pyright: ignore[reportUnknownReturnType]
43
+ """Execute a SQL query and return results as an Apache Arrow Table.
44
+
45
+ Args:
46
+ sql: The SQL query string.
47
+ parameters: Parameters for the query.
48
+ connection: Optional connection override.
49
+ **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
50
+
51
+ Returns:
52
+ An Apache Arrow Table containing the query results.
53
+ """
54
+ raise NotImplementedError
55
+
56
+
57
+ class AsyncArrowBulkOperationsMixin(Generic[ConnectionT]):
58
+ """Mixin for async drivers supporting bulk Apache Arrow operations."""
59
+
60
+ __supports_arrow__: "ClassVar[bool]" = True
61
+
62
+ @abstractmethod
63
+ async def select_arrow( # pyright: ignore[reportUnknownParameterType]
64
+ self,
65
+ sql: str,
66
+ parameters: "Optional[StatementParameterType]" = None,
67
+ /,
68
+ *,
69
+ connection: "Optional[ConnectionT]" = None,
70
+ **kwargs: Any,
71
+ ) -> "ArrowTable": # pyright: ignore[reportUnknownReturnType]
72
+ """Execute a SQL query and return results as an Apache Arrow Table.
73
+
74
+ Args:
75
+ sql: The SQL query string.
76
+ parameters: Parameters for the query.
77
+ connection: Optional connection override.
78
+ **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
79
+
80
+ Returns:
81
+ An Apache Arrow Table containing the query results.
82
+ """
83
+ raise NotImplementedError
84
+
85
+
86
+ class SyncParquetExportMixin(Generic[ConnectionT]):
87
+ """Mixin for sync drivers supporting Parquet export."""
88
+
89
+ @abstractmethod
90
+ def select_to_parquet(
91
+ self,
92
+ sql: str,
93
+ parameters: "Optional[StatementParameterType]" = None,
94
+ /,
95
+ *,
96
+ connection: "Optional[ConnectionT]" = None,
97
+ **kwargs: Any,
98
+ ) -> None:
99
+ """Export a SQL query to a Parquet file."""
100
+ raise NotImplementedError
101
+
102
+
103
+ class AsyncParquetExportMixin(Generic[ConnectionT]):
104
+ """Mixin for async drivers supporting Parquet export."""
105
+
106
+ @abstractmethod
107
+ async def select_to_parquet(
108
+ self,
109
+ sql: str,
110
+ parameters: "Optional[StatementParameterType]" = None,
111
+ /,
112
+ *,
113
+ connection: "Optional[ConnectionT]" = None,
114
+ **kwargs: Any,
115
+ ) -> None:
116
+ """Export a SQL query to a Parquet file."""
117
+ raise NotImplementedError
118
+
119
+
120
+ class SQLTranslatorMixin(Generic[ConnectionT]):
121
+ """Mixin for drivers supporting SQL translation."""
122
+
123
+ dialect: str
124
+
125
+ def convert_to_dialect(
126
+ self,
127
+ sql: str,
128
+ to_dialect: DialectType = None,
129
+ pretty: bool = True,
130
+ ) -> str:
131
+ """Convert a SQL query to a different dialect.
132
+
133
+ Args:
134
+ sql: The SQL query string to convert.
135
+ to_dialect: The target dialect to convert to.
136
+ pretty: Whether to pretty-print the SQL query.
137
+
138
+ Returns:
139
+ The converted SQL query string.
140
+
141
+ Raises:
142
+ SQLParsingError: If the SQL query cannot be parsed.
143
+ SQLConversionError: If the SQL query cannot be converted to the target dialect.
144
+ """
145
+ try:
146
+ parsed = parse_one(sql, dialect=self.dialect)
147
+ except Exception as e:
148
+ error_msg = f"Failed to parse SQL: {e!s}"
149
+ raise SQLParsingError(error_msg) from e
150
+ if to_dialect is None:
151
+ to_dialect = self.dialect
152
+ try:
153
+ return parsed.sql(dialect=to_dialect, pretty=pretty)
154
+ except Exception as e:
155
+ error_msg = f"Failed to convert SQL to {to_dialect}: {e!s}"
156
+ raise SQLConversionError(error_msg) from e
sqlspec/typing.py CHANGED
@@ -33,8 +33,26 @@ PYDANTIC_USE_FAILFAST = False # leave permanently disabled for now
33
33
 
34
34
 
35
35
  T = TypeVar("T")
36
+ ConnectionT = TypeVar("ConnectionT")
37
+ """Type variable for connection types.
36
38
 
37
- ModelT = TypeVar("ModelT", bound="Union[Struct, BaseModel, DataclassProtocol]")
39
+ :class:`~sqlspec.typing.ConnectionT`
40
+ """
41
+ PoolT = TypeVar("PoolT")
42
+ """Type variable for pool types.
43
+
44
+ :class:`~sqlspec.typing.PoolT`
45
+ """
46
+ PoolT_co = TypeVar("PoolT_co", covariant=True)
47
+ """Type variable for covariant pool types.
48
+
49
+ :class:`~sqlspec.typing.PoolT_co`
50
+ """
51
+ ModelT = TypeVar("ModelT", bound="Union[dict[str, Any], Struct, BaseModel, DataclassProtocol]")
52
+ """Type variable for model types.
53
+
54
+ :class:`dict[str, Any]` | :class:`msgspec.Struct` | :class:`pydantic.BaseModel` | :class:`DataclassProtocol`
55
+ """
38
56
 
39
57
  FilterTypeT = TypeVar("FilterTypeT", bound="StatementFilter")
40
58
  """Type variable for filter types.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlspec
3
- Version: 0.9.0
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'
@@ -83,6 +84,149 @@ SQLSpec is an experimental Python library designed to streamline and modernize y
83
84
 
84
85
  SQLSpec is a work in progress. While it offers a solid foundation for modern SQL interactions, it does not yet include every feature you might find in a mature ORM or database toolkit. The focus is on building a robust, flexible core that can be extended over time.
85
86
 
87
+ ## Examples
88
+
89
+ We've talked about what SQLSpec is not, so let's look at what it can do.
90
+
91
+ These are just a few of the examples that demonstrate SQLSpec's flexibility and each of the bundled adapters offer the same config and driver interfaces.
92
+
93
+ ### DuckDB LLM
94
+
95
+ This is a quick implementation using some of the built in Secret and Extension management features of SQLSpec's DuckDB integration.
96
+
97
+ It allows you to communicate with any compatible OpenAPI conversations endpoint (such as Ollama). This examples:
98
+
99
+ - auto installs the `open_prompt` DuckDB extensions
100
+ - automatically creates the correct `open_prompt` comptaible secret required to use the extension
101
+
102
+ ```py
103
+ # /// script
104
+ # dependencies = [
105
+ # "sqlspec[duckdb,performance]",
106
+ # ]
107
+ # ///
108
+ import os
109
+
110
+ from sqlspec import SQLSpec
111
+ from sqlspec.adapters.duckdb import DuckDBConfig
112
+ from pydantic import BaseModel
113
+
114
+ class ChatMessage(BaseModel):
115
+ message: str
116
+
117
+ sql = SQLSpec()
118
+ etl_config = sql.add_config(
119
+ DuckDBConfig(
120
+ extensions=[{"name": "open_prompt"}],
121
+ secrets=[
122
+ {
123
+ "secret_type": "open_prompt",
124
+ "name": "open_prompt",
125
+ "value": {
126
+ "api_url": "http://127.0.0.1:11434/v1/chat/completions",
127
+ "model_name": "gemma3:1b",
128
+ "api_timeout": "120",
129
+ },
130
+ }
131
+ ],
132
+ )
133
+ )
134
+ with sql.provide_session(etl_config) as session:
135
+ result = session.select_one(
136
+ "SELECT open_prompt(?)",
137
+ "Can you write a haiku about DuckDB?",
138
+ schema_type=ChatMessage
139
+ )
140
+ print(result) # result is a ChatMessage pydantic model
141
+ ```
142
+
143
+ ### DuckDB Gemini Embeddings
144
+
145
+ In this example, we are again using DuckDB. However, we are going to use the built in to call the Google Gemini embeddings service directly from the database.
146
+
147
+ This example will
148
+
149
+ - auto installs the `http_client` and `vss` (vector similarity search) DuckDB extensions
150
+ - when a connection is created, it ensures that the `generate_embeddings` macro exists in the DuckDB database.
151
+ - Execute a simple query to call the Google API
152
+
153
+ ```py
154
+ # /// script
155
+ # dependencies = [
156
+ # "sqlspec[duckdb,performance]",
157
+ # ]
158
+ # ///
159
+ import os
160
+
161
+ from sqlspec import SQLSpec
162
+ from sqlspec.adapters.duckdb import DuckDBConfig
163
+
164
+ EMBEDDING_MODEL = "gemini-embedding-exp-03-07"
165
+ GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")
166
+ API_URL = (
167
+ f"https://generativelanguage.googleapis.com/v1beta/models/{EMBEDDING_MODEL}:embedContent?key=${GOOGLE_API_KEY}"
168
+ )
169
+
170
+ sql = SQLSpec()
171
+ etl_config = sql.add_config(
172
+ DuckDBConfig(
173
+ extensions=[{"name": "vss"}, {"name": "http_client"}],
174
+ on_connection_create=lambda connection: connection.execute(f"""
175
+ CREATE IF NOT EXISTS MACRO generate_embedding(q) AS (
176
+ WITH __request AS (
177
+ SELECT http_post(
178
+ '{API_URL}',
179
+ headers => MAP {{
180
+ 'accept': 'application/json',
181
+ }},
182
+ params => MAP {{
183
+ 'model': 'models/{EMBEDDING_MODEL}',
184
+ 'parts': [{{ 'text': q }}],
185
+ 'taskType': 'SEMANTIC_SIMILARITY'
186
+ }}
187
+ ) AS response
188
+ )
189
+ SELECT *
190
+ FROM __request,
191
+ );
192
+ """),
193
+ )
194
+ )
195
+ with sql.provide_session(etl_config) as session:
196
+ result = session.select_one("SELECT generate_embedding('example text')")
197
+ print(result) # result is a dictionary when `schema_type` is omitted.
198
+ ```
199
+
200
+ ### Basic Litestar Integration
201
+
202
+ In this example we are going to demonstrate how to create a basic configuration that integrates into Litestar.
203
+
204
+ ```py
205
+ # /// script
206
+ # dependencies = [
207
+ # "sqlspec[aiosqlite]",
208
+ # "litestar[standard]",
209
+ # ]
210
+ # ///
211
+
212
+ from aiosqlite import Connection
213
+ from litestar import Litestar, get
214
+
215
+ from sqlspec.adapters.aiosqlite import AiosqliteConfig, AiosqliteDriver
216
+ from sqlspec.extensions.litestar import SQLSpec
217
+
218
+
219
+ @get("/")
220
+ async def simple_sqlite(db_session: AiosqliteDriver) -> dict[str, str]:
221
+ return await db_session.select_one("SELECT 'Hello, world!' AS greeting")
222
+
223
+
224
+ sqlspec = SQLSpec(config=DatabaseConfig(
225
+ config=[AiosqliteConfig(), commit_mode="autocommit")],
226
+ )
227
+ app = Litestar(route_handlers=[simple_sqlite], plugins=[sqlspec])
228
+ ```
229
+
86
230
  ## Inspiration and Future Direction
87
231
 
88
232
  SQLSpec originally drew inspiration from features found in the `aiosql` library. This is a great library for working with and executed SQL stored in files. It's unclear how much of an overlap there will be between the two libraries, but it's possible that some features will be contributed back to `aiosql` where appropriate.
@@ -110,7 +254,7 @@ This list is not final. If you have a driver you'd like to see added, please ope
110
254
  | [`oracledb`](https://oracle.github.io/python-oracledb/) | Oracle | Async | ✅ |
111
255
  | [`oracledb`](https://oracle.github.io/python-oracledb/) | Oracle | Sync | ✅ |
112
256
  | [`duckdb`](https://duckdb.org/) | DuckDB | Sync | ✅ |
113
- | [`bigquery`](https://googleapis.dev/python/bigquery/latest/index.html) | BigQuery | Sync | 🗓️ |
257
+ | [`bigquery`](https://googleapis.dev/python/bigquery/latest/index.html) | BigQuery | Sync | |
114
258
  | [`spanner`](https://googleapis.dev/python/spanner/latest/index.html) | Spanner | Sync | 🗓️ |
115
259
  | [`sqlserver`](https://docs.microsoft.com/en-us/sql/connect/python/pyodbc/python-sql-driver-for-pyodbc?view=sql-server-ver16) | SQL Server | Sync | 🗓️ |
116
260
  | [`mysql`](https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysql-connector-python.html) | MySQL | Sync | 🗓️ |
@@ -121,7 +265,7 @@ This list is not final. If you have a driver you'd like to see added, please ope
121
265
  - `sqlspec/`:
122
266
  - `adapters/`: Contains all database drivers and associated configuration.
123
267
  - `extensions/`:
124
- - `litestar/`: Future home of `litestar` integration.
268
+ - `litestar/`: Litestar framework integration
125
269
  - `fastapi/`: Future home of `fastapi` integration.
126
270
  - `flask/`: Future home of `flask` integration.
127
271
  - `*/`: Future home of your favorite framework integration 🔌 ✨
@@ -0,0 +1,67 @@
1
+ sqlspec/__init__.py,sha256=Dl1QOZAK21--ORQcRn15n4YPFklFMe2-Lb7TWWq_WQE,338
2
+ sqlspec/__metadata__.py,sha256=hNP3wXvtk8fQVPKGjRLpZ9mP-gaPJqzrmgm3UqpDIXQ,460
3
+ sqlspec/_serialization.py,sha256=tSwWwFImlYviC6ARdXRz0Bp4QXbCdc8cKGgZr33OglY,2657
4
+ sqlspec/_typing.py,sha256=6ukndnNu_XWKf2OW-HP1x1L7YmqohMwjg2HF4Hq3xdU,7111
5
+ sqlspec/base.py,sha256=SQDE27igKL6OVQ-D9lz3oNrEZz4vWggRSuE4SDXJSbs,32789
6
+ sqlspec/exceptions.py,sha256=WnA56CdDSSdOjA5UE4jnfXXtrfClgwjCRxT-id0eVAo,4302
7
+ sqlspec/filters.py,sha256=Gqwt4VQ7e8ffphkuR-jBfqW4m0OWGGUPiYWyEQ0Xn7M,3620
8
+ sqlspec/mixins.py,sha256=JWniOJfjviNBpAj3AnTnd2ZA79C0Vcu-bVHPS3Lbxcg,4751
9
+ sqlspec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ sqlspec/statement.py,sha256=lbnF_flv4sWPPiZtHX-53d72eCFcceBYB4BgQQYjnCU,17451
11
+ sqlspec/typing.py,sha256=eMLeqi-j28PNLs8jBb4oxeMjOe95jjV1DW8FIp0uCJY,15932
12
+ sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ sqlspec/adapters/adbc/__init__.py,sha256=Ih0mdciGyhmOlqmz4uiByj7mEaqvP4upRjYhlUNopAQ,193
14
+ sqlspec/adapters/adbc/config.py,sha256=uCY-PD06QFJW0v7XpA9vruYgq1eoVwQ63juZe9imMu4,9663
15
+ sqlspec/adapters/adbc/driver.py,sha256=Q619R8nFdSk-lPab2jk0F5xkzhXZPEDqbxw-67_1NBM,20100
16
+ sqlspec/adapters/aiosqlite/__init__.py,sha256=CndH49GREnHuIB-jY1XAxVlLwZTvKNuk8XJu9jiiM7A,233
17
+ sqlspec/adapters/aiosqlite/config.py,sha256=tE-DnjKbdy5FaqqRyA1q3s06rMSAglt0HkhO2oWQT2w,4603
18
+ sqlspec/adapters/aiosqlite/driver.py,sha256=319ixRaD03L465xa5ZsK2pXXaZ7wIxuWDm7ZXr-OMcg,15552
19
+ sqlspec/adapters/asyncmy/__init__.py,sha256=7jQFc0WOgc58XPeIiDgX9a95scMa6PuFgGXQaxG33nI,291
20
+ sqlspec/adapters/asyncmy/config.py,sha256=5ILV46FWjc9Cy46aMuhinpfc70b_708h9ubHj9HRCmE,9412
21
+ sqlspec/adapters/asyncmy/driver.py,sha256=yFgSNtInWshm994eiKd8c_rNJtM1mToAHfQ039egci0,12376
22
+ sqlspec/adapters/asyncpg/__init__.py,sha256=iR-vJYxImcw5hLaDgMqPLLRxW_vOYylEpemSg5G4dP4,261
23
+ sqlspec/adapters/asyncpg/config.py,sha256=yhLcZyJksx9eKUGVlcKSsR7FQmj8F2caryeTdh1CNvQ,9966
24
+ sqlspec/adapters/asyncpg/driver.py,sha256=93f7ePb91GSrmJhAaMC7PwgZLvwr3RC5zq8xk8OEQPw,22431
25
+ sqlspec/adapters/bigquery/__init__.py,sha256=8kcl0_tnvnk8omVKnAljIY9n2XVnzkPRCfhfedGO0m4,264
26
+ sqlspec/adapters/bigquery/driver.py,sha256=8Y9Iq3d9U11wLOrd7_QlmAXMF3VAg7Werp0i5v0WStg,28402
27
+ sqlspec/adapters/bigquery/config/__init__.py,sha256=4ij4LAS-kIt-vOK8KetewVoYN90i1RV_BjtowKWDIs0,150
28
+ sqlspec/adapters/bigquery/config/_common.py,sha256=LSbBC302-Ewx8XHTRzYR-tInMYywVW9I6UcL8cO7-HQ,1901
29
+ sqlspec/adapters/bigquery/config/_sync.py,sha256=oglaEErXuce1TnE2wj5KrfFLkScRGFYAoOTCVV5BFcw,3323
30
+ sqlspec/adapters/duckdb/__init__.py,sha256=GMSHigyHgtaJKu751kE_Sxl5Ry4hnQOnFUSIeLSg1qs,209
31
+ sqlspec/adapters/duckdb/config.py,sha256=b-Ev7UnpguC12CJSxK9DDqcPw0R2dZUZXaVIePf_EEg,15700
32
+ sqlspec/adapters/duckdb/driver.py,sha256=rpBIGuAQlHtUp3oVInjdMdCQSgyx_oiOP39sjGlrdOA,13960
33
+ sqlspec/adapters/oracledb/__init__.py,sha256=vVe8cXZJLFvBA6LPx4NzGRLdOeRugzRjz92UYjb0lC0,521
34
+ sqlspec/adapters/oracledb/driver.py,sha256=nLsSggAN4Zs1uo6J3Cd_3f0e54EzjLAoTlgaatb5ll8,31053
35
+ sqlspec/adapters/oracledb/config/__init__.py,sha256=emx5jWXqw3ifoW-m_tNI7sTz_duq2vRkubc0J2QqEQ4,306
36
+ sqlspec/adapters/oracledb/config/_asyncio.py,sha256=k0wGr4FflFR03jUSgrw-4LC4mYtRlyH9gnbbBXNcMRM,7310
37
+ sqlspec/adapters/oracledb/config/_common.py,sha256=UJZL2DQQZM3uOn1E1A_gnsB8nX3-yCDXGd66PDI29_s,5691
38
+ sqlspec/adapters/oracledb/config/_sync.py,sha256=nm5FnrRG1ScrNviw3MR_40Vq8WJCXX5mJGtHhhRTPb0,7055
39
+ sqlspec/adapters/psqlpy/__init__.py,sha256=K8UlQrKfbCZmxGAaT4CHzQvdwGPxPLB9TDOHJgkESFc,251
40
+ sqlspec/adapters/psqlpy/config.py,sha256=qssXcu_Nd6o_X8QU1i61sAXwi9FiTApWxiTRU0gyBhk,10205
41
+ sqlspec/adapters/psqlpy/driver.py,sha256=dDLH6OyCIEtCjPktBcZEmRqBEB3FUaczpQrPDVNfAtc,17165
42
+ sqlspec/adapters/psycopg/__init__.py,sha256=xmFWHSB6hwPNQS1wpBmAczJThABmhRv2PDNKqaMFX3E,535
43
+ sqlspec/adapters/psycopg/driver.py,sha256=LelXlEWMn9gcuMPYz9WsRfEds3y08A-XmXzVIgA5zio,28746
44
+ sqlspec/adapters/psycopg/config/__init__.py,sha256=hUmtNkSma4M-Y66B-l1gh601Lx7FVYVhU0BWo9ssdJo,570
45
+ sqlspec/adapters/psycopg/config/_async.py,sha256=oKitbfpsJVLhMnbMUmICQub3rBzVZ5n9lwsU_ZvB45s,6661
46
+ sqlspec/adapters/psycopg/config/_common.py,sha256=UqqvqPE9zlSO9G_Gh6fI190cHfCDG98S0GaznGAHpdU,2181
47
+ sqlspec/adapters/psycopg/config/_sync.py,sha256=GYPgE7jfb15gbVdTWRoGGS3B7hauN8wk61CW6Bdrjcs,6512
48
+ sqlspec/adapters/sqlite/__init__.py,sha256=N8VL4Y850OOt63qz-Yvu6rIaCXiziASmn_qDY5tsRuA,209
49
+ sqlspec/adapters/sqlite/config.py,sha256=lGz0G-JFd7dZLhbUrITn9V-ipbhlekwNUr0bXEzM-8k,4498
50
+ sqlspec/adapters/sqlite/driver.py,sha256=S7__m5AJst86tKaDCYyyeBixbeyiPxqECkeNX_a4sgs,14057
51
+ sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ sqlspec/extensions/litestar/__init__.py,sha256=vJf0co-AUM75c7ZLil_TUCYilVNDtmVsdeVLbm9_xn8,512
53
+ sqlspec/extensions/litestar/_utils.py,sha256=UgwFxqLnjDw9S8G0H24DP2GsbMGas81W1lfhfTY68m8,1969
54
+ sqlspec/extensions/litestar/config.py,sha256=M91ClAl15twFYcsQyJ-w-CdW5dMAxHztRlTDqg2hw_M,4368
55
+ sqlspec/extensions/litestar/handlers.py,sha256=eO5rmj3LcomaPerZ6Mpsur3J0QmucutjByQlID0XZtM,7962
56
+ sqlspec/extensions/litestar/plugin.py,sha256=kQgKnBIXnSm87SAngfSfYWAAN3BNZ6fPLxm2MefnD8Q,5216
57
+ sqlspec/utils/__init__.py,sha256=nVIUuMaHhhC1vXydoSBvnc-xTArqwWJaAtpjHhiM84Q,159
58
+ sqlspec/utils/deprecation.py,sha256=4pwGxoQYI3dAc3L1lh4tszZG6e2jp5m4e0ICk8SJx5M,3886
59
+ sqlspec/utils/fixtures.py,sha256=ni51rAuen6S1wuSi1kUwn6Qh25B-XrewPEsjV8G4gQ0,2029
60
+ sqlspec/utils/module_loader.py,sha256=tmMy9JcTTQETcwT8Wt8adCIuqr4zinQnPbCiBJ6JTSQ,2703
61
+ sqlspec/utils/sync_tools.py,sha256=xxHZ-5rnTrPEUNr7gxQUVvJd0NGJeO_MgisR8X7sI3c,10425
62
+ sqlspec/utils/text.py,sha256=Ya-fWBcfkQRhguNs7MNFIYtAUiArBo62w8sRPHavMWM,1476
63
+ sqlspec-0.10.0.dist-info/METADATA,sha256=kVW_aG4aRxpkvbCQGlPfEhZRq8iSGk4rFd1bWmhAhFA,14034
64
+ sqlspec-0.10.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
65
+ sqlspec-0.10.0.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
66
+ sqlspec-0.10.0.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
67
+ sqlspec-0.10.0.dist-info/RECORD,,
@@ -1,61 +0,0 @@
1
- sqlspec/__init__.py,sha256=dsOivB7SmZhOcWkZQT12L4LHC6fQhWBk2s_3j85KkgQ,316
2
- sqlspec/__metadata__.py,sha256=hNP3wXvtk8fQVPKGjRLpZ9mP-gaPJqzrmgm3UqpDIXQ,460
3
- sqlspec/_serialization.py,sha256=tSwWwFImlYviC6ARdXRz0Bp4QXbCdc8cKGgZr33OglY,2657
4
- sqlspec/_typing.py,sha256=6ukndnNu_XWKf2OW-HP1x1L7YmqohMwjg2HF4Hq3xdU,7111
5
- sqlspec/base.py,sha256=vYXMVrdxEhaRfeAD4MVz9izY_mbCg5G3rbNchJ7vp0Q,24539
6
- sqlspec/exceptions.py,sha256=EyS7B9qyyTo78CdkC5iQDYFW9eXILDA6xiSS4ABr0Ws,4033
7
- sqlspec/filters.py,sha256=Gqwt4VQ7e8ffphkuR-jBfqW4m0OWGGUPiYWyEQ0Xn7M,3620
8
- sqlspec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- sqlspec/statement.py,sha256=lbnF_flv4sWPPiZtHX-53d72eCFcceBYB4BgQQYjnCU,17451
10
- sqlspec/typing.py,sha256=AI-72LFQcwwPoW5oEdEFkNHzxnWQv6I7lxcZRoZd88U,15428
11
- sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- sqlspec/adapters/adbc/__init__.py,sha256=_mIoHMCXYWLCqGtnN8YEylhkNt3goTAvZgsT1dfEL6g,155
13
- sqlspec/adapters/adbc/config.py,sha256=e2lrNsr8VN6R1ZBY16qusNj_W7npy7jp730NXCnhbBI,9866
14
- sqlspec/adapters/adbc/driver.py,sha256=lP9YEf5sUmeWRBULVZurfiRvE1sMuYdGzvCibzQPALw,16255
15
- sqlspec/adapters/aiosqlite/__init__.py,sha256=TQME6tGSPswTkZBjW2oH39lbxpzSwwWG5SQfgFpSe00,185
16
- sqlspec/adapters/aiosqlite/config.py,sha256=EjDJq9-Jn6MKnqlpL4ZwXYxaCKD0wE5GxrSYa2Ck1bA,4788
17
- sqlspec/adapters/aiosqlite/driver.py,sha256=D6kTpRxcfD_NSH7ThcVq2VbYZz0iriCh_CMjPQBl_Z8,11466
18
- sqlspec/adapters/asyncmy/__init__.py,sha256=w0hjokFrsBgYS0EnIv8Dorb7jz8M3ZBZYKMUXCUYEQg,247
19
- sqlspec/adapters/asyncmy/config.py,sha256=5ILV46FWjc9Cy46aMuhinpfc70b_708h9ubHj9HRCmE,9412
20
- sqlspec/adapters/asyncmy/driver.py,sha256=RICHrYxv2jOUk0m4bex0k2YVc5GMnSnOdrMIp4p4fNo,8507
21
- sqlspec/adapters/asyncpg/__init__.py,sha256=iR-vJYxImcw5hLaDgMqPLLRxW_vOYylEpemSg5G4dP4,261
22
- sqlspec/adapters/asyncpg/config.py,sha256=DH6ZLkL4iHmRbW80VFQK1kzWIFRyGkFAZdtF3_f13AQ,9987
23
- sqlspec/adapters/asyncpg/driver.py,sha256=G6CSo3k1EzmPTZr2cCnTchR7J_O-1_uNC5eKylFMysY,18557
24
- sqlspec/adapters/duckdb/__init__.py,sha256=b_4QWZC0emTsbuBjcDZrxoEc83hGuBMx7Wwha3fFTAE,167
25
- sqlspec/adapters/duckdb/config.py,sha256=GJTzKp1cEFhKSe94n5wOXvrT4Sz3Md8mKRxmCBnfvsM,15731
26
- sqlspec/adapters/duckdb/driver.py,sha256=e91Iu84FbZ7NefqxkhmWZcwICav0lxJpAxxD08sFqUk,10160
27
- sqlspec/adapters/oracledb/__init__.py,sha256=g54_WLVzZhvD1sLC2uV0nfUs6WnYUJv2vqvvG34L7v0,398
28
- sqlspec/adapters/oracledb/driver.py,sha256=1YCj0pyaIMB-WXi_2w0ywRR0DlAlz5Q6k4gjGkY2yDE,23081
29
- sqlspec/adapters/oracledb/config/__init__.py,sha256=emx5jWXqw3ifoW-m_tNI7sTz_duq2vRkubc0J2QqEQ4,306
30
- sqlspec/adapters/oracledb/config/_asyncio.py,sha256=hu4o5q_d1O7svR_XrylWcmMrvmBzOp0T1m_Ybrbbr_o,7293
31
- sqlspec/adapters/oracledb/config/_common.py,sha256=UJZL2DQQZM3uOn1E1A_gnsB8nX3-yCDXGd66PDI29_s,5691
32
- sqlspec/adapters/oracledb/config/_sync.py,sha256=wvmC8bX2FhSD3W-k4RUBXnMP6cvEThsO6-vA-q5flUY,7016
33
- sqlspec/adapters/psqlpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- sqlspec/adapters/psqlpy/config.py,sha256=SFa40Fp0HyrAAT49nNoH9gYovzk0iEhm6qMmqS9OgDI,10590
35
- sqlspec/adapters/psqlpy/driver.py,sha256=8DnLXFwIUkGtlu-xpj2O4lAaERIIRVVbNgkL6GQ7Qgk,12844
36
- sqlspec/adapters/psycopg/__init__.py,sha256=_aCZRfDiC4lXM5UdkYEQEHZq-bqY1nyS_sioTM91Ul0,408
37
- sqlspec/adapters/psycopg/driver.py,sha256=4hQfw_hHuzZJYz1gKVECRAAdchop-ZIVWg9fZjY-NUM,21296
38
- sqlspec/adapters/psycopg/config/__init__.py,sha256=TIFGht0TdHKC7NTJwaJPpG-6-BRRGzWfc2Bu756R-A4,310
39
- sqlspec/adapters/psycopg/config/_async.py,sha256=6YpxNLxHwvI7r7ZBKKjWnd0xbEG1i4HLOOimiiDUr6w,6631
40
- sqlspec/adapters/psycopg/config/_common.py,sha256=UqqvqPE9zlSO9G_Gh6fI190cHfCDG98S0GaznGAHpdU,2181
41
- sqlspec/adapters/psycopg/config/_sync.py,sha256=QIybrGVkuu45GlAcYBzpcsRq7VW6EnHff4fcNATAgsw,6443
42
- sqlspec/adapters/sqlite/__init__.py,sha256=cGsMyN4_ZWApbhtwmYG18PYEBRiO-NdOU6eecBxTwRQ,167
43
- sqlspec/adapters/sqlite/config.py,sha256=m2TV-3jcjxIeMSCTsvvrTm50L6uE3007WVPluvqIX3Q,4447
44
- sqlspec/adapters/sqlite/driver.py,sha256=quh0Bazho05QVRWxy_Jww02I6HKLFg8Q0jUWMtfBjEU,11293
45
- sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- sqlspec/extensions/litestar/__init__.py,sha256=vJf0co-AUM75c7ZLil_TUCYilVNDtmVsdeVLbm9_xn8,512
47
- sqlspec/extensions/litestar/_utils.py,sha256=UgwFxqLnjDw9S8G0H24DP2GsbMGas81W1lfhfTY68m8,1969
48
- sqlspec/extensions/litestar/config.py,sha256=zq_mlwNubDhRAtAivi2d5S5ippJ1A5xhw19XC6yPC60,4443
49
- sqlspec/extensions/litestar/handlers.py,sha256=6FNqIEWHUltnNuhcp8QNktK0j6-UB4isMpzoP7qCc3g,7932
50
- sqlspec/extensions/litestar/plugin.py,sha256=TOXz5Np17DbNaPhPp09-88reDHE29kmMjmRe4W5_-zE,4904
51
- sqlspec/utils/__init__.py,sha256=nVIUuMaHhhC1vXydoSBvnc-xTArqwWJaAtpjHhiM84Q,159
52
- sqlspec/utils/deprecation.py,sha256=4pwGxoQYI3dAc3L1lh4tszZG6e2jp5m4e0ICk8SJx5M,3886
53
- sqlspec/utils/fixtures.py,sha256=ni51rAuen6S1wuSi1kUwn6Qh25B-XrewPEsjV8G4gQ0,2029
54
- sqlspec/utils/module_loader.py,sha256=tmMy9JcTTQETcwT8Wt8adCIuqr4zinQnPbCiBJ6JTSQ,2703
55
- sqlspec/utils/sync_tools.py,sha256=xxHZ-5rnTrPEUNr7gxQUVvJd0NGJeO_MgisR8X7sI3c,10425
56
- sqlspec/utils/text.py,sha256=Ya-fWBcfkQRhguNs7MNFIYtAUiArBo62w8sRPHavMWM,1476
57
- sqlspec-0.9.0.dist-info/METADATA,sha256=zKfhk4Zk5WwoRzWlGqFTERFpN5kDOaFW77k7gU52tBo,9616
58
- sqlspec-0.9.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
59
- sqlspec-0.9.0.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
60
- sqlspec-0.9.0.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
61
- sqlspec-0.9.0.dist-info/RECORD,,