sqlspec 0.19.0__py3-none-any.whl → 0.21.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 (64) hide show
  1. sqlspec/adapters/adbc/driver.py +192 -28
  2. sqlspec/adapters/asyncmy/driver.py +72 -15
  3. sqlspec/adapters/asyncpg/config.py +23 -3
  4. sqlspec/adapters/asyncpg/driver.py +30 -14
  5. sqlspec/adapters/bigquery/driver.py +79 -9
  6. sqlspec/adapters/duckdb/driver.py +39 -56
  7. sqlspec/adapters/oracledb/driver.py +99 -52
  8. sqlspec/adapters/psqlpy/driver.py +89 -31
  9. sqlspec/adapters/psycopg/driver.py +11 -23
  10. sqlspec/adapters/sqlite/driver.py +77 -8
  11. sqlspec/base.py +11 -11
  12. sqlspec/builder/__init__.py +1 -1
  13. sqlspec/builder/_base.py +4 -5
  14. sqlspec/builder/_column.py +3 -3
  15. sqlspec/builder/_ddl.py +5 -1
  16. sqlspec/builder/_delete.py +5 -6
  17. sqlspec/builder/_insert.py +6 -7
  18. sqlspec/builder/_merge.py +5 -5
  19. sqlspec/builder/_parsing_utils.py +3 -3
  20. sqlspec/builder/_select.py +6 -5
  21. sqlspec/builder/_update.py +4 -5
  22. sqlspec/builder/mixins/_cte_and_set_ops.py +5 -1
  23. sqlspec/builder/mixins/_delete_operations.py +5 -1
  24. sqlspec/builder/mixins/_insert_operations.py +5 -1
  25. sqlspec/builder/mixins/_join_operations.py +5 -0
  26. sqlspec/builder/mixins/_merge_operations.py +5 -1
  27. sqlspec/builder/mixins/_order_limit_operations.py +5 -1
  28. sqlspec/builder/mixins/_pivot_operations.py +4 -1
  29. sqlspec/builder/mixins/_select_operations.py +5 -1
  30. sqlspec/builder/mixins/_update_operations.py +5 -1
  31. sqlspec/builder/mixins/_where_clause.py +5 -1
  32. sqlspec/config.py +15 -15
  33. sqlspec/core/compiler.py +11 -3
  34. sqlspec/core/filters.py +30 -9
  35. sqlspec/core/parameters.py +67 -67
  36. sqlspec/core/result.py +62 -31
  37. sqlspec/core/splitter.py +160 -34
  38. sqlspec/core/statement.py +95 -14
  39. sqlspec/driver/_common.py +12 -3
  40. sqlspec/driver/mixins/_result_tools.py +21 -4
  41. sqlspec/driver/mixins/_sql_translator.py +45 -7
  42. sqlspec/extensions/aiosql/adapter.py +1 -1
  43. sqlspec/extensions/litestar/_utils.py +1 -1
  44. sqlspec/extensions/litestar/config.py +186 -2
  45. sqlspec/extensions/litestar/handlers.py +21 -0
  46. sqlspec/extensions/litestar/plugin.py +237 -3
  47. sqlspec/loader.py +12 -12
  48. sqlspec/migrations/loaders.py +5 -2
  49. sqlspec/migrations/utils.py +2 -2
  50. sqlspec/storage/backends/obstore.py +1 -3
  51. sqlspec/storage/registry.py +1 -1
  52. sqlspec/utils/__init__.py +7 -0
  53. sqlspec/utils/deprecation.py +6 -0
  54. sqlspec/utils/fixtures.py +239 -30
  55. sqlspec/utils/module_loader.py +5 -1
  56. sqlspec/utils/serializers.py +6 -0
  57. sqlspec/utils/singleton.py +6 -0
  58. sqlspec/utils/sync_tools.py +10 -1
  59. {sqlspec-0.19.0.dist-info → sqlspec-0.21.0.dist-info}/METADATA +230 -44
  60. {sqlspec-0.19.0.dist-info → sqlspec-0.21.0.dist-info}/RECORD +64 -64
  61. {sqlspec-0.19.0.dist-info → sqlspec-0.21.0.dist-info}/WHEEL +0 -0
  62. {sqlspec-0.19.0.dist-info → sqlspec-0.21.0.dist-info}/entry_points.txt +0 -0
  63. {sqlspec-0.19.0.dist-info → sqlspec-0.21.0.dist-info}/licenses/LICENSE +0 -0
  64. {sqlspec-0.19.0.dist-info → sqlspec-0.21.0.dist-info}/licenses/NOTICE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlspec
3
- Version: 0.19.0
3
+ Version: 0.21.0
4
4
  Summary: SQL Experiments in Python
5
5
  Project-URL: Discord, https://discord.gg/litestar
6
6
  Project-URL: Issue, https://github.com/litestar-org/sqlspec/issues/
@@ -130,16 +130,21 @@ These are just a few examples that demonstrate SQLSpec's flexibility. Each of th
130
130
  ```python
131
131
  from sqlspec import SQLSpec
132
132
  from sqlspec.adapters.sqlite import SqliteConfig
133
- from pydantic import BaseModel
133
+
134
134
  # Create SQLSpec instance and configure database
135
- sql = SQLSpec()
136
- config = sql.add_config(SqliteConfig(database=":memory:"))
135
+ db_manager = SQLSpec()
136
+ config = SqliteConfig(pool_config={"database": ":memory:"}) # Thread local pooling
137
+ db_manager.add_config(config)
137
138
 
138
139
  # Execute queries with automatic result mapping
139
- with sql.provide_session(config) as session:
140
+ with db_manager.provide_session(config) as session:
140
141
  # Simple query
141
142
  result = session.execute("SELECT 'Hello, SQLSpec!' as message")
142
143
  print(result.get_first()) # {'message': 'Hello, SQLSpec!'}
144
+
145
+ # Type-safe single row query
146
+ row = session.select_one("SELECT 'Hello, SQLSpec!' as message")
147
+ print(row) # {'message': 'Hello, SQLSpec!'}
143
148
  ```
144
149
 
145
150
  ### SQL Builder Example (Experimental)
@@ -150,30 +155,94 @@ with sql.provide_session(config) as session:
150
155
  from sqlspec import sql
151
156
 
152
157
  # Build a simple query
153
- query = sql.select("id", "name", "email").from_("users").where("active = ?", True)
154
- print(query.build().sql) # SELECT id, name, email FROM users WHERE active = ?
158
+ query = sql.select("id", "name", "email").from_("users").where("active = ?")
159
+ statement = query.to_statement()
160
+ print(statement.sql) # SELECT id, name, email FROM users WHERE active = ?
155
161
 
156
162
  # More complex example with joins
157
163
  query = (
158
164
  sql.select("u.name", "COUNT(o.id) as order_count")
159
165
  .from_("users u")
160
166
  .left_join("orders o", "u.id = o.user_id")
161
- .where("u.created_at > ?", "2024-01-01")
167
+ .where("u.created_at > ?")
162
168
  .group_by("u.name")
163
- .having("COUNT(o.id) > ?", 5)
169
+ .having("COUNT(o.id) > ?")
164
170
  .order_by("order_count", desc=True)
165
171
  )
