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,472 @@
|
|
|
1
|
+
"""MysqlConnector adapter compiled helpers."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Callable, Sized
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from sqlspec.core import DriverParameterProfile, ParameterStyle, StatementConfig, build_statement_config_from_profile
|
|
7
|
+
from sqlspec.exceptions import (
|
|
8
|
+
CheckViolationError,
|
|
9
|
+
ConnectionTimeoutError,
|
|
10
|
+
DatabaseConnectionError,
|
|
11
|
+
DataError,
|
|
12
|
+
DeadlockError,
|
|
13
|
+
ForeignKeyViolationError,
|
|
14
|
+
IntegrityError,
|
|
15
|
+
NotNullViolationError,
|
|
16
|
+
PermissionDeniedError,
|
|
17
|
+
QueryTimeoutError,
|
|
18
|
+
SQLParsingError,
|
|
19
|
+
SQLSpecError,
|
|
20
|
+
TransactionError,
|
|
21
|
+
UniqueViolationError,
|
|
22
|
+
)
|
|
23
|
+
from sqlspec.utils.serializers import from_json, to_json
|
|
24
|
+
from sqlspec.utils.type_converters import build_uuid_coercions
|
|
25
|
+
from sqlspec.utils.type_guards import has_cursor_metadata, has_lastrowid, has_rowcount
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from collections.abc import Mapping, Sequence
|
|
29
|
+
|
|
30
|
+
__all__ = (
|
|
31
|
+
"apply_driver_features",
|
|
32
|
+
"build_insert_statement",
|
|
33
|
+
"build_profile",
|
|
34
|
+
"build_statement_config",
|
|
35
|
+
"collect_rows",
|
|
36
|
+
"create_mapped_exception",
|
|
37
|
+
"default_statement_config",
|
|
38
|
+
"detect_json_columns",
|
|
39
|
+
"detect_json_columns_from_description",
|
|
40
|
+
"driver_profile",
|
|
41
|
+
"format_identifier",
|
|
42
|
+
"normalize_execute_many_parameters",
|
|
43
|
+
"normalize_execute_parameters",
|
|
44
|
+
"normalize_lastrowid",
|
|
45
|
+
"resolve_column_names",
|
|
46
|
+
"resolve_many_rowcount",
|
|
47
|
+
"resolve_rowcount",
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
# MySQL error codes for constraint violations
|
|
51
|
+
MYSQL_ER_DUP_ENTRY = 1062
|
|
52
|
+
MYSQL_ER_NO_DEFAULT_FOR_FIELD = 1364
|
|
53
|
+
MYSQL_ER_CHECK_CONSTRAINT_VIOLATED = 3819
|
|
54
|
+
|
|
55
|
+
# MySQL error codes for permission/access errors
|
|
56
|
+
MYSQL_ER_DBACCESS_DENIED = 1044
|
|
57
|
+
MYSQL_ER_ACCESS_DENIED = 1045
|
|
58
|
+
MYSQL_ER_TABLEACCESS_DENIED = 1142
|
|
59
|
+
|
|
60
|
+
# MySQL error codes for transaction errors
|
|
61
|
+
MYSQL_ER_LOCK_WAIT_TIMEOUT = 1205
|
|
62
|
+
MYSQL_ER_LOCK_DEADLOCK = 1213
|
|
63
|
+
|
|
64
|
+
# MySQL error codes for connection errors
|
|
65
|
+
MYSQL_CR_CONNECTION_ERROR = 2002
|
|
66
|
+
MYSQL_CR_CONN_HOST_ERROR = 2003
|
|
67
|
+
MYSQL_CR_UNKNOWN_HOST = 2005
|
|
68
|
+
MYSQL_CR_SERVER_GONE_ERROR = 2006
|
|
69
|
+
MYSQL_CR_SERVER_LOST = 2013
|
|
70
|
+
MYSQL_SYNTAX_ERROR_MIN = 1064
|
|
71
|
+
MYSQL_SYNTAX_ERROR_MAX_EXCLUSIVE = 1100
|
|
72
|
+
|
|
73
|
+
_MYSQL_MIGRATION_ERROR_CODES = frozenset((1061, 1091))
|
|
74
|
+
_MYSQL_SQLSTATE_EXACT_DISPATCH: dict[str, tuple[type[SQLSpecError], str]] = {
|
|
75
|
+
"23505": (UniqueViolationError, "unique constraint violation"),
|
|
76
|
+
"23503": (ForeignKeyViolationError, "foreign key constraint violation"),
|
|
77
|
+
"23502": (NotNullViolationError, "not-null constraint violation"),
|
|
78
|
+
"23514": (CheckViolationError, "check constraint violation"),
|
|
79
|
+
}
|
|
80
|
+
_MYSQL_SQLSTATE_PREFIX_DISPATCH: dict[str, tuple[type[SQLSpecError], str]] = {
|
|
81
|
+
"23": (IntegrityError, "integrity constraint violation"),
|
|
82
|
+
"28": (PermissionDeniedError, "authorization error"),
|
|
83
|
+
"40": (TransactionError, "transaction error"),
|
|
84
|
+
"42": (SQLParsingError, "SQL syntax error"),
|
|
85
|
+
"08": (DatabaseConnectionError, "connection error"),
|
|
86
|
+
"22": (DataError, "data error"),
|
|
87
|
+
}
|
|
88
|
+
_MYSQL_CONSTRAINT_ERROR_DISPATCH: dict[int, tuple[type[SQLSpecError], str]] = {
|
|
89
|
+
MYSQL_ER_DUP_ENTRY: (UniqueViolationError, "unique constraint violation"),
|
|
90
|
+
1216: (ForeignKeyViolationError, "foreign key constraint violation"),
|
|
91
|
+
1217: (ForeignKeyViolationError, "foreign key constraint violation"),
|
|
92
|
+
1451: (ForeignKeyViolationError, "foreign key constraint violation"),
|
|
93
|
+
1452: (ForeignKeyViolationError, "foreign key constraint violation"),
|
|
94
|
+
1048: (NotNullViolationError, "not-null constraint violation"),
|
|
95
|
+
MYSQL_ER_NO_DEFAULT_FOR_FIELD: (NotNullViolationError, "not-null constraint violation"),
|
|
96
|
+
MYSQL_ER_CHECK_CONSTRAINT_VIOLATED: (CheckViolationError, "check constraint violation"),
|
|
97
|
+
}
|
|
98
|
+
_MYSQL_ACCESS_ERROR_DISPATCH: dict[int, tuple[type[SQLSpecError], str]] = {
|
|
99
|
+
MYSQL_ER_DBACCESS_DENIED: (PermissionDeniedError, "access denied"),
|
|
100
|
+
MYSQL_ER_ACCESS_DENIED: (PermissionDeniedError, "access denied"),
|
|
101
|
+
MYSQL_ER_TABLEACCESS_DENIED: (PermissionDeniedError, "access denied"),
|
|
102
|
+
}
|
|
103
|
+
_MYSQL_TRANSACTION_ERROR_DISPATCH: dict[int, tuple[type[SQLSpecError], str]] = {
|
|
104
|
+
MYSQL_ER_LOCK_DEADLOCK: (DeadlockError, "deadlock detected"),
|
|
105
|
+
MYSQL_ER_LOCK_WAIT_TIMEOUT: (QueryTimeoutError, "lock wait timeout"),
|
|
106
|
+
}
|
|
107
|
+
_MYSQL_CONNECTION_ERROR_DISPATCH: dict[int, tuple[type[SQLSpecError], str]] = {
|
|
108
|
+
MYSQL_CR_SERVER_LOST: (ConnectionTimeoutError, "connection lost"),
|
|
109
|
+
MYSQL_CR_CONNECTION_ERROR: (DatabaseConnectionError, "connection error"),
|
|
110
|
+
MYSQL_CR_CONN_HOST_ERROR: (DatabaseConnectionError, "connection error"),
|
|
111
|
+
MYSQL_CR_UNKNOWN_HOST: (DatabaseConnectionError, "connection error"),
|
|
112
|
+
MYSQL_CR_SERVER_GONE_ERROR: (DatabaseConnectionError, "connection error"),
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _bool_to_int(value: bool) -> int:
|
|
117
|
+
return int(value)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def _quote_mysql_identifier(identifier: str) -> str:
|
|
121
|
+
normalized = identifier.replace("`", "``")
|
|
122
|
+
return f"`{normalized}`"
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def format_identifier(identifier: str) -> str:
|
|
126
|
+
cleaned = identifier.strip()
|
|
127
|
+
if not cleaned:
|
|
128
|
+
msg = "Table name must not be empty"
|
|
129
|
+
raise SQLSpecError(msg)
|
|
130
|
+
parts = [part for part in cleaned.split(".") if part]
|
|
131
|
+
formatted = ".".join(_quote_mysql_identifier(part) for part in parts)
|
|
132
|
+
return formatted or _quote_mysql_identifier(cleaned)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def build_insert_statement(table: str, columns: "list[str]") -> str:
|
|
136
|
+
column_clause = ", ".join(_quote_mysql_identifier(column) for column in columns)
|
|
137
|
+
placeholders = ", ".join("%s" for _ in columns)
|
|
138
|
+
return f"INSERT INTO {format_identifier(table)} ({column_clause}) VALUES ({placeholders})"
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def normalize_execute_parameters(parameters: Any) -> Any:
|
|
142
|
+
"""Normalize parameters for mysql-connector execute calls."""
|
|
143
|
+
return parameters or None
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def normalize_execute_many_parameters(parameters: Any) -> Any:
|
|
147
|
+
"""Normalize parameters for mysql-connector executemany calls."""
|
|
148
|
+
if not parameters:
|
|
149
|
+
msg = "execute_many requires parameters"
|
|
150
|
+
raise ValueError(msg)
|
|
151
|
+
return parameters
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def build_profile() -> "DriverParameterProfile":
|
|
155
|
+
"""Create the mysql-connector driver parameter profile."""
|
|
156
|
+
coercions: dict[type, Callable[[Any], Any]] = {bool: _bool_to_int, **build_uuid_coercions()}
|
|
157
|
+
return DriverParameterProfile(
|
|
158
|
+
name="mysql-connector",
|
|
159
|
+
default_style=ParameterStyle.QMARK,
|
|
160
|
+
supported_styles={ParameterStyle.QMARK},
|
|
161
|
+
default_execution_style=ParameterStyle.POSITIONAL_PYFORMAT,
|
|
162
|
+
supported_execution_styles={ParameterStyle.POSITIONAL_PYFORMAT},
|
|
163
|
+
has_native_list_expansion=False,
|
|
164
|
+
preserve_parameter_format=True,
|
|
165
|
+
needs_static_script_compilation=True,
|
|
166
|
+
allow_mixed_parameter_styles=False,
|
|
167
|
+
preserve_original_params_for_many=False,
|
|
168
|
+
json_serializer_strategy="helper",
|
|
169
|
+
custom_type_coercions=coercions,
|
|
170
|
+
default_dialect="mysql",
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
driver_profile = build_profile()
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def build_statement_config(
|
|
178
|
+
*, json_serializer: "Callable[[Any], str] | None" = None, json_deserializer: "Callable[[str], Any] | None" = None
|
|
179
|
+
) -> "StatementConfig":
|
|
180
|
+
"""Construct the mysql-connector statement configuration with optional JSON codecs."""
|
|
181
|
+
serializer = json_serializer or to_json
|
|
182
|
+
deserializer = json_deserializer or from_json
|
|
183
|
+
profile = driver_profile
|
|
184
|
+
return build_statement_config_from_profile(
|
|
185
|
+
profile, statement_overrides={"dialect": "mysql"}, json_serializer=serializer, json_deserializer=deserializer
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
default_statement_config = build_statement_config()
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def apply_driver_features(
|
|
193
|
+
statement_config: "StatementConfig", driver_features: "Mapping[str, Any] | None"
|
|
194
|
+
) -> "tuple[StatementConfig, dict[str, Any]]":
|
|
195
|
+
"""Apply mysql-connector driver feature defaults to statement config."""
|
|
196
|
+
features: dict[str, Any] = dict(driver_features) if driver_features else {}
|
|
197
|
+
json_serializer = features.setdefault("json_serializer", to_json)
|
|
198
|
+
json_deserializer = features.setdefault("json_deserializer", from_json)
|
|
199
|
+
|
|
200
|
+
if json_serializer is not None:
|
|
201
|
+
parameter_config = statement_config.parameter_config.with_json_serializers(
|
|
202
|
+
json_serializer, deserializer=json_deserializer
|
|
203
|
+
)
|
|
204
|
+
statement_config = statement_config.replace(parameter_config=parameter_config)
|
|
205
|
+
|
|
206
|
+
return statement_config, features
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def _create_mysql_error(
|
|
210
|
+
error: Any, sqlstate: "str | None", code: "int | None", error_class: type[SQLSpecError], description: str
|
|
211
|
+
) -> SQLSpecError:
|
|
212
|
+
"""Create a MySQL error instance without raising it."""
|
|
213
|
+
code_str = f"[{sqlstate or code}]" if sqlstate or code else ""
|
|
214
|
+
msg = f"MySQL {description} {code_str}: {error}" if code_str else f"MySQL {description}: {error}"
|
|
215
|
+
exc = error_class(msg)
|
|
216
|
+
exc.__cause__ = error
|
|
217
|
+
return exc
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def create_mapped_exception(error: Any, *, logger: Any | None = None) -> "SQLSpecError | bool":
|
|
221
|
+
"""Map mysql-connector exceptions to SQLSpec errors.
|
|
222
|
+
|
|
223
|
+
This is a factory function that returns an exception instance rather than
|
|
224
|
+
raising. This pattern is more robust for use in __exit__ handlers and
|
|
225
|
+
avoids issues with exception control flow in different Python versions.
|
|
226
|
+
|
|
227
|
+
Mapping priority:
|
|
228
|
+
1. Specific error codes (most reliable for MySQL)
|
|
229
|
+
2. SQLSTATE codes (where available)
|
|
230
|
+
3. Generic error code ranges
|
|
231
|
+
4. Default SQLSpecError fallback
|
|
232
|
+
|
|
233
|
+
Args:
|
|
234
|
+
error: The mysql-connector exception to map
|
|
235
|
+
logger: Optional logger for migration warnings
|
|
236
|
+
|
|
237
|
+
Returns:
|
|
238
|
+
True to suppress expected migration errors, or a SQLSpec exception
|
|
239
|
+
"""
|
|
240
|
+
error_code = getattr(error, "errno", None)
|
|
241
|
+
if error_code is None and hasattr(error, "args") and error.args:
|
|
242
|
+
value = error.args[0]
|
|
243
|
+
if isinstance(value, int):
|
|
244
|
+
error_code = value
|
|
245
|
+
sqlstate_attr = getattr(error, "sqlstate", None)
|
|
246
|
+
sqlstate = sqlstate_attr if isinstance(sqlstate_attr, str) else None
|
|
247
|
+
sqlstate_prefix = sqlstate[:2] if isinstance(sqlstate, str) and sqlstate else None
|
|
248
|
+
|
|
249
|
+
# Migration-specific errors to suppress
|
|
250
|
+
if error_code in _MYSQL_MIGRATION_ERROR_CODES:
|
|
251
|
+
if logger is not None:
|
|
252
|
+
logger.warning("MysqlConnector MySQL expected migration error (ignoring): %s", error)
|
|
253
|
+
return True
|
|
254
|
+
|
|
255
|
+
dispatch = _MYSQL_SQLSTATE_EXACT_DISPATCH.get(sqlstate) if sqlstate is not None else None
|
|
256
|
+
if dispatch is not None:
|
|
257
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
258
|
+
|
|
259
|
+
dispatch = _MYSQL_CONSTRAINT_ERROR_DISPATCH.get(error_code) if error_code is not None else None
|
|
260
|
+
if dispatch is not None:
|
|
261
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
262
|
+
|
|
263
|
+
if sqlstate_prefix == "23":
|
|
264
|
+
dispatch = _MYSQL_SQLSTATE_PREFIX_DISPATCH["23"]
|
|
265
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
266
|
+
|
|
267
|
+
dispatch = _MYSQL_ACCESS_ERROR_DISPATCH.get(error_code) if error_code is not None else None
|
|
268
|
+
if dispatch is not None:
|
|
269
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
270
|
+
if sqlstate_prefix == "28":
|
|
271
|
+
dispatch = _MYSQL_SQLSTATE_PREFIX_DISPATCH["28"]
|
|
272
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
273
|
+
|
|
274
|
+
dispatch = _MYSQL_TRANSACTION_ERROR_DISPATCH.get(error_code) if error_code is not None else None
|
|
275
|
+
if dispatch is not None:
|
|
276
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
277
|
+
if sqlstate_prefix == "40":
|
|
278
|
+
dispatch = _MYSQL_SQLSTATE_PREFIX_DISPATCH["40"]
|
|
279
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
280
|
+
|
|
281
|
+
if sqlstate_prefix == "42":
|
|
282
|
+
dispatch = _MYSQL_SQLSTATE_PREFIX_DISPATCH["42"]
|
|
283
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
284
|
+
if isinstance(error_code, int) and MYSQL_SYNTAX_ERROR_MIN <= error_code < MYSQL_SYNTAX_ERROR_MAX_EXCLUSIVE:
|
|
285
|
+
return _create_mysql_error(error, sqlstate, error_code, SQLParsingError, "SQL syntax error")
|
|
286
|
+
|
|
287
|
+
if sqlstate_prefix == "08":
|
|
288
|
+
dispatch = _MYSQL_SQLSTATE_PREFIX_DISPATCH["08"]
|
|
289
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
290
|
+
dispatch = _MYSQL_CONNECTION_ERROR_DISPATCH.get(error_code) if error_code is not None else None
|
|
291
|
+
if dispatch is not None:
|
|
292
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
293
|
+
|
|
294
|
+
if sqlstate_prefix == "22":
|
|
295
|
+
dispatch = _MYSQL_SQLSTATE_PREFIX_DISPATCH["22"]
|
|
296
|
+
return _create_mysql_error(error, sqlstate, error_code, dispatch[0], dispatch[1])
|
|
297
|
+
|
|
298
|
+
return _create_mysql_error(error, sqlstate, error_code, SQLSpecError, "database error")
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def resolve_column_names(description: "Sequence[Any] | None") -> "list[str]":
|
|
302
|
+
"""Resolve ordered column names from cursor metadata."""
|
|
303
|
+
if not description:
|
|
304
|
+
return []
|
|
305
|
+
return [desc[0] for desc in description]
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def detect_json_columns_from_description(
|
|
309
|
+
description: "Sequence[Any] | None", json_type_codes: "set[int]"
|
|
310
|
+
) -> "list[int]":
|
|
311
|
+
"""Identify JSON column indexes from pre-fetched cursor description metadata."""
|
|
312
|
+
if not description or not json_type_codes:
|
|
313
|
+
return []
|
|
314
|
+
|
|
315
|
+
json_indexes: list[int] = []
|
|
316
|
+
append = json_indexes.append
|
|
317
|
+
for index, column in enumerate(description):
|
|
318
|
+
if isinstance(column, (tuple, list)):
|
|
319
|
+
type_code = column[1] if len(column) > 1 else None
|
|
320
|
+
else:
|
|
321
|
+
type_code = getattr(column, "type_code", None)
|
|
322
|
+
if type_code in json_type_codes:
|
|
323
|
+
append(index)
|
|
324
|
+
return json_indexes
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
def detect_json_columns(
|
|
328
|
+
cursor: Any, json_type_codes: "set[int]", description: "Sequence[Any] | None" = None
|
|
329
|
+
) -> "list[int]":
|
|
330
|
+
"""Identify JSON column indexes from cursor metadata."""
|
|
331
|
+
if description is None:
|
|
332
|
+
if not has_cursor_metadata(cursor):
|
|
333
|
+
return []
|
|
334
|
+
description = cursor.description
|
|
335
|
+
return detect_json_columns_from_description(description, json_type_codes)
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def _deserialize_mysqlconnector_json_dict_rows(
|
|
339
|
+
column_names: "list[str]",
|
|
340
|
+
rows: "list[dict[str, Any]]",
|
|
341
|
+
json_indexes: "list[int]",
|
|
342
|
+
deserializer: "Callable[[Any], Any]",
|
|
343
|
+
*,
|
|
344
|
+
logger: Any | None = None,
|
|
345
|
+
) -> "list[dict[str, Any]]":
|
|
346
|
+
"""Apply JSON deserialization to dict rows (dictionary=True cursor path)."""
|
|
347
|
+
if not rows or not column_names or not json_indexes:
|
|
348
|
+
return rows
|
|
349
|
+
|
|
350
|
+
target_columns = [column_names[index] for index in json_indexes if index < len(column_names)]
|
|
351
|
+
if not target_columns:
|
|
352
|
+
return rows
|
|
353
|
+
|
|
354
|
+
for row in rows:
|
|
355
|
+
for column in target_columns:
|
|
356
|
+
if column not in row:
|
|
357
|
+
continue
|
|
358
|
+
raw_value = row[column]
|
|
359
|
+
if raw_value is None:
|
|
360
|
+
continue
|
|
361
|
+
if isinstance(raw_value, bytearray):
|
|
362
|
+
raw_value = bytes(raw_value)
|
|
363
|
+
if not isinstance(raw_value, (str, bytes)):
|
|
364
|
+
continue
|
|
365
|
+
try:
|
|
366
|
+
row[column] = deserializer(raw_value)
|
|
367
|
+
except Exception:
|
|
368
|
+
if logger is not None:
|
|
369
|
+
logger.debug("Failed to deserialize JSON column %s", column, exc_info=True)
|
|
370
|
+
return rows
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
def _deserialize_mysqlconnector_json_tuple_rows(
|
|
374
|
+
rows: "list[Any]", json_indexes: "list[int]", deserializer: "Callable[[Any], Any]", *, logger: Any | None = None
|
|
375
|
+
) -> "list[Any]":
|
|
376
|
+
"""Apply JSON deserialization to tuple rows using index-based access."""
|
|
377
|
+
if not rows or not json_indexes:
|
|
378
|
+
return rows
|
|
379
|
+
|
|
380
|
+
result: list[Any] = []
|
|
381
|
+
for row in rows:
|
|
382
|
+
row_list = list(row)
|
|
383
|
+
mutated = False
|
|
384
|
+
for idx in json_indexes:
|
|
385
|
+
if idx >= len(row_list):
|
|
386
|
+
continue
|
|
387
|
+
raw_value = row_list[idx]
|
|
388
|
+
if raw_value is None:
|
|
389
|
+
continue
|
|
390
|
+
if isinstance(raw_value, bytearray):
|
|
391
|
+
raw_value = bytes(raw_value)
|
|
392
|
+
if not isinstance(raw_value, (str, bytes)):
|
|
393
|
+
continue
|
|
394
|
+
try:
|
|
395
|
+
row_list[idx] = deserializer(raw_value)
|
|
396
|
+
mutated = True
|
|
397
|
+
except Exception:
|
|
398
|
+
if logger is not None:
|
|
399
|
+
logger.debug("Failed to deserialize JSON column index %d", idx, exc_info=True)
|
|
400
|
+
result.append(tuple(row_list) if mutated else row)
|
|
401
|
+
return result
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
def collect_rows(
|
|
405
|
+
fetched_data: "Sequence[Any] | None",
|
|
406
|
+
description: "Sequence[Any] | None",
|
|
407
|
+
json_indexes: "list[int]",
|
|
408
|
+
deserializer: "Callable[[Any], Any]",
|
|
409
|
+
*,
|
|
410
|
+
column_names: "list[str] | None" = None,
|
|
411
|
+
logger: Any | None = None,
|
|
412
|
+
) -> "tuple[list[Any], list[str], str]":
|
|
413
|
+
"""Collect mysql-connector rows with JSON decoding, preserving raw format.
|
|
414
|
+
|
|
415
|
+
Returns:
|
|
416
|
+
Tuple of (rows, column_names, row_format).
|
|
417
|
+
"""
|
|
418
|
+
if not description:
|
|
419
|
+
return [], [], "tuple"
|
|
420
|
+
resolved_column_names = resolve_column_names(description) if column_names is None else column_names
|
|
421
|
+
if not fetched_data:
|
|
422
|
+
return [], resolved_column_names, "tuple"
|
|
423
|
+
|
|
424
|
+
first_row = fetched_data[0]
|
|
425
|
+
if isinstance(first_row, dict):
|
|
426
|
+
if not json_indexes:
|
|
427
|
+
rows = fetched_data if isinstance(fetched_data, list) else list(fetched_data)
|
|
428
|
+
return rows, resolved_column_names, "dict"
|
|
429
|
+
rows = [dict(row) for row in fetched_data]
|
|
430
|
+
rows = _deserialize_mysqlconnector_json_dict_rows(
|
|
431
|
+
resolved_column_names, rows, json_indexes, deserializer, logger=logger
|
|
432
|
+
)
|
|
433
|
+
return rows, resolved_column_names, "dict"
|
|
434
|
+
rows = fetched_data if isinstance(fetched_data, list) else list(fetched_data)
|
|
435
|
+
if json_indexes:
|
|
436
|
+
rows = _deserialize_mysqlconnector_json_tuple_rows(rows, json_indexes, deserializer, logger=logger)
|
|
437
|
+
return rows, resolved_column_names, "tuple"
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def resolve_rowcount(cursor: Any) -> int:
|
|
441
|
+
"""Resolve rowcount from a mysql-connector cursor."""
|
|
442
|
+
if not has_rowcount(cursor):
|
|
443
|
+
return 0
|
|
444
|
+
rowcount = cursor.rowcount
|
|
445
|
+
if isinstance(rowcount, int) and rowcount >= 0:
|
|
446
|
+
return rowcount
|
|
447
|
+
return 0
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
def resolve_many_rowcount(cursor: Any, parameters: Any, *, fallback_count: "int | None" = None) -> int:
|
|
451
|
+
"""Resolve execute_many rowcount using cursor metadata with payload fallback."""
|
|
452
|
+
rowcount = resolve_rowcount(cursor)
|
|
453
|
+
if rowcount > 0:
|
|
454
|
+
return rowcount
|
|
455
|
+
if fallback_count is not None:
|
|
456
|
+
return fallback_count
|
|
457
|
+
if isinstance(parameters, Sized):
|
|
458
|
+
return len(parameters)
|
|
459
|
+
return 0
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
def normalize_lastrowid(cursor: Any) -> int | None:
|
|
463
|
+
"""Normalize lastrowid for mysql-connector when rowcount indicates success."""
|
|
464
|
+
if not has_rowcount(cursor):
|
|
465
|
+
return None
|
|
466
|
+
rowcount = cursor.rowcount
|
|
467
|
+
if not isinstance(rowcount, int) or rowcount <= 0:
|
|
468
|
+
return None
|
|
469
|
+
if not has_lastrowid(cursor):
|
|
470
|
+
return None
|
|
471
|
+
last_id = cursor.lastrowid
|
|
472
|
+
return last_id if isinstance(last_id, int) else None
|