sqlspec 0.47.0__cp314-cp314-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- f68e0789eb443ecb1c2c__mypyc.cp314-win_amd64.pyd +0 -0
- sqlspec/__init__.py +167 -0
- sqlspec/__main__.py +12 -0
- sqlspec/__metadata__.py +14 -0
- sqlspec/_typing.py +714 -0
- sqlspec/adapters/__init__.py +0 -0
- sqlspec/adapters/adbc/__init__.py +13 -0
- sqlspec/adapters/adbc/_typing.py +106 -0
- sqlspec/adapters/adbc/adk/__init__.py +5 -0
- sqlspec/adapters/adbc/adk/store.py +1280 -0
- sqlspec/adapters/adbc/config.py +378 -0
- sqlspec/adapters/adbc/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/adbc/core.py +922 -0
- sqlspec/adapters/adbc/data_dictionary.py +339 -0
- sqlspec/adapters/adbc/driver.py +534 -0
- sqlspec/adapters/adbc/events/__init__.py +5 -0
- sqlspec/adapters/adbc/events/store.py +285 -0
- sqlspec/adapters/adbc/litestar/__init__.py +5 -0
- sqlspec/adapters/adbc/litestar/store.py +534 -0
- sqlspec/adapters/adbc/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/adbc/type_converter.py +142 -0
- sqlspec/adapters/aiomysql/__init__.py +21 -0
- sqlspec/adapters/aiomysql/_typing.py +137 -0
- sqlspec/adapters/aiomysql/adk/__init__.py +5 -0
- sqlspec/adapters/aiomysql/adk/store.py +678 -0
- sqlspec/adapters/aiomysql/config.py +305 -0
- sqlspec/adapters/aiomysql/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/aiomysql/core.py +536 -0
- sqlspec/adapters/aiomysql/data_dictionary.py +121 -0
- sqlspec/adapters/aiomysql/driver.py +386 -0
- sqlspec/adapters/aiomysql/events/__init__.py +5 -0
- sqlspec/adapters/aiomysql/events/store.py +104 -0
- sqlspec/adapters/aiomysql/litestar/__init__.py +5 -0
- sqlspec/adapters/aiomysql/litestar/store.py +314 -0
- sqlspec/adapters/aiosqlite/__init__.py +26 -0
- sqlspec/adapters/aiosqlite/_typing.py +109 -0
- sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/adk/store.py +829 -0
- sqlspec/adapters/aiosqlite/config.py +315 -0
- sqlspec/adapters/aiosqlite/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/aiosqlite/core.py +315 -0
- sqlspec/adapters/aiosqlite/data_dictionary.py +202 -0
- sqlspec/adapters/aiosqlite/driver.py +311 -0
- sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/events/store.py +20 -0
- sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
- sqlspec/adapters/aiosqlite/pool.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/aiosqlite/pool.py +734 -0
- sqlspec/adapters/asyncmy/__init__.py +21 -0
- sqlspec/adapters/asyncmy/_typing.py +113 -0
- sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
- sqlspec/adapters/asyncmy/adk/store.py +644 -0
- sqlspec/adapters/asyncmy/config.py +307 -0
- sqlspec/adapters/asyncmy/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/asyncmy/core.py +538 -0
- sqlspec/adapters/asyncmy/data_dictionary.py +122 -0
- sqlspec/adapters/asyncmy/driver.py +391 -0
- sqlspec/adapters/asyncmy/events/__init__.py +5 -0
- sqlspec/adapters/asyncmy/events/store.py +104 -0
- sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncmy/litestar/store.py +296 -0
- sqlspec/adapters/asyncpg/__init__.py +26 -0
- sqlspec/adapters/asyncpg/_typing.py +103 -0
- sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
- sqlspec/adapters/asyncpg/adk/store.py +483 -0
- sqlspec/adapters/asyncpg/config.py +575 -0
- sqlspec/adapters/asyncpg/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/asyncpg/core.py +480 -0
- sqlspec/adapters/asyncpg/data_dictionary.py +157 -0
- sqlspec/adapters/asyncpg/driver.py +487 -0
- sqlspec/adapters/asyncpg/events/__init__.py +6 -0
- sqlspec/adapters/asyncpg/events/_hub.py +181 -0
- sqlspec/adapters/asyncpg/events/backend.py +210 -0
- sqlspec/adapters/asyncpg/events/store.py +40 -0
- sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncpg/litestar/store.py +251 -0
- sqlspec/adapters/bigquery/__init__.py +15 -0
- sqlspec/adapters/bigquery/_typing.py +108 -0
- sqlspec/adapters/bigquery/config.py +362 -0
- sqlspec/adapters/bigquery/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/bigquery/core.py +768 -0
- sqlspec/adapters/bigquery/data_dictionary.py +120 -0
- sqlspec/adapters/bigquery/driver.py +542 -0
- sqlspec/adapters/bigquery/events/__init__.py +5 -0
- sqlspec/adapters/bigquery/events/store.py +139 -0
- sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
- sqlspec/adapters/bigquery/litestar/store.py +325 -0
- sqlspec/adapters/bigquery/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/bigquery/type_converter.py +107 -0
- sqlspec/adapters/cockroach_asyncpg/__init__.py +26 -0
- sqlspec/adapters/cockroach_asyncpg/_typing.py +73 -0
- sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/adk/store.py +465 -0
- sqlspec/adapters/cockroach_asyncpg/config.py +248 -0
- sqlspec/adapters/cockroach_asyncpg/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
- sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +110 -0
- sqlspec/adapters/cockroach_asyncpg/driver.py +142 -0
- sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
- sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
- sqlspec/adapters/cockroach_psycopg/__init__.py +39 -0
- sqlspec/adapters/cockroach_psycopg/_typing.py +137 -0
- sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
- sqlspec/adapters/cockroach_psycopg/adk/store.py +1039 -0
- sqlspec/adapters/cockroach_psycopg/config.py +511 -0
- sqlspec/adapters/cockroach_psycopg/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/cockroach_psycopg/core.py +63 -0
- sqlspec/adapters/cockroach_psycopg/data_dictionary.py +220 -0
- sqlspec/adapters/cockroach_psycopg/driver.py +273 -0
- sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
- sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
- sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
- sqlspec/adapters/cockroach_psycopg/litestar/store.py +327 -0
- sqlspec/adapters/duckdb/__init__.py +29 -0
- sqlspec/adapters/duckdb/_typing.py +104 -0
- sqlspec/adapters/duckdb/adk/__init__.py +14 -0
- sqlspec/adapters/duckdb/adk/store.py +935 -0
- sqlspec/adapters/duckdb/config.py +386 -0
- sqlspec/adapters/duckdb/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/duckdb/core.py +332 -0
- sqlspec/adapters/duckdb/data_dictionary.py +140 -0
- sqlspec/adapters/duckdb/driver.py +426 -0
- sqlspec/adapters/duckdb/events/__init__.py +5 -0
- sqlspec/adapters/duckdb/events/store.py +57 -0
- sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
- sqlspec/adapters/duckdb/litestar/store.py +330 -0
- sqlspec/adapters/duckdb/pool.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/duckdb/pool.py +350 -0
- sqlspec/adapters/duckdb/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/duckdb/type_converter.py +118 -0
- sqlspec/adapters/mysqlconnector/__init__.py +39 -0
- sqlspec/adapters/mysqlconnector/_typing.py +186 -0
- sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
- sqlspec/adapters/mysqlconnector/adk/store.py +1183 -0
- sqlspec/adapters/mysqlconnector/config.py +421 -0
- sqlspec/adapters/mysqlconnector/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/mysqlconnector/core.py +472 -0
- sqlspec/adapters/mysqlconnector/data_dictionary.py +230 -0
- sqlspec/adapters/mysqlconnector/driver.py +516 -0
- sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
- sqlspec/adapters/mysqlconnector/events/store.py +98 -0
- sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
- sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
- sqlspec/adapters/oracledb/__init__.py +39 -0
- sqlspec/adapters/oracledb/_json_handlers.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/oracledb/_json_handlers.py +196 -0
- sqlspec/adapters/oracledb/_param_types.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/oracledb/_param_types.py +46 -0
- sqlspec/adapters/oracledb/_typing.py +258 -0
- sqlspec/adapters/oracledb/_uuid_handlers.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/oracledb/_uuid_handlers.py +163 -0
- sqlspec/adapters/oracledb/_vector_handlers.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/oracledb/_vector_handlers.py +228 -0
- sqlspec/adapters/oracledb/adk/__init__.py +21 -0
- sqlspec/adapters/oracledb/adk/store.py +2453 -0
- sqlspec/adapters/oracledb/config.py +575 -0
- sqlspec/adapters/oracledb/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/oracledb/core.py +820 -0
- sqlspec/adapters/oracledb/data_dictionary.py +404 -0
- sqlspec/adapters/oracledb/driver.py +1277 -0
- sqlspec/adapters/oracledb/events/__init__.py +16 -0
- sqlspec/adapters/oracledb/events/_hub.py +345 -0
- sqlspec/adapters/oracledb/events/backend.py +300 -0
- sqlspec/adapters/oracledb/events/store.py +420 -0
- sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
- sqlspec/adapters/oracledb/litestar/store.py +781 -0
- sqlspec/adapters/oracledb/migrations.py +539 -0
- sqlspec/adapters/oracledb/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/oracledb/type_converter.py +211 -0
- sqlspec/adapters/psqlpy/__init__.py +18 -0
- sqlspec/adapters/psqlpy/_typing.py +121 -0
- sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
- sqlspec/adapters/psqlpy/adk/store.py +591 -0
- sqlspec/adapters/psqlpy/config.py +376 -0
- sqlspec/adapters/psqlpy/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/psqlpy/core.py +694 -0
- sqlspec/adapters/psqlpy/data_dictionary.py +121 -0
- sqlspec/adapters/psqlpy/driver.py +411 -0
- sqlspec/adapters/psqlpy/events/__init__.py +6 -0
- sqlspec/adapters/psqlpy/events/_hub.py +204 -0
- sqlspec/adapters/psqlpy/events/backend.py +210 -0
- sqlspec/adapters/psqlpy/events/store.py +20 -0
- sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
- sqlspec/adapters/psqlpy/litestar/store.py +270 -0
- sqlspec/adapters/psqlpy/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/psqlpy/type_converter.py +113 -0
- sqlspec/adapters/psycopg/__init__.py +38 -0
- sqlspec/adapters/psycopg/_typing.py +218 -0
- sqlspec/adapters/psycopg/adk/__init__.py +10 -0
- sqlspec/adapters/psycopg/adk/store.py +1106 -0
- sqlspec/adapters/psycopg/config.py +695 -0
- sqlspec/adapters/psycopg/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/psycopg/core.py +520 -0
- sqlspec/adapters/psycopg/data_dictionary.py +278 -0
- sqlspec/adapters/psycopg/driver.py +1033 -0
- sqlspec/adapters/psycopg/events/__init__.py +20 -0
- sqlspec/adapters/psycopg/events/_hub.py +388 -0
- sqlspec/adapters/psycopg/events/backend.py +398 -0
- sqlspec/adapters/psycopg/events/store.py +42 -0
- sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
- sqlspec/adapters/psycopg/litestar/store.py +554 -0
- sqlspec/adapters/psycopg/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/psycopg/type_converter.py +93 -0
- sqlspec/adapters/pymysql/__init__.py +21 -0
- sqlspec/adapters/pymysql/_typing.py +92 -0
- sqlspec/adapters/pymysql/adk/__init__.py +5 -0
- sqlspec/adapters/pymysql/adk/store.py +657 -0
- sqlspec/adapters/pymysql/config.py +176 -0
- sqlspec/adapters/pymysql/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/pymysql/core.py +469 -0
- sqlspec/adapters/pymysql/data_dictionary.py +120 -0
- sqlspec/adapters/pymysql/driver.py +271 -0
- sqlspec/adapters/pymysql/events/__init__.py +5 -0
- sqlspec/adapters/pymysql/events/store.py +50 -0
- sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
- sqlspec/adapters/pymysql/litestar/store.py +232 -0
- sqlspec/adapters/pymysql/pool.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/pymysql/pool.py +184 -0
- sqlspec/adapters/spanner/__init__.py +33 -0
- sqlspec/adapters/spanner/_typing.py +102 -0
- sqlspec/adapters/spanner/adk/__init__.py +5 -0
- sqlspec/adapters/spanner/adk/store.py +758 -0
- sqlspec/adapters/spanner/config.py +355 -0
- sqlspec/adapters/spanner/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/spanner/core.py +263 -0
- sqlspec/adapters/spanner/data_dictionary.py +120 -0
- sqlspec/adapters/spanner/driver.py +407 -0
- sqlspec/adapters/spanner/events/__init__.py +5 -0
- sqlspec/adapters/spanner/events/store.py +187 -0
- sqlspec/adapters/spanner/litestar/__init__.py +5 -0
- sqlspec/adapters/spanner/litestar/store.py +291 -0
- sqlspec/adapters/spanner/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/spanner/type_converter.py +342 -0
- sqlspec/adapters/sqlite/__init__.py +19 -0
- sqlspec/adapters/sqlite/_typing.py +123 -0
- sqlspec/adapters/sqlite/adk/__init__.py +5 -0
- sqlspec/adapters/sqlite/adk/store.py +992 -0
- sqlspec/adapters/sqlite/config.py +240 -0
- sqlspec/adapters/sqlite/core.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/sqlite/core.py +357 -0
- sqlspec/adapters/sqlite/data_dictionary.py +198 -0
- sqlspec/adapters/sqlite/driver.py +527 -0
- sqlspec/adapters/sqlite/events/__init__.py +5 -0
- sqlspec/adapters/sqlite/events/store.py +20 -0
- sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/sqlite/litestar/store.py +316 -0
- sqlspec/adapters/sqlite/pool.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/sqlite/pool.py +237 -0
- sqlspec/adapters/sqlite/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/adapters/sqlite/type_converter.py +114 -0
- sqlspec/base.py +832 -0
- sqlspec/builder/__init__.py +181 -0
- sqlspec/builder/_base.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_base.py +1071 -0
- sqlspec/builder/_column.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_column.py +521 -0
- sqlspec/builder/_ddl.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_ddl.py +1691 -0
- sqlspec/builder/_delete.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_delete.py +95 -0
- sqlspec/builder/_dml.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_dml.py +386 -0
- sqlspec/builder/_explain.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_explain.py +579 -0
- sqlspec/builder/_expression_wrappers.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_expression_wrappers.py +46 -0
- sqlspec/builder/_factory.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_factory.py +1884 -0
- sqlspec/builder/_insert.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_insert.py +405 -0
- sqlspec/builder/_join.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_join.py +489 -0
- sqlspec/builder/_merge.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_merge.py +823 -0
- sqlspec/builder/_parsing_utils.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_parsing_utils.py +295 -0
- sqlspec/builder/_select.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_select.py +1666 -0
- sqlspec/builder/_temporal.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_temporal.py +167 -0
- sqlspec/builder/_update.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_update.py +173 -0
- sqlspec/builder/_vector_distance.cp314-win_amd64.pyd +0 -0
- sqlspec/builder/_vector_distance.py +330 -0
- sqlspec/cli.py +1095 -0
- sqlspec/config.py +2383 -0
- sqlspec/core/__init__.py +372 -0
- sqlspec/core/_correlation.cp314-win_amd64.pyd +0 -0
- sqlspec/core/_correlation.py +176 -0
- sqlspec/core/_pagination.py +42 -0
- sqlspec/core/_pool.cp314-win_amd64.pyd +0 -0
- sqlspec/core/_pool.py +76 -0
- sqlspec/core/cache.cp314-win_amd64.pyd +0 -0
- sqlspec/core/cache.py +1085 -0
- sqlspec/core/compiler.cp314-win_amd64.pyd +0 -0
- sqlspec/core/compiler.py +1090 -0
- sqlspec/core/config_runtime.cp314-win_amd64.pyd +0 -0
- sqlspec/core/config_runtime.py +174 -0
- sqlspec/core/explain.cp314-win_amd64.pyd +0 -0
- sqlspec/core/explain.py +275 -0
- sqlspec/core/filters.cp314-win_amd64.pyd +0 -0
- sqlspec/core/filters.py +969 -0
- sqlspec/core/hashing.cp314-win_amd64.pyd +0 -0
- sqlspec/core/hashing.py +266 -0
- sqlspec/core/metrics.cp314-win_amd64.pyd +0 -0
- sqlspec/core/metrics.py +83 -0
- sqlspec/core/parameters/__init__.py +72 -0
- sqlspec/core/parameters/_alignment.cp314-win_amd64.pyd +0 -0
- sqlspec/core/parameters/_alignment.py +283 -0
- sqlspec/core/parameters/_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/core/parameters/_converter.py +554 -0
- sqlspec/core/parameters/_processor.cp314-win_amd64.pyd +0 -0
- sqlspec/core/parameters/_processor.py +1182 -0
- sqlspec/core/parameters/_registry.cp314-win_amd64.pyd +0 -0
- sqlspec/core/parameters/_registry.py +206 -0
- sqlspec/core/parameters/_transformers.cp314-win_amd64.pyd +0 -0
- sqlspec/core/parameters/_transformers.py +324 -0
- sqlspec/core/parameters/_types.cp314-win_amd64.pyd +0 -0
- sqlspec/core/parameters/_types.py +536 -0
- sqlspec/core/parameters/_validator.cp314-win_amd64.pyd +0 -0
- sqlspec/core/parameters/_validator.py +171 -0
- sqlspec/core/pipeline.cp314-win_amd64.pyd +0 -0
- sqlspec/core/pipeline.py +333 -0
- sqlspec/core/query_modifiers.cp314-win_amd64.pyd +0 -0
- sqlspec/core/query_modifiers.py +508 -0
- sqlspec/core/result/__init__.py +25 -0
- sqlspec/core/result/_base.cp314-win_amd64.pyd +0 -0
- sqlspec/core/result/_base.py +1232 -0
- sqlspec/core/result/_io.cp314-win_amd64.pyd +0 -0
- sqlspec/core/result/_io.py +28 -0
- sqlspec/core/splitter.cp314-win_amd64.pyd +0 -0
- sqlspec/core/splitter.py +1021 -0
- sqlspec/core/sqlcommenter.cp314-win_amd64.pyd +0 -0
- sqlspec/core/sqlcommenter.py +249 -0
- sqlspec/core/stack.cp314-win_amd64.pyd +0 -0
- sqlspec/core/stack.py +163 -0
- sqlspec/core/statement.cp314-win_amd64.pyd +0 -0
- sqlspec/core/statement.py +1865 -0
- sqlspec/core/type_converter.cp314-win_amd64.pyd +0 -0
- sqlspec/core/type_converter.py +340 -0
- sqlspec/data_dictionary/__init__.py +22 -0
- sqlspec/data_dictionary/_loader.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/_loader.py +138 -0
- sqlspec/data_dictionary/_registry.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/_registry.py +74 -0
- sqlspec/data_dictionary/_types.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/_types.py +121 -0
- sqlspec/data_dictionary/dialects/__init__.py +21 -0
- sqlspec/data_dictionary/dialects/bigquery.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/dialects/bigquery.py +81 -0
- sqlspec/data_dictionary/dialects/cockroachdb.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/dialects/cockroachdb.py +54 -0
- sqlspec/data_dictionary/dialects/duckdb.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/dialects/duckdb.py +47 -0
- sqlspec/data_dictionary/dialects/mysql.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/dialects/mysql.py +53 -0
- sqlspec/data_dictionary/dialects/oracle.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/dialects/oracle.py +197 -0
- sqlspec/data_dictionary/dialects/postgres.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/dialects/postgres.py +69 -0
- sqlspec/data_dictionary/dialects/spanner.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/dialects/spanner.py +37 -0
- sqlspec/data_dictionary/dialects/sqlite.cp314-win_amd64.pyd +0 -0
- sqlspec/data_dictionary/dialects/sqlite.py +59 -0
- sqlspec/data_dictionary/sql/.gitkeep +0 -0
- sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
- sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
- sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
- sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
- sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
- sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
- sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
- sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
- sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
- sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
- sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
- sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
- sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
- sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
- sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
- sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
- sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
- sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
- sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
- sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
- sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
- sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
- sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
- sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
- sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
- sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
- sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
- sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
- sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
- sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
- sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
- sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
- sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
- sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
- sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
- sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
- sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
- sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
- sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
- sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
- sqlspec/dialects/__init__.py +22 -0
- sqlspec/dialects/_compat.cp314-win_amd64.pyd +0 -0
- sqlspec/dialects/_compat.py +14 -0
- sqlspec/dialects/postgres/__init__.py +9 -0
- sqlspec/dialects/postgres/_generators.cp314-win_amd64.pyd +0 -0
- sqlspec/dialects/postgres/_generators.py +57 -0
- sqlspec/dialects/postgres/_operators.cp314-win_amd64.pyd +0 -0
- sqlspec/dialects/postgres/_operators.py +81 -0
- sqlspec/dialects/postgres/_paradedb.py +50 -0
- sqlspec/dialects/postgres/_pgvector.py +36 -0
- sqlspec/dialects/spanner/__init__.py +6 -0
- sqlspec/dialects/spanner/_generators.cp314-win_amd64.pyd +0 -0
- sqlspec/dialects/spanner/_generators.py +206 -0
- sqlspec/dialects/spanner/_spangres.py +77 -0
- sqlspec/dialects/spanner/_spanner.py +179 -0
- sqlspec/driver/__init__.py +49 -0
- sqlspec/driver/_async.cp314-win_amd64.pyd +0 -0
- sqlspec/driver/_async.py +1830 -0
- sqlspec/driver/_common.cp314-win_amd64.pyd +0 -0
- sqlspec/driver/_common.py +2292 -0
- sqlspec/driver/_exception_handler.cp314-win_amd64.pyd +0 -0
- sqlspec/driver/_exception_handler.py +108 -0
- sqlspec/driver/_query_cache.cp314-win_amd64.pyd +0 -0
- sqlspec/driver/_query_cache.py +96 -0
- sqlspec/driver/_sql_helpers.cp314-win_amd64.pyd +0 -0
- sqlspec/driver/_sql_helpers.py +139 -0
- sqlspec/driver/_storage_helpers.cp314-win_amd64.pyd +0 -0
- sqlspec/driver/_storage_helpers.py +153 -0
- sqlspec/driver/_sync.cp314-win_amd64.pyd +0 -0
- sqlspec/driver/_sync.py +1817 -0
- sqlspec/exceptions.cp314-win_amd64.pyd +0 -0
- sqlspec/exceptions.py +480 -0
- sqlspec/extensions/__init__.py +0 -0
- sqlspec/extensions/adk/__init__.py +84 -0
- sqlspec/extensions/adk/_config_utils.py +199 -0
- sqlspec/extensions/adk/_types.cp314-win_amd64.pyd +0 -0
- sqlspec/extensions/adk/_types.py +41 -0
- sqlspec/extensions/adk/artifact/__init__.py +57 -0
- sqlspec/extensions/adk/artifact/_types.cp314-win_amd64.pyd +0 -0
- sqlspec/extensions/adk/artifact/_types.py +32 -0
- sqlspec/extensions/adk/artifact/service.py +508 -0
- sqlspec/extensions/adk/artifact/store.py +361 -0
- sqlspec/extensions/adk/converters.py +212 -0
- sqlspec/extensions/adk/memory/__init__.py +69 -0
- sqlspec/extensions/adk/memory/_types.cp314-win_amd64.pyd +0 -0
- sqlspec/extensions/adk/memory/_types.py +30 -0
- sqlspec/extensions/adk/memory/converters.py +225 -0
- sqlspec/extensions/adk/memory/service.py +316 -0
- sqlspec/extensions/adk/memory/store.py +525 -0
- sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +184 -0
- sqlspec/extensions/adk/migrations/__init__.py +0 -0
- sqlspec/extensions/adk/service.py +279 -0
- sqlspec/extensions/adk/store.py +590 -0
- sqlspec/extensions/events/__init__.py +51 -0
- sqlspec/extensions/events/_channel.py +703 -0
- sqlspec/extensions/events/_hints.cp314-win_amd64.pyd +0 -0
- sqlspec/extensions/events/_hints.py +45 -0
- sqlspec/extensions/events/_models.py +23 -0
- sqlspec/extensions/events/_payload.cp314-win_amd64.pyd +0 -0
- sqlspec/extensions/events/_payload.py +69 -0
- sqlspec/extensions/events/_protocols.py +134 -0
- sqlspec/extensions/events/_queue.py +462 -0
- sqlspec/extensions/events/_store.py +209 -0
- sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
- sqlspec/extensions/events/migrations/__init__.py +3 -0
- sqlspec/extensions/fastapi/__init__.py +22 -0
- sqlspec/extensions/fastapi/extension.py +391 -0
- sqlspec/extensions/fastapi/providers.cp314-win_amd64.pyd +0 -0
- sqlspec/extensions/fastapi/providers.py +712 -0
- sqlspec/extensions/flask/__init__.py +38 -0
- sqlspec/extensions/flask/_state.py +87 -0
- sqlspec/extensions/flask/_utils.py +71 -0
- sqlspec/extensions/flask/extension.py +539 -0
- sqlspec/extensions/litestar/__init__.py +31 -0
- sqlspec/extensions/litestar/_utils.py +52 -0
- sqlspec/extensions/litestar/channels.py +165 -0
- sqlspec/extensions/litestar/cli.py +102 -0
- sqlspec/extensions/litestar/config.py +90 -0
- sqlspec/extensions/litestar/handlers.py +316 -0
- sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
- sqlspec/extensions/litestar/migrations/__init__.py +3 -0
- sqlspec/extensions/litestar/plugin.py +1066 -0
- sqlspec/extensions/litestar/providers.cp314-win_amd64.pyd +0 -0
- sqlspec/extensions/litestar/providers.py +784 -0
- sqlspec/extensions/litestar/store.py +298 -0
- sqlspec/extensions/otel/__init__.py +58 -0
- sqlspec/extensions/prometheus/__init__.py +113 -0
- sqlspec/extensions/sanic/__init__.py +19 -0
- sqlspec/extensions/sanic/_state.py +43 -0
- sqlspec/extensions/sanic/_utils.py +127 -0
- sqlspec/extensions/sanic/extension.py +647 -0
- sqlspec/extensions/starlette/__init__.py +22 -0
- sqlspec/extensions/starlette/_state.py +42 -0
- sqlspec/extensions/starlette/_utils.py +96 -0
- sqlspec/extensions/starlette/extension.py +374 -0
- sqlspec/extensions/starlette/middleware.py +281 -0
- sqlspec/loader.cp314-win_amd64.pyd +0 -0
- sqlspec/loader.py +727 -0
- sqlspec/migrations/__init__.py +39 -0
- sqlspec/migrations/base.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/base.py +862 -0
- sqlspec/migrations/commands.py +2151 -0
- sqlspec/migrations/context.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/context.py +157 -0
- sqlspec/migrations/fix.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/fix.py +204 -0
- sqlspec/migrations/loaders.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/loaders.py +443 -0
- sqlspec/migrations/runner.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/runner.py +1195 -0
- sqlspec/migrations/squash.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/squash.py +490 -0
- sqlspec/migrations/templates.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/templates.py +234 -0
- sqlspec/migrations/tracker.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/tracker.py +792 -0
- sqlspec/migrations/utils.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/utils.py +256 -0
- sqlspec/migrations/validation.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/validation.py +359 -0
- sqlspec/migrations/version.cp314-win_amd64.pyd +0 -0
- sqlspec/migrations/version.py +446 -0
- sqlspec/observability/__init__.py +57 -0
- sqlspec/observability/_common.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_common.py +77 -0
- sqlspec/observability/_config.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_config.py +364 -0
- sqlspec/observability/_diagnostics.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_diagnostics.py +74 -0
- sqlspec/observability/_dispatcher.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_dispatcher.py +200 -0
- sqlspec/observability/_formatters/__init__.py +13 -0
- sqlspec/observability/_formatters/_aws.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_formatters/_aws.py +102 -0
- sqlspec/observability/_formatters/_azure.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_formatters/_azure.py +96 -0
- sqlspec/observability/_formatters/_base.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_formatters/_base.py +57 -0
- sqlspec/observability/_formatters/_gcp.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_formatters/_gcp.py +131 -0
- sqlspec/observability/_formatting.py +58 -0
- sqlspec/observability/_observer.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_observer.py +361 -0
- sqlspec/observability/_runtime.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_runtime.py +461 -0
- sqlspec/observability/_sampling.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_sampling.py +188 -0
- sqlspec/observability/_spans.cp314-win_amd64.pyd +0 -0
- sqlspec/observability/_spans.py +161 -0
- sqlspec/protocols.py +955 -0
- sqlspec/py.typed +0 -0
- sqlspec/service.py +433 -0
- sqlspec/storage/__init__.py +48 -0
- sqlspec/storage/_arrow_payload.py +68 -0
- sqlspec/storage/_paths.cp314-win_amd64.pyd +0 -0
- sqlspec/storage/_paths.py +58 -0
- sqlspec/storage/_utils.py +46 -0
- sqlspec/storage/backends/__init__.py +1 -0
- sqlspec/storage/backends/base.cp314-win_amd64.pyd +0 -0
- sqlspec/storage/backends/base.py +374 -0
- sqlspec/storage/backends/fsspec.py +574 -0
- sqlspec/storage/backends/local.py +468 -0
- sqlspec/storage/backends/obstore.py +956 -0
- sqlspec/storage/errors.cp314-win_amd64.pyd +0 -0
- sqlspec/storage/errors.py +102 -0
- sqlspec/storage/pipeline.cp314-win_amd64.pyd +0 -0
- sqlspec/storage/pipeline.py +628 -0
- sqlspec/storage/registry.cp314-win_amd64.pyd +0 -0
- sqlspec/storage/registry.py +329 -0
- sqlspec/typing.py +405 -0
- sqlspec/utils/__init__.py +7 -0
- sqlspec/utils/arrow_helpers.py +384 -0
- sqlspec/utils/config_tools.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/config_tools.py +314 -0
- sqlspec/utils/correlation.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/correlation.py +134 -0
- sqlspec/utils/deprecation.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/deprecation.py +157 -0
- sqlspec/utils/dispatch.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/dispatch.py +101 -0
- sqlspec/utils/fixtures.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/fixtures.py +260 -0
- sqlspec/utils/logging.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/logging.py +251 -0
- sqlspec/utils/module_loader.py +306 -0
- sqlspec/utils/portal.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/portal.py +377 -0
- sqlspec/utils/schema.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/schema.py +1040 -0
- sqlspec/utils/serializers/__init__.py +30 -0
- sqlspec/utils/serializers/_json.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/serializers/_json.py +415 -0
- sqlspec/utils/serializers/_numpy.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/serializers/_numpy.py +65 -0
- sqlspec/utils/serializers/_schema.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/serializers/_schema.py +285 -0
- sqlspec/utils/singleton.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/singleton.py +41 -0
- sqlspec/utils/sync_tools.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/sync_tools.py +316 -0
- sqlspec/utils/text.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/text.py +109 -0
- sqlspec/utils/type_converters.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/type_converters.py +216 -0
- sqlspec/utils/type_guards.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/type_guards.py +1508 -0
- sqlspec/utils/uuids.cp314-win_amd64.pyd +0 -0
- sqlspec/utils/uuids.py +241 -0
- sqlspec-0.47.0.dist-info/METADATA +202 -0
- sqlspec-0.47.0.dist-info/RECORD +621 -0
- sqlspec-0.47.0.dist-info/WHEEL +4 -0
- sqlspec-0.47.0.dist-info/entry_points.txt +6 -0
- sqlspec-0.47.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
"""psycopg adapter compiled helpers."""
|
|
2
|
+
|
|
3
|
+
import datetime
|
|
4
|
+
from collections.abc import Sized
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Final, NamedTuple, cast
|
|
6
|
+
|
|
7
|
+
from typing_extensions import LiteralString
|
|
8
|
+
|
|
9
|
+
from sqlspec.adapters.psycopg._typing import PsycopgComposed, PsycopgIdentifier, PsycopgSQL
|
|
10
|
+
from sqlspec.core import (
|
|
11
|
+
SQL,
|
|
12
|
+
DriverParameterProfile,
|
|
13
|
+
ParameterStyle,
|
|
14
|
+
StatementConfig,
|
|
15
|
+
build_statement_config_from_profile,
|
|
16
|
+
)
|
|
17
|
+
from sqlspec.core.config_runtime import (
|
|
18
|
+
build_postgres_extension_probe_names,
|
|
19
|
+
resolve_postgres_extension_state,
|
|
20
|
+
resolve_runtime_statement_config,
|
|
21
|
+
)
|
|
22
|
+
from sqlspec.driver import ExecutionResult
|
|
23
|
+
from sqlspec.exceptions import (
|
|
24
|
+
CheckViolationError,
|
|
25
|
+
ConnectionTimeoutError,
|
|
26
|
+
DeadlockError,
|
|
27
|
+
ForeignKeyViolationError,
|
|
28
|
+
IntegrityError,
|
|
29
|
+
NotNullViolationError,
|
|
30
|
+
PermissionDeniedError,
|
|
31
|
+
QueryTimeoutError,
|
|
32
|
+
SerializationConflictError,
|
|
33
|
+
SQLParsingError,
|
|
34
|
+
SQLSpecError,
|
|
35
|
+
UniqueViolationError,
|
|
36
|
+
map_sqlstate_to_exception,
|
|
37
|
+
)
|
|
38
|
+
from sqlspec.typing import PGVECTOR_INSTALLED
|
|
39
|
+
from sqlspec.utils.serializers import to_json
|
|
40
|
+
from sqlspec.utils.type_converters import build_json_list_converter, build_json_tuple_converter, build_uuid_coercions
|
|
41
|
+
from sqlspec.utils.type_guards import has_rowcount, has_sqlstate
|
|
42
|
+
|
|
43
|
+
# Module-level lazy import for psycopg errors (mypyc optimization)
|
|
44
|
+
try:
|
|
45
|
+
from psycopg import errors as pg_errors
|
|
46
|
+
except ImportError:
|
|
47
|
+
pg_errors = None # type: ignore[assignment]
|
|
48
|
+
|
|
49
|
+
if TYPE_CHECKING:
|
|
50
|
+
from collections.abc import Callable, Mapping
|
|
51
|
+
|
|
52
|
+
from sqlspec.core import ParameterStyleConfig, StackOperation
|
|
53
|
+
|
|
54
|
+
__all__ = (
|
|
55
|
+
"PipelineCursorEntry",
|
|
56
|
+
"PreparedStackOperation",
|
|
57
|
+
"apply_driver_features",
|
|
58
|
+
"build_async_pipeline_execution_result",
|
|
59
|
+
"build_copy_from_command",
|
|
60
|
+
"build_pipeline_execution_result",
|
|
61
|
+
"build_postgres_extension_probe_names",
|
|
62
|
+
"build_profile",
|
|
63
|
+
"build_statement_config",
|
|
64
|
+
"build_truncate_command",
|
|
65
|
+
"collect_rows",
|
|
66
|
+
"create_mapped_exception",
|
|
67
|
+
"default_statement_config",
|
|
68
|
+
"driver_profile",
|
|
69
|
+
"execute_with_optional_parameters",
|
|
70
|
+
"execute_with_optional_parameters_async",
|
|
71
|
+
"pipeline_supported",
|
|
72
|
+
"resolve_many_rowcount",
|
|
73
|
+
"resolve_postgres_extension_state",
|
|
74
|
+
"resolve_rowcount",
|
|
75
|
+
"resolve_runtime_statement_config",
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
TRANSACTION_STATUS_IDLE = 0
|
|
79
|
+
TRANSACTION_STATUS_ACTIVE = 1
|
|
80
|
+
TRANSACTION_STATUS_INTRANS = 2
|
|
81
|
+
TRANSACTION_STATUS_INERROR = 3
|
|
82
|
+
TRANSACTION_STATUS_UNKNOWN = 4
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class PreparedStackOperation(NamedTuple):
|
|
86
|
+
"""Precompiled stack operation metadata for psycopg pipeline execution."""
|
|
87
|
+
|
|
88
|
+
operation_index: int
|
|
89
|
+
operation: "StackOperation"
|
|
90
|
+
statement: "SQL"
|
|
91
|
+
sql: "LiteralString | PsycopgSQL | PsycopgComposed"
|
|
92
|
+
parameters: "tuple[Any, ...] | dict[str, Any] | None"
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class PipelineCursorEntry(NamedTuple):
|
|
96
|
+
"""Cursor pending result data for psycopg pipeline execution."""
|
|
97
|
+
|
|
98
|
+
prepared: "PreparedStackOperation"
|
|
99
|
+
cursor: Any
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def pipeline_supported() -> bool:
|
|
103
|
+
"""Return True when libpq pipeline support is available."""
|
|
104
|
+
try:
|
|
105
|
+
import psycopg
|
|
106
|
+
|
|
107
|
+
capabilities = psycopg.capabilities
|
|
108
|
+
except (ImportError, AttributeError):
|
|
109
|
+
return False
|
|
110
|
+
try:
|
|
111
|
+
return bool(capabilities.has_pipeline())
|
|
112
|
+
except Exception:
|
|
113
|
+
return False
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _compose_table_identifier(table: str) -> "PsycopgComposed":
|
|
117
|
+
parts = [part for part in table.split(".") if part]
|
|
118
|
+
if not parts:
|
|
119
|
+
msg = "Table name must not be empty"
|
|
120
|
+
raise SQLSpecError(msg)
|
|
121
|
+
identifiers = [PsycopgIdentifier(part) for part in parts]
|
|
122
|
+
return PsycopgSQL(".").join(identifiers)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def build_copy_from_command(table: str, columns: "list[str]") -> "PsycopgComposed":
|
|
126
|
+
table_identifier = _compose_table_identifier(table)
|
|
127
|
+
column_sql = PsycopgSQL(", ").join([PsycopgIdentifier(column) for column in columns])
|
|
128
|
+
return PsycopgSQL("COPY {} ({}) FROM STDIN").format(table_identifier, column_sql)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def build_truncate_command(table: str) -> "PsycopgComposed":
|
|
132
|
+
return PsycopgSQL("TRUNCATE TABLE {}").format(_compose_table_identifier(table))
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _identity(value: Any) -> Any:
|
|
136
|
+
return value
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _build_psycopg_custom_type_coercions() -> "dict[type, Callable[[Any], Any]]":
|
|
140
|
+
"""Return custom type coercions for psycopg."""
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
datetime.datetime: _identity,
|
|
144
|
+
datetime.date: _identity,
|
|
145
|
+
datetime.time: _identity,
|
|
146
|
+
**build_uuid_coercions(native=True),
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _build_psycopg_parameter_config(
|
|
151
|
+
profile: "DriverParameterProfile", serializer: "Callable[[Any], str]"
|
|
152
|
+
) -> "ParameterStyleConfig":
|
|
153
|
+
"""Construct parameter configuration with shared JSON serializer support.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
profile: Driver parameter profile to extend.
|
|
157
|
+
serializer: JSON serializer for parameter coercion.
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
ParameterStyleConfig with updated type coercions.
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
base_config = build_statement_config_from_profile(profile, json_serializer=serializer).parameter_config
|
|
164
|
+
|
|
165
|
+
updated_type_map = dict(base_config.type_coercion_map)
|
|
166
|
+
updated_type_map[list] = build_json_list_converter(serializer)
|
|
167
|
+
updated_type_map[tuple] = build_json_tuple_converter(serializer)
|
|
168
|
+
|
|
169
|
+
return base_config.replace(type_coercion_map=updated_type_map)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def build_profile() -> "DriverParameterProfile":
|
|
173
|
+
"""Create the psycopg driver parameter profile."""
|
|
174
|
+
|
|
175
|
+
return DriverParameterProfile(
|
|
176
|
+
name="Psycopg",
|
|
177
|
+
default_style=ParameterStyle.NUMERIC,
|
|
178
|
+
supported_styles={ParameterStyle.NUMERIC, ParameterStyle.NAMED_COLON},
|
|
179
|
+
default_execution_style=ParameterStyle.POSITIONAL_PYFORMAT,
|
|
180
|
+
supported_execution_styles={ParameterStyle.POSITIONAL_PYFORMAT, ParameterStyle.NAMED_PYFORMAT},
|
|
181
|
+
has_native_list_expansion=True,
|
|
182
|
+
preserve_parameter_format=True,
|
|
183
|
+
needs_static_script_compilation=False,
|
|
184
|
+
allow_mixed_parameter_styles=False,
|
|
185
|
+
preserve_original_params_for_many=False,
|
|
186
|
+
json_serializer_strategy="helper",
|
|
187
|
+
custom_type_coercions=_build_psycopg_custom_type_coercions(),
|
|
188
|
+
default_dialect="postgres",
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
driver_profile = build_profile()
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def build_statement_config(*, json_serializer: "Callable[[Any], str] | None" = None) -> "StatementConfig":
|
|
196
|
+
"""Construct the psycopg statement configuration with optional JSON codecs."""
|
|
197
|
+
serializer = json_serializer or to_json
|
|
198
|
+
profile = driver_profile
|
|
199
|
+
parameter_config = _build_psycopg_parameter_config(profile, serializer)
|
|
200
|
+
base_config = build_statement_config_from_profile(profile, json_serializer=serializer)
|
|
201
|
+
return base_config.replace(parameter_config=parameter_config)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
default_statement_config = build_statement_config()
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def apply_driver_features(
|
|
208
|
+
statement_config: "StatementConfig", driver_features: "Mapping[str, Any] | None"
|
|
209
|
+
) -> "tuple[StatementConfig, dict[str, Any]]":
|
|
210
|
+
"""Apply psycopg driver feature defaults to statement config."""
|
|
211
|
+
features: dict[str, Any] = dict(driver_features) if driver_features else {}
|
|
212
|
+
serializer = features.get("json_serializer", to_json)
|
|
213
|
+
features.setdefault("json_serializer", serializer)
|
|
214
|
+
features.setdefault("enable_pgvector", PGVECTOR_INSTALLED)
|
|
215
|
+
features.setdefault("enable_paradedb", True)
|
|
216
|
+
|
|
217
|
+
parameter_config = _build_psycopg_parameter_config(driver_profile, serializer)
|
|
218
|
+
statement_config = statement_config.replace(parameter_config=parameter_config)
|
|
219
|
+
|
|
220
|
+
return statement_config, features
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def collect_rows(fetched_data: "list[Any] | None", description: "list[Any] | None") -> "tuple[list[Any], list[str]]":
|
|
224
|
+
"""Collect psycopg rows and column names.
|
|
225
|
+
|
|
226
|
+
Args:
|
|
227
|
+
fetched_data: Rows returned from cursor.fetchall().
|
|
228
|
+
description: Cursor description metadata.
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
Tuple of (rows, column_names).
|
|
232
|
+
"""
|
|
233
|
+
if not description:
|
|
234
|
+
return [], []
|
|
235
|
+
column_names = [col.name for col in description]
|
|
236
|
+
return fetched_data or [], column_names
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def execute_with_optional_parameters(cursor: Any, sql: str, parameters: Any) -> None:
|
|
240
|
+
"""Execute statement with optional parameters.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
cursor: Psycopg cursor object.
|
|
244
|
+
sql: SQL string to execute.
|
|
245
|
+
parameters: Prepared parameters payload.
|
|
246
|
+
"""
|
|
247
|
+
if parameters:
|
|
248
|
+
cursor.execute(sql, parameters)
|
|
249
|
+
else:
|
|
250
|
+
cursor.execute(sql)
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
async def execute_with_optional_parameters_async(cursor: Any, sql: str, parameters: Any) -> None:
|
|
254
|
+
"""Execute statement with optional parameters in async mode.
|
|
255
|
+
|
|
256
|
+
Args:
|
|
257
|
+
cursor: Psycopg async cursor object.
|
|
258
|
+
sql: SQL string to execute.
|
|
259
|
+
parameters: Prepared parameters payload.
|
|
260
|
+
"""
|
|
261
|
+
if parameters:
|
|
262
|
+
await cursor.execute(sql, parameters)
|
|
263
|
+
else:
|
|
264
|
+
await cursor.execute(sql)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def resolve_rowcount(cursor: Any) -> int:
|
|
268
|
+
"""Resolve rowcount from a psycopg cursor.
|
|
269
|
+
|
|
270
|
+
Args:
|
|
271
|
+
cursor: Psycopg cursor with optional rowcount metadata.
|
|
272
|
+
|
|
273
|
+
Returns:
|
|
274
|
+
Positive rowcount value or 0 when unknown.
|
|
275
|
+
"""
|
|
276
|
+
|
|
277
|
+
if not has_rowcount(cursor):
|
|
278
|
+
return 0
|
|
279
|
+
rowcount = cursor.rowcount
|
|
280
|
+
if isinstance(rowcount, int) and rowcount > 0:
|
|
281
|
+
return rowcount
|
|
282
|
+
return 0
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def resolve_many_rowcount(cursor: Any, parameters: Any, *, fallback_count: "int | None" = None) -> int:
|
|
286
|
+
"""Resolve rowcount for execute_many operations.
|
|
287
|
+
|
|
288
|
+
Prefers the driver-provided rowcount when available, with a fallback to
|
|
289
|
+
the number of parameter sets when the driver reports unknown rowcount.
|
|
290
|
+
|
|
291
|
+
Args:
|
|
292
|
+
cursor: Psycopg cursor with optional rowcount metadata.
|
|
293
|
+
parameters: Prepared executemany parameter payload.
|
|
294
|
+
fallback_count: Optional precomputed parameter payload size.
|
|
295
|
+
|
|
296
|
+
Returns:
|
|
297
|
+
Positive rowcount value, parameter set count, or 0 when unknown.
|
|
298
|
+
"""
|
|
299
|
+
|
|
300
|
+
try:
|
|
301
|
+
rowcount = cursor.rowcount
|
|
302
|
+
except AttributeError:
|
|
303
|
+
rowcount = None
|
|
304
|
+
if isinstance(rowcount, int) and rowcount > 0:
|
|
305
|
+
return rowcount
|
|
306
|
+
if fallback_count is not None:
|
|
307
|
+
return fallback_count
|
|
308
|
+
if isinstance(parameters, Sized):
|
|
309
|
+
return len(parameters)
|
|
310
|
+
return 0
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
def build_pipeline_execution_result(
|
|
314
|
+
statement: "SQL", cursor: Any, *, column_name_resolver: "Callable[[Any], list[str]] | None" = None
|
|
315
|
+
) -> "ExecutionResult":
|
|
316
|
+
"""Build an ExecutionResult for psycopg pipeline execution.
|
|
317
|
+
|
|
318
|
+
Args:
|
|
319
|
+
statement: SQL statement executed by the pipeline.
|
|
320
|
+
cursor: Psycopg cursor holding the pipeline result.
|
|
321
|
+
column_name_resolver: Optional cached column-name resolver.
|
|
322
|
+
|
|
323
|
+
Returns:
|
|
324
|
+
ExecutionResult representing the pipeline operation.
|
|
325
|
+
"""
|
|
326
|
+
|
|
327
|
+
if statement.returns_rows():
|
|
328
|
+
fetched_data = cast("list[Any] | None", cursor.fetchall()) or []
|
|
329
|
+
if column_name_resolver is None:
|
|
330
|
+
fetched_data, column_names = collect_rows(fetched_data, cursor.description)
|
|
331
|
+
else:
|
|
332
|
+
column_names = column_name_resolver(cursor.description)
|
|
333
|
+
return ExecutionResult(
|
|
334
|
+
cursor_result=cursor,
|
|
335
|
+
rowcount_override=None,
|
|
336
|
+
special_data=None,
|
|
337
|
+
selected_data=fetched_data,
|
|
338
|
+
column_names=column_names,
|
|
339
|
+
data_row_count=len(fetched_data),
|
|
340
|
+
statement_count=None,
|
|
341
|
+
successful_statements=None,
|
|
342
|
+
is_script_result=False,
|
|
343
|
+
is_select_result=True,
|
|
344
|
+
is_many_result=False,
|
|
345
|
+
row_format="tuple",
|
|
346
|
+
last_inserted_id=None,
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
affected_rows = resolve_rowcount(cursor)
|
|
350
|
+
return ExecutionResult(
|
|
351
|
+
cursor_result=cursor,
|
|
352
|
+
rowcount_override=affected_rows,
|
|
353
|
+
special_data=None,
|
|
354
|
+
selected_data=None,
|
|
355
|
+
column_names=None,
|
|
356
|
+
data_row_count=None,
|
|
357
|
+
statement_count=None,
|
|
358
|
+
successful_statements=None,
|
|
359
|
+
is_script_result=False,
|
|
360
|
+
is_select_result=False,
|
|
361
|
+
is_many_result=False,
|
|
362
|
+
last_inserted_id=None,
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
async def build_async_pipeline_execution_result(
|
|
367
|
+
statement: "SQL", cursor: Any, *, column_name_resolver: "Callable[[Any], list[str]] | None" = None
|
|
368
|
+
) -> "ExecutionResult":
|
|
369
|
+
"""Build an ExecutionResult for psycopg async pipeline execution.
|
|
370
|
+
|
|
371
|
+
Args:
|
|
372
|
+
statement: SQL statement executed by the pipeline.
|
|
373
|
+
cursor: Psycopg cursor holding the pipeline result.
|
|
374
|
+
column_name_resolver: Optional cached column-name resolver.
|
|
375
|
+
|
|
376
|
+
Returns:
|
|
377
|
+
ExecutionResult representing the pipeline operation.
|
|
378
|
+
"""
|
|
379
|
+
|
|
380
|
+
if statement.returns_rows():
|
|
381
|
+
fetched_data = cast("list[Any] | None", await cursor.fetchall()) or []
|
|
382
|
+
if column_name_resolver is None:
|
|
383
|
+
fetched_data, column_names = collect_rows(fetched_data, cursor.description)
|
|
384
|
+
else:
|
|
385
|
+
column_names = column_name_resolver(cursor.description)
|
|
386
|
+
return ExecutionResult(
|
|
387
|
+
cursor_result=cursor,
|
|
388
|
+
rowcount_override=None,
|
|
389
|
+
special_data=None,
|
|
390
|
+
selected_data=fetched_data,
|
|
391
|
+
column_names=column_names,
|
|
392
|
+
data_row_count=len(fetched_data),
|
|
393
|
+
statement_count=None,
|
|
394
|
+
successful_statements=None,
|
|
395
|
+
is_script_result=False,
|
|
396
|
+
is_select_result=True,
|
|
397
|
+
is_many_result=False,
|
|
398
|
+
row_format="tuple",
|
|
399
|
+
last_inserted_id=None,
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
affected_rows = resolve_rowcount(cursor)
|
|
403
|
+
return ExecutionResult(
|
|
404
|
+
cursor_result=cursor,
|
|
405
|
+
rowcount_override=affected_rows,
|
|
406
|
+
special_data=None,
|
|
407
|
+
selected_data=None,
|
|
408
|
+
column_names=None,
|
|
409
|
+
data_row_count=None,
|
|
410
|
+
statement_count=None,
|
|
411
|
+
successful_statements=None,
|
|
412
|
+
is_script_result=False,
|
|
413
|
+
is_select_result=False,
|
|
414
|
+
is_many_result=False,
|
|
415
|
+
last_inserted_id=None,
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
def _create_postgres_error(
|
|
420
|
+
error: Any, code: "str | None", error_class: type[SQLSpecError], description: str
|
|
421
|
+
) -> SQLSpecError:
|
|
422
|
+
"""Create a SQLSpec exception from a psycopg error.
|
|
423
|
+
|
|
424
|
+
Args:
|
|
425
|
+
error: The original psycopg exception
|
|
426
|
+
code: PostgreSQL SQLSTATE error code
|
|
427
|
+
error_class: The SQLSpec exception class to instantiate
|
|
428
|
+
description: Human-readable description of the error type
|
|
429
|
+
|
|
430
|
+
Returns:
|
|
431
|
+
A new SQLSpec exception instance with the original as its cause
|
|
432
|
+
"""
|
|
433
|
+
msg = f"PostgreSQL {description} [{code}]: {error}" if code else f"PostgreSQL {description}: {error}"
|
|
434
|
+
exc = error_class(msg)
|
|
435
|
+
exc.__cause__ = error
|
|
436
|
+
return exc
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
_EXCEPTION_MAPPING: Final[dict[type[Any], tuple[str, type[SQLSpecError], str]]] = {}
|
|
440
|
+
_EXCEPTION_MAPPING_CACHE: Final[dict[type[Any], tuple[str, type[SQLSpecError], str]]] = {}
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
def _register_exception_mappings() -> None:
|
|
444
|
+
if pg_errors is None:
|
|
445
|
+
return
|
|
446
|
+
|
|
447
|
+
_EXCEPTION_MAPPING.update({
|
|
448
|
+
pg_errors.UniqueViolation: ("23505", UniqueViolationError, "unique constraint violation"),
|
|
449
|
+
pg_errors.ForeignKeyViolation: ("23503", ForeignKeyViolationError, "foreign key constraint violation"),
|
|
450
|
+
pg_errors.NotNullViolation: ("23502", NotNullViolationError, "not-null constraint violation"),
|
|
451
|
+
pg_errors.CheckViolation: ("23514", CheckViolationError, "check constraint violation"),
|
|
452
|
+
pg_errors.IntegrityError: ("23000", IntegrityError, "integrity constraint violation"),
|
|
453
|
+
pg_errors.DeadlockDetected: ("40P01", DeadlockError, "deadlock detected"),
|
|
454
|
+
pg_errors.SerializationFailure: ("40001", SerializationConflictError, "serialization failure"),
|
|
455
|
+
pg_errors.QueryCanceled: ("57014", QueryTimeoutError, "query canceled"),
|
|
456
|
+
pg_errors.InsufficientPrivilege: ("42501", PermissionDeniedError, "insufficient privilege"),
|
|
457
|
+
pg_errors.SyntaxError: ("42601", SQLParsingError, "SQL syntax error"),
|
|
458
|
+
})
|
|
459
|
+
|
|
460
|
+
admin_shutdown = getattr(pg_errors, "AdminShutdown", None)
|
|
461
|
+
if isinstance(admin_shutdown, type):
|
|
462
|
+
_EXCEPTION_MAPPING[admin_shutdown] = ("57P01", ConnectionTimeoutError, "admin shutdown")
|
|
463
|
+
|
|
464
|
+
cannot_connect_now = getattr(pg_errors, "CannotConnectNow", None)
|
|
465
|
+
if isinstance(cannot_connect_now, type):
|
|
466
|
+
_EXCEPTION_MAPPING[cannot_connect_now] = ("57P03", ConnectionTimeoutError, "cannot connect now")
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
def _resolve_exception_mapping(error_type: type[Any]) -> "tuple[str, type[SQLSpecError], str] | None":
|
|
470
|
+
mapped_error = _EXCEPTION_MAPPING_CACHE.get(error_type)
|
|
471
|
+
if mapped_error is not None:
|
|
472
|
+
return mapped_error
|
|
473
|
+
|
|
474
|
+
for base_type in error_type.__mro__[1:]:
|
|
475
|
+
mapped_error = _EXCEPTION_MAPPING.get(base_type)
|
|
476
|
+
if mapped_error is not None:
|
|
477
|
+
_EXCEPTION_MAPPING_CACHE[error_type] = mapped_error
|
|
478
|
+
return mapped_error
|
|
479
|
+
return None
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
_register_exception_mappings()
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
def create_mapped_exception(error: Any) -> SQLSpecError:
|
|
486
|
+
"""Map psycopg exceptions to SQLSpec exceptions.
|
|
487
|
+
|
|
488
|
+
This is a factory function that returns an exception instance rather than
|
|
489
|
+
raising. This pattern is more robust for use in __exit__ handlers and
|
|
490
|
+
avoids issues with exception control flow in different Python versions.
|
|
491
|
+
|
|
492
|
+
Mapping priority:
|
|
493
|
+
1. Native psycopg exception types via adapter-local dispatch table
|
|
494
|
+
2. SQLSTATE code via centralized utility
|
|
495
|
+
3. Generic SQLSpecError fallback
|
|
496
|
+
|
|
497
|
+
Args:
|
|
498
|
+
error: The psycopg exception to map
|
|
499
|
+
|
|
500
|
+
Returns:
|
|
501
|
+
A SQLSpec exception that wraps the original error
|
|
502
|
+
"""
|
|
503
|
+
error_type = type(error)
|
|
504
|
+
mapped_error = _EXCEPTION_MAPPING.get(error_type)
|
|
505
|
+
if mapped_error is None:
|
|
506
|
+
mapped_error = _resolve_exception_mapping(error_type)
|
|
507
|
+
if mapped_error is not None:
|
|
508
|
+
mapped_error_code, error_class, description = mapped_error
|
|
509
|
+
return _create_postgres_error(error, mapped_error_code, error_class, description)
|
|
510
|
+
|
|
511
|
+
# Priority 2: Fall back to SQLSTATE code mapping using centralized utility
|
|
512
|
+
sqlstate_attr = error.sqlstate if has_sqlstate(error) else None
|
|
513
|
+
error_code = sqlstate_attr if sqlstate_attr is not None else None
|
|
514
|
+
if error_code:
|
|
515
|
+
exc_class = map_sqlstate_to_exception(error_code)
|
|
516
|
+
if exc_class:
|
|
517
|
+
return _create_postgres_error(error, error_code, exc_class, "database error")
|
|
518
|
+
|
|
519
|
+
# Priority 3: Default fallback
|
|
520
|
+
return _create_postgres_error(error, error_code, SQLSpecError, "database error")
|