166
172
 
167
- # Execute the built query
168
- with sql.provide_session(config) as session:
169
- results = session.execute(query.build())
173
+ # Execute the built query with parameters
174
+ with db_manager.provide_session(config) as session:
175
+ results = session.execute(query, "2024-01-01", 5)
176
+ ```
177
+
178
+ ### Type-Safe Result Mapping
179
+
180
+ SQLSpec supports automatic mapping to typed models using popular libraries:
181
+
182
+ ```python
183
+ from sqlspec import SQLSpec
184
+ from sqlspec.adapters.sqlite import SqliteConfig
185
+ from pydantic import BaseModel
186
+
187
+ class User(BaseModel):
188
+ id: int
189
+ name: str
190
+ email: str
191
+
192
+ db_manager = SQLSpec()
193
+ config = SqliteConfig(pool_config={"database": ":memory:"})
194
+ db_manager.add_config(config)
195
+
196
+ with db_manager.provide_session(config) as session:
197
+ # Create and populate test data
198
+ session.execute_script("""
199
+ CREATE TABLE users (id INTEGER, name TEXT, email TEXT);
200
+ INSERT INTO users VALUES (1, 'Alice', 'alice@example.com');
201
+ """)
202
+ # Map single result to typed model
203
+ user = session.select_one("SELECT * FROM users WHERE id = ?", 1, schema_type=User)
204
+ print(f"User: {user.name} ({user.email})")
205
+
206
+ # Map multiple results
207
+ users = session.select("SELECT * FROM users", schema_type=User)
208
+ for user in users:
209
+ print(f"User: {user.name}")
210
+ ```
211
+
212
+ ### Session Methods Overview
213
+
214
+ SQLSpec provides several convenient methods for executing queries:
215
+
216
+ ```python
217
+ with db_manager.provide_session(config) as session:
218
+ # Execute any SQL and get full result set
219
+ result = session.execute("SELECT * FROM users")
220
+
221
+ # Get single row (raises error if not found)
222
+ user = session.select_one("SELECT * FROM users WHERE id = ?", 1)
223
+
224
+ # Get single row or None (no error if not found)
225
+ maybe_user = session.select_one_or_none("SELECT * FROM users WHERE id = ?", 999)
226
+
227
+ # Execute with many parameter sets (bulk operations)
228
+ session.execute_many(
229
+ "INSERT INTO users (name, email) VALUES (?, ?)",
230
+ [("Bob", "bob@example.com"), ("Carol", "carol@example.com")]
231
+ )
232
+
233
+ # Execute multiple statements as a script
234
+ session.execute_script("""
235
+ CREATE TABLE IF NOT EXISTS logs (id INTEGER, message TEXT);
236
+ INSERT INTO logs (message) VALUES ('System started');
237
+ """)
170
238
  ```
171
239
 
172
- ### DuckDB LLM
240
+ <details>
241
+ <summary>🦆 DuckDB LLM Integration Example</summary>
173
242
 
174
243
  This is a quick implementation using some of the built-in Secret and Extension management features of SQLSpec's DuckDB integration.
175
244
 
176
- It allows you to communicate with any compatible OpenAPI conversations endpoint (such as Ollama). This example:
245
+ It allows you to communicate with any compatible OpenAI conversations endpoint (such as Ollama). This example:
177
246
 
178
247
  - auto installs the `open_prompt` DuckDB extensions
179
248
  - automatically creates the correct `open_prompt` compatible secret required to use the extension
@@ -193,11 +262,12 @@ from pydantic import BaseModel
193
262
  class ChatMessage(BaseModel):
194
263
  message: str
195
264
 
196
- sql = SQLSpec()
197
- etl_config = sql.add_config(
198
- DuckDBConfig(
199
- extensions=[{"name": "open_prompt"}],
200
- secrets=[
265
+ db_manager = SQLSpec()
266
+ config = DuckDBConfig(
267
+ pool_config={"database": ":memory:"},
268
+ driver_features={
269
+ "extensions": [{"name": "open_prompt"}],
270
+ "secrets": [
201
271
  {
202
272
  "secret_type": "open_prompt",
203
273
  "name": "open_prompt",
@@ -208,9 +278,11 @@ etl_config = sql.add_config(
208
278
  },
209
279
  }
210
280
  ],
211
- )
281
+ },
212
282
  )
213
- with sql.provide_session(etl_config) as session:
283
+ db_manager.add_config(config)
284
+
285
+ with db_manager.provide_session(config) as session:
214
286
  result = session.select_one(
215
287
  "SELECT open_prompt(?)",
216
288
  "Can you write a haiku about DuckDB?",
@@ -219,7 +291,10 @@ with sql.provide_session(etl_config) as session:
219
291
  print(result) # result is a ChatMessage pydantic model
220
292
  ```
221
293
 
222
- ### DuckDB Gemini Embeddings
294
+ </details>
295
+
296
+ <details>
297
+ <summary>🔗 DuckDB Gemini Embeddings Example</summary>
223
298
 
224
299
  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.
225
300
 
@@ -246,11 +321,12 @@ API_URL = (
246
321
  f"https://generativelanguage.googleapis.com/v1beta/models/{EMBEDDING_MODEL}:embedContent?key=${GOOGLE_API_KEY}"
247
322
  )
248
323
 
