sqlspec 0.28.0__tar.gz → 0.29.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sqlspec-0.29.0/.claude/agents/expert.md +560 -0
- sqlspec-0.29.0/.claude/agents/testing.md +465 -0
- sqlspec-0.29.0/.claude/bootstrap.md +1550 -0
- sqlspec-0.29.0/.gemini/GEMINI.md +82 -0
- sqlspec-0.29.0/.gemini/bootstrap.md +2435 -0
- sqlspec-0.29.0/.gemini/commands/implement.toml +477 -0
- sqlspec-0.29.0/.gemini/commands/prd.toml +353 -0
- sqlspec-0.29.0/.gemini/commands/review.toml +448 -0
- sqlspec-0.29.0/.gemini/commands/sync-guides.toml +436 -0
- sqlspec-0.29.0/.gemini/commands/test.toml +440 -0
- sqlspec-0.29.0/.gitignore +70 -0
- sqlspec-0.29.0/.pre-commit-config.yaml +52 -0
- sqlspec-0.29.0/AGENTS.md +3591 -0
- sqlspec-0.29.0/PKG-INFO +575 -0
- sqlspec-0.29.0/pyproject.toml +535 -0
- sqlspec-0.29.0/specs/AGENTS.md +11 -0
- sqlspec-0.29.0/specs/agents/expert.md +8 -0
- sqlspec-0.29.0/specs/agents/guides.md +6 -0
- sqlspec-0.29.0/specs/agents/prd.md +8 -0
- sqlspec-0.29.0/specs/agents/review.md +7 -0
- sqlspec-0.29.0/specs/agents/testing.md +7 -0
- sqlspec-0.29.0/sqlspec/_serialization.py +312 -0
- sqlspec-0.29.0/sqlspec/_typing.py +815 -0
- sqlspec-0.29.0/sqlspec/adapters/adbc/config.py +430 -0
- sqlspec-0.29.0/sqlspec/adapters/adbc/driver.py +835 -0
- sqlspec-0.29.0/sqlspec/adapters/adbc/type_converter.py +153 -0
- sqlspec-0.29.0/sqlspec/adapters/aiosqlite/config.py +305 -0
- sqlspec-0.29.0/sqlspec/adapters/aiosqlite/driver.py +463 -0
- sqlspec-0.29.0/sqlspec/adapters/asyncmy/config.py +241 -0
- sqlspec-0.29.0/sqlspec/adapters/asyncmy/driver.py +632 -0
- sqlspec-0.29.0/sqlspec/adapters/asyncpg/config.py +458 -0
- sqlspec-0.29.0/sqlspec/adapters/asyncpg/driver.py +572 -0
- sqlspec-0.29.0/sqlspec/adapters/bigquery/config.py +283 -0
- sqlspec-0.29.0/sqlspec/adapters/bigquery/driver.py +921 -0
- sqlspec-0.29.0/sqlspec/adapters/bigquery/type_converter.py +125 -0
- sqlspec-0.29.0/sqlspec/adapters/duckdb/config.py +361 -0
- sqlspec-0.29.0/sqlspec/adapters/duckdb/driver.py +602 -0
- sqlspec-0.29.0/sqlspec/adapters/duckdb/type_converter.py +133 -0
- sqlspec-0.29.0/sqlspec/adapters/oracledb/_uuid_handlers.py +130 -0
- sqlspec-0.29.0/sqlspec/adapters/oracledb/adk/store.py +1632 -0
- sqlspec-0.29.0/sqlspec/adapters/oracledb/config.py +475 -0
- sqlspec-0.29.0/sqlspec/adapters/oracledb/driver.py +1071 -0
- sqlspec-0.29.0/sqlspec/adapters/oracledb/type_converter.py +207 -0
- sqlspec-0.29.0/sqlspec/adapters/psqlpy/config.py +270 -0
- sqlspec-0.29.0/sqlspec/adapters/psqlpy/driver.py +892 -0
- sqlspec-0.29.0/sqlspec/adapters/psqlpy/type_converter.py +102 -0
- sqlspec-0.29.0/sqlspec/adapters/psycopg/_type_handlers.py +82 -0
- sqlspec-0.29.0/sqlspec/adapters/psycopg/config.py +497 -0
- sqlspec-0.29.0/sqlspec/adapters/psycopg/driver.py +1067 -0
- sqlspec-0.29.0/sqlspec/adapters/sqlite/config.py +216 -0
- sqlspec-0.29.0/sqlspec/adapters/sqlite/driver.py +527 -0
- sqlspec-0.29.0/sqlspec/base.py +707 -0
- sqlspec-0.29.0/sqlspec/builder/__init__.py +146 -0
- sqlspec-0.29.0/sqlspec/builder/_base.py +719 -0
- sqlspec-0.29.0/sqlspec/builder/_column.py +364 -0
- sqlspec-0.29.0/sqlspec/builder/_ddl.py +1634 -0
- sqlspec-0.29.0/sqlspec/builder/_delete.py +82 -0
- sqlspec-0.29.0/sqlspec/builder/_factory.py +1537 -0
- sqlspec-0.29.0/sqlspec/builder/_insert.py +315 -0
- sqlspec-0.29.0/sqlspec/builder/_join.py +375 -0
- sqlspec-0.29.0/sqlspec/builder/_merge.py +800 -0
- sqlspec-0.29.0/sqlspec/builder/_parsing_utils.py +289 -0
- sqlspec-0.29.0/sqlspec/builder/_select.py +1606 -0
- sqlspec-0.29.0/sqlspec/builder/_update.py +161 -0
- sqlspec-0.29.0/sqlspec/config.py +1287 -0
- sqlspec-0.29.0/sqlspec/core/__init__.py +290 -0
- sqlspec-0.29.0/sqlspec/core/cache.py +785 -0
- sqlspec-0.29.0/sqlspec/core/compiler.py +597 -0
- sqlspec-0.29.0/sqlspec/core/parameters/__init__.py +64 -0
- sqlspec-0.29.0/sqlspec/core/parameters/_alignment.py +231 -0
- sqlspec-0.29.0/sqlspec/core/parameters/_converter.py +393 -0
- sqlspec-0.29.0/sqlspec/core/parameters/_processor.py +304 -0
- sqlspec-0.29.0/sqlspec/core/parameters/_registry.py +201 -0
- sqlspec-0.29.0/sqlspec/core/parameters/_transformers.py +226 -0
- sqlspec-0.29.0/sqlspec/core/parameters/_types.py +430 -0
- sqlspec-0.29.0/sqlspec/core/parameters/_validator.py +123 -0
- sqlspec-0.29.0/sqlspec/core/pipeline.py +187 -0
- sqlspec-0.29.0/sqlspec/core/result.py +943 -0
- sqlspec-0.29.0/sqlspec/core/statement.py +835 -0
- sqlspec-0.29.0/sqlspec/driver/_async.py +607 -0
- sqlspec-0.29.0/sqlspec/driver/_common.py +831 -0
- sqlspec-0.29.0/sqlspec/driver/_sync.py +609 -0
- sqlspec-0.29.0/sqlspec/driver/mixins/__init__.py +7 -0
- sqlspec-0.29.0/sqlspec/driver/mixins/_sql_translator.py +122 -0
- sqlspec-0.29.0/sqlspec/driver/mixins/storage.py +224 -0
- sqlspec-0.29.0/sqlspec/exceptions.py +281 -0
- sqlspec-0.29.0/sqlspec/extensions/aiosql/adapter.py +468 -0
- sqlspec-0.29.0/sqlspec/extensions/fastapi/__init__.py +19 -0
- sqlspec-0.29.0/sqlspec/extensions/fastapi/extension.py +341 -0
- sqlspec-0.29.0/sqlspec/extensions/fastapi/providers.py +543 -0
- sqlspec-0.29.0/sqlspec/extensions/flask/_state.py +72 -0
- sqlspec-0.29.0/sqlspec/extensions/flask/extension.py +402 -0
- sqlspec-0.29.0/sqlspec/extensions/litestar/plugin.py +514 -0
- sqlspec-0.29.0/sqlspec/extensions/litestar/providers.py +454 -0
- sqlspec-0.29.0/sqlspec/extensions/starlette/_state.py +26 -0
- sqlspec-0.29.0/sqlspec/extensions/starlette/extension.py +257 -0
- sqlspec-0.29.0/sqlspec/loader.py +656 -0
- sqlspec-0.29.0/sqlspec/migrations/fix.py +203 -0
- sqlspec-0.29.0/sqlspec/migrations/runner.py +855 -0
- sqlspec-0.29.0/sqlspec/migrations/validation.py +174 -0
- sqlspec-0.29.0/sqlspec/storage/__init__.py +46 -0
- sqlspec-0.29.0/sqlspec/storage/_utils.py +104 -0
- sqlspec-0.29.0/sqlspec/storage/backends/fsspec.py +398 -0
- sqlspec-0.29.0/sqlspec/storage/backends/local.py +377 -0
- sqlspec-0.29.0/sqlspec/storage/backends/obstore.py +580 -0
- sqlspec-0.29.0/sqlspec/storage/errors.py +104 -0
- sqlspec-0.29.0/sqlspec/storage/pipeline.py +574 -0
- sqlspec-0.29.0/sqlspec/storage/registry.py +289 -0
- sqlspec-0.29.0/sqlspec/typing.py +219 -0
- sqlspec-0.29.0/sqlspec/utils/arrow_helpers.py +95 -0
- sqlspec-0.29.0/sqlspec/utils/config_resolver.py +149 -0
- sqlspec-0.29.0/sqlspec/utils/data_transformation.py +114 -0
- sqlspec-0.29.0/sqlspec/utils/fixtures.py +250 -0
- sqlspec-0.29.0/sqlspec/utils/serializers.py +396 -0
- sqlspec-0.29.0/sqlspec/utils/type_converters.py +99 -0
- sqlspec-0.29.0/sqlspec/utils/type_guards.py +1324 -0
- sqlspec-0.29.0/sqlspec/utils/version.py +444 -0
- sqlspec-0.29.0/tests/integration/test_adapters/_storage_bridge_helpers.py +28 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/conftest.py +177 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_adbc_arrow_features.py +410 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_adbc_backends.py +269 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_adbc_driver.py +442 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_adbc_edge_cases.py +507 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_adbc_results.py +376 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_arrow_duckdb.py +214 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_data_dictionary.py +142 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/test_store.py +258 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_parameter_styles.py +650 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_adbc/test_storage_bridge.py +63 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_aiosqlite/test_arrow.py +233 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_aiosqlite/test_connection.py +246 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_aiosqlite/test_driver.py +518 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/test_numpy_serialization.py +254 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/test_store.py +234 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_aiosqlite/test_parameter_styles.py +379 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_aiosqlite/test_pooling.py +187 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_aiosqlite/test_storage_bridge.py +46 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncmy/test_arrow.py +202 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncmy/test_asyncmy_features.py +283 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncmy/test_config.py +220 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncmy/test_driver.py +464 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncmy/test_parameter_styles.py +696 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncmy/test_storage_bridge.py +63 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/conftest.py +40 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_arrow.py +204 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_cloud_connectors_integration.py +205 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_data_dictionary.py +107 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_driver.py +820 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_exceptions.py +118 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_execute_many.py +272 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/test_store.py +237 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_merge.py +244 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_merge_bulk.py +275 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_migrations.py +682 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_parameter_styles.py +622 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_schema_migration.py +323 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_asyncpg/test_storage_bridge.py +69 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_bigquery/test_arrow_bigquery.py +222 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_bigquery/test_bigquery_features.py +64 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_bigquery/test_config.py +147 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_bigquery/test_connection.py +18 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_bigquery/test_driver.py +414 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/conftest.py +26 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/test_arrow.py +193 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/test_connection.py +352 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/test_driver.py +605 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/test_driver_features.py +156 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/test_execute_many.py +295 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/test_mixed_parameter_styles.py +151 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/test_parameter_styles.py +888 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_duckdb/test_storage_bridge.py +69 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/conftest.py +59 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_arrow.py +258 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_driver_async.py +488 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_driver_sync.py +482 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_execute_many.py +323 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_merge.py +349 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_merge_bulk.py +306 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_oracle_features.py +361 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_parameter_styles.py +818 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_oracledb/test_uuid_binary.py +348 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/conftest.py +58 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_arrow.py +194 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_connection.py +119 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_driver.py +526 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_exceptions.py +118 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/test_owner_id_column.py +125 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/test_store.py +237 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_merge_bulk.py +275 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_parameter_styles.py +663 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_psqlpy_features.py +223 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psqlpy/test_storage_bridge.py +65 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psycopg/test_arrow.py +194 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psycopg/test_async_copy.py +151 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psycopg/test_driver.py +645 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psycopg/test_execute_many.py +325 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_async.py +237 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psycopg/test_merge_bulk.py +277 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psycopg/test_parameter_styles.py +1033 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_psycopg/test_storage_bridge.py +153 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/conftest.py +128 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_arrow.py +156 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_data_dictionary.py +95 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_driver.py +531 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_driver_features.py +113 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_exceptions.py +112 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/test_store.py +253 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_migrations.py +513 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_parameter_styles.py +417 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_pooling.py +277 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_query_mixin.py +214 -0
- sqlspec-0.29.0/tests/integration/test_adapters/test_sqlite/test_storage_bridge.py +47 -0
- sqlspec-0.29.0/tests/integration/test_async_migrations.py +280 -0
- sqlspec-0.29.0/tests/integration/test_dishka/conftest.py +115 -0
- sqlspec-0.29.0/tests/integration/test_dishka/test_dishka_integration.py +538 -0
- sqlspec-0.29.0/tests/integration/test_extensions/test_fastapi/test_fastapi_filters_integration.py +395 -0
- sqlspec-0.29.0/tests/integration/test_extensions/test_fastapi/test_fastapi_integration.py +284 -0
- sqlspec-0.29.0/tests/integration/test_extensions/test_flask/test_flask_disable_di.py +76 -0
- sqlspec-0.29.0/tests/integration/test_extensions/test_flask/test_flask_integration.py +314 -0
- sqlspec-0.29.0/tests/integration/test_extensions/test_litestar/test_litestar_disable_di.py +69 -0
- sqlspec-0.29.0/tests/integration/test_extensions/test_starlette/test_starlette_disable_di.py +70 -0
- sqlspec-0.29.0/tests/integration/test_extensions/test_starlette/test_starlette_integration.py +225 -0
- sqlspec-0.29.0/tests/integration/test_loader/test_file_system_loading.py +766 -0
- sqlspec-0.29.0/tests/integration/test_migrations/test_upgrade_downgrade_versions.py +411 -0
- sqlspec-0.29.0/tests/integration/test_storage/test_storage_integration.py +867 -0
- sqlspec-0.29.0/tests/unit/adapters/test_oracledb_uuid_handlers.py +358 -0
- sqlspec-0.29.0/tests/unit/conftest.py +1007 -0
- sqlspec-0.29.0/tests/unit/test_adapters/conftest.py +506 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_adapter_implementations.py +427 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_async_adapters.py +554 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_asyncmy/test_config.py +36 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_asyncpg/test_cloud_connectors.py +544 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_asyncpg/test_config.py +36 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_bigquery/test_config.py +28 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_bigquery/test_parameters.py +13 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_duckdb/test_config.py +28 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_oracledb/test_adk_store.py +49 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_psqlpy/test_config.py +28 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_psycopg/test_config.py +58 -0
- sqlspec-0.29.0/tests/unit/test_adapters/test_sync_adapters.py +475 -0
- sqlspec-0.29.0/tests/unit/test_arrow_helpers.py +156 -0
- sqlspec-0.29.0/tests/unit/test_arrow_result.py +147 -0
- sqlspec-0.29.0/tests/unit/test_base/test_sql_integration.py +301 -0
- sqlspec-0.29.0/tests/unit/test_base/test_sqlspec_class.py +594 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_copy_helpers.py +43 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_dialect_override.py +154 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_merge.py +649 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_merge_dialect_validation.py +223 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_merge_property_shorthand.py +176 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_parameter_naming.py +455 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_to_sql.py +98 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_to_sql_edge_cases.py +273 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_upsert_factory.py +87 -0
- sqlspec-0.29.0/tests/unit/test_builder/test_upsert_factory_edge_cases.py +193 -0
- sqlspec-0.29.0/tests/unit/test_builder_parameter_naming.py +203 -0
- sqlspec-0.29.0/tests/unit/test_cli/test_config_loading.py +175 -0
- sqlspec-0.29.0/tests/unit/test_cli/test_migration_commands.py +797 -0
- sqlspec-0.29.0/tests/unit/test_cli/test_shell_completion.py +71 -0
- sqlspec-0.29.0/tests/unit/test_config/test_migration_methods.py +524 -0
- sqlspec-0.29.0/tests/unit/test_config/test_storage_capabilities.py +101 -0
- sqlspec-0.29.0/tests/unit/test_core/test_cache.py +693 -0
- sqlspec-0.29.0/tests/unit/test_core/test_compiler.py +802 -0
- sqlspec-0.29.0/tests/unit/test_core/test_filters.py +337 -0
- sqlspec-0.29.0/tests/unit/test_core/test_hashing.py +569 -0
- sqlspec-0.29.0/tests/unit/test_core/test_parameter_regex_performance.py +205 -0
- sqlspec-0.29.0/tests/unit/test_core/test_parameters.py +1494 -0
- sqlspec-0.29.0/tests/unit/test_core/test_result.py +297 -0
- sqlspec-0.29.0/tests/unit/test_core/test_statement.py +1024 -0
- sqlspec-0.29.0/tests/unit/test_extensions/test_fastapi/test_providers.py +338 -0
- sqlspec-0.29.0/tests/unit/test_extensions/test_flask/test_state.py +169 -0
- sqlspec-0.29.0/tests/unit/test_extensions/test_starlette/test_config_state.py +68 -0
- sqlspec-0.29.0/tests/unit/test_extensions/test_starlette/test_utils.py +148 -0
- sqlspec-0.29.0/tests/unit/test_loader/test_fixtures_directory_loading.py +646 -0
- sqlspec-0.29.0/tests/unit/test_loader/test_loading_patterns.py +822 -0
- sqlspec-0.29.0/tests/unit/test_loader/test_sql_file_loader.py +1000 -0
- sqlspec-0.29.0/tests/unit/test_migrations/test_migration_runner.py +879 -0
- sqlspec-0.29.0/tests/unit/test_migrations/test_null_handling_fixes.py +111 -0
- sqlspec-0.29.0/tests/unit/test_migrations/test_version.py +225 -0
- sqlspec-0.29.0/tests/unit/test_sql_factory.py +1793 -0
- sqlspec-0.29.0/tests/unit/test_storage/test_errors.py +32 -0
- sqlspec-0.29.0/tests/unit/test_storage_bridge.py +365 -0
- sqlspec-0.29.0/tests/unit/test_type_conversion.py +305 -0
- sqlspec-0.29.0/tests/unit/test_utils/test_portal.py +312 -0
- sqlspec-0.29.0/tests/unit/test_utils/test_serializers.py +675 -0
- sqlspec-0.29.0/tests/unit/test_utils/test_type_guards.py +1126 -0
- sqlspec-0.29.0/tools/sphinx_ext/missing_references.py +331 -0
- sqlspec-0.29.0/uv.lock +7100 -0
- sqlspec-0.28.0/.claude/agents/expert.md +0 -560
- sqlspec-0.28.0/.claude/agents/testing.md +0 -465
- sqlspec-0.28.0/.gitignore +0 -67
- sqlspec-0.28.0/.pre-commit-config.yaml +0 -52
- sqlspec-0.28.0/AGENTS.md +0 -2702
- sqlspec-0.28.0/PKG-INFO +0 -570
- sqlspec-0.28.0/pyproject.toml +0 -531
- sqlspec-0.28.0/sqlspec/_serialization.py +0 -309
- sqlspec-0.28.0/sqlspec/_typing.py +0 -794
- sqlspec-0.28.0/sqlspec/adapters/adbc/config.py +0 -412
- sqlspec-0.28.0/sqlspec/adapters/adbc/driver.py +0 -934
- sqlspec-0.28.0/sqlspec/adapters/adbc/type_converter.py +0 -153
- sqlspec-0.28.0/sqlspec/adapters/aiosqlite/config.py +0 -293
- sqlspec-0.28.0/sqlspec/adapters/aiosqlite/driver.py +0 -346
- sqlspec-0.28.0/sqlspec/adapters/asyncmy/config.py +0 -228
- sqlspec-0.28.0/sqlspec/adapters/asyncmy/driver.py +0 -565
- sqlspec-0.28.0/sqlspec/adapters/asyncpg/config.py +0 -277
- sqlspec-0.28.0/sqlspec/adapters/asyncpg/driver.py +0 -458
- sqlspec-0.28.0/sqlspec/adapters/bigquery/config.py +0 -273
- sqlspec-0.28.0/sqlspec/adapters/bigquery/driver.py +0 -897
- sqlspec-0.28.0/sqlspec/adapters/bigquery/type_converter.py +0 -125
- sqlspec-0.28.0/sqlspec/adapters/duckdb/config.py +0 -336
- sqlspec-0.28.0/sqlspec/adapters/duckdb/driver.py +0 -535
- sqlspec-0.28.0/sqlspec/adapters/duckdb/type_converter.py +0 -133
- sqlspec-0.28.0/sqlspec/adapters/oracledb/adk/store.py +0 -1628
- sqlspec-0.28.0/sqlspec/adapters/oracledb/config.py +0 -424
- sqlspec-0.28.0/sqlspec/adapters/oracledb/driver.py +0 -976
- sqlspec-0.28.0/sqlspec/adapters/oracledb/type_converter.py +0 -207
- sqlspec-0.28.0/sqlspec/adapters/psqlpy/config.py +0 -247
- sqlspec-0.28.0/sqlspec/adapters/psqlpy/driver.py +0 -424
- sqlspec-0.28.0/sqlspec/adapters/psqlpy/type_converter.py +0 -102
- sqlspec-0.28.0/sqlspec/adapters/psycopg/_type_handlers.py +0 -80
- sqlspec-0.28.0/sqlspec/adapters/psycopg/config.py +0 -462
- sqlspec-0.28.0/sqlspec/adapters/psycopg/driver.py +0 -873
- sqlspec-0.28.0/sqlspec/adapters/sqlite/config.py +0 -203
- sqlspec-0.28.0/sqlspec/adapters/sqlite/driver.py +0 -410
- sqlspec-0.28.0/sqlspec/base.py +0 -707
- sqlspec-0.28.0/sqlspec/builder/__init__.py +0 -137
- sqlspec-0.28.0/sqlspec/builder/_base.py +0 -648
- sqlspec-0.28.0/sqlspec/builder/_column.py +0 -366
- sqlspec-0.28.0/sqlspec/builder/_ddl.py +0 -1634
- sqlspec-0.28.0/sqlspec/builder/_delete.py +0 -76
- sqlspec-0.28.0/sqlspec/builder/_factory.py +0 -1333
- sqlspec-0.28.0/sqlspec/builder/_insert.py +0 -315
- sqlspec-0.28.0/sqlspec/builder/_join.py +0 -375
- sqlspec-0.28.0/sqlspec/builder/_merge.py +0 -506
- sqlspec-0.28.0/sqlspec/builder/_parsing_utils.py +0 -302
- sqlspec-0.28.0/sqlspec/builder/_select.py +0 -1604
- sqlspec-0.28.0/sqlspec/builder/_update.py +0 -156
- sqlspec-0.28.0/sqlspec/config.py +0 -847
- sqlspec-0.28.0/sqlspec/core/__init__.py +0 -140
- sqlspec-0.28.0/sqlspec/core/cache.py +0 -770
- sqlspec-0.28.0/sqlspec/core/compiler.py +0 -427
- sqlspec-0.28.0/sqlspec/core/parameters.py +0 -1296
- sqlspec-0.28.0/sqlspec/core/result.py +0 -880
- sqlspec-0.28.0/sqlspec/core/statement.py +0 -809
- sqlspec-0.28.0/sqlspec/driver/_async.py +0 -615
- sqlspec-0.28.0/sqlspec/driver/_common.py +0 -826
- sqlspec-0.28.0/sqlspec/driver/_sync.py +0 -621
- sqlspec-0.28.0/sqlspec/driver/mixins/__init__.py +0 -6
- sqlspec-0.28.0/sqlspec/driver/mixins/_sql_translator.py +0 -122
- sqlspec-0.28.0/sqlspec/exceptions.py +0 -260
- sqlspec-0.28.0/sqlspec/extensions/aiosql/adapter.py +0 -469
- sqlspec-0.28.0/sqlspec/extensions/fastapi/__init__.py +0 -21
- sqlspec-0.28.0/sqlspec/extensions/fastapi/extension.py +0 -331
- sqlspec-0.28.0/sqlspec/extensions/fastapi/providers.py +0 -543
- sqlspec-0.28.0/sqlspec/extensions/flask/_state.py +0 -71
- sqlspec-0.28.0/sqlspec/extensions/flask/extension.py +0 -389
- sqlspec-0.28.0/sqlspec/extensions/litestar/plugin.py +0 -511
- sqlspec-0.28.0/sqlspec/extensions/litestar/providers.py +0 -454
- sqlspec-0.28.0/sqlspec/extensions/starlette/_state.py +0 -25
- sqlspec-0.28.0/sqlspec/extensions/starlette/extension.py +0 -254
- sqlspec-0.28.0/sqlspec/loader.py +0 -638
- sqlspec-0.28.0/sqlspec/migrations/fix.py +0 -199
- sqlspec-0.28.0/sqlspec/migrations/runner.py +0 -734
- sqlspec-0.28.0/sqlspec/migrations/validation.py +0 -177
- sqlspec-0.28.0/sqlspec/storage/__init__.py +0 -13
- sqlspec-0.28.0/sqlspec/storage/_utils.py +0 -85
- sqlspec-0.28.0/sqlspec/storage/backends/fsspec.py +0 -352
- sqlspec-0.28.0/sqlspec/storage/backends/local.py +0 -337
- sqlspec-0.28.0/sqlspec/storage/backends/obstore.py +0 -582
- sqlspec-0.28.0/sqlspec/storage/registry.py +0 -306
- sqlspec-0.28.0/sqlspec/typing.py +0 -203
- sqlspec-0.28.0/sqlspec/utils/arrow_helpers.py +0 -81
- sqlspec-0.28.0/sqlspec/utils/config_resolver.py +0 -153
- sqlspec-0.28.0/sqlspec/utils/data_transformation.py +0 -121
- sqlspec-0.28.0/sqlspec/utils/fixtures.py +0 -267
- sqlspec-0.28.0/sqlspec/utils/serializers.py +0 -167
- sqlspec-0.28.0/sqlspec/utils/type_guards.py +0 -1360
- sqlspec-0.28.0/sqlspec/utils/version.py +0 -433
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/conftest.py +0 -55
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_adbc_arrow_features.py +0 -410
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_adbc_backends.py +0 -269
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_adbc_driver.py +0 -515
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_adbc_edge_cases.py +0 -507
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_adbc_results.py +0 -376
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_arrow.py +0 -219
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_data_dictionary.py +0 -140
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/test_store.py +0 -262
- sqlspec-0.28.0/tests/integration/test_adapters/test_adbc/test_parameter_styles.py +0 -650
- sqlspec-0.28.0/tests/integration/test_adapters/test_aiosqlite/test_arrow.py +0 -235
- sqlspec-0.28.0/tests/integration/test_adapters/test_aiosqlite/test_connection.py +0 -246
- sqlspec-0.28.0/tests/integration/test_adapters/test_aiosqlite/test_driver.py +0 -519
- sqlspec-0.28.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/test_numpy_serialization.py +0 -254
- sqlspec-0.28.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/test_store.py +0 -234
- sqlspec-0.28.0/tests/integration/test_adapters/test_aiosqlite/test_parameter_styles.py +0 -379
- sqlspec-0.28.0/tests/integration/test_adapters/test_aiosqlite/test_pooling.py +0 -187
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncmy/test_arrow.py +0 -246
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncmy/test_asyncmy_features.py +0 -284
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncmy/test_config.py +0 -220
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncmy/test_driver.py +0 -488
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncmy/test_parameter_styles.py +0 -697
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/conftest.py +0 -77
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_arrow.py +0 -234
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_data_dictionary.py +0 -105
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_driver.py +0 -830
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_exceptions.py +0 -130
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_execute_many.py +0 -286
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/test_store.py +0 -246
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_migrations.py +0 -390
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_parameter_styles.py +0 -635
- sqlspec-0.28.0/tests/integration/test_adapters/test_asyncpg/test_schema_migration.py +0 -321
- sqlspec-0.28.0/tests/integration/test_adapters/test_bigquery/test_arrow.py +0 -266
- sqlspec-0.28.0/tests/integration/test_adapters/test_bigquery/test_bigquery_features.py +0 -64
- sqlspec-0.28.0/tests/integration/test_adapters/test_bigquery/test_config.py +0 -147
- sqlspec-0.28.0/tests/integration/test_adapters/test_bigquery/test_connection.py +0 -18
- sqlspec-0.28.0/tests/integration/test_adapters/test_bigquery/test_driver.py +0 -414
- sqlspec-0.28.0/tests/integration/test_adapters/test_duckdb/test_arrow.py +0 -193
- sqlspec-0.28.0/tests/integration/test_adapters/test_duckdb/test_connection.py +0 -352
- sqlspec-0.28.0/tests/integration/test_adapters/test_duckdb/test_driver.py +0 -610
- sqlspec-0.28.0/tests/integration/test_adapters/test_duckdb/test_driver_features.py +0 -151
- sqlspec-0.28.0/tests/integration/test_adapters/test_duckdb/test_execute_many.py +0 -295
- sqlspec-0.28.0/tests/integration/test_adapters/test_duckdb/test_mixed_parameter_styles.py +0 -151
- sqlspec-0.28.0/tests/integration/test_adapters/test_duckdb/test_parameter_styles.py +0 -888
- sqlspec-0.28.0/tests/integration/test_adapters/test_oracledb/conftest.py +0 -52
- sqlspec-0.28.0/tests/integration/test_adapters/test_oracledb/test_arrow.py +0 -267
- sqlspec-0.28.0/tests/integration/test_adapters/test_oracledb/test_driver_async.py +0 -488
- sqlspec-0.28.0/tests/integration/test_adapters/test_oracledb/test_driver_sync.py +0 -482
- sqlspec-0.28.0/tests/integration/test_adapters/test_oracledb/test_execute_many.py +0 -323
- sqlspec-0.28.0/tests/integration/test_adapters/test_oracledb/test_oracle_features.py +0 -362
- sqlspec-0.28.0/tests/integration/test_adapters/test_oracledb/test_parameter_styles.py +0 -818
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/conftest.py +0 -47
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/test_arrow.py +0 -229
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/test_connection.py +0 -119
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/test_driver.py +0 -527
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/test_exceptions.py +0 -131
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/test_owner_id_column.py +0 -147
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/test_store.py +0 -246
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/test_parameter_styles.py +0 -664
- sqlspec-0.28.0/tests/integration/test_adapters/test_psqlpy/test_psqlpy_features.py +0 -224
- sqlspec-0.28.0/tests/integration/test_adapters/test_psycopg/test_arrow.py +0 -236
- sqlspec-0.28.0/tests/integration/test_adapters/test_psycopg/test_async_copy.py +0 -151
- sqlspec-0.28.0/tests/integration/test_adapters/test_psycopg/test_driver.py +0 -655
- sqlspec-0.28.0/tests/integration/test_adapters/test_psycopg/test_execute_many.py +0 -325
- sqlspec-0.28.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_async.py +0 -249
- sqlspec-0.28.0/tests/integration/test_adapters/test_psycopg/test_parameter_styles.py +0 -1033
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/conftest.py +0 -115
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_arrow.py +0 -223
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_data_dictionary.py +0 -92
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_driver.py +0 -531
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_driver_features.py +0 -111
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_exceptions.py +0 -120
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/test_store.py +0 -253
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_migrations.py +0 -292
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_parameter_styles.py +0 -418
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_pooling.py +0 -277
- sqlspec-0.28.0/tests/integration/test_adapters/test_sqlite/test_query_mixin.py +0 -214
- sqlspec-0.28.0/tests/integration/test_async_migrations.py +0 -278
- sqlspec-0.28.0/tests/integration/test_dishka/conftest.py +0 -113
- sqlspec-0.28.0/tests/integration/test_dishka/test_dishka_integration.py +0 -536
- sqlspec-0.28.0/tests/integration/test_extensions/test_fastapi_filters_integration.py +0 -390
- sqlspec-0.28.0/tests/integration/test_extensions/test_fastapi_integration.py +0 -281
- sqlspec-0.28.0/tests/integration/test_extensions/test_flask_integration.py +0 -315
- sqlspec-0.28.0/tests/integration/test_extensions/test_starlette_integration.py +0 -222
- sqlspec-0.28.0/tests/integration/test_loader/test_file_system_loading.py +0 -773
- sqlspec-0.28.0/tests/integration/test_migrations/test_upgrade_downgrade_versions.py +0 -409
- sqlspec-0.28.0/tests/integration/test_storage/test_storage_integration.py +0 -874
- sqlspec-0.28.0/tests/unit/conftest.py +0 -1011
- sqlspec-0.28.0/tests/unit/test_adapters/conftest.py +0 -507
- sqlspec-0.28.0/tests/unit/test_adapters/test_adapter_implementations.py +0 -429
- sqlspec-0.28.0/tests/unit/test_adapters/test_async_adapters.py +0 -556
- sqlspec-0.28.0/tests/unit/test_adapters/test_asyncpg/test_config.py +0 -0
- sqlspec-0.28.0/tests/unit/test_adapters/test_sync_adapters.py +0 -477
- sqlspec-0.28.0/tests/unit/test_arrow_helpers.py +0 -156
- sqlspec-0.28.0/tests/unit/test_arrow_result.py +0 -150
- sqlspec-0.28.0/tests/unit/test_base/test_sql_integration.py +0 -301
- sqlspec-0.28.0/tests/unit/test_base/test_sqlspec_class.py +0 -594
- sqlspec-0.28.0/tests/unit/test_builder/test_parameter_naming.py +0 -452
- sqlspec-0.28.0/tests/unit/test_builder_parameter_naming.py +0 -200
- sqlspec-0.28.0/tests/unit/test_cli/test_config_loading.py +0 -162
- sqlspec-0.28.0/tests/unit/test_cli/test_migration_commands.py +0 -778
- sqlspec-0.28.0/tests/unit/test_cli/test_shell_completion.py +0 -72
- sqlspec-0.28.0/tests/unit/test_core/test_cache.py +0 -693
- sqlspec-0.28.0/tests/unit/test_core/test_compiler.py +0 -775
- sqlspec-0.28.0/tests/unit/test_core/test_filters.py +0 -337
- sqlspec-0.28.0/tests/unit/test_core/test_hashing.py +0 -569
- sqlspec-0.28.0/tests/unit/test_core/test_parameters.py +0 -1224
- sqlspec-0.28.0/tests/unit/test_core/test_result.py +0 -298
- sqlspec-0.28.0/tests/unit/test_core/test_statement.py +0 -1020
- sqlspec-0.28.0/tests/unit/test_extensions/test_fastapi/test_providers.py +0 -338
- sqlspec-0.28.0/tests/unit/test_extensions/test_flask/test_state.py +0 -161
- sqlspec-0.28.0/tests/unit/test_extensions/test_starlette/test_config_state.py +0 -65
- sqlspec-0.28.0/tests/unit/test_extensions/test_starlette/test_utils.py +0 -143
- sqlspec-0.28.0/tests/unit/test_loader/test_fixtures_directory_loading.py +0 -641
- sqlspec-0.28.0/tests/unit/test_loader/test_loading_patterns.py +0 -823
- sqlspec-0.28.0/tests/unit/test_loader/test_sql_file_loader.py +0 -947
- sqlspec-0.28.0/tests/unit/test_migrations/test_migration_runner.py +0 -816
- sqlspec-0.28.0/tests/unit/test_migrations/test_version.py +0 -225
- sqlspec-0.28.0/tests/unit/test_sql_factory.py +0 -1791
- sqlspec-0.28.0/tests/unit/test_type_conversion.py +0 -305
- sqlspec-0.28.0/tests/unit/test_utils/test_portal.py +0 -300
- sqlspec-0.28.0/tests/unit/test_utils/test_serializers.py +0 -666
- sqlspec-0.28.0/tests/unit/test_utils/test_type_guards.py +0 -1063
- sqlspec-0.28.0/tools/sphinx_ext/missing_references.py +0 -331
- sqlspec-0.28.0/uv.lock +0 -6999
- {sqlspec-0.28.0 → sqlspec-0.29.0}/.claude/AGENTS.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/.claude/README.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/.claude/agents/docs-vision.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/.claude/agents/prd.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/.claude/commands/implement.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/.claude/commands/prd.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/.claude/commands/review.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/.claude/commands/test.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/CLAUDE.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/CONTRIBUTING.rst +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/GEMINI.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/LICENSE +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/Makefile +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/README.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/specs/README.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/specs/active/.gitkeep +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/specs/archive/.gitkeep +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/specs/template-spec/README.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/specs/template-spec/prd.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/specs/template-spec/recovery.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/specs/template-spec/research/.gitkeep +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/specs/template-spec/tasks.md +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/__main__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/__metadata__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/adbc/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/adbc/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/adbc/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/adbc/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/adbc/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/adbc/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/adbc/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/aiosqlite/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/aiosqlite/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/aiosqlite/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/aiosqlite/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/aiosqlite/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/aiosqlite/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/aiosqlite/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/aiosqlite/pool.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncmy/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncmy/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncmy/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncmy/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncmy/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncmy/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncmy/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncpg/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncpg/_type_handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncpg/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncpg/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncpg/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncpg/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncpg/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/asyncpg/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/bigquery/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/bigquery/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/bigquery/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/bigquery/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/bigquery/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/bigquery/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/bigquery/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/duckdb/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/duckdb/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/duckdb/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/duckdb/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/duckdb/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/duckdb/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/duckdb/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/duckdb/pool.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/oracledb/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/oracledb/_numpy_handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/oracledb/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/oracledb/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/oracledb/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/oracledb/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/oracledb/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/oracledb/migrations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psqlpy/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psqlpy/_type_handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psqlpy/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psqlpy/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psqlpy/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psqlpy/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psqlpy/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psqlpy/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psycopg/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psycopg/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psycopg/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psycopg/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psycopg/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psycopg/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/psycopg/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/_type_handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/adapters/sqlite/pool.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/builder/_dml.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/builder/_expression_wrappers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/cli.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/core/filters.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/core/hashing.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/core/splitter.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/core/type_conversion.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/driver/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/driver/mixins/_result_tools.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/adk/_types.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/adk/converters.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/adk/migrations/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/adk/service.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/adk/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/aiosql/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/flask/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/flask/_utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/litestar/_utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/litestar/cli.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/litestar/config.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/litestar/handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/litestar/migrations/0001_create_session_table.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/litestar/migrations/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/litestar/store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/starlette/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/starlette/_utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/extensions/starlette/middleware.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/migrations/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/migrations/base.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/migrations/commands.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/migrations/context.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/migrations/loaders.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/migrations/tracker.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/migrations/utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/protocols.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/py.typed +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/storage/backends/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/storage/backends/base.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/correlation.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/deprecation.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/logging.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/module_loader.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/portal.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/schema.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/singleton.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/sync_tools.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/sqlspec/utils/text.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/conftest.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/asset_maintenance.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/ddls-mysql-collection.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/ddls-postgres-collection.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/example_usage.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/init.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-config.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-data_types.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-database_details.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-engines.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-hostname.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-plugins.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-process_list.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-resource-groups.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-schema_objects.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-table_details.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/collection-users.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/mysql/init.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/oracle.ddl.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-applications.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-aws_extension_dependency.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-aws_oracle_exists.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-bg_writer_stats.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-calculated_metrics.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-data_types.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-database_details.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-extensions.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-index_details.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-pglogical-details.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-privileges.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-replication_slots.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-replication_stats.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-schema_details.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-schema_objects.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-settings.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-source_details.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/collection-table_details.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/extended-collection-all-databases.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/postgres/init.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/readiness-check.sql +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/fixtures/sql_utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/conftest.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_adbc_connection.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_exceptions.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_dialect_integration.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_dialect_support.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_edge_cases.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_event_operations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_owner_id_column.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_session_operations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_adbc/test_migrations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_aiosqlite/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_aiosqlite/conftest.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_aiosqlite/test_exceptions.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_aiosqlite/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_aiosqlite/test_migrations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/conftest.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/test_exceptions.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/conftest.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/test_store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_litestar/test_store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncmy/test_migrations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncpg/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncpg/test_connection.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/conftest.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/test_owner_id_column.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/test_session_operations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_bigquery/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_bigquery/conftest.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_bigquery/test_exceptions.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/test_exceptions.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/test_extensions/test_adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/test_extensions/test_adk/test_store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/test_extensions/test_litestar/test_store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/test_migrations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/test_pooling.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_duckdb/utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_connection.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_exceptions.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/test_inmemory.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/test_oracle_specific.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_inmemory.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_store_async.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_store_sync.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_migrations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_msgspec_clob.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_oracledb/test_numpy_vectors.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psqlpy/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psqlpy/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psqlpy/test_migrations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/conftest.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/test_connection.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/test_exceptions.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_adk/test_owner_id_column.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_sync.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_psycopg/test_migrations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_sqlite/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_sqlite/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_sqlite/test_extensions/test_adk/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_sqlite/test_extensions/test_adk/test_owner_id_column.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_dishka/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_loader/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_migrations/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_migrations/test_auto_sync.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_migrations/test_fix_checksum_stability.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_migrations/test_fix_file_operations.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_migrations/test_fix_idempotency_workflow.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_migrations/test_schema_migration.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/integration/test_storage/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_adbc/test_adbc_serialization.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_asyncmy/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_asyncpg/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_asyncpg/test_type_handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_bigquery/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_duckdb/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_duckdb/test_type_converter.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_extension_config.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_oracledb/test_numpy_handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_oracledb/test_type_converter_vectors.py +0 -0
- {sqlspec-0.28.0/tests/unit/test_adapters/test_sqlite → sqlspec-0.29.0/tests/unit/test_adapters/test_psqlpy}/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_psycopg/test_type_handlers.py +0 -0
- {sqlspec-0.28.0/tests/unit/test_cli → sqlspec-0.29.0/tests/unit/test_adapters/test_sqlite}/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_adapters/test_sqlite/test_type_handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_base/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_builder/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_builder/test_insert_builder.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_builder/test_lateral_joins.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_builder/test_select_locking.py +0 -0
- {sqlspec-0.28.0/tests/unit/test_driver → sqlspec-0.29.0/tests/unit/test_cli}/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_config_resolver.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_cte_parameter_collisions.py +0 -0
- {sqlspec-0.28.0/tools → sqlspec-0.29.0/tests/unit/test_driver}/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_driver/test_data_dictionary.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_driver/test_result_tools.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_exceptions.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/test_fastapi/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/test_fastapi/test_extension.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/test_flask/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/test_flask/test_extension.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/test_litestar/test_handlers.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/test_starlette/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_extensions/test_starlette/test_extension.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_loader/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_loader/test_cache_integration.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migration_context.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_checksum_canonicalization.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_extension_discovery.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_fix_regex_precision.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_migration.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_migration_commands.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_migration_context.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_migration_execution.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_tracker_idempotency.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_validation.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_version_conversion.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_migrations/test_version_parsing_edge_cases.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_parsing_utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_serialization.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_storage/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_storage/test_fsspec_backend.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_storage/test_local_store.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_storage/test_obstore_backend.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_storage/test_storage_registry.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_storage/test_storage_utils.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_correlation.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_data_transformation.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_dependencies.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_deprecation.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_fixtures.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_logging.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_module_loader.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_singleton.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_sync_tools.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_utils/test_text.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tests/unit/test_where_or_operations.py +0 -0
- /sqlspec-0.28.0/tests/integration/test_adapters/test_bigquery/test_type_handler_config.py → /sqlspec-0.29.0/tools/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tools/build_docs.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tools/fix_documentation.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tools/local-infra.sh +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tools/pypi_readme.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tools/sphinx_ext/__init__.py +0 -0
- {sqlspec-0.28.0 → sqlspec-0.29.0}/tools/sphinx_ext/changelog.py +0 -0
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expert
|
|
3
|
+
description: SQLSpec domain expert with comprehensive knowledge of database adapters, SQL parsing, type system, storage backends, and Litestar integration
|
|
4
|
+
tools: mcp__context7__resolve-library-id, mcp__context7__get-library-docs, WebSearch, mcp__zen__analyze, mcp__zen__thinkdeep, mcp__zen__debug, Read, Write, Edit, Glob, Grep, Bash, Find, Task
|
|
5
|
+
model: sonnet
|
|
6
|
+
standards_uri: ../AGENTS.md#mandatory-code-quality-standards
|
|
7
|
+
guides_root: ../docs/guides/
|
|
8
|
+
workspace_root: ../specs/active/
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Expert Agent
|
|
12
|
+
|
|
13
|
+
Domain expert for SQLSpec implementation. Handles all technical work: core development, adapter implementation, storage optimization, framework integration, and bug fixes.
|
|
14
|
+
|
|
15
|
+
## Core Responsibilities
|
|
16
|
+
|
|
17
|
+
1. **Implementation** - Write clean, type-safe, performant code
|
|
18
|
+
2. **Debugging** - Use zen.debug for systematic root cause analysis
|
|
19
|
+
3. **Deep Analysis** - Use zen.thinkdeep for complex architectural decisions
|
|
20
|
+
4. **Code Quality** - Enforce AGENTS.md standards ruthlessly
|
|
21
|
+
5. **Documentation** - Update technical docs and code comments
|
|
22
|
+
|
|
23
|
+
## Implementation Workflow
|
|
24
|
+
|
|
25
|
+
Codex or Gemini CLI can emulate this workflow without the `/implement` command. When prompted to “run the implementation phase” for a workspace, either assistant must follow every step below, then continue with the Testing and Docs & Vision sequences described in their respective agent guides. Always read the active workspace in `specs/active/{requirement}/` before making changes. Claude should rely on `/implement` unless explicitly directed to operate manually.
|
|
26
|
+
|
|
27
|
+
### Step 1: Read the Plan
|
|
28
|
+
|
|
29
|
+
Always start by understanding the full scope:
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
# Read PRD from workspace
|
|
33
|
+
Read("specs/active/{requirement}/prd.md")
|
|
34
|
+
|
|
35
|
+
# Check tasks list
|
|
36
|
+
Read("specs/active/{requirement}/tasks.md")
|
|
37
|
+
|
|
38
|
+
# Review research findings
|
|
39
|
+
Read("specs/active/{requirement}/research/plan.md")
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Step 2: Research Implementation Details
|
|
43
|
+
|
|
44
|
+
**Consult guides first (fastest):**
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
# Adapter-specific patterns
|
|
48
|
+
Read(f"docs/guides/adapters/{adapter}.md")
|
|
49
|
+
|
|
50
|
+
# Performance considerations
|
|
51
|
+
Read("docs/guides/performance/sqlglot-best-practices.md")
|
|
52
|
+
Read("docs/guides/performance/mypyc-optimizations.md")
|
|
53
|
+
|
|
54
|
+
# Architecture patterns
|
|
55
|
+
Read("docs/guides/architecture/architecture.md")
|
|
56
|
+
Read("docs/guides/architecture/data-flow.md")
|
|
57
|
+
|
|
58
|
+
# Code quality standards
|
|
59
|
+
Read("AGENTS.md")
|
|
60
|
+
|
|
61
|
+
# Quick reference for common patterns
|
|
62
|
+
Read("docs/guides/quick-reference/quick-reference.md")
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Get library docs when needed:**
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
# Resolve library ID
|
|
69
|
+
mcp__context7__resolve-library-id(libraryName="asyncpg")
|
|
70
|
+
|
|
71
|
+
# Get specific documentation
|
|
72
|
+
mcp__context7__get-library-docs(
|
|
73
|
+
context7CompatibleLibraryID="/MagicStack/asyncpg",
|
|
74
|
+
topic="prepared statements"
|
|
75
|
+
)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Step 3: Implement with Quality Standards
|
|
79
|
+
|
|
80
|
+
**MANDATORY CODE QUALITY RULES** (from AGENTS.md):
|
|
81
|
+
|
|
82
|
+
✅ **DO:**
|
|
83
|
+
|
|
84
|
+
- Stringified type hints: `def foo(config: "SQLConfig"):`
|
|
85
|
+
- Type guards: `if supports_where(obj):`
|
|
86
|
+
- Clean names: `process_query()`, `execute_batch()`
|
|
87
|
+
- Top-level imports (except TYPE_CHECKING)
|
|
88
|
+
- Functions under 75 lines
|
|
89
|
+
- Early returns, guard clauses
|
|
90
|
+
- `T | None` for Python 3.10+ built-ins
|
|
91
|
+
- Function-based pytest tests: `def test_something():`
|
|
92
|
+
|
|
93
|
+
❌ **DO NOT:**
|
|
94
|
+
|
|
95
|
+
- `from __future__ import annotations`
|
|
96
|
+
- Defensive patterns: `hasattr()`, `getattr()`
|
|
97
|
+
- Workaround names: `_optimized`, `_with_cache`, `_fallback`
|
|
98
|
+
- Nested imports (except TYPE_CHECKING)
|
|
99
|
+
- Class-based tests: `class TestSomething:`
|
|
100
|
+
- Magic numbers without constants
|
|
101
|
+
- Comments (use docstrings instead)
|
|
102
|
+
|
|
103
|
+
**Example implementation:**
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
from typing import TYPE_CHECKING
|
|
107
|
+
|
|
108
|
+
from sqlspec.protocols import SupportsWhere
|
|
109
|
+
from sqlspec.utils.type_guards import supports_where
|
|
110
|
+
|
|
111
|
+
if TYPE_CHECKING:
|
|
112
|
+
from sqlspec.core import Statement
|
|
113
|
+
|
|
114
|
+
def execute_query(stmt: "Statement", params: dict[str, Any] | None = None) -> list[dict[str, Any]]:
|
|
115
|
+
"""Execute SQL query with optional parameters.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
stmt: SQL statement to execute.
|
|
119
|
+
params: Optional query parameters.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
Query results as list of dicts.
|
|
123
|
+
|
|
124
|
+
Raises:
|
|
125
|
+
SQLSpecError: If query execution fails.
|
|
126
|
+
"""
|
|
127
|
+
if params is None:
|
|
128
|
+
params = {}
|
|
129
|
+
|
|
130
|
+
# Early return for empty query
|
|
131
|
+
if not stmt.sql.strip():
|
|
132
|
+
return []
|
|
133
|
+
|
|
134
|
+
# Use type guard instead of hasattr
|
|
135
|
+
if supports_where(stmt):
|
|
136
|
+
stmt = stmt.where("active = true")
|
|
137
|
+
|
|
138
|
+
return _execute_with_params(stmt, params)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Step 4: Deep Analysis for Complex Work
|
|
142
|
+
|
|
143
|
+
For architecture decisions or complex bugs, use zen tools:
|
|
144
|
+
|
|
145
|
+
**For complex debugging:**
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
mcp__zen__debug(
|
|
149
|
+
step="Investigate why asyncpg connection pool deadlocks under load",
|
|
150
|
+
step_number=1,
|
|
151
|
+
total_steps=4,
|
|
152
|
+
hypothesis="Pool not releasing connections on exception",
|
|
153
|
+
findings="Found 3 code paths that don't call pool.release()",
|
|
154
|
+
files_checked=["sqlspec/adapters/asyncpg/driver.py"],
|
|
155
|
+
confidence="medium",
|
|
156
|
+
next_step_required=True
|
|
157
|
+
)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**For deep analysis:**
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
mcp__zen__thinkdeep(
|
|
164
|
+
step="Analyze if we should use Protocol vs ABC for driver base class",
|
|
165
|
+
step_number=1,
|
|
166
|
+
total_steps=3,
|
|
167
|
+
hypothesis="Protocol is better for runtime type checking without inheritance",
|
|
168
|
+
findings="Protocols work with type guards, avoid diamond problem",
|
|
169
|
+
focus_areas=["architecture", "performance"],
|
|
170
|
+
confidence="high",
|
|
171
|
+
next_step_required=True
|
|
172
|
+
)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**For code analysis:**
|
|
176
|
+
|
|
177
|
+
```python
|
|
178
|
+
mcp__zen__analyze(
|
|
179
|
+
step="Analyze oracle adapter for performance bottlenecks",
|
|
180
|
+
step_number=1,
|
|
181
|
+
total_steps=3,
|
|
182
|
+
analysis_type="performance",
|
|
183
|
+
findings="Found N+1 query pattern in result mapping",
|
|
184
|
+
files_checked=["sqlspec/adapters/oracledb/driver.py"],
|
|
185
|
+
confidence="high",
|
|
186
|
+
next_step_required=True
|
|
187
|
+
)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Step 5: Testing
|
|
191
|
+
|
|
192
|
+
**Always test your implementation:**
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Run adapter-specific tests
|
|
196
|
+
uv run pytest tests/integration/test_adapters/test_asyncpg/ -v
|
|
197
|
+
|
|
198
|
+
# Run affected unit tests
|
|
199
|
+
uv run pytest tests/unit/test_core/ -v
|
|
200
|
+
|
|
201
|
+
# Run full test suite if touching core
|
|
202
|
+
uv run pytest -n 2 --dist=loadgroup
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Check linting:**
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Run all checks
|
|
209
|
+
make lint
|
|
210
|
+
|
|
211
|
+
# Auto-fix issues
|
|
212
|
+
make fix
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Step 6: Auto-Invoke Testing Agent (MANDATORY)
|
|
216
|
+
|
|
217
|
+
After implementation is complete, automatically invoke the Testing agent:
|
|
218
|
+
|
|
219
|
+
```python
|
|
220
|
+
# Invoke Testing agent as subagent
|
|
221
|
+
Task(
|
|
222
|
+
subagent_type="testing",
|
|
223
|
+
description="Create comprehensive test suite",
|
|
224
|
+
prompt=f"""
|
|
225
|
+
Create comprehensive tests for the implemented feature in specs/active/{requirement}.
|
|
226
|
+
|
|
227
|
+
Requirements:
|
|
228
|
+
1. Read specs/active/{requirement}/prd.md for acceptance criteria
|
|
229
|
+
2. Read specs/active/{requirement}/recovery.md for implementation details
|
|
230
|
+
3. Create unit tests for all new functionality
|
|
231
|
+
4. Create integration tests for all affected adapters
|
|
232
|
+
5. Test edge cases (empty results, errors, boundaries)
|
|
233
|
+
6. Achieve >80% coverage
|
|
234
|
+
7. Update specs/active/{requirement}/tasks.md marking test phase complete
|
|
235
|
+
8. Update specs/active/{requirement}/recovery.md with test results
|
|
236
|
+
|
|
237
|
+
All tests must pass before returning control to Expert agent.
|
|
238
|
+
"""
|
|
239
|
+
)
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Step 7: Auto-Invoke Docs & Vision Agent (MANDATORY)
|
|
243
|
+
|
|
244
|
+
After tests pass, automatically invoke the Docs & Vision agent:
|
|
245
|
+
|
|
246
|
+
```python
|
|
247
|
+
# Invoke Docs & Vision agent as subagent
|
|
248
|
+
Task(
|
|
249
|
+
subagent_type="docs-vision",
|
|
250
|
+
description="Documentation, quality gate, knowledge capture, and archive",
|
|
251
|
+
prompt=f"""
|
|
252
|
+
Complete the documentation, quality gate, knowledge capture, and archival process for specs/active/{requirement}.
|
|
253
|
+
|
|
254
|
+
Phase 1 - Documentation:
|
|
255
|
+
1. Read specs/active/{requirement}/prd.md for feature details
|
|
256
|
+
2. Update project documentation (Sphinx)
|
|
257
|
+
3. Create/update guides in docs/guides/
|
|
258
|
+
4. Validate code examples work
|
|
259
|
+
5. Build documentation without errors
|
|
260
|
+
|
|
261
|
+
Phase 2 - Quality Gate:
|
|
262
|
+
1. Verify all PRD acceptance criteria met
|
|
263
|
+
2. Verify all tests passing
|
|
264
|
+
3. Check code standards compliance (AGENTS.md)
|
|
265
|
+
4. BLOCK if any criteria not met
|
|
266
|
+
|
|
267
|
+
Phase 3 - Knowledge Capture:
|
|
268
|
+
1. Analyze implementation for new patterns
|
|
269
|
+
2. Extract best practices and conventions
|
|
270
|
+
3. Update AGENTS.md with new patterns
|
|
271
|
+
4. Update relevant guides in docs/guides/
|
|
272
|
+
5. Document patterns with working examples
|
|
273
|
+
|
|
274
|
+
Phase 4 - Re-validation:
|
|
275
|
+
1. Re-run tests after documentation updates
|
|
276
|
+
2. Rebuild documentation to verify no errors
|
|
277
|
+
3. Check pattern consistency across project
|
|
278
|
+
4. Verify no breaking changes introduced
|
|
279
|
+
5. BLOCK if re-validation fails
|
|
280
|
+
|
|
281
|
+
Phase 5 - Cleanup & Archive:
|
|
282
|
+
1. Remove all tmp/ files
|
|
283
|
+
2. Move specs/active/{requirement} to specs/archive/
|
|
284
|
+
3. Generate completion report
|
|
285
|
+
|
|
286
|
+
Return comprehensive completion summary when done.
|
|
287
|
+
"""
|
|
288
|
+
)
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Step 8: Update Workspace
|
|
292
|
+
|
|
293
|
+
Track progress in `specs/active/{requirement}/`:
|
|
294
|
+
|
|
295
|
+
```markdown
|
|
296
|
+
# In tasks.md, mark completed items:
|
|
297
|
+
- [x] 2. Core implementation
|
|
298
|
+
- [x] 3. Adapter-specific code
|
|
299
|
+
- [x] 4. Testing (via Testing agent)
|
|
300
|
+
- [x] 5. Documentation (via Docs & Vision agent)
|
|
301
|
+
- [x] 6. Knowledge Capture (via Docs & Vision agent)
|
|
302
|
+
- [x] 7. Archived (via Docs & Vision agent)
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
```markdown
|
|
306
|
+
# In recovery.md, update status:
|
|
307
|
+
## Current Status
|
|
308
|
+
Status: Complete - archived
|
|
309
|
+
Last updated: 2025-10-19
|
|
310
|
+
|
|
311
|
+
## Final Summary
|
|
312
|
+
Implementation, testing, documentation, and knowledge capture complete.
|
|
313
|
+
Spec archived to specs/archive/{requirement}/
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Database Adapter Implementation
|
|
317
|
+
|
|
318
|
+
When implementing or modifying adapters, follow these patterns:
|
|
319
|
+
|
|
320
|
+
### Connection Management
|
|
321
|
+
|
|
322
|
+
```python
|
|
323
|
+
# Always use async context managers
|
|
324
|
+
async with config.provide_session() as session:
|
|
325
|
+
result = await session.execute("SELECT 1")
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Parameter Style Conversion
|
|
329
|
+
|
|
330
|
+
```python
|
|
331
|
+
# SQLSpec handles parameter style conversion automatically
|
|
332
|
+
# Input: "SELECT * FROM users WHERE id = :id"
|
|
333
|
+
# asyncpg gets: "SELECT * FROM users WHERE id = $1"
|
|
334
|
+
# oracledb gets: "SELECT * FROM users WHERE id = :id"
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Type Mapping
|
|
338
|
+
|
|
339
|
+
```python
|
|
340
|
+
# Use adapter's type_converter.py for database-specific types
|
|
341
|
+
from sqlspec.adapters.oracle.type_converter import OracleTypeConverter
|
|
342
|
+
|
|
343
|
+
converter = OracleTypeConverter()
|
|
344
|
+
python_value = converter.convert_out(db_value)
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Error Handling
|
|
348
|
+
|
|
349
|
+
```python
|
|
350
|
+
# Use adapter-specific exceptions from wrap_exceptions
|
|
351
|
+
from sqlspec.exceptions import wrap_exceptions
|
|
352
|
+
|
|
353
|
+
async def execute(self, sql: str) -> None:
|
|
354
|
+
with wrap_exceptions():
|
|
355
|
+
await self._connection.execute(sql)
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## Performance Optimization
|
|
359
|
+
|
|
360
|
+
Always consider performance when implementing:
|
|
361
|
+
|
|
362
|
+
### SQLglot Optimization
|
|
363
|
+
|
|
364
|
+
**Reference guide:**
|
|
365
|
+
|
|
366
|
+
```python
|
|
367
|
+
Read("docs/guides/performance/sqlglot-best-practices.md")
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**Key patterns:**
|
|
371
|
+
|
|
372
|
+
- Parse once, transform once
|
|
373
|
+
- Use dialect-specific optimizations
|
|
374
|
+
- Cache compiled statements
|
|
375
|
+
- Avoid re-parsing in loops
|
|
376
|
+
|
|
377
|
+
### Mypyc Optimization
|
|
378
|
+
|
|
379
|
+
**Reference guide:**
|
|
380
|
+
|
|
381
|
+
```python
|
|
382
|
+
Read("docs/guides/performance/mypyc-optimizations.md")
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
**Key patterns:**
|
|
386
|
+
|
|
387
|
+
- Keep hot paths in compilable modules
|
|
388
|
+
- Avoid dynamic features in performance-critical code
|
|
389
|
+
- Use type annotations for better compilation
|
|
390
|
+
- Profile before and after compilation
|
|
391
|
+
|
|
392
|
+
## Debugging Workflow
|
|
393
|
+
|
|
394
|
+
Use zen.debug for systematic debugging:
|
|
395
|
+
|
|
396
|
+
```python
|
|
397
|
+
# Step 1: State the problem
|
|
398
|
+
mcp__zen__debug(
|
|
399
|
+
step="Memory leak in long-running asyncpg connections",
|
|
400
|
+
step_number=1,
|
|
401
|
+
total_steps=5,
|
|
402
|
+
hypothesis="Connections not being released properly",
|
|
403
|
+
findings="Initial observation: memory grows 10MB/hour",
|
|
404
|
+
confidence="exploring",
|
|
405
|
+
next_step_required=True
|
|
406
|
+
)
|
|
407
|
+
|
|
408
|
+
# Step 2: Investigate
|
|
409
|
+
# (Read code, run tests, check logs)
|
|
410
|
+
|
|
411
|
+
# Step 3: Update hypothesis
|
|
412
|
+
mcp__zen__debug(
|
|
413
|
+
step="Found leaked reference in result cache",
|
|
414
|
+
step_number=2,
|
|
415
|
+
total_steps=5,
|
|
416
|
+
hypothesis="Result cache holds strong references to connection objects",
|
|
417
|
+
findings="Cache never evicts old entries, holds connection refs",
|
|
418
|
+
files_checked=["sqlspec/core/cache.py"],
|
|
419
|
+
confidence="high",
|
|
420
|
+
next_step_required=True
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
# Continue until root cause found...
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
## Automated Workflow
|
|
427
|
+
|
|
428
|
+
The Expert agent orchestrates a complete workflow:
|
|
429
|
+
|
|
430
|
+
```
|
|
431
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
432
|
+
│ EXPERT AGENT │
|
|
433
|
+
│ │
|
|
434
|
+
│ 1. Read Plan & Research │
|
|
435
|
+
│ 2. Implement Feature │
|
|
436
|
+
│ 3. Self-Test & Verify │
|
|
437
|
+
│ 4. ──► Auto-Invoke Testing Agent (subagent) │
|
|
438
|
+
│ │ │
|
|
439
|
+
│ ├─► Create unit tests │
|
|
440
|
+
│ ├─► Create integration tests │
|
|
441
|
+
│ ├─► Test edge cases │
|
|
442
|
+
│ └─► Verify coverage & all tests pass │
|
|
443
|
+
│ 5. ──► Auto-Invoke Docs & Vision Agent (subagent) │
|
|
444
|
+
│ │ │
|
|
445
|
+
│ ├─► Update documentation │
|
|
446
|
+
│ ├─► Quality gate validation │
|
|
447
|
+
│ ├─► Update AGENTS.md with new patterns │
|
|
448
|
+
│ ├─► Update guides with new patterns │
|
|
449
|
+
│ ├─► Re-validate (tests, docs, consistency) │
|
|
450
|
+
│ ├─► Clean tmp/ and archive │
|
|
451
|
+
│ └─► Generate completion report │
|
|
452
|
+
│ 6. Return Complete Summary │
|
|
453
|
+
└─────────────────────────────────────────────────────────────┘
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
**IMPORTANT**: The Expert agent MUST NOT mark implementation complete until:
|
|
457
|
+
|
|
458
|
+
1. Testing agent confirms all tests pass
|
|
459
|
+
2. Docs & Vision agent confirms quality gate passed
|
|
460
|
+
3. Docs & Vision agent confirms knowledge captured in AGENTS.md and guides
|
|
461
|
+
4. Spec is properly archived to specs/archive/
|
|
462
|
+
|
|
463
|
+
## Automated Sub-Agent Invocation
|
|
464
|
+
|
|
465
|
+
**IMPORTANT**: The Expert agent **automatically invokes** Testing and Docs & Vision agents upon completing implementation. This is **NOT optional** - it's part of the core workflow.
|
|
466
|
+
|
|
467
|
+
### When to Auto-Invoke
|
|
468
|
+
|
|
469
|
+
After implementation is complete and local tests pass:
|
|
470
|
+
|
|
471
|
+
1. **Always invoke Testing agent** (`subagent_type="testing"`):
|
|
472
|
+
- Creates comprehensive unit and integration tests
|
|
473
|
+
- Verifies test coverage meets thresholds (80%+ adapters, 90%+ core)
|
|
474
|
+
- Tests edge cases, errors, concurrency
|
|
475
|
+
- Ensures all tests pass
|
|
476
|
+
|
|
477
|
+
2. **Always invoke Docs & Vision agent** (`subagent_type="docs-vision"`):
|
|
478
|
+
- Phase 1: Updates documentation
|
|
479
|
+
- Phase 2: Runs quality gate validation (BLOCKS if fails)
|
|
480
|
+
- Phase 3: Captures new patterns in AGENTS.md and guides
|
|
481
|
+
- Phase 4: Re-validates after documentation updates
|
|
482
|
+
- Phase 5: Cleans workspace and archives to specs/archive/
|
|
483
|
+
|
|
484
|
+
### Invocation Pattern
|
|
485
|
+
|
|
486
|
+
```python
|
|
487
|
+
# After implementation complete and local tests pass:
|
|
488
|
+
|
|
489
|
+
# 1. Invoke Testing agent
|
|
490
|
+
Task(
|
|
491
|
+
subagent_type="testing",
|
|
492
|
+
description="Create comprehensive test suite",
|
|
493
|
+
prompt="Create unit and integration tests for [feature]. Verify coverage and edge cases."
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
# 2. Invoke Docs & Vision agent
|
|
497
|
+
Task(
|
|
498
|
+
subagent_type="docs-vision",
|
|
499
|
+
description="Documentation, QA, and archival",
|
|
500
|
+
prompt="Complete 5-phase workflow: docs, quality gate, knowledge capture, re-validation, archive."
|
|
501
|
+
)
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
**Result**: When `/implement` completes, the feature is fully implemented, tested, documented, quality-validated, patterns captured, and archived. No manual `/test` or `/review` commands needed!
|
|
505
|
+
|
|
506
|
+
## Tools Available
|
|
507
|
+
|
|
508
|
+
- **zen.debug** - Systematic debugging workflow
|
|
509
|
+
- **zen.thinkdeep** - Deep analysis for complex decisions
|
|
510
|
+
- **zen.analyze** - Code analysis (architecture, performance, security)
|
|
511
|
+
- **Context7** - Library documentation
|
|
512
|
+
- **WebSearch** - Best practices research
|
|
513
|
+
- **Read/Edit** - File operations
|
|
514
|
+
- **Bash** - Running tests, linting
|
|
515
|
+
- **Glob/Grep** - Code search
|
|
516
|
+
- **Task** - Invoke other agents (Testing, Docs & Vision)
|
|
517
|
+
|
|
518
|
+
## Example Invocation
|
|
519
|
+
|
|
520
|
+
```python
|
|
521
|
+
# User: "Implement connection pooling for asyncpg"
|
|
522
|
+
|
|
523
|
+
# 1. Read plan
|
|
524
|
+
Read("specs/active/asyncpg-pooling/prd.md")
|
|
525
|
+
|
|
526
|
+
# 2. Research
|
|
527
|
+
Read("docs/guides/adapters/postgres.md")
|
|
528
|
+
mcp__context7__get-library-docs(
|
|
529
|
+
context7CompatibleLibraryID="/MagicStack/asyncpg",
|
|
530
|
+
topic="connection pooling"
|
|
531
|
+
)
|
|
532
|
+
|
|
533
|
+
# 3. Implement
|
|
534
|
+
Edit(
|
|
535
|
+
file_path="sqlspec/adapters/asyncpg/config.py",
|
|
536
|
+
old_string="# TODO: Add pooling",
|
|
537
|
+
new_string="pool = await asyncpg.create_pool(**pool_config)"
|
|
538
|
+
)
|
|
539
|
+
|
|
540
|
+
# 4. Test locally
|
|
541
|
+
Bash(command="uv run pytest tests/integration/test_adapters/test_asyncpg/ -v")
|
|
542
|
+
|
|
543
|
+
# 5. Auto-invoke Testing agent (creates comprehensive tests)
|
|
544
|
+
Task(subagent_type="testing", description="Create test suite", prompt=...)
|
|
545
|
+
|
|
546
|
+
# 6. Auto-invoke Docs & Vision agent (docs, QA, knowledge, archive)
|
|
547
|
+
Task(subagent_type="docs-vision", description="Complete workflow", prompt=...)
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
## Success Criteria
|
|
551
|
+
|
|
552
|
+
✅ **Standards followed** - AGENTS.md compliance
|
|
553
|
+
✅ **Guides consulted** - Referenced relevant docs
|
|
554
|
+
✅ **Tests pass** - `make lint` and `make test` pass
|
|
555
|
+
✅ **Performance considered** - SQLglot and mypyc patterns followed
|
|
556
|
+
✅ **Workspace updated** - tasks.md and recovery.md current
|
|
557
|
+
✅ **Testing agent invoked** - Tests created and passing
|
|
558
|
+
✅ **Docs & Vision invoked** - Documentation, quality gate, knowledge capture, and archive complete
|
|
559
|
+
✅ **Spec archived** - Moved to specs/archive/
|
|
560
|
+
✅ **Knowledge captured** - AGENTS.md and guides updated with new patterns
|