sqlspec 0.65.0__py3-none-any.whl → 0.67.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.
- sqlspec/__init__.py +2 -4
- sqlspec/_typing.py +46 -36
- sqlspec/adapters/__init__.py +3 -0
- sqlspec/adapters/adbc/__init__.py +2 -0
- sqlspec/adapters/adbc/_typing.py +5 -13
- sqlspec/adapters/adbc/adk/store.py +728 -113
- sqlspec/adapters/adbc/config.py +78 -90
- sqlspec/adapters/adbc/core.py +741 -234
- sqlspec/adapters/adbc/data_dictionary.py +21 -6
- sqlspec/adapters/adbc/driver.py +157 -58
- sqlspec/adapters/adbc/events/store.py +119 -51
- sqlspec/adapters/adbc/litestar/store.py +160 -25
- sqlspec/adapters/adbc/type_converter.py +56 -27
- sqlspec/adapters/aiomysql/__init__.py +2 -0
- sqlspec/adapters/aiomysql/_typing.py +26 -12
- sqlspec/adapters/aiomysql/adk/store.py +156 -91
- sqlspec/adapters/aiomysql/config.py +81 -81
- sqlspec/adapters/aiomysql/core.py +30 -17
- sqlspec/adapters/aiomysql/driver.py +67 -46
- sqlspec/adapters/aiomysql/litestar/store.py +62 -36
- sqlspec/adapters/aiosqlite/__init__.py +2 -0
- sqlspec/adapters/aiosqlite/_typing.py +5 -9
- sqlspec/adapters/aiosqlite/adk/store.py +214 -116
- sqlspec/adapters/aiosqlite/config.py +36 -9
- sqlspec/adapters/aiosqlite/core.py +168 -73
- sqlspec/adapters/aiosqlite/driver.py +114 -101
- sqlspec/adapters/aiosqlite/events/store.py +9 -3
- sqlspec/adapters/aiosqlite/litestar/store.py +66 -52
- sqlspec/adapters/aiosqlite/pool.py +501 -382
- sqlspec/adapters/aiosqlite/type_converter.py +8 -6
- sqlspec/adapters/arrow_odbc/adk/store.py +194 -103
- sqlspec/adapters/arrow_odbc/config.py +52 -35
- sqlspec/adapters/arrow_odbc/core.py +216 -153
- sqlspec/adapters/arrow_odbc/data_dictionary.py +46 -25
- sqlspec/adapters/arrow_odbc/driver.py +150 -48
- sqlspec/adapters/arrow_odbc/events/store.py +19 -1
- sqlspec/adapters/arrow_odbc/litestar/store.py +101 -52
- sqlspec/adapters/arrow_odbc/type_converter.py +10 -3
- sqlspec/adapters/asyncmy/__init__.py +2 -0
- sqlspec/adapters/asyncmy/_typing.py +61 -26
- sqlspec/adapters/asyncmy/adk/store.py +208 -81
- sqlspec/adapters/asyncmy/config.py +127 -90
- sqlspec/adapters/asyncmy/core.py +30 -17
- sqlspec/adapters/asyncmy/driver.py +74 -58
- sqlspec/adapters/asyncmy/litestar/store.py +82 -36
- sqlspec/adapters/asyncpg/_typing.py +18 -4
- sqlspec/adapters/asyncpg/adk/store.py +19 -19
- sqlspec/adapters/asyncpg/config.py +175 -136
- sqlspec/adapters/asyncpg/core.py +55 -33
- sqlspec/adapters/asyncpg/data_dictionary.py +19 -17
- sqlspec/adapters/asyncpg/driver.py +61 -89
- sqlspec/adapters/asyncpg/events/_hub.py +1 -1
- sqlspec/adapters/asyncpg/events/backend.py +25 -21
- sqlspec/adapters/asyncpg/events/store.py +1 -1
- sqlspec/adapters/asyncpg/litestar/store.py +79 -62
- sqlspec/adapters/bigquery/__init__.py +2 -0
- sqlspec/adapters/bigquery/_typing.py +29 -8
- sqlspec/adapters/bigquery/adk/store.py +78 -30
- sqlspec/adapters/bigquery/config.py +194 -138
- sqlspec/adapters/bigquery/core.py +248 -88
- sqlspec/adapters/bigquery/data_dictionary.py +35 -11
- sqlspec/adapters/bigquery/driver.py +277 -103
- sqlspec/adapters/bigquery/events/store.py +24 -1
- sqlspec/adapters/bigquery/litestar/store.py +29 -8
- sqlspec/adapters/cockroach_asyncpg/__init__.py +2 -0
- sqlspec/adapters/cockroach_asyncpg/_typing.py +20 -4
- sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +2 -0
- sqlspec/adapters/cockroach_asyncpg/adk/store.py +66 -40
- sqlspec/adapters/cockroach_asyncpg/config.py +74 -72
- sqlspec/adapters/cockroach_asyncpg/core.py +66 -9
- sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +14 -11
- sqlspec/adapters/cockroach_asyncpg/driver.py +37 -49
- sqlspec/adapters/cockroach_asyncpg/events/__init__.py +2 -0
- sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +2 -0
- sqlspec/adapters/cockroach_asyncpg/litestar/store.py +7 -7
- sqlspec/adapters/cockroach_psycopg/__init__.py +2 -0
- sqlspec/adapters/cockroach_psycopg/_typing.py +42 -7
- sqlspec/adapters/cockroach_psycopg/adk/__init__.py +2 -0
- sqlspec/adapters/cockroach_psycopg/adk/store.py +52 -37
- sqlspec/adapters/cockroach_psycopg/config.py +151 -122
- sqlspec/adapters/cockroach_psycopg/core.py +40 -7
- sqlspec/adapters/cockroach_psycopg/data_dictionary.py +21 -21
- sqlspec/adapters/cockroach_psycopg/driver.py +115 -124
- sqlspec/adapters/cockroach_psycopg/events/__init__.py +2 -0
- sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +2 -0
- sqlspec/adapters/cockroach_psycopg/litestar/store.py +12 -10
- sqlspec/adapters/db2/_typing.py +26 -9
- sqlspec/adapters/db2/adk/store.py +92 -70
- sqlspec/adapters/db2/config.py +110 -74
- sqlspec/adapters/db2/core.py +239 -170
- sqlspec/adapters/db2/driver.py +178 -99
- sqlspec/adapters/db2/litestar/store.py +29 -29
- sqlspec/adapters/db2/migrations.py +2 -3
- sqlspec/adapters/db2/pool.py +76 -71
- sqlspec/adapters/duckdb/adk/store.py +69 -108
- sqlspec/adapters/duckdb/config.py +37 -39
- sqlspec/adapters/duckdb/core.py +83 -14
- sqlspec/adapters/duckdb/driver.py +215 -125
- sqlspec/adapters/duckdb/litestar/store.py +10 -10
- sqlspec/adapters/duckdb/pool.py +86 -81
- sqlspec/adapters/mssql_python/_typing.py +10 -4
- sqlspec/adapters/mssql_python/adk/store.py +166 -104
- sqlspec/adapters/mssql_python/config.py +13 -26
- sqlspec/adapters/mssql_python/core.py +167 -10
- sqlspec/adapters/mssql_python/driver.py +64 -65
- sqlspec/adapters/mssql_python/events/store.py +9 -19
- sqlspec/adapters/mssql_python/litestar/store.py +35 -18
- sqlspec/adapters/mssql_python/migrations.py +32 -28
- sqlspec/adapters/mssql_python/pool.py +15 -10
- sqlspec/adapters/mssql_python/type_converter.py +7 -7
- sqlspec/adapters/mysql_common.py +145 -86
- sqlspec/adapters/mysqlconnector/__init__.py +2 -0
- sqlspec/adapters/mysqlconnector/_typing.py +61 -11
- sqlspec/adapters/mysqlconnector/adk/store.py +148 -75
- sqlspec/adapters/mysqlconnector/config.py +142 -99
- sqlspec/adapters/mysqlconnector/core.py +18 -14
- sqlspec/adapters/mysqlconnector/driver.py +53 -30
- sqlspec/adapters/mysqlconnector/litestar/store.py +124 -110
- sqlspec/adapters/oracledb/__init__.py +2 -0
- sqlspec/adapters/oracledb/_json_handlers.py +25 -31
- sqlspec/adapters/oracledb/_storage.py +7 -7
- sqlspec/adapters/oracledb/_typing.py +27 -21
- sqlspec/adapters/oracledb/_vector_handlers.py +15 -15
- sqlspec/adapters/oracledb/adk/store.py +249 -90
- sqlspec/adapters/oracledb/config.py +39 -31
- sqlspec/adapters/oracledb/core.py +268 -122
- sqlspec/adapters/oracledb/data_dictionary.py +24 -11
- sqlspec/adapters/oracledb/driver.py +131 -96
- sqlspec/adapters/oracledb/events/_hub.py +30 -1
- sqlspec/adapters/oracledb/events/backend.py +2 -2
- sqlspec/adapters/oracledb/events/store.py +2 -2
- sqlspec/adapters/oracledb/litestar/store.py +14 -12
- sqlspec/adapters/oracledb/migrations.py +103 -85
- sqlspec/adapters/oracledb/type_converter.py +3 -1
- sqlspec/adapters/psqlpy/_typing.py +13 -21
- sqlspec/adapters/psqlpy/adk/store.py +255 -91
- sqlspec/adapters/psqlpy/config.py +68 -52
- sqlspec/adapters/psqlpy/core.py +89 -61
- sqlspec/adapters/psqlpy/data_dictionary.py +11 -11
- sqlspec/adapters/psqlpy/driver.py +82 -57
- sqlspec/adapters/psqlpy/events/_hub.py +10 -8
- sqlspec/adapters/psqlpy/events/backend.py +43 -38
- sqlspec/adapters/psqlpy/events/store.py +1 -1
- sqlspec/adapters/psqlpy/litestar/store.py +3 -5
- sqlspec/adapters/psycopg/__init__.py +2 -0
- sqlspec/adapters/psycopg/_typing.py +53 -21
- sqlspec/adapters/psycopg/adk/store.py +145 -55
- sqlspec/adapters/psycopg/config.py +264 -211
- sqlspec/adapters/psycopg/core.py +85 -75
- sqlspec/adapters/psycopg/data_dictionary.py +27 -23
- sqlspec/adapters/psycopg/driver.py +105 -96
- sqlspec/adapters/psycopg/events/_hub.py +55 -15
- sqlspec/adapters/psycopg/events/backend.py +68 -49
- sqlspec/adapters/psycopg/events/store.py +1 -1
- sqlspec/adapters/psycopg/litestar/store.py +20 -22
- sqlspec/adapters/pymssql/_typing.py +26 -6
- sqlspec/adapters/pymssql/adk/store.py +168 -104
- sqlspec/adapters/pymssql/config.py +21 -23
- sqlspec/adapters/pymssql/core.py +105 -40
- sqlspec/adapters/pymssql/driver.py +148 -25
- sqlspec/adapters/pymssql/events/store.py +9 -19
- sqlspec/adapters/pymssql/litestar/store.py +35 -18
- sqlspec/adapters/pymssql/migrations.py +32 -28
- sqlspec/adapters/pymssql/pool.py +83 -48
- sqlspec/adapters/pymysql/__init__.py +2 -0
- sqlspec/adapters/pymysql/_typing.py +23 -7
- sqlspec/adapters/pymysql/adk/store.py +75 -36
- sqlspec/adapters/pymysql/config.py +77 -51
- sqlspec/adapters/pymysql/core.py +2 -0
- sqlspec/adapters/pymysql/driver.py +41 -32
- sqlspec/adapters/pymysql/litestar/store.py +53 -50
- sqlspec/adapters/pymysql/pool.py +87 -60
- sqlspec/adapters/spanner/__init__.py +23 -1
- sqlspec/adapters/spanner/_typing.py +172 -24
- sqlspec/adapters/spanner/adk/__init__.py +13 -1
- sqlspec/adapters/spanner/adk/artifact_store.py +668 -0
- sqlspec/adapters/spanner/adk/store.py +1608 -561
- sqlspec/adapters/spanner/config.py +710 -218
- sqlspec/adapters/spanner/core.py +652 -3
- sqlspec/adapters/spanner/data_dictionary.py +294 -18
- sqlspec/adapters/spanner/driver.py +924 -267
- sqlspec/adapters/spanner/events/__init__.py +2 -2
- sqlspec/adapters/spanner/events/store.py +219 -77
- sqlspec/adapters/spanner/litestar/__init__.py +2 -2
- sqlspec/adapters/spanner/litestar/store.py +349 -138
- sqlspec/adapters/spanner/type_converter.py +161 -62
- sqlspec/adapters/sqlite/_typing.py +5 -6
- sqlspec/adapters/sqlite/adk/store.py +250 -146
- sqlspec/adapters/sqlite/config.py +39 -11
- sqlspec/adapters/sqlite/core.py +131 -46
- sqlspec/adapters/sqlite/driver.py +50 -47
- sqlspec/adapters/sqlite/events/store.py +9 -3
- sqlspec/adapters/sqlite/litestar/store.py +75 -53
- sqlspec/adapters/sqlite/pool.py +114 -83
- sqlspec/adapters/sqlite/type_converter.py +8 -6
- sqlspec/base.py +39 -53
- sqlspec/builder/_base.py +617 -469
- sqlspec/builder/_column.py +81 -94
- sqlspec/builder/_ddl.py +219 -122
- sqlspec/builder/_delete.py +11 -13
- sqlspec/builder/_dml.py +47 -33
- sqlspec/builder/_explain.py +21 -24
- sqlspec/builder/_expression_wrappers.py +5 -5
- sqlspec/builder/_factory.py +160 -155
- sqlspec/builder/_insert.py +64 -65
- sqlspec/builder/_join.py +17 -31
- sqlspec/builder/_merge.py +126 -112
- sqlspec/builder/_parsing_utils.py +66 -62
- sqlspec/builder/_select.py +336 -353
- sqlspec/builder/_temporal.py +2 -1
- sqlspec/builder/_update.py +14 -11
- sqlspec/builder/_values.py +5 -6
- sqlspec/builder/_vector_distance.py +28 -6
- sqlspec/cli.py +36 -11
- sqlspec/config.py +19 -7
- sqlspec/core/_cursor.py +80 -78
- sqlspec/core/_operators.py +10 -4
- sqlspec/core/_pipeline.py +7 -6
- sqlspec/core/cache.py +93 -94
- sqlspec/core/compiler.py +85 -92
- sqlspec/core/correlation.py +11 -11
- sqlspec/core/explain.py +2 -2
- sqlspec/core/filters.py +87 -87
- sqlspec/core/hashing.py +2 -2
- sqlspec/core/parameters/_alignment.py +0 -2
- sqlspec/core/parameters/_converter.py +47 -50
- sqlspec/core/parameters/_declared.py +37 -37
- sqlspec/core/parameters/_processor.py +251 -151
- sqlspec/core/parameters/_types.py +9 -9
- sqlspec/core/parameters/_validator.py +30 -30
- sqlspec/core/query_modifiers.py +1 -8
- sqlspec/core/result/_base.py +293 -211
- sqlspec/core/splitter.py +75 -67
- sqlspec/core/sqlcommenter.py +0 -2
- sqlspec/core/statement.py +853 -768
- sqlspec/core/type_converter.py +2 -2
- sqlspec/data_dictionary/_dependencies.py +124 -56
- sqlspec/data_dictionary/_loader.py +143 -134
- sqlspec/data_dictionary/_registry.py +2 -0
- sqlspec/data_dictionary/_types.py +182 -179
- sqlspec/data_dictionary/dialects/bigquery/config.py +11 -1
- sqlspec/data_dictionary/dialects/bigquery/sql/constraints.sql +12 -6
- sqlspec/data_dictionary/dialects/bigquery/sql/tables.sql +30 -6
- sqlspec/data_dictionary/dialects/cockroachdb/config.py +10 -1
- sqlspec/data_dictionary/dialects/cockroachdb/sql/constraints.sql +11 -11
- sqlspec/data_dictionary/dialects/cockroachdb/sql/foreign_keys.sql +36 -18
- sqlspec/data_dictionary/dialects/cockroachdb/sql/indexes.sql +10 -9
- sqlspec/data_dictionary/dialects/db2/sql/tables.sql +2 -0
- sqlspec/data_dictionary/dialects/duckdb/config.py +10 -0
- sqlspec/data_dictionary/dialects/duckdb/sql/foreign_keys.sql +4 -0
- sqlspec/data_dictionary/dialects/duckdb/sql/tables.sql +29 -9
- sqlspec/data_dictionary/dialects/mariadb/sql/columns.sql +16 -0
- sqlspec/data_dictionary/dialects/mariadb/sql/foreign_keys.sql +28 -0
- sqlspec/data_dictionary/dialects/mariadb/sql/indexes.sql +14 -0
- sqlspec/data_dictionary/dialects/mariadb/sql/tables.sql +61 -24
- sqlspec/data_dictionary/dialects/mariadb/sql/version.sql +7 -0
- sqlspec/data_dictionary/dialects/mssql/config.py +36 -9
- sqlspec/data_dictionary/dialects/mssql/sql/foreign_keys.sql +2 -0
- sqlspec/data_dictionary/dialects/mssql/sql/tables.sql +3 -1
- sqlspec/data_dictionary/dialects/mysql/config.py +9 -0
- sqlspec/data_dictionary/dialects/mysql/dictionary.py +22 -28
- sqlspec/data_dictionary/dialects/mysql/sql/tables.sql +3 -1
- sqlspec/data_dictionary/dialects/oracle/config.py +14 -0
- sqlspec/data_dictionary/dialects/postgres/config.py +10 -1
- sqlspec/data_dictionary/dialects/postgres/sql/foreign_keys.sql +37 -33
- sqlspec/data_dictionary/dialects/postgres/sql/tables.sql +12 -3
- sqlspec/data_dictionary/dialects/spanner/config.py +10 -0
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/change_streams.sql +13 -13
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/constraints.sql +24 -24
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/database.sql +4 -4
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/objects.sql +5 -5
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/privileges.sql +6 -6
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/property_graphs.sql +4 -4
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/routines.sql +18 -18
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/sequences.sql +7 -7
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/system.sql +12 -11
- sqlspec/data_dictionary/dialects/spanner/sql/googlesql/views.sql +6 -6
- sqlspec/data_dictionary/dialects/spanner/sql/postgresql/system.sql +1 -0
- sqlspec/data_dictionary/dialects/sqlite/config.py +11 -1
- sqlspec/data_dictionary/dialects/sqlite/sql/constraints.sql +26 -0
- sqlspec/data_dictionary/dialects/sqlite/sql/foreign_keys.sql +3 -1
- sqlspec/data_dictionary/dialects/sqlite/sql/tables.sql +16 -7
- sqlspec/dialects/db2/__init__.py +1 -0
- sqlspec/dialects/db2/_generators.py +50 -26
- sqlspec/dialects/db2/_parsers.py +177 -78
- sqlspec/dialects/db2/_transforms.py +18 -7
- sqlspec/dialects/postgres/_generators.py +24 -9
- sqlspec/dialects/postgres/_operators.py +24 -24
- sqlspec/dialects/spanner/__init__.py +64 -1
- sqlspec/dialects/spanner/_expressions.py +182 -13
- sqlspec/dialects/spanner/_generators.py +314 -119
- sqlspec/dialects/spanner/_parsers.py +509 -156
- sqlspec/driver/_async.py +354 -313
- sqlspec/driver/_common.py +408 -249
- sqlspec/driver/_exception_handler.py +84 -8
- sqlspec/driver/_query_cache.py +167 -18
- sqlspec/driver/_storage_helpers.py +0 -3
- sqlspec/driver/_stream.py +76 -39
- sqlspec/driver/_sync.py +373 -306
- sqlspec/exceptions.py +17 -22
- sqlspec/extensions/__init__.py +3 -0
- sqlspec/extensions/adk/__init__.py +80 -30
- sqlspec/extensions/adk/_config_utils.py +2 -2
- sqlspec/extensions/adk/artifact/service.py +64 -48
- sqlspec/extensions/adk/converters.py +5 -9
- sqlspec/extensions/adk/maintenance.py +5 -5
- sqlspec/extensions/adk/memory/converters.py +6 -4
- sqlspec/extensions/adk/memory/service.py +62 -11
- sqlspec/extensions/adk/memory/store.py +48 -17
- sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +8 -2
- sqlspec/extensions/adk/migrations/__init__.py +3 -0
- sqlspec/extensions/adk/service.py +24 -14
- sqlspec/extensions/adk/store.py +17 -8
- sqlspec/extensions/events/_channel.py +40 -2
- sqlspec/extensions/events/_hints.py +3 -3
- sqlspec/extensions/events/_models.py +1 -3
- sqlspec/extensions/events/_payload.py +7 -7
- sqlspec/extensions/events/_queue.py +140 -47
- sqlspec/extensions/events/_store.py +2 -0
- sqlspec/extensions/fastapi/extension.py +30 -46
- sqlspec/extensions/fastapi/providers.py +7 -8
- sqlspec/extensions/flask/extension.py +144 -120
- sqlspec/extensions/litestar/__init__.py +2 -0
- sqlspec/extensions/litestar/_utils.py +2 -2
- sqlspec/extensions/litestar/channels.py +24 -18
- sqlspec/extensions/litestar/cli.py +2 -0
- sqlspec/extensions/litestar/handlers.py +33 -6
- sqlspec/extensions/litestar/plugin.py +128 -153
- sqlspec/extensions/litestar/providers.py +14 -7
- sqlspec/extensions/litestar/store.py +2 -2
- sqlspec/extensions/prometheus/_observer.py +13 -2
- sqlspec/extensions/sanic/extension.py +96 -52
- sqlspec/extensions/starlette/extension.py +120 -103
- sqlspec/extensions/starlette/middleware.py +18 -3
- sqlspec/loader.py +36 -31
- sqlspec/migrations/_backup.py +2 -2
- sqlspec/migrations/base.py +34 -19
- sqlspec/migrations/commands.py +692 -477
- sqlspec/migrations/context.py +22 -22
- sqlspec/migrations/fix.py +15 -7
- sqlspec/migrations/loaders.py +99 -35
- sqlspec/migrations/runner.py +279 -253
- sqlspec/migrations/schema.py +28 -2
- sqlspec/migrations/squash.py +102 -24
- sqlspec/migrations/templates.py +9 -9
- sqlspec/migrations/tracker.py +71 -25
- sqlspec/migrations/utils.py +6 -2
- sqlspec/migrations/validation.py +50 -11
- sqlspec/migrations/version.py +48 -10
- sqlspec/observability/_common.py +14 -2
- sqlspec/observability/_config.py +49 -48
- sqlspec/observability/_diagnostics.py +3 -2
- sqlspec/observability/_dispatcher.py +9 -1
- sqlspec/observability/_formatters/_aws.py +13 -13
- sqlspec/observability/_formatters/_azure.py +11 -11
- sqlspec/observability/_formatters/_gcp.py +11 -11
- sqlspec/observability/_observer.py +95 -44
- sqlspec/observability/_runtime.py +90 -49
- sqlspec/observability/_sampling.py +41 -30
- sqlspec/observability/_spans.py +35 -10
- sqlspec/protocols.py +51 -48
- sqlspec/service/_base.py +12 -16
- sqlspec/service/_core.py +54 -10
- sqlspec/storage/__init__.py +64 -17
- sqlspec/storage/_arrow_payload.py +9 -7
- sqlspec/storage/_paths.py +44 -11
- sqlspec/storage/_utils.py +46 -2
- sqlspec/storage/backends/__init__.py +42 -0
- sqlspec/storage/backends/base.py +98 -41
- sqlspec/storage/backends/fsspec.py +79 -58
- sqlspec/storage/backends/local.py +89 -76
- sqlspec/storage/backends/obstore.py +409 -322
- sqlspec/storage/errors.py +4 -1
- sqlspec/storage/pipeline.py +70 -59
- sqlspec/storage/registry.py +64 -60
- sqlspec/typing.py +3 -2
- sqlspec/utils/__init__.py +2 -0
- sqlspec/utils/arrow_helpers.py +16 -7
- sqlspec/utils/config_tools.py +15 -19
- sqlspec/utils/correlation.py +4 -5
- sqlspec/utils/deprecation.py +24 -0
- sqlspec/utils/dispatch.py +6 -9
- sqlspec/utils/fixtures.py +69 -14
- sqlspec/utils/logging.py +12 -3
- sqlspec/utils/module_loader.py +1 -1
- sqlspec/utils/portal.py +88 -60
- sqlspec/utils/schema.py +153 -54
- sqlspec/utils/serializers/_json.py +153 -139
- sqlspec/utils/serializers/_schema.py +51 -24
- sqlspec/utils/sync_tools.py +54 -37
- sqlspec/utils/text.py +3 -2
- sqlspec/utils/type_converters.py +66 -63
- sqlspec/utils/type_guards.py +30 -7
- sqlspec/utils/uuids.py +30 -9
- {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/METADATA +4 -5
- {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/RECORD +399 -396
- {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/WHEEL +0 -0
- {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/entry_points.txt +0 -0
- {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/licenses/LICENSE +0 -0
sqlspec/__init__.py
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"""SQLSpec: Type-safe SQL query mapper for Python."""
|
|
2
2
|
|
|
3
3
|
# ruff: noqa: E402
|
|
4
|
-
# Suppress noisy Google library deprecation warnings about Python version support.
|
|
5
|
-
# These are informational and clutter CLI output unnecessarily.
|
|
6
4
|
import warnings as _warnings
|
|
7
5
|
|
|
8
6
|
_warnings.filterwarnings(
|
|
@@ -166,6 +164,7 @@ __all__ = (
|
|
|
166
164
|
"adapters",
|
|
167
165
|
"base",
|
|
168
166
|
"builder",
|
|
167
|
+
"config",
|
|
169
168
|
"core",
|
|
170
169
|
"create_event",
|
|
171
170
|
"create_statement_observer",
|
|
@@ -180,6 +179,7 @@ __all__ = (
|
|
|
180
179
|
"matches_param_type",
|
|
181
180
|
"migrations",
|
|
182
181
|
"nanoid",
|
|
182
|
+
"observability",
|
|
183
183
|
"register_param_type",
|
|
184
184
|
"resolve_param_type",
|
|
185
185
|
"sql",
|
|
@@ -295,8 +295,6 @@ def __dir__() -> list[str]:
|
|
|
295
295
|
return sorted(set(globals()) | _EXPORTS.keys())
|
|
296
296
|
|
|
297
297
|
|
|
298
|
-
# Native cross-module initialization is not protected by Python import locks.
|
|
299
|
-
# Retain eager exports in compiled wheels until mypyc supports lazy concurrency.
|
|
300
298
|
if _COMPILED:
|
|
301
299
|
for _name in __all__:
|
|
302
300
|
if _name not in globals():
|
sqlspec/_typing.py
CHANGED
|
@@ -10,9 +10,9 @@ import enum
|
|
|
10
10
|
from collections.abc import Iterable, Mapping
|
|
11
11
|
from dataclasses import dataclass
|
|
12
12
|
from enum import Enum
|
|
13
|
-
from typing import TYPE_CHECKING, Any, ClassVar, Final, Literal, Protocol, cast, runtime_checkable
|
|
13
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Final, Literal, Protocol, Self, cast, runtime_checkable
|
|
14
14
|
|
|
15
|
-
from typing_extensions import
|
|
15
|
+
from typing_extensions import TypeVar, dataclass_transform
|
|
16
16
|
|
|
17
17
|
from sqlspec.utils.module_loader import (
|
|
18
18
|
dependency_flag,
|
|
@@ -140,8 +140,6 @@ class DataclassProtocol(Protocol):
|
|
|
140
140
|
|
|
141
141
|
T = TypeVar("T")
|
|
142
142
|
|
|
143
|
-
# Always define stub types for type checking
|
|
144
|
-
|
|
145
143
|
|
|
146
144
|
class BaseModelStub:
|
|
147
145
|
"""Placeholder implementation."""
|
|
@@ -193,6 +191,8 @@ class BaseModelStub:
|
|
|
193
191
|
class TypeAdapterStub:
|
|
194
192
|
"""Placeholder implementation."""
|
|
195
193
|
|
|
194
|
+
__slots__ = ("_type",)
|
|
195
|
+
|
|
196
196
|
def __init__(
|
|
197
197
|
self,
|
|
198
198
|
type: Any, # noqa: A002
|
|
@@ -225,9 +225,6 @@ class FailFastStub:
|
|
|
225
225
|
fail_fast: bool = True
|
|
226
226
|
|
|
227
227
|
|
|
228
|
-
# Always define stub types for msgspec
|
|
229
|
-
|
|
230
|
-
|
|
231
228
|
@dataclass_transform()
|
|
232
229
|
class StructStub:
|
|
233
230
|
"""Placeholder implementation."""
|
|
@@ -241,7 +238,7 @@ class StructStub:
|
|
|
241
238
|
|
|
242
239
|
|
|
243
240
|
def convert_stub( # noqa: PLR0913
|
|
244
|
-
obj: Any,
|
|
241
|
+
obj: Any,
|
|
245
242
|
type: Any, # noqa: A002,ARG001
|
|
246
243
|
*,
|
|
247
244
|
strict: bool = True, # noqa: ARG001
|
|
@@ -251,7 +248,7 @@ def convert_stub( # noqa: PLR0913
|
|
|
251
248
|
str_keys: bool = False, # noqa: ARG001
|
|
252
249
|
) -> Any:
|
|
253
250
|
"""Placeholder implementation."""
|
|
254
|
-
return
|
|
251
|
+
return obj
|
|
255
252
|
|
|
256
253
|
|
|
257
254
|
def msgspec_fields_stub(type_: Any, /) -> "tuple[Any, ...]": # noqa: ARG001
|
|
@@ -265,7 +262,6 @@ class UnsetTypeStub(enum.Enum):
|
|
|
265
262
|
|
|
266
263
|
UNSET_STUB = UnsetTypeStub.UNSET
|
|
267
264
|
|
|
268
|
-
# Try to import real implementations at runtime
|
|
269
265
|
try:
|
|
270
266
|
from msgspec import UNSET as _REAL_UNSET
|
|
271
267
|
from msgspec import Struct as _RealStruct
|
|
@@ -289,7 +285,6 @@ except ImportError:
|
|
|
289
285
|
msgspec_fields = msgspec_fields_stub # type: ignore[assignment]
|
|
290
286
|
|
|
291
287
|
|
|
292
|
-
# Always define stub type for DTOData
|
|
293
288
|
@runtime_checkable
|
|
294
289
|
class DTODataStub(Protocol[T]):
|
|
295
290
|
"""Placeholder implementation."""
|
|
@@ -311,7 +306,6 @@ class DTODataStub(Protocol[T]):
|
|
|
311
306
|
return {}
|
|
312
307
|
|
|
313
308
|
|
|
314
|
-
# Always define stub types for attrs
|
|
315
309
|
@dataclass_transform()
|
|
316
310
|
class AttrsInstanceStub:
|
|
317
311
|
"""Placeholder Implementation for attrs classes"""
|
|
@@ -376,9 +370,6 @@ Empty: Final = EmptyEnum.EMPTY
|
|
|
376
370
|
class ArrowTableResult(Protocol):
|
|
377
371
|
"""This is a typed shim for pyarrow.Table."""
|
|
378
372
|
|
|
379
|
-
def to_batches(self, batch_size: int) -> Any:
|
|
380
|
-
return None
|
|
381
|
-
|
|
382
373
|
@property
|
|
383
374
|
def num_rows(self) -> int:
|
|
384
375
|
return 0
|
|
@@ -387,6 +378,9 @@ class ArrowTableResult(Protocol):
|
|
|
387
378
|
def num_columns(self) -> int:
|
|
388
379
|
return 0
|
|
389
380
|
|
|
381
|
+
def to_batches(self, batch_size: int) -> Any:
|
|
382
|
+
return None
|
|
383
|
+
|
|
390
384
|
def to_pydict(self) -> dict[str, Any]:
|
|
391
385
|
return {}
|
|
392
386
|
|
|
@@ -441,24 +435,28 @@ class ArrowRecordBatchResult(Protocol):
|
|
|
441
435
|
class ArrowSchemaProtocol(Protocol):
|
|
442
436
|
"""Typed shim for pyarrow.Schema."""
|
|
443
437
|
|
|
444
|
-
def
|
|
445
|
-
"""Get
|
|
446
|
-
|
|
438
|
+
def __len__(self) -> int:
|
|
439
|
+
"""Get number of fields."""
|
|
440
|
+
return 0
|
|
447
441
|
|
|
448
442
|
@property
|
|
449
443
|
def names(self) -> "list[str]":
|
|
450
444
|
"""Get list of field names."""
|
|
451
445
|
...
|
|
452
446
|
|
|
453
|
-
def
|
|
454
|
-
"""Get
|
|
455
|
-
|
|
447
|
+
def field(self, i: int) -> Any:
|
|
448
|
+
"""Get field by index."""
|
|
449
|
+
...
|
|
456
450
|
|
|
457
451
|
|
|
458
452
|
@runtime_checkable
|
|
459
453
|
class ArrowRecordBatchReaderProtocol(Protocol):
|
|
460
454
|
"""Typed shim for pyarrow.RecordBatchReader."""
|
|
461
455
|
|
|
456
|
+
def __iter__(self) -> "Iterable[Any]":
|
|
457
|
+
"""Iterate over batches."""
|
|
458
|
+
...
|
|
459
|
+
|
|
462
460
|
def read_all(self) -> Any:
|
|
463
461
|
"""Read all batches into a table."""
|
|
464
462
|
...
|
|
@@ -467,10 +465,6 @@ class ArrowRecordBatchReaderProtocol(Protocol):
|
|
|
467
465
|
"""Read next batch."""
|
|
468
466
|
...
|
|
469
467
|
|
|
470
|
-
def __iter__(self) -> "Iterable[Any]":
|
|
471
|
-
"""Iterate over batches."""
|
|
472
|
-
...
|
|
473
|
-
|
|
474
468
|
|
|
475
469
|
_ARROW_TABLE_SHIM = ArrowTableResult
|
|
476
470
|
_ARROW_RECORD_BATCH_SHIM = ArrowRecordBatchResult
|
|
@@ -526,6 +520,14 @@ _NUMPY_ARRAY_SHIM = NumpyArrayStub
|
|
|
526
520
|
|
|
527
521
|
|
|
528
522
|
class _SpanShim:
|
|
523
|
+
__slots__ = ()
|
|
524
|
+
|
|
525
|
+
def __enter__(self) -> Self:
|
|
526
|
+
return self
|
|
527
|
+
|
|
528
|
+
def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
|
|
529
|
+
return None
|
|
530
|
+
|
|
529
531
|
def set_attribute(self, key: str, value: Any) -> None:
|
|
530
532
|
return None
|
|
531
533
|
|
|
@@ -544,12 +546,6 @@ class _SpanShim:
|
|
|
544
546
|
def end(self, end_time: "int | None" = None) -> None:
|
|
545
547
|
return None
|
|
546
548
|
|
|
547
|
-
def __enter__(self) -> Self:
|
|
548
|
-
return self
|
|
549
|
-
|
|
550
|
-
def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
|
|
551
|
-
return None
|
|
552
|
-
|
|
553
549
|
|
|
554
550
|
_SPAN_SHIM = _SpanShim
|
|
555
551
|
_SPAN_SHIM.__name__ = "Span"
|
|
@@ -557,6 +553,8 @@ _SPAN_SHIM.__qualname__ = "Span"
|
|
|
557
553
|
|
|
558
554
|
|
|
559
555
|
class _TracerShim:
|
|
556
|
+
__slots__ = ()
|
|
557
|
+
|
|
560
558
|
def start_span(
|
|
561
559
|
self,
|
|
562
560
|
name: str,
|
|
@@ -577,6 +575,8 @@ _TRACER_SHIM.__qualname__ = "Tracer"
|
|
|
577
575
|
|
|
578
576
|
|
|
579
577
|
class _TraceModule:
|
|
578
|
+
__slots__ = ()
|
|
579
|
+
|
|
580
580
|
def get_tracer(
|
|
581
581
|
self,
|
|
582
582
|
instrumenting_module_name: str,
|
|
@@ -589,9 +589,9 @@ class _TraceModule:
|
|
|
589
589
|
def get_tracer_provider(self) -> Any: # pragma: no cover
|
|
590
590
|
return None
|
|
591
591
|
|
|
592
|
-
TracerProvider = type(None)
|
|
593
|
-
StatusCode = type(None)
|
|
594
|
-
Status = type(None)
|
|
592
|
+
TracerProvider = type(None)
|
|
593
|
+
StatusCode = type(None)
|
|
594
|
+
Status = type(None)
|
|
595
595
|
|
|
596
596
|
|
|
597
597
|
_TRACE_SHIM = _TraceModule()
|
|
@@ -599,7 +599,9 @@ _STATUS_CODE_SHIM = type(None)
|
|
|
599
599
|
_STATUS_SHIM = type(None)
|
|
600
600
|
|
|
601
601
|
|
|
602
|
-
class _Metric:
|
|
602
|
+
class _Metric:
|
|
603
|
+
__slots__ = ()
|
|
604
|
+
|
|
603
605
|
def __init__(
|
|
604
606
|
self,
|
|
605
607
|
name: str,
|
|
@@ -609,7 +611,7 @@ class _Metric: # Base shim for metrics
|
|
|
609
611
|
subsystem: str = "",
|
|
610
612
|
unit: str = "",
|
|
611
613
|
registry: Any = None,
|
|
612
|
-
|
|
614
|
+
exemplar_fn: Any = None,
|
|
613
615
|
buckets: Any = None,
|
|
614
616
|
**_: Any,
|
|
615
617
|
) -> None:
|
|
@@ -620,6 +622,8 @@ class _Metric: # Base shim for metrics
|
|
|
620
622
|
|
|
621
623
|
|
|
622
624
|
class _MetricInstance:
|
|
625
|
+
__slots__ = ()
|
|
626
|
+
|
|
623
627
|
def inc(self, amount: float = 1) -> None:
|
|
624
628
|
return None
|
|
625
629
|
|
|
@@ -634,6 +638,8 @@ class _MetricInstance:
|
|
|
634
638
|
|
|
635
639
|
|
|
636
640
|
class _CounterShim(_Metric):
|
|
641
|
+
__slots__ = ()
|
|
642
|
+
|
|
637
643
|
def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
|
|
638
644
|
return _MetricInstance() # pragma: no cover
|
|
639
645
|
|
|
@@ -644,6 +650,8 @@ _COUNTER_SHIM.__qualname__ = "Counter"
|
|
|
644
650
|
|
|
645
651
|
|
|
646
652
|
class _GaugeShim(_Metric):
|
|
653
|
+
__slots__ = ()
|
|
654
|
+
|
|
647
655
|
def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
|
|
648
656
|
return _MetricInstance() # pragma: no cover
|
|
649
657
|
|
|
@@ -654,6 +662,8 @@ _GAUGE_SHIM.__qualname__ = "Gauge"
|
|
|
654
662
|
|
|
655
663
|
|
|
656
664
|
class _HistogramShim(_Metric):
|
|
665
|
+
__slots__ = ()
|
|
666
|
+
|
|
657
667
|
def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
|
|
658
668
|
return _MetricInstance() # pragma: no cover
|
|
659
669
|
|
sqlspec/adapters/__init__.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"""ADBC adapter for SQLSpec."""
|
|
2
|
+
|
|
1
3
|
from sqlspec.adapters.adbc._typing import AdbcConnection
|
|
2
4
|
from sqlspec.adapters.adbc.config import AdbcConfig, AdbcConnectionParams, AdbcDriverFeatures
|
|
3
5
|
from sqlspec.adapters.adbc.driver import AdbcCursor, AdbcDriver, AdbcExceptionHandler
|
sqlspec/adapters/adbc/_typing.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# pyright: reportCallIssue=false, reportAttributeAccessIssue=false, reportArgumentType=false
|
|
2
1
|
"""ADBC adapter type definitions.
|
|
3
2
|
|
|
4
3
|
This module contains type aliases and classes that are excluded from mypyc
|
|
@@ -6,7 +5,7 @@ compilation to avoid ABI boundary issues.
|
|
|
6
5
|
"""
|
|
7
6
|
|
|
8
7
|
import contextlib
|
|
9
|
-
from typing import TYPE_CHECKING, Any
|
|
8
|
+
from typing import TYPE_CHECKING, Any, TypeAlias
|
|
10
9
|
|
|
11
10
|
from adbc_driver_manager import Error as _AdbcNativeError
|
|
12
11
|
from adbc_driver_manager import NotSupportedError as AdbcNotSupportedError
|
|
@@ -14,27 +13,21 @@ from adbc_driver_manager import OperationalError as AdbcOperationalError
|
|
|
14
13
|
from adbc_driver_manager.dbapi import Connection
|
|
15
14
|
from adbc_driver_manager.dbapi import Cursor as _AdbcRawCursor
|
|
16
15
|
|
|
16
|
+
from sqlspec.adapters.adbc.core import resolve_dialect_name
|
|
17
17
|
from sqlspec.typing import import_optional_attr
|
|
18
18
|
|
|
19
|
-
_AdbcConnection = Connection
|
|
20
|
-
|
|
21
19
|
if TYPE_CHECKING:
|
|
22
20
|
from collections.abc import Callable
|
|
23
21
|
from types import TracebackType
|
|
24
|
-
from typing import TypeAlias
|
|
25
22
|
|
|
26
23
|
from adbc_driver_flightsql import DatabaseOptions as AdbcFlightSqlDatabaseOptions
|
|
27
24
|
|
|
28
25
|
from sqlspec.adapters.adbc.driver import AdbcDriver
|
|
29
26
|
from sqlspec.core import StatementConfig
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
else:
|
|
35
|
-
AdbcConnection = _AdbcConnection
|
|
36
|
-
AdbcRawCursor = _AdbcRawCursor
|
|
37
|
-
AdbcNativeError = _AdbcNativeError
|
|
28
|
+
AdbcConnection: TypeAlias = Connection
|
|
29
|
+
AdbcRawCursor: TypeAlias = _AdbcRawCursor
|
|
30
|
+
AdbcNativeError: TypeAlias = _AdbcNativeError
|
|
38
31
|
|
|
39
32
|
__all__ = (
|
|
40
33
|
"AdbcConnection",
|
|
@@ -105,7 +98,6 @@ class AdbcSessionContext:
|
|
|
105
98
|
self._driver: AdbcDriver | None = None
|
|
106
99
|
|
|
107
100
|
def __enter__(self) -> "AdbcDriver":
|
|
108
|
-
from sqlspec.adapters.adbc.core import resolve_dialect_name
|
|
109
101
|
from sqlspec.adapters.adbc.driver import AdbcDriver
|
|
110
102
|
|
|
111
103
|
self._connection = self._acquire_connection()
|