249
- sql = SQLSpec()
250
- etl_config = sql.add_config(
251
- DuckDBConfig(
252
- extensions=[{"name": "vss"}, {"name": "http_client"}],
253
- on_connection_create=lambda connection: connection.execute(f"""
324
+ db_manager = SQLSpec()
325
+ config = DuckDBConfig(
326
+ pool_config={"database": ":memory:"},
327
+ driver_features={
328
+ "extensions": [{"name": "vss"}, {"name": "http_client"}],
329
+ "on_connection_create": lambda connection: connection.execute(f"""
254
330
  CREATE IF NOT EXISTS MACRO generate_embedding(q) AS (
255
331
  WITH __request AS (
256
332
  SELECT http_post(
@@ -269,16 +345,77 @@ etl_config = sql.add_config(
269
345
  FROM __request,
270
346
  );
271
347
  """),
272
- )
348
+ },
273
349
  )
274
- with sql.provide_session(etl_config) as session:
350
+ db_manager.add_config(config)
351
+
352
+ with db_manager.provide_session(config) as session:
275
353
  result = session.execute("SELECT generate_embedding('example text')")
276
354
  print(result.get_first()) # result is a dictionary when `schema_type` is omitted.
277
355
  ```
278
356
 
357
+ </details>
358
+
359
+ ### SQL File Loading
360
+
361
+ SQLSpec can load and manage SQL queries from files using aiosql-style named queries:
362
+
363
+ ```python
364
+ from sqlspec import SQLSpec
365
+ from sqlspec.loader import SQLFileLoader
366
+ from sqlspec.adapters.sqlite import SqliteConfig
367
+
368
+ # Initialize with SQL file loader
369
+ db_manager = SQLSpec(loader=SQLFileLoader())
370
+ config = SqliteConfig(pool_config={"database": ":memory:"})
371
+ db_manager.add_config(config)
372
+
373
+ # Load SQL files from directory
374
+ db_manager.load_sql_files("./sql")
375
+
376
+ # SQL file: ./sql/users.sql
377
+ # -- name: get_user
378
+ # SELECT * FROM users WHERE id = ?
379
+ #
380
+ # -- name: create_user
381
+ # INSERT INTO users (name, email) VALUES (?, ?)
382
+
383
+ with db_manager.provide_session(config) as session:
384
+ # Use named queries from files
385
+ user = session.execute(db_manager.get_sql("get_user"), 1)
386
+ session.execute(db_manager.get_sql("create_user"), "Alice", "alice@example.com")
387
+ ```
388
+
389
+ ### Database Migrations
390
+
391
+ SQLSpec includes a built-in migration system for managing schema changes. After configuring your database with migration settings, use the CLI commands:
392
+
393
+ ```bash
394
+ # Initialize migration directory
395
+ sqlspec db init migrations
396
+
397
+ # Generate new migration file
398
+ sqlspec db make-migrations "Add user table"
399
+
400
+ # Apply all pending migrations
401
+ sqlspec db upgrade
402
+
403
+ # Show current migration status
404
+ sqlspec db show-current-revision
405
+ ```
406
+
407
+ For Litestar applications, replace `sqlspec` with your application command:
408
+
409
+ ```bash
410
+ # Using Litestar CLI integration
411
+ litestar db make-migrations "Add user table"
412
+ litestar db upgrade
413
+ litestar db show-current-revision
414
+ ```
415
+
279
416
  ### Basic Litestar Integration
280
417
 
281
- In this example we are going to demonstrate how to create a basic configuration that integrates into Litestar.
418
+ In this example we demonstrate how to create a basic configuration that integrates into Litestar:
282
419
 
283
420
  ```py
284
421
  # /// script
@@ -301,7 +438,7 @@ async def simple_sqlite(db_session: AiosqliteDriver) -> dict[str, str]:
301
438
 
302
439
  sqlspec = SQLSpec(
303
440
  config=DatabaseConfig(
304
- config=AiosqliteConfig(),
441
+ config=AiosqliteConfig(pool_config={"database": ":memory:"}), # built in local pooling
305
442
  commit_mode="autocommit"
306
443
  )
307
444
  )
@@ -320,6 +457,41 @@ The primary goal at this stage is to establish a **native connectivity interface
320
457
 
321
458
  This list is not final. If you have a driver you'd like to see added, please open an issue or submit a PR!
322
459
 
460
+ ### Configuration Examples
461
+
462
+ Each adapter uses a consistent configuration pattern with `pool_config` for connection parameters:
463
+
464
+ ```python
465
+ # SQLite
466
+ SqliteConfig(pool_config={"database": "/path/to/database.db"})
467
+ AiosqliteConfig(pool_config={"database": "/path/to/database.db"}) # Async
468
+ AdbcConfig(connection_config={"uri": "sqlite:///path/to/database.db"}) # ADBC
469
+
470
+ # PostgreSQL (multiple drivers available)
471
+ PsycopgSyncConfig(pool_config={"host": "localhost", "database": "mydb", "user": "user", "password": "pass"})
472
+ PsycopgAsyncConfig(pool_config={"host": "localhost", "database": "mydb", "user": "user", "password": "pass"}) # Async
473
+ AsyncpgConfig(pool_config={"host": "localhost", "database": "mydb", "user": "user", "password": "pass"})
474
+ PsqlpyConfig(pool_config={"dsn": "postgresql://user:pass@localhost/mydb"})
475
+ AdbcConfig(connection_config={"uri": "postgresql://user:pass@localhost/mydb"}) # ADBC
476
+
477
+ # DuckDB
478
+ DuckDBConfig(pool_config={"database": ":memory:"}) # or file path
479
+ AdbcConfig(connection_config={"uri": "duckdb:///path/to/database.duckdb"}) # ADBC
480
+
481
+ # MySQL
482
+ AsyncmyConfig(pool_config={"host": "localhost", "database": "mydb", "user": "user", "password": "pass"}) # Async
483
+
484
+ # Oracle
485
+ OracleSyncConfig(pool_config={"host": "localhost", "service_name": "XEPDB1", "user": "user", "password": "pass"})
486
+ OracleAsyncConfig(pool_config={"host": "localhost", "service_name": "XEPDB1", "user": "user", "password": "pass"}) # Async
487
+
488
+ # BigQuery
489
+ BigQueryConfig(pool_config={"project": "my-project", "dataset": "my_dataset"})
490
+ AdbcConfig(connection_config={"driver_name": "adbc_driver_bigquery", "project_id": "my-project", "dataset_id": "my_dataset"}) # ADBC
491
+ ```
492
+
493
+ ### Supported Drivers
494
+
323
495
  | Driver | Database | Mode | Status |
324
496
  | :----------------------------------------------------------------------------------------------------------- | :--------- | :------ | :--------- |
325
497
  | [`adbc`](https://arrow.apache.org/adbc/) | Postgres | Sync | ✅ |
@@ -342,21 +514,35 @@ This list is not final. If you have a driver you'd like to see added, please ope
342
514
  | [`asyncmy`](https://github.com/long2ice/asyncmy) | MySQL | Async | ✅ |
343
515
  | [`snowflake`](https://docs.snowflake.com) | Snowflake | Sync | 🗓️ |
344
516
 
345
- ## Proposed Project Structure
517
+ ## Project Structure
346
518
 
347
519
  - `sqlspec/`:
348
- - `adapters/`: Contains all database drivers and associated configuration.
349
- - `extensions/`:
350
- - `litestar/`: Litestar framework integration ✅
351
- - `fastapi/`: Future home of `fastapi` integration.
352
- - `flask/`: Future home of `flask` integration.
353
- - `*/`: Future home of your favorite framework integration
354
- - `base.py`: Contains base protocols for database configurations.
355
- - `statement/`: Contains the SQL statement system with builders, validation, and transformation.
356
- - `storage/`: Contains unified storage operations for data import/export.
357
- - `utils/`: Contains utility functions used throughout the project.
358
- - `exceptions.py`: Contains custom exceptions for SQLSpec.
359
- - `typing.py`: Contains type hints, type guards and several facades for optional libraries that are not required for the core functionality of SQLSpec.
520
+ - `adapters/`: Database-specific drivers and configuration classes for all supported databases
521
+ - `extensions/`: Framework integrations and external library adapters
522
+ - `litestar/`: Litestar web framework integration with dependency injection
523
+ - `aiosql/`: Integration with aiosql for SQL file loading ✅
524
+ - Future integrations: `fastapi/`, `flask/`, etc.
525
+ - `builder/`: Fluent SQL query builder with method chaining and type safety
526
+ - `mixins/`: Composable query building operations (WHERE, JOIN, ORDER BY, etc.)
527
+ - `core/`: Core query processing infrastructure
528
+ - `statement.py`: SQL statement wrapper with metadata and type information
529
+ - `parameters.py`: Parameter style conversion and validation
530
+ - `result.py`: Result set handling and type mapping
531
+ - `compiler.py`: SQL compilation and validation using SQLGlot
532
+ - `cache.py`: Statement caching for performance optimization
533
+ - `driver/`: Base driver system with sync/async support and transaction management
534
+ - `mixins/`: Shared driver capabilities (result processing, SQL translation)
535
+ - `migrations/`: Database migration system with CLI commands
536
+ - `storage/`: Unified data import/export operations with multiple backends
537
+ - `backends/`: Storage backend implementations (fsspec, obstore)
538
+ - `utils/`: Utility functions, type guards, and helper tools
539
+ - `base.py`: Main SQLSpec registry and configuration manager
540
+ - `loader.py`: SQL file loading system for `.sql` files
541
+ - `cli.py`: Command-line interface for migrations and database operations
542
+ - `config.py`: Base configuration classes and protocols
543
+ - `protocols.py`: Type protocols for runtime type checking
544
+ - `exceptions.py`: Custom exception hierarchy for SQLSpec
545
+ - `typing.py`: Type definitions, guards, and optional dependency facades
360
546
 
361
547
  ## Get Involved
362
548
 
@@ -4,11 +4,11 @@ sqlspec/__metadata__.py,sha256=IUw6MCTy1oeUJ1jAVYbuJLkOWbiAWorZ5W-E-SAD9N4,395
4
4
  sqlspec/_serialization.py,sha256=6U5-smk2h2yl0i6am2prtOLJTdu4NJQdcLlSfSUMaUQ,2590
5
5
  sqlspec/_sql.py,sha256=j9WljOgCme4jTfL6NegEWOhK-Rr3JEmhtbneh8ZN1bQ,45221
6
6
  sqlspec/_typing.py,sha256=jv-7QHGLrJLfnP86bR-Xcmj3PDoddNZEKDz_vYRBiAU,22684
7
- sqlspec/base.py,sha256=ajQUBYz2NhDFZ8cMJ2nSNuNWT73mfRcaId08n74YR88,25468
7
+ sqlspec/base.py,sha256=p3qX3nq1qPuLz6AEVizbZ4xpWhMoDXNc7zkPK9ecJac,25467
8
8
  sqlspec/cli.py,sha256=Fe5Wbnrb_fkE9qm4gbBEXx3d0Q7VR-S-1t76ouAx2mg,20120
9
- sqlspec/config.py,sha256=cQGBxaUACaiIhhZ9GOQ6DvNMsrVowR212_13gHdLMvc,21620
9
+ sqlspec/config.py,sha256=PQKKLXst_uMvqvTSQib6qMZfJd-g3Kqqlp7XLn9kA8A,21640
10
10
  sqlspec/exceptions.py,sha256=zBnzQOfYAgqX04GoaC9Io6ardzinldkEuZ3YtR5vr9U,6071
11
- sqlspec/loader.py,sha256=HDfMZDj7l9aLAxeZR2Rv-HC-dWah4CPkwZ6HKQ7yP-Y,23398
11
+ sqlspec/loader.py,sha256=R_lcI8Jg3Jh9jUDFvQyKbBzx20vKH50BKYt8gvTKq7c,23400
12
12
  sqlspec/protocols.py,sha256=Of6uJyxvawExCEyR3u7jbxOckUcwG0HHOEXmfHyev40,13106
13
13
  sqlspec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  sqlspec/typing.py,sha256=yj8D8O-pkfUVZDfVHEgQaB95-5alwgQbp_sqNJOVhvQ,6301
@@ -16,7 +16,7 @@ sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
16
16
  sqlspec/adapters/adbc/__init__.py,sha256=CqBaEahvHbQ5NxmBJuuCtZ8v5wuaPgbqSSe9WUhglWY,336
17
17
  sqlspec/adapters/adbc/_types.py,sha256=htTZ20qVo6Iod_ooUTLGd0xAL8AUYA4qeOexTaLQG3Q,351
18
18
  sqlspec/adapters/adbc/config.py,sha256=gekx9tzOA5vpcMWqczX5B5xKMbXCEnyYWavrrYll7j0,13583
19
- sqlspec/adapters/adbc/driver.py,sha256=E36PI499cMsi-CGeRNe21lkiIwZKNSHGusmxLxy6mIQ,18809
19
+ sqlspec/adapters/adbc/driver.py,sha256=mbkWuxQdXraEH6nNJcjd4HOdCnNW7VWcYMtS7JVmKBo,24085
20
20
  sqlspec/adapters/aiosqlite/__init__.py,sha256=rgooFeHm7IsnC9fOnRQwMvbJdgkTvhnNTYphayVz9q8,869
21
21
  sqlspec/adapters/aiosqlite/_types.py,sha256=M8VqaW6iCigfExhdJM2yPAN09Ue2yBoBL59-QXGBObo,355
22
22
  sqlspec/adapters/aiosqlite/config.py,sha256=MmCl_0Be89OijlcY1EUgA87A1NNtF1CHjl6p_R6Dfks,8112
@@ -25,114 +25,114 @@ sqlspec/adapters/aiosqlite/pool.py,sha256=cuzkXA2hMMk16aX28aNRaTmLDmqlepka9QhcWs
25
25
  sqlspec/adapters/asyncmy/__init__.py,sha256=wBgak4MA3ySaGQHUxrnv3HdSVQKKRWf1_DmENL0LkWs,531
26
26
  sqlspec/adapters/asyncmy/_types.py,sha256=WbwREzJkLYmqd4c7A7cu04WaD5g7-n35ZETHZvbP1Z8,250
27
27
  sqlspec/adapters/asyncmy/config.py,sha256=DHk-MTkBcGPPmYI4RMJbUWWKbcu1ZaoG_8LS0aZR0P8,6603
28
- sqlspec/adapters/asyncmy/driver.py,sha256=DitgufSL3N4LlDOq_UB741f4czPPPTJrusLbuiSjagY,9911
28
+ sqlspec/adapters/asyncmy/driver.py,sha256=M7CSA1NL7ZIRmOCZ3Qra6g8TXb6hptuTMXzblnEj3mA,11545
29
29
  sqlspec/adapters/asyncpg/__init__.py,sha256=h3lg3pLBLrS9ABBt5yKFKhGL69RpOlASYSqVCuAuURY,567
30
30
  sqlspec/adapters/asyncpg/_types.py,sha256=p65WrqfUl2cx5Md759_aV8m_gHP-PyCzNk48bLhDQkc,425
31
- sqlspec/adapters/asyncpg/config.py,sha256=WrP-PZeWbumpKb8VrJYD-8hpBkjrNG1PQ5kfR2vFWo4,8867
32
- sqlspec/adapters/asyncpg/driver.py,sha256=ZEuCeyrpaIQme0cF-hupGlfxbkN9ReZBjflpgbEJEw8,11073
31
+ sqlspec/adapters/asyncpg/config.py,sha256=LKBO_5LP3SJjR1blp7JBq6QyfaZ_H1IeiLzCGtxsxs8,9661
32
+ sqlspec/adapters/asyncpg/driver.py,sha256=IsYZ9fTWNdN2EIcHtedL3Y5zCH2-sgtcJLA0aCc-CAw,11641
33
33
  sqlspec/adapters/bigquery/__init__.py,sha256=1nzkWubO4ZObuK27QoeGfS05ed5v02NU4GaXrvqjlw0,504
34
34
  sqlspec/adapters/bigquery/_types.py,sha256=gECmbiSmZmnR-xJpmznhnva4SbhhdcYQ09jBdqMAmOs,255
35
35
  sqlspec/adapters/bigquery/config.py,sha256=Dp0LKg9p88n4C4WQMaf9_A7YicIJT9DgcCXci46NTFk,9434
36
- sqlspec/adapters/bigquery/driver.py,sha256=gAQWd8R3NaqYzbPkNr59kxKVKW8Yz4KmU7BjUJXesoo,17745
36
+ sqlspec/adapters/bigquery/driver.py,sha256=ymcG3k_EJ_dmhx6lYWB4MOgF5ng2Utux-DWy3TMkl4Q,19725
37
37
  sqlspec/adapters/duckdb/__init__.py,sha256=c5GCYxhTFhvB8fUTt_d-dipaQfM8X5kv4GsU47SwJ6E,693
38
38
  sqlspec/adapters/duckdb/_types.py,sha256=4p5nuD1yNs0fmQ5sGxKFx2ru6jUCPrpsYgqfh-uZHM8,270
39
39
  sqlspec/adapters/duckdb/config.py,sha256=7CWXpKWX1NrzO1sORVFfD3TzdVxj62MbujnsBBCGSHQ,10037
40
- sqlspec/adapters/duckdb/driver.py,sha256=TiQ1HEWVJUwxENZFca62slYMqvFzVa11P3nhf8TggTA,12491
40
+ sqlspec/adapters/duckdb/driver.py,sha256=3SBFf7kgqrFcMWGunkVqw8_qDZKC34BcImwqxhgRLfA,11967
41
41
  sqlspec/adapters/duckdb/pool.py,sha256=2P4iAhJQ070wA_0O_ZXNfOCiXFxaW7zeyoL05A7izL4,8413
42
42
  sqlspec/adapters/oracledb/__init__.py,sha256=AUsZ8m9tDgNwxv9m4LtkIs9Ib6hOtBrGNm-Ee4HWNq0,843
43
43
  sqlspec/adapters/oracledb/_types.py,sha256=7Oe0DmA1ixptQjPMioQF7r2i451zzN2BMut2jTi2c3U,808
44
44
  sqlspec/adapters/oracledb/config.py,sha256=xdVObosNsGVhtuiWRfMQ9_78pO25vCOUIy_ktM8sYWc,12037
45
- sqlspec/adapters/oracledb/driver.py,sha256=XwkQGEWksXmS5wT13-vDuwqN5D203Z7C1KzuWWOr55g,19275
45
+ sqlspec/adapters/oracledb/driver.py,sha256=CSMo5w4lMZbhPj6BPZtjSXRZmLzJedbnT-x4OJ3tqhU,19360
46
46
  sqlspec/adapters/oracledb/migrations.py,sha256=FwjkMBbzEQRkvZdfvpPUyPiWHCP6A_IVg6_6RIYSXYA,9136
47
47
  sqlspec/adapters/psqlpy/__init__.py,sha256=ABve2Oj-G-fxMO8WRJ0XzxEw2cs5H3INDnmUI99l8gc,526
48
48
  sqlspec/adapters/psqlpy/_types.py,sha256=tG4jwQtBB6mCX5KU5x3hAhxsQUQlQEzbCsYhU3IouVc,269
49
49
  sqlspec/adapters/psqlpy/config.py,sha256=ZDZKscjDViyID78SNfOeY9IZZFYQD__hJoYLFBm4TCo,7908
50
- sqlspec/adapters/psqlpy/driver.py,sha256=Rxpoezw6mrnqlhEB0DrYUHQK7ed-wLtgXYLV2gtJlwI,16146
50
+ sqlspec/adapters/psqlpy/driver.py,sha256=nSjJ-2md9TctnDALA13WkfJSofXZTs6gz6unn1iN3iE,16985
51
51
  sqlspec/adapters/psycopg/__init__.py,sha256=swmTz8xlj6LvB-i78tBSE_T-sez2e6lFJW2cMzNJEVE,862
52
52
  sqlspec/adapters/psycopg/_types.py,sha256=UJBKDWgARoSR6UxSy8zcIP7HSHTpXU5moJTsjDj0M4M,563
53
53
  sqlspec/adapters/psycopg/config.py,sha256=PP6iwIKvINzOXZE4b99auCgR6eEfzSX-sFyHcBMb-xg,16558
54
- sqlspec/adapters/psycopg/driver.py,sha256=6Xp3MmMc7xZBpL8mdVlR5FMInXsREkob588t_oNHoVE,26762
54
+ sqlspec/adapters/psycopg/driver.py,sha256=GDzH3cJlIRVOQequqAGPKKh2IET_p0X3ai6WTn_WYZU,26525
55
55
  sqlspec/adapters/sqlite/__init__.py,sha256=hGZX0D6vHJMSah60_hgWHoLmcqKGm1lYcz2r02wc0p0,574
56
56
  sqlspec/adapters/sqlite/_types.py,sha256=4Nqolhk8s4mwLw13BwUjuyhAbM9BsKwJCvcmjMWkhaY,246
57
57
  sqlspec/adapters/sqlite/config.py,sha256=zXKipKuTPjFSUgdc5tiHAZF5hW33jvrrElNJAQhpOQM,5069
58
- sqlspec/adapters/sqlite/driver.py,sha256=52WzO8cGIERBv6fWYQYp6Myti9wYHyBzuLN8dJxsNZY,9409
58
+ sqlspec/adapters/sqlite/driver.py,sha256=DABBt0cttdTlQdkqxwgV66AMMNp543K4_qanslTrHWI,11341
59
59
  sqlspec/adapters/sqlite/pool.py,sha256=bKIrf3hgach6bMyFQORCdqnpN-sTfMagB3l61uPCGJI,4435
60
- sqlspec/builder/__init__.py,sha256=o328O3dNRj4vGXmOclIxDLzmiwkUCE_Aqmqv-LT5lWY,1665
61
- sqlspec/builder/_base.py,sha256=SkyDJYZ7QCBi4CHZQ_0e1SvA05-Hhfbvi_qS7BwjcVA,18022
62
- sqlspec/builder/_column.py,sha256=GfTMFPzJIhwDVKefMbyom-HoEj-KSKB92-XoZfchnEo,13289
63
- sqlspec/builder/_ddl.py,sha256=AyL0d1BnHkESMoZQhdFQTgGEVYRiRt-cgDiX4IKE5Vg,56533
64
- sqlspec/builder/_delete.py,sha256=xWA5nQB3UB8kpEGXN2k5ynt4cGZ7blkNoURpI0bKoeg,2264
60
+ sqlspec/builder/__init__.py,sha256=iEniDtKnYOhPOgN7OhcvAO5leYdzXQTlFE8XXKWvhzg,1652
61
+ sqlspec/builder/_base.py,sha256=yc3qIR6W3UF9SjNN6XGK7Ya45U1W8WMtK5GrnSPM-K4,17945
62
+ sqlspec/builder/_column.py,sha256=HyDaui_qMuqID7SySL_Z7RKFSSbXGgngbkoCR9V2tcY,13245
63
+ sqlspec/builder/_ddl.py,sha256=3aZldDIlhxH61p47rrIT_CjQPte6uLTI-cdtDigwLAw,56618
64
+ sqlspec/builder/_delete.py,sha256=icYjrxXIMSWso5TBkd712kmyUZMCWIxdIZHH24nCPAA,2130
65
65
  sqlspec/builder/_expression_wrappers.py,sha256=HTl8qAFD4sZNXLD2akkJWGCPse2HWS237mTGE4Cx_7I,1244
66
- sqlspec/builder/_insert.py,sha256=kqjjIfGcy49xDTTOMmb4GBvWsJqT1GOr_1Y0syAIsok,16863
67
- sqlspec/builder/_merge.py,sha256=95PLQSKA3zjk0wTZG3m817fTZpsS95PrS2qF34iLAP8,2004
68
- sqlspec/builder/_parsing_utils.py,sha256=RH8OFBFAetalEgHW5JLcEyyCdW_awVdy07MjboOkqL4,8383
69
- sqlspec/builder/_select.py,sha256=m5sfyuAssjlNimLLNBAeFooVIfM2FgKN1boPfdsOkaA,5785
70
- sqlspec/builder/_update.py,sha256=QieiguEq9T_UECv10f1xwQJp58gc3w246cvtCDpPwuw,6020
66
+ sqlspec/builder/_insert.py,sha256=hPL0yCNfqhC0tQqiBNK12CNo1g_qV6TagqwERB0UmbQ,16686
67
+ sqlspec/builder/_merge.py,sha256=_Qs6YnJa0_6-pb21zk03PxDWsC7DdZnYfGxJfz-P6Ao,1886
68
+ sqlspec/builder/_parsing_utils.py,sha256=TXwevy07a6yC2jLVLpZr04hni8opiCCOuCZtRmu4qvU,8324
69
+ sqlspec/builder/_select.py,sha256=aAPZs1iY7n3NH2ihg0m29pqNr80MW6l5dDbvIXfgGEk,5709
70
+ sqlspec/builder/_update.py,sha256=J-JtwbG5YDSrYKcecztcVYw0Fg0ZHXNCVndpPWb-a68,5900
71
71
  sqlspec/builder/mixins/__init__.py,sha256=YXhAzKmQbQtne5j26SKWY8PUxwosl0RhlhLoahAdkj0,1885
72
- sqlspec/builder/mixins/_cte_and_set_ops.py,sha256=p5O9m_jvpaWxv1XP9Ys2DRI-qOTq30rr2EwYjAbIT8o,9088
73
- sqlspec/builder/mixins/_delete_operations.py,sha256=l0liajnoAfRgtWtyStuAIfxreEFRkNO4DtBwyGqAfic,1198
74
- sqlspec/builder/mixins/_insert_operations.py,sha256=ECFuX52fNYYxWt11e1n8jHx9wu5_RJSnmm9Dl_aXnIY,10326
75
- sqlspec/builder/mixins/_join_operations.py,sha256=8o_aApK5cmJbNCNfWa4bs5fR2zgQUjon5p-oyiW41Qw,11440
76
- sqlspec/builder/mixins/_merge_operations.py,sha256=KnvXxHKEJu3ofuQsLJlPf7H4mdkH4mKwGHoXtwzdK1o,24191
77
- sqlspec/builder/mixins/_order_limit_operations.py,sha256=KrTXE0HmKCMn4AkNFyMhEZrmJ2Dl-o5kSiCjk2jNIKM,5499
78
- sqlspec/builder/mixins/_pivot_operations.py,sha256=j5vdzXuEqB1Jn3Ie_QjVwSH2_OEi65oZ64bQJHd3jXo,6108
79
- sqlspec/builder/mixins/_select_operations.py,sha256=7CwKu5pt5Nu4tdFIXciQOnd6IcbiRVO8YcOFWHePafg,35239
80
- sqlspec/builder/mixins/_update_operations.py,sha256=rcmnmSSwHSujqe0gd-dKsWHLX9nPMS1we1Y3_h4S7G4,8654
81
- sqlspec/builder/mixins/_where_clause.py,sha256=1iz7Y2x_ooG2bOCu2zX0v5_bkGFpAckVQKvnyrR1JNQ,36373
72
+ sqlspec/builder/mixins/_cte_and_set_ops.py,sha256=gANbAnL7ulkIMS1NG47nd_5laEsjwmEaROu-kTVbbF4,9152
73
+ sqlspec/builder/mixins/_delete_operations.py,sha256=LCzXoNtPUVgJ5KxhKoQj-METq51g5aDqoEmDmB66e08,1271
74
+ sqlspec/builder/mixins/_insert_operations.py,sha256=ipU1Hhue6MRFfbouDDXyONGC9-jmW7LYuo4HuMtioJs,10437
75
+ sqlspec/builder/mixins/_join_operations.py,sha256=TjVK6uJjhzbg4kmbMBCQkuW-UgTKqpFHvaKcSFOeB_w,11530
76
+ sqlspec/builder/mixins/_merge_operations.py,sha256=v2JZbyOZyT5mS0cJo82ckjE9eR2LqoAS-YO2NJWK2a4,24297
77
+ sqlspec/builder/mixins/_order_limit_operations.py,sha256=i5QXZ_1aCzAhv3VG4Tp08kW8vYqEHU04TRoZPZgS2KA,5573
78
+ sqlspec/builder/mixins/_pivot_operations.py,sha256=s3b2zSOL0zEXEGXo1lBm5MuqXWl15qMww_krsmFqj3I,6163
79
+ sqlspec/builder/mixins/_select_operations.py,sha256=GysHSEoO55JSzkqZVuRFVvIP0URN1kYq0NoE-5Alye8,35338
80
+ sqlspec/builder/mixins/_update_operations.py,sha256=izXw0ZeQQeMS0wQRNniEBKIlEaNIking89uAcLSbYLk,8752
81
+ sqlspec/builder/mixins/_where_clause.py,sha256=IBgtEB0LWF9BYKCblJOU8oAbKK-AO2-fObQnhUwXSCE,36476
82
82
  sqlspec/core/__init__.py,sha256=4pD6ymg_sZxh9QyAmsk3oNyvUWPoQj9qktg0uNJVp6k,5264
83
83
  sqlspec/core/cache.py,sha256=835tHhe3fan9_h_Y9CJ-4aAl8K-0cNMwfQzcxMzjlqQ,24837
84
- sqlspec/core/compiler.py,sha256=CdD5WqkUTUspetAN009mXF6aYmHCa1NdG6HbHAhjUMY,12066
85
- sqlspec/core/filters.py,sha256=JQRFw7ND68tWvWQpLIZbDNUGk3mdcw9Yg-ldzLcfVqQ,30475
84
+ sqlspec/core/compiler.py,sha256=VYY9lPXs-iD6agQvPzAy6sAhw-WsHjJ7pGC2Olljs_s,12562
85
+ sqlspec/core/filters.py,sha256=oVUqUYpK6872GrKME0KjwuJ_78RYPwBAJA4PRJgykhQ,30734
86
86
  sqlspec/core/hashing.py,sha256=s8aY6xY0fOwYNIWYgUqmfkALt3BBK1s5Eq30fcnscL8,8529
87
- sqlspec/core/parameters.py,sha256=pOSjWQqmuSgi4-eS3SMIfTcgXLVlM9Qd21G-vfVDymY,49083
88
- sqlspec/core/result.py,sha256=yjc7mbntsrx7atrxb8CAdrvtUNLmSuCCM0N4J_zpzQA,20490
89
- sqlspec/core/splitter.py,sha256=Qb4cyhs8ll3Wm9z11-WWsvpkUYnyEcmBz2KuYMG2evI,27914
90
- sqlspec/core/statement.py,sha256=Ydk_OImRpmbu5EnvM0zgnOWw-H7tCWhoeJHlLZQBHbk,25906
87
+ sqlspec/core/parameters.py,sha256=VK54GH0tJZ07j_1dFCURlaB6FbXAQ8B_mmK8bftDWJk,49123
88
+ sqlspec/core/result.py,sha256=v5ZKVi9J6RiP6Hm5WwJVy1xpSbmJERg0T-fZD7GYRjo,22245
89
+ sqlspec/core/splitter.py,sha256=HIUu9INxAKUzHFqtwcH_VVhDdIBVWBDbV1_mVCHm0U4,31000
90
+ sqlspec/core/statement.py,sha256=gTCnAgHQBeXwKzXXRLe_raso2Hf485wd-gocHWwb8co,28262
91
91
  sqlspec/driver/__init__.py,sha256=QVpDRQGd1GreIP199en6qDbq-cZJcEF5go68DINagUk,569
92
92
  sqlspec/driver/_async.py,sha256=aS5AwY5IYqnVT8ldDLDwz2AMDN94CI9hfsOz-1k-Nus,18992
93
- sqlspec/driver/_common.py,sha256=6vm4MY_CJW3Q8_roIG9hwK18tIMT_zIESmUoUyRSreg,23576
93
+ sqlspec/driver/_common.py,sha256=Fi5NCy5_OVlRKDzUpGsLJn3zDmrsVSsXggMRndIMM1E,23879
94
94
  sqlspec/driver/_sync.py,sha256=wCBV9QfAH8BPjrrVCQc2eM90ai5-FYbKDd81L5sZMS0,18767
95
95
  sqlspec/driver/mixins/__init__.py,sha256=gN4pQyJXxNy0xi91dcMJGA7DQ7TbjGjQI24SSpZc6Go,248
96
- sqlspec/driver/mixins/_result_tools.py,sha256=4dLU-2uL6qCS-s7cve7DmHRZXKGPqdpWtl9OKMOgbR4,6599
97
- sqlspec/driver/mixins/_sql_translator.py,sha256=wRj7neNbMFvzNfy7v0_acBAoZusKHh25UW2WsD_hSlQ,3005
96
+ sqlspec/driver/mixins/_result_tools.py,sha256=fDr1sca6jmeZ8EwTamPhlAh_XnK9moIpWD8Q3ZcEhRM,7103
97
+ sqlspec/driver/mixins/_sql_translator.py,sha256=TACtUUJdx8tJwuq_7g3AR_k0bKokvuJrMEwINyWwdQM,3711
98
98
  sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
99
  sqlspec/extensions/aiosql/__init__.py,sha256=-9cefc9pYPf9vCgALoB-y1DtmcgRjKe2azfl6RIarAA,414
100
- sqlspec/extensions/aiosql/adapter.py,sha256=CXkNZaZq86ZhfYFGx4IFbkHmbIFQKMd9CS6Q2jkMCok,16009
100
+ sqlspec/extensions/aiosql/adapter.py,sha256=WshAQkpNJQ9zCMcL7EuAc6axl90GwRp3oBZ4XOQoftk,16019
101
101
  sqlspec/extensions/litestar/__init__.py,sha256=tOmQ7RHSWOot7p30gk0efxxuP0OCq1opyyZqNmQY7FE,320
102
- sqlspec/extensions/litestar/_utils.py,sha256=o-FuUj1_WkDrLxQxiP6hXDak66XfyRP3QLyEVKrIRjI,1954
102
+ sqlspec/extensions/litestar/_utils.py,sha256=iaicqnnkC5CuDwJKStz0T7lFaYMrgR96SYKZpe71v2g,1950
103
103
  sqlspec/extensions/litestar/cli.py,sha256=X4DlAx3Ry-ccOjAQSxe8SMtyJKCFJVLTbENPU_efKuU,1356
104
- sqlspec/extensions/litestar/config.py,sha256=3UI_vhtbupCLsf1nhUgUpRlCoUS5c0GsAjWvegT0c3c,4462
105
- sqlspec/extensions/litestar/handlers.py,sha256=3LreU8rZvuHaJnKlN09ttu4wSorWJedsuKgeLT-cOEc,9993
106
- sqlspec/extensions/litestar/plugin.py,sha256=u4Mjq16EYb4oxzbONCLdQY2P40Po-e8wQXnVnJKXGCA,5732
104
+ sqlspec/extensions/litestar/config.py,sha256=AXAQsjc_tb88wk31d4v31e_6oOtDKz9DS0NA7wg_3Q8,12414
105
+ sqlspec/extensions/litestar/handlers.py,sha256=DXYO1FUOmG3YE4E7RlxWCPNl8YgbUzVO8pHgwZeuDOw,10625
106
+ sqlspec/extensions/litestar/plugin.py,sha256=4G_r3lna1TClWXnYXJwAYAH52z_t9cbrbLBn83Utmpg,15974
107
107
  sqlspec/extensions/litestar/providers.py,sha256=5LRb5JvRV_XZdNOKkdaIy3j5x-dFCcAi1ea1pgwuapI,18882
108
108
  sqlspec/migrations/__init__.py,sha256=RiDi_HkUIgXtu_33QnRdvYNqcCn-euHUiWwTiPr5IGc,1055
109
109
  sqlspec/migrations/base.py,sha256=vIzQzUtQrNKDec6XUeRHcCBuWU1KNtRCFpOvVxsp3sQ,13093
110
110
  sqlspec/migrations/commands.py,sha256=-De-1RnqjI-BwgOuFvULkJYZccPtmxPPAQTCLlU2TvM,19122
111
- sqlspec/migrations/loaders.py,sha256=WSP3du5tLy9o5SsfvCCU9vhOiOA3ds7L_VzakrSfnmA,12932
111
+ sqlspec/migrations/loaders.py,sha256=wildbpkyHrE--HXspChPOajSHSBUrfG0e6xQ2buze_4,13016
112
112
  sqlspec/migrations/runner.py,sha256=y6fyZi02n8MseKR8XFWXUEOOYQNG_w_DikHVxH9p20M,10730
113
113
  sqlspec/migrations/tracker.py,sha256=hfrZGz8M70SfFniw4aXVtHNg4p8EPFm67vthjfUMUys,6843
114
- sqlspec/migrations/utils.py,sha256=gWnCOdr8pwfkgG-FSUJgRz4q9TlCgOXY_B7n59NrgVA,3746
114
+ sqlspec/migrations/utils.py,sha256=Ft5mS1GFiRPLhfUTfPU4ZnEgOkXDnmEHjeeWwfZDcv4,3737
115
115
  sqlspec/storage/__init__.py,sha256=xWSsq5QXrY7wCsjQYPldfdlm8UEJ-kojU-tWsoldSy0,645
116
116
  sqlspec/storage/capabilities.py,sha256=vyousxls9jISsykgoybpNHlGWN6Hq_pKcsZ5DmKGWvU,3045
117
- sqlspec/storage/registry.py,sha256=-H2ttz41M-DNfkEwANS704BDs1rtyii69G7iqsLGRG4,9424
117
+ sqlspec/storage/registry.py,sha256=4duy0uOupl0X5VNhwUeQMMWPsraKWyIdjDrKFsFcVG0,9424
118
118
  sqlspec/storage/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
119
  sqlspec/storage/backends/base.py,sha256=KS2JRZILoH_R_xsfKtYkqQ5a1r5OOBDSE5KbibTmhGY,5730
120
120
  sqlspec/storage/backends/fsspec.py,sha256=8AX8ULwlApMd6WtHDVJBomdvk5UjPtfMf78TJ86gTC8,15994
121
- sqlspec/storage/backends/obstore.py,sha256=CXad0ug_b3snVNx50SzvvFsDXpkK4LV3jROIrwf6dhg,19783
122
- sqlspec/utils/__init__.py,sha256=4Yd2HnY-DJ6wf4jBrNTM3B41KlCcaFefP7bnux7Q17g,231
121
+ sqlspec/storage/backends/obstore.py,sha256=v9moaiSVKbpl9MOrb9AAhhSXfQb1ifammrT8WeV1xcw,19735
122
+ sqlspec/utils/__init__.py,sha256=cNFX26-bLyZTyTfujUitfDkUy1CeG_d-EIr8kZ0z4W8,474
123
123
  sqlspec/utils/correlation.py,sha256=2jvkAY3nkU3UxNU_9pbBR6cz3A1Q1cGG9IaWSSOIb1Q,4195
124
- sqlspec/utils/deprecation.py,sha256=L5ylPlkrWahXZ3q2Yta2ReFh4pA8rZapLNw9u_mOOEE,3794
125
- sqlspec/utils/fixtures.py,sha256=Qm2uNMaL_6l6tlij-Pm3tLwD906iFK_OXhwZqOx3WgY,1807
124
+ sqlspec/utils/deprecation.py,sha256=iy7xzws6Kx0oQpX94smyZzTY6ijdODrdSEFFEXZfp5o,3980
125
+ sqlspec/utils/fixtures.py,sha256=qnPAdkV91dyKOqslm_TH5UZ8mx4koQMwriE5YPn3PgI,9425
126
126
  sqlspec/utils/logging.py,sha256=zAM7rHJ-KsmAj1yjvU9QFoiwf4Q2hKTere2J62FlllI,3664
127
- sqlspec/utils/module_loader.py,sha256=m5PSN9NwOLd0ZJBuqMVYVi-vaIQMBCVd25vnM3-rv3k,2823
128
- sqlspec/utils/serializers.py,sha256=TKsRryRcYMnb8Z8MGkYGClIxcYvC8CW7MsrPQTJqEcY,154
129
- sqlspec/utils/singleton.py,sha256=SKnszJi1NPeERgX7IjVIGYAYx4XqR1E_rph3bU6olAU,1047
130
- sqlspec/utils/sync_tools.py,sha256=f_bjHTXUaDcsNQY63-L7j5xn2MHfzXro-ShzJM-WLUI,8356
127
+ sqlspec/utils/module_loader.py,sha256=rO4ht-fUSJ3Us7L_7fb_G9bdMCoUSABGUA0pc3ouh9Y,2995
128
+ sqlspec/utils/serializers.py,sha256=GXsTkJbWAhRS7xDMk6WBouZwPeG4sI_brLdMBlIetNg,318
129
+ sqlspec/utils/singleton.py,sha256=-j-s6LS0pP_wTEUYIyK2wSdoeIE_tn7O7B-j7_aODRQ,1252
130
+ sqlspec/utils/sync_tools.py,sha256=ksfxsvFb1hLrDlxzwdW44OvYgRB0Fr5JDqxswfHwoOs,8744
131
131
  sqlspec/utils/text.py,sha256=W97aX77A3NzG795AHjhdX6zqOBDmvLaXLCno2JIugCo,3081
132
132
  sqlspec/utils/type_guards.py,sha256=9C4SRebO4JiQrMzcJZFUA0KjSU48G26RmX6lbijyjBg,30476
133
- sqlspec-0.19.0.dist-info/METADATA,sha256=ax4hmcjtDgGFAQWuE3lw25tqBX-EkByjo0t3H-xnkrg,16822
134
- sqlspec-0.19.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
135
- sqlspec-0.19.0.dist-info/entry_points.txt,sha256=G-ZqY1Nuuw3Iys7nXw23f6ILenk_Lt47VdK2mhJCWHg,53
136
- sqlspec-0.19.0.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
137
- sqlspec-0.19.0.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
138
- sqlspec-0.19.0.dist-info/RECORD,,
133
+ sqlspec-0.21.0.dist-info/METADATA,sha256=_mWB33isyFUYPN30oshULbI5KPKA4ztOiY4OoSsnIR8,23548
134
+ sqlspec-0.21.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
135
+ sqlspec-0.21.0.dist-info/entry_points.txt,sha256=G-ZqY1Nuuw3Iys7nXw23f6ILenk_Lt47VdK2mhJCWHg,53
136
+ sqlspec-0.21.0.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
137
+ sqlspec-0.21.0.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
138
+ sqlspec-0.21.0.dist-info/RECORD,,