sqlspec 0.36.0__cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.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.
- ac8f31065839703b4e70__mypyc.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/__init__.py +140 -0
- sqlspec/__main__.py +12 -0
- sqlspec/__metadata__.py +14 -0
- sqlspec/_serialization.py +315 -0
- sqlspec/_typing.py +700 -0
- sqlspec/adapters/__init__.py +0 -0
- sqlspec/adapters/adbc/__init__.py +5 -0
- sqlspec/adapters/adbc/_typing.py +82 -0
- sqlspec/adapters/adbc/adk/__init__.py +5 -0
- sqlspec/adapters/adbc/adk/store.py +1273 -0
- sqlspec/adapters/adbc/config.py +295 -0
- sqlspec/adapters/adbc/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/adbc/core.py +735 -0
- sqlspec/adapters/adbc/data_dictionary.py +334 -0
- sqlspec/adapters/adbc/driver.py +529 -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 +502 -0
- sqlspec/adapters/adbc/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/adbc/type_converter.py +140 -0
- sqlspec/adapters/aiosqlite/__init__.py +25 -0
- sqlspec/adapters/aiosqlite/_typing.py +82 -0
- sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/adk/store.py +818 -0
- sqlspec/adapters/aiosqlite/config.py +334 -0
- sqlspec/adapters/aiosqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/aiosqlite/core.py +315 -0
- sqlspec/adapters/aiosqlite/data_dictionary.py +208 -0
- sqlspec/adapters/aiosqlite/driver.py +313 -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.py +533 -0
- sqlspec/adapters/asyncmy/__init__.py +21 -0
- sqlspec/adapters/asyncmy/_typing.py +87 -0
- sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
- sqlspec/adapters/asyncmy/adk/store.py +703 -0
- sqlspec/adapters/asyncmy/config.py +302 -0
- sqlspec/adapters/asyncmy/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/asyncmy/core.py +360 -0
- sqlspec/adapters/asyncmy/data_dictionary.py +124 -0
- sqlspec/adapters/asyncmy/driver.py +383 -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 +19 -0
- sqlspec/adapters/asyncpg/_typing.py +88 -0
- sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
- sqlspec/adapters/asyncpg/adk/store.py +748 -0
- sqlspec/adapters/asyncpg/config.py +569 -0
- sqlspec/adapters/asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/asyncpg/core.py +367 -0
- sqlspec/adapters/asyncpg/data_dictionary.py +162 -0
- sqlspec/adapters/asyncpg/driver.py +487 -0
- sqlspec/adapters/asyncpg/events/__init__.py +6 -0
- sqlspec/adapters/asyncpg/events/backend.py +286 -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 +14 -0
- sqlspec/adapters/bigquery/_typing.py +86 -0
- sqlspec/adapters/bigquery/adk/__init__.py +5 -0
- sqlspec/adapters/bigquery/adk/store.py +827 -0
- sqlspec/adapters/bigquery/config.py +353 -0
- sqlspec/adapters/bigquery/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/bigquery/core.py +715 -0
- sqlspec/adapters/bigquery/data_dictionary.py +128 -0
- sqlspec/adapters/bigquery/driver.py +548 -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.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/bigquery/type_converter.py +107 -0
- sqlspec/adapters/cockroach_asyncpg/__init__.py +24 -0
- sqlspec/adapters/cockroach_asyncpg/_typing.py +72 -0
- sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/adk/store.py +410 -0
- sqlspec/adapters/cockroach_asyncpg/config.py +238 -0
- sqlspec/adapters/cockroach_asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
- sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +107 -0
- sqlspec/adapters/cockroach_asyncpg/driver.py +144 -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 +38 -0
- sqlspec/adapters/cockroach_psycopg/_typing.py +129 -0
- sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
- sqlspec/adapters/cockroach_psycopg/adk/store.py +868 -0
- sqlspec/adapters/cockroach_psycopg/config.py +484 -0
- sqlspec/adapters/cockroach_psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/cockroach_psycopg/core.py +63 -0
- sqlspec/adapters/cockroach_psycopg/data_dictionary.py +215 -0
- sqlspec/adapters/cockroach_psycopg/driver.py +284 -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 +325 -0
- sqlspec/adapters/duckdb/__init__.py +25 -0
- sqlspec/adapters/duckdb/_typing.py +81 -0
- sqlspec/adapters/duckdb/adk/__init__.py +14 -0
- sqlspec/adapters/duckdb/adk/store.py +850 -0
- sqlspec/adapters/duckdb/config.py +463 -0
- sqlspec/adapters/duckdb/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/duckdb/core.py +257 -0
- sqlspec/adapters/duckdb/data_dictionary.py +140 -0
- sqlspec/adapters/duckdb/driver.py +430 -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.py +293 -0
- sqlspec/adapters/duckdb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/duckdb/type_converter.py +118 -0
- sqlspec/adapters/mock/__init__.py +72 -0
- sqlspec/adapters/mock/_typing.py +147 -0
- sqlspec/adapters/mock/config.py +483 -0
- sqlspec/adapters/mock/core.py +319 -0
- sqlspec/adapters/mock/data_dictionary.py +366 -0
- sqlspec/adapters/mock/driver.py +721 -0
- sqlspec/adapters/mysqlconnector/__init__.py +36 -0
- sqlspec/adapters/mysqlconnector/_typing.py +141 -0
- sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
- sqlspec/adapters/mysqlconnector/adk/store.py +1060 -0
- sqlspec/adapters/mysqlconnector/config.py +394 -0
- sqlspec/adapters/mysqlconnector/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/mysqlconnector/core.py +303 -0
- sqlspec/adapters/mysqlconnector/data_dictionary.py +235 -0
- sqlspec/adapters/mysqlconnector/driver.py +483 -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 +60 -0
- sqlspec/adapters/oracledb/_numpy_handlers.py +141 -0
- sqlspec/adapters/oracledb/_typing.py +182 -0
- sqlspec/adapters/oracledb/_uuid_handlers.py +166 -0
- sqlspec/adapters/oracledb/adk/__init__.py +10 -0
- sqlspec/adapters/oracledb/adk/store.py +2369 -0
- sqlspec/adapters/oracledb/config.py +550 -0
- sqlspec/adapters/oracledb/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/oracledb/core.py +543 -0
- sqlspec/adapters/oracledb/data_dictionary.py +536 -0
- sqlspec/adapters/oracledb/driver.py +1229 -0
- sqlspec/adapters/oracledb/events/__init__.py +16 -0
- sqlspec/adapters/oracledb/events/backend.py +347 -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 +535 -0
- sqlspec/adapters/oracledb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/oracledb/type_converter.py +211 -0
- sqlspec/adapters/psqlpy/__init__.py +17 -0
- sqlspec/adapters/psqlpy/_typing.py +79 -0
- sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
- sqlspec/adapters/psqlpy/adk/store.py +766 -0
- sqlspec/adapters/psqlpy/config.py +304 -0
- sqlspec/adapters/psqlpy/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psqlpy/core.py +480 -0
- sqlspec/adapters/psqlpy/data_dictionary.py +126 -0
- sqlspec/adapters/psqlpy/driver.py +438 -0
- sqlspec/adapters/psqlpy/events/__init__.py +6 -0
- sqlspec/adapters/psqlpy/events/backend.py +310 -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.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psqlpy/type_converter.py +113 -0
- sqlspec/adapters/psycopg/__init__.py +32 -0
- sqlspec/adapters/psycopg/_typing.py +164 -0
- sqlspec/adapters/psycopg/adk/__init__.py +10 -0
- sqlspec/adapters/psycopg/adk/store.py +1387 -0
- sqlspec/adapters/psycopg/config.py +576 -0
- sqlspec/adapters/psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psycopg/core.py +450 -0
- sqlspec/adapters/psycopg/data_dictionary.py +289 -0
- sqlspec/adapters/psycopg/driver.py +975 -0
- sqlspec/adapters/psycopg/events/__init__.py +20 -0
- sqlspec/adapters/psycopg/events/backend.py +458 -0
- sqlspec/adapters/psycopg/events/store.py +42 -0
- sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
- sqlspec/adapters/psycopg/litestar/store.py +552 -0
- sqlspec/adapters/psycopg/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psycopg/type_converter.py +93 -0
- sqlspec/adapters/pymysql/__init__.py +21 -0
- sqlspec/adapters/pymysql/_typing.py +71 -0
- sqlspec/adapters/pymysql/adk/__init__.py +5 -0
- sqlspec/adapters/pymysql/adk/store.py +540 -0
- sqlspec/adapters/pymysql/config.py +195 -0
- sqlspec/adapters/pymysql/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/pymysql/core.py +299 -0
- sqlspec/adapters/pymysql/data_dictionary.py +122 -0
- sqlspec/adapters/pymysql/driver.py +259 -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.py +137 -0
- sqlspec/adapters/spanner/__init__.py +40 -0
- sqlspec/adapters/spanner/_typing.py +86 -0
- sqlspec/adapters/spanner/adk/__init__.py +5 -0
- sqlspec/adapters/spanner/adk/store.py +732 -0
- sqlspec/adapters/spanner/config.py +352 -0
- sqlspec/adapters/spanner/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/spanner/core.py +188 -0
- sqlspec/adapters/spanner/data_dictionary.py +120 -0
- sqlspec/adapters/spanner/dialect/__init__.py +6 -0
- sqlspec/adapters/spanner/dialect/_spangres.py +57 -0
- sqlspec/adapters/spanner/dialect/_spanner.py +130 -0
- sqlspec/adapters/spanner/driver.py +373 -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.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/spanner/type_converter.py +331 -0
- sqlspec/adapters/sqlite/__init__.py +19 -0
- sqlspec/adapters/sqlite/_typing.py +80 -0
- sqlspec/adapters/sqlite/adk/__init__.py +5 -0
- sqlspec/adapters/sqlite/adk/store.py +958 -0
- sqlspec/adapters/sqlite/config.py +280 -0
- sqlspec/adapters/sqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/sqlite/core.py +312 -0
- sqlspec/adapters/sqlite/data_dictionary.py +202 -0
- sqlspec/adapters/sqlite/driver.py +359 -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.py +198 -0
- sqlspec/adapters/sqlite/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/sqlite/type_converter.py +114 -0
- sqlspec/base.py +747 -0
- sqlspec/builder/__init__.py +179 -0
- sqlspec/builder/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_base.py +1022 -0
- sqlspec/builder/_column.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_column.py +521 -0
- sqlspec/builder/_ddl.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_ddl.py +1642 -0
- sqlspec/builder/_delete.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_delete.py +95 -0
- sqlspec/builder/_dml.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_dml.py +365 -0
- sqlspec/builder/_explain.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_explain.py +579 -0
- sqlspec/builder/_expression_wrappers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_expression_wrappers.py +46 -0
- sqlspec/builder/_factory.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_factory.py +1697 -0
- sqlspec/builder/_insert.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_insert.py +328 -0
- sqlspec/builder/_join.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_join.py +499 -0
- sqlspec/builder/_merge.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_merge.py +821 -0
- sqlspec/builder/_parsing_utils.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_parsing_utils.py +297 -0
- sqlspec/builder/_select.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_select.py +1660 -0
- sqlspec/builder/_temporal.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_temporal.py +139 -0
- sqlspec/builder/_update.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_update.py +173 -0
- sqlspec/builder/_vector_expressions.py +267 -0
- sqlspec/cli.py +911 -0
- sqlspec/config.py +1755 -0
- sqlspec/core/__init__.py +374 -0
- sqlspec/core/_correlation.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/_correlation.py +176 -0
- sqlspec/core/cache.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/cache.py +1069 -0
- sqlspec/core/compiler.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/compiler.py +954 -0
- sqlspec/core/explain.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/explain.py +275 -0
- sqlspec/core/filters.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/filters.py +952 -0
- sqlspec/core/hashing.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/hashing.py +262 -0
- sqlspec/core/metrics.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/metrics.py +83 -0
- sqlspec/core/parameters/__init__.py +71 -0
- sqlspec/core/parameters/_alignment.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_alignment.py +270 -0
- sqlspec/core/parameters/_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_converter.py +543 -0
- sqlspec/core/parameters/_processor.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_processor.py +505 -0
- sqlspec/core/parameters/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_registry.py +206 -0
- sqlspec/core/parameters/_transformers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_transformers.py +292 -0
- sqlspec/core/parameters/_types.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_types.py +499 -0
- sqlspec/core/parameters/_validator.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_validator.py +180 -0
- sqlspec/core/pipeline.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/pipeline.py +319 -0
- sqlspec/core/query_modifiers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/query_modifiers.py +437 -0
- sqlspec/core/result/__init__.py +23 -0
- sqlspec/core/result/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/result/_base.py +1121 -0
- sqlspec/core/result/_io.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/result/_io.py +28 -0
- sqlspec/core/splitter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/splitter.py +966 -0
- sqlspec/core/stack.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/stack.py +163 -0
- sqlspec/core/statement.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/statement.py +1503 -0
- sqlspec/core/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/type_converter.py +339 -0
- sqlspec/data_dictionary/__init__.py +22 -0
- sqlspec/data_dictionary/_loader.py +123 -0
- sqlspec/data_dictionary/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/_registry.py +74 -0
- sqlspec/data_dictionary/_types.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/_types.py +121 -0
- sqlspec/data_dictionary/dialects/__init__.py +21 -0
- sqlspec/data_dictionary/dialects/bigquery.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/bigquery.py +49 -0
- sqlspec/data_dictionary/dialects/cockroachdb.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/cockroachdb.py +43 -0
- sqlspec/data_dictionary/dialects/duckdb.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/duckdb.py +47 -0
- sqlspec/data_dictionary/dialects/mysql.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/mysql.py +42 -0
- sqlspec/data_dictionary/dialects/oracle.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/oracle.py +34 -0
- sqlspec/data_dictionary/dialects/postgres.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/postgres.py +46 -0
- sqlspec/data_dictionary/dialects/spanner.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/spanner.py +37 -0
- sqlspec/data_dictionary/dialects/sqlite.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/sqlite.py +42 -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/driver/__init__.py +32 -0
- sqlspec/driver/_async.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_async.py +1737 -0
- sqlspec/driver/_common.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_common.py +1478 -0
- sqlspec/driver/_sql_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_sql_helpers.py +148 -0
- sqlspec/driver/_storage_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_storage_helpers.py +144 -0
- sqlspec/driver/_sync.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_sync.py +1710 -0
- sqlspec/exceptions.py +338 -0
- sqlspec/extensions/__init__.py +0 -0
- sqlspec/extensions/adk/__init__.py +70 -0
- sqlspec/extensions/adk/_types.py +51 -0
- sqlspec/extensions/adk/converters.py +172 -0
- sqlspec/extensions/adk/memory/__init__.py +69 -0
- sqlspec/extensions/adk/memory/_types.py +30 -0
- sqlspec/extensions/adk/memory/converters.py +149 -0
- sqlspec/extensions/adk/memory/service.py +217 -0
- sqlspec/extensions/adk/memory/store.py +569 -0
- sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +246 -0
- sqlspec/extensions/adk/migrations/__init__.py +0 -0
- sqlspec/extensions/adk/service.py +225 -0
- sqlspec/extensions/adk/store.py +567 -0
- sqlspec/extensions/events/__init__.py +51 -0
- sqlspec/extensions/events/_channel.py +703 -0
- sqlspec/extensions/events/_hints.py +45 -0
- sqlspec/extensions/events/_models.py +23 -0
- sqlspec/extensions/events/_payload.py +69 -0
- sqlspec/extensions/events/_protocols.py +134 -0
- sqlspec/extensions/events/_queue.py +461 -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 +19 -0
- sqlspec/extensions/fastapi/extension.py +351 -0
- sqlspec/extensions/fastapi/providers.py +607 -0
- sqlspec/extensions/flask/__init__.py +37 -0
- sqlspec/extensions/flask/_state.py +76 -0
- sqlspec/extensions/flask/_utils.py +71 -0
- sqlspec/extensions/flask/extension.py +519 -0
- sqlspec/extensions/litestar/__init__.py +28 -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 +671 -0
- sqlspec/extensions/litestar/providers.py +526 -0
- sqlspec/extensions/litestar/store.py +296 -0
- sqlspec/extensions/otel/__init__.py +58 -0
- sqlspec/extensions/prometheus/__init__.py +113 -0
- sqlspec/extensions/starlette/__init__.py +19 -0
- sqlspec/extensions/starlette/_state.py +30 -0
- sqlspec/extensions/starlette/_utils.py +96 -0
- sqlspec/extensions/starlette/extension.py +346 -0
- sqlspec/extensions/starlette/middleware.py +235 -0
- sqlspec/loader.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/loader.py +702 -0
- sqlspec/migrations/__init__.py +36 -0
- sqlspec/migrations/base.py +731 -0
- sqlspec/migrations/commands.py +1232 -0
- sqlspec/migrations/context.py +157 -0
- sqlspec/migrations/fix.py +204 -0
- sqlspec/migrations/loaders.py +443 -0
- sqlspec/migrations/runner.py +1172 -0
- sqlspec/migrations/templates.py +234 -0
- sqlspec/migrations/tracker.py +611 -0
- sqlspec/migrations/utils.py +256 -0
- sqlspec/migrations/validation.py +207 -0
- sqlspec/migrations/version.py +446 -0
- sqlspec/observability/__init__.py +55 -0
- sqlspec/observability/_common.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_common.py +77 -0
- sqlspec/observability/_config.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_config.py +348 -0
- sqlspec/observability/_diagnostics.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_diagnostics.py +74 -0
- sqlspec/observability/_dispatcher.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_dispatcher.py +152 -0
- sqlspec/observability/_formatters/__init__.py +13 -0
- sqlspec/observability/_formatters/_aws.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_aws.py +102 -0
- sqlspec/observability/_formatters/_azure.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_azure.py +96 -0
- sqlspec/observability/_formatters/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_base.py +57 -0
- sqlspec/observability/_formatters/_gcp.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_gcp.py +131 -0
- sqlspec/observability/_formatting.py +58 -0
- sqlspec/observability/_observer.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_observer.py +357 -0
- sqlspec/observability/_runtime.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_runtime.py +420 -0
- sqlspec/observability/_sampling.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_sampling.py +188 -0
- sqlspec/observability/_spans.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_spans.py +161 -0
- sqlspec/protocols.py +916 -0
- sqlspec/py.typed +0 -0
- sqlspec/storage/__init__.py +48 -0
- sqlspec/storage/_utils.py +104 -0
- sqlspec/storage/backends/__init__.py +1 -0
- sqlspec/storage/backends/base.py +253 -0
- sqlspec/storage/backends/fsspec.py +529 -0
- sqlspec/storage/backends/local.py +441 -0
- sqlspec/storage/backends/obstore.py +916 -0
- sqlspec/storage/errors.py +104 -0
- sqlspec/storage/pipeline.py +582 -0
- sqlspec/storage/registry.py +301 -0
- sqlspec/typing.py +395 -0
- sqlspec/utils/__init__.py +7 -0
- sqlspec/utils/arrow_helpers.py +318 -0
- sqlspec/utils/config_tools.py +332 -0
- sqlspec/utils/correlation.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/correlation.py +134 -0
- sqlspec/utils/deprecation.py +190 -0
- sqlspec/utils/fixtures.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/fixtures.py +258 -0
- sqlspec/utils/logging.py +222 -0
- sqlspec/utils/module_loader.py +306 -0
- sqlspec/utils/portal.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/portal.py +375 -0
- sqlspec/utils/schema.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/schema.py +485 -0
- sqlspec/utils/serializers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/serializers.py +408 -0
- sqlspec/utils/singleton.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/singleton.py +41 -0
- sqlspec/utils/sync_tools.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/sync_tools.py +311 -0
- sqlspec/utils/text.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/text.py +108 -0
- sqlspec/utils/type_converters.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/type_converters.py +128 -0
- sqlspec/utils/type_guards.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/type_guards.py +1360 -0
- sqlspec/utils/uuids.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/uuids.py +225 -0
- sqlspec-0.36.0.dist-info/METADATA +205 -0
- sqlspec-0.36.0.dist-info/RECORD +531 -0
- sqlspec-0.36.0.dist-info/WHEEL +7 -0
- sqlspec-0.36.0.dist-info/entry_points.txt +2 -0
- sqlspec-0.36.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"""Spanner type conversion - output and input handling.
|
|
2
|
+
|
|
3
|
+
Combines output conversion (database results → Python) and input conversion
|
|
4
|
+
(Python params → Spanner format) in a single module. Designed for mypyc
|
|
5
|
+
compilation with no nested functions.
|
|
6
|
+
|
|
7
|
+
Output conversion handles:
|
|
8
|
+
- UUID detection and conversion from strings/bytes
|
|
9
|
+
- JSON detection and deserialization
|
|
10
|
+
|
|
11
|
+
Input conversion handles:
|
|
12
|
+
- UUID → base64-encoded bytes
|
|
13
|
+
- bytes → base64-encoded bytes
|
|
14
|
+
- datetime timezone awareness
|
|
15
|
+
- dict/list → JsonObject wrapping
|
|
16
|
+
- param_types inference
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import base64
|
|
20
|
+
from datetime import date, datetime, timezone
|
|
21
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
22
|
+
from uuid import UUID
|
|
23
|
+
|
|
24
|
+
from sqlspec.core.type_converter import CachedOutputConverter, convert_uuid
|
|
25
|
+
from sqlspec.utils.serializers import from_json
|
|
26
|
+
from sqlspec.utils.type_converters import should_json_encode_sequence
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from collections.abc import Callable
|
|
30
|
+
|
|
31
|
+
from sqlspec.protocols import SpannerParamTypesProtocol
|
|
32
|
+
|
|
33
|
+
__all__ = (
|
|
34
|
+
"SPANNER_SPECIAL_CHARS",
|
|
35
|
+
"SpannerOutputConverter",
|
|
36
|
+
"bytes_to_spanner",
|
|
37
|
+
"coerce_params_for_spanner",
|
|
38
|
+
"infer_spanner_param_types",
|
|
39
|
+
"spanner_json",
|
|
40
|
+
"spanner_to_bytes",
|
|
41
|
+
"spanner_to_uuid",
|
|
42
|
+
"uuid_to_spanner",
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
SPANNER_SPECIAL_CHARS: "frozenset[str]" = frozenset({"{", "[", "-", ":", "T", "."})
|
|
46
|
+
UUID_BYTE_LENGTH: int = 16
|
|
47
|
+
_SPANNER_PARAM_TYPES: "SpannerParamTypesProtocol | None" = None
|
|
48
|
+
_JSON_OBJECT_TYPE: "type[Any] | None" = None
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _get_param_types() -> "SpannerParamTypesProtocol":
|
|
52
|
+
global _SPANNER_PARAM_TYPES
|
|
53
|
+
if _SPANNER_PARAM_TYPES is None:
|
|
54
|
+
from google.cloud.spanner_v1 import param_types
|
|
55
|
+
|
|
56
|
+
_SPANNER_PARAM_TYPES = cast("SpannerParamTypesProtocol", param_types)
|
|
57
|
+
return _SPANNER_PARAM_TYPES
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _get_json_object_type() -> "type[Any]":
|
|
61
|
+
global _JSON_OBJECT_TYPE
|
|
62
|
+
if _JSON_OBJECT_TYPE is None:
|
|
63
|
+
from google.cloud.spanner_v1 import JsonObject
|
|
64
|
+
|
|
65
|
+
_JSON_OBJECT_TYPE = JsonObject
|
|
66
|
+
return _JSON_OBJECT_TYPE
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class SpannerOutputConverter(CachedOutputConverter):
|
|
70
|
+
"""Spanner-specific output conversion with UUID and JSON support.
|
|
71
|
+
|
|
72
|
+
Extends CachedOutputConverter with Spanner-specific functionality
|
|
73
|
+
including UUID bytes handling and JSON deserialization.
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
__slots__ = ("_enable_uuid_conversion", "_json_deserializer")
|
|
77
|
+
|
|
78
|
+
def __init__(
|
|
79
|
+
self,
|
|
80
|
+
cache_size: int = 5000,
|
|
81
|
+
enable_uuid_conversion: bool = True,
|
|
82
|
+
json_deserializer: "Callable[[str], Any] | None" = None,
|
|
83
|
+
) -> None:
|
|
84
|
+
"""Initialize converter with Spanner-specific options.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
cache_size: Maximum number of string values to cache (default: 5000)
|
|
88
|
+
enable_uuid_conversion: Enable automatic UUID conversion (default: True)
|
|
89
|
+
json_deserializer: Custom JSON deserializer (default: from_json)
|
|
90
|
+
"""
|
|
91
|
+
super().__init__(special_chars=SPANNER_SPECIAL_CHARS, cache_size=cache_size)
|
|
92
|
+
self._enable_uuid_conversion = enable_uuid_conversion
|
|
93
|
+
self._json_deserializer = json_deserializer if json_deserializer is not None else from_json
|
|
94
|
+
|
|
95
|
+
def _convert_detected(self, value: str, detected_type: str) -> Any:
|
|
96
|
+
"""Convert value with Spanner-specific handling.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
value: String value to convert.
|
|
100
|
+
detected_type: Detected type name.
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
Converted value according to Spanner requirements.
|
|
104
|
+
"""
|
|
105
|
+
if detected_type == "uuid":
|
|
106
|
+
if not self._enable_uuid_conversion:
|
|
107
|
+
return value
|
|
108
|
+
try:
|
|
109
|
+
return convert_uuid(value)
|
|
110
|
+
except ValueError:
|
|
111
|
+
return value
|
|
112
|
+
if detected_type == "json":
|
|
113
|
+
try:
|
|
114
|
+
return self._json_deserializer(value)
|
|
115
|
+
except (ValueError, TypeError):
|
|
116
|
+
return value
|
|
117
|
+
return value
|
|
118
|
+
|
|
119
|
+
def convert(self, value: Any) -> Any:
|
|
120
|
+
"""Convert value with Spanner-specific byte UUID handling.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
value: Value to potentially convert.
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
Converted value or original value.
|
|
127
|
+
"""
|
|
128
|
+
if self._enable_uuid_conversion and isinstance(value, bytes) and len(value) == UUID_BYTE_LENGTH:
|
|
129
|
+
try:
|
|
130
|
+
return UUID(bytes=value)
|
|
131
|
+
except ValueError:
|
|
132
|
+
return value
|
|
133
|
+
|
|
134
|
+
if not isinstance(value, str):
|
|
135
|
+
return value
|
|
136
|
+
return self._convert_cache(value)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _json_param_type() -> Any:
|
|
140
|
+
"""Get Spanner JSON param type with fallback to STRING.
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
JSON param type or STRING as fallback.
|
|
144
|
+
"""
|
|
145
|
+
param_types = _get_param_types()
|
|
146
|
+
try:
|
|
147
|
+
return param_types.JSON
|
|
148
|
+
except AttributeError:
|
|
149
|
+
return param_types.STRING
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def bytes_to_spanner(value: "bytes | None") -> "bytes | None":
|
|
153
|
+
"""Convert Python bytes to Spanner BYTES format.
|
|
154
|
+
|
|
155
|
+
The Spanner Python client requires base64-encoded bytes when
|
|
156
|
+
param_types.BYTES is specified.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
value: Python bytes or None.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
Base64-encoded bytes or None.
|
|
163
|
+
"""
|
|
164
|
+
if value is None:
|
|
165
|
+
return None
|
|
166
|
+
return base64.b64encode(value)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def spanner_to_bytes(value: Any) -> "bytes | None":
|
|
170
|
+
"""Convert Spanner BYTES result to Python bytes.
|
|
171
|
+
|
|
172
|
+
Handles both raw bytes and base64-encoded bytes.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
value: Value from Spanner (bytes or None).
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Python bytes or None.
|
|
179
|
+
"""
|
|
180
|
+
if value is None:
|
|
181
|
+
return None
|
|
182
|
+
if isinstance(value, (bytes, str)):
|
|
183
|
+
return base64.b64decode(value)
|
|
184
|
+
return None
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def uuid_to_spanner(value: UUID) -> bytes:
|
|
188
|
+
"""Convert Python UUID to 16-byte binary for Spanner BYTES(16).
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
value: Python UUID object.
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
16-byte binary representation (RFC 4122 big-endian).
|
|
195
|
+
"""
|
|
196
|
+
return value.bytes
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def spanner_to_uuid(value: "bytes | None") -> "UUID | bytes | None":
|
|
200
|
+
"""Convert 16-byte binary from Spanner to Python UUID.
|
|
201
|
+
|
|
202
|
+
Falls back to bytes if value is not valid UUID format.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
value: 16-byte binary from Spanner or None.
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
Python UUID if valid, original bytes if invalid, None if NULL.
|
|
209
|
+
"""
|
|
210
|
+
if value is None:
|
|
211
|
+
return None
|
|
212
|
+
if not isinstance(value, bytes):
|
|
213
|
+
return None
|
|
214
|
+
if len(value) != UUID_BYTE_LENGTH:
|
|
215
|
+
return value
|
|
216
|
+
try:
|
|
217
|
+
return UUID(bytes=value)
|
|
218
|
+
except (ValueError, TypeError):
|
|
219
|
+
return value
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def spanner_json(value: Any) -> Any:
|
|
223
|
+
"""Wrap JSON values for Spanner JSON parameters.
|
|
224
|
+
|
|
225
|
+
Args:
|
|
226
|
+
value: JSON-compatible value (dict, list, tuple, or scalar).
|
|
227
|
+
|
|
228
|
+
Returns:
|
|
229
|
+
JsonObject wrapper when available, otherwise the original value.
|
|
230
|
+
"""
|
|
231
|
+
json_type = _get_json_object_type()
|
|
232
|
+
if isinstance(value, json_type):
|
|
233
|
+
return value
|
|
234
|
+
return json_type(value)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def coerce_params_for_spanner(
|
|
238
|
+
params: "dict[str, Any] | None", json_serializer: "Callable[[Any], str] | None" = None
|
|
239
|
+
) -> "dict[str, Any] | None":
|
|
240
|
+
"""Coerce Python types to Spanner-compatible formats.
|
|
241
|
+
|
|
242
|
+
Handles:
|
|
243
|
+
- UUID → base64-encoded bytes
|
|
244
|
+
- bytes → base64-encoded bytes
|
|
245
|
+
- datetime timezone awareness
|
|
246
|
+
- dict → JsonObject for JSON columns
|
|
247
|
+
- nested sequences → JsonObject for JSON arrays
|
|
248
|
+
|
|
249
|
+
Args:
|
|
250
|
+
params: Parameter dictionary or None.
|
|
251
|
+
json_serializer: Optional JSON serializer (unused for JSON dicts).
|
|
252
|
+
|
|
253
|
+
Returns:
|
|
254
|
+
Coerced parameter dictionary or None.
|
|
255
|
+
"""
|
|
256
|
+
if params is None:
|
|
257
|
+
return None
|
|
258
|
+
|
|
259
|
+
json_object_type = _get_json_object_type()
|
|
260
|
+
coerced: dict[str, Any] = {}
|
|
261
|
+
for key, value in params.items():
|
|
262
|
+
if isinstance(value, UUID):
|
|
263
|
+
coerced[key] = bytes_to_spanner(uuid_to_spanner(value))
|
|
264
|
+
elif isinstance(value, bytes):
|
|
265
|
+
coerced[key] = bytes_to_spanner(value)
|
|
266
|
+
elif isinstance(value, datetime) and value.tzinfo is None:
|
|
267
|
+
coerced[key] = value.replace(tzinfo=timezone.utc)
|
|
268
|
+
elif isinstance(value, json_object_type):
|
|
269
|
+
coerced[key] = value
|
|
270
|
+
elif isinstance(value, dict):
|
|
271
|
+
coerced[key] = spanner_json(value)
|
|
272
|
+
elif isinstance(value, (list, tuple)):
|
|
273
|
+
if should_json_encode_sequence(value):
|
|
274
|
+
coerced[key] = spanner_json(list(value))
|
|
275
|
+
else:
|
|
276
|
+
coerced[key] = list(value) if isinstance(value, tuple) else value
|
|
277
|
+
else:
|
|
278
|
+
coerced[key] = value
|
|
279
|
+
return coerced
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def infer_spanner_param_types(params: "dict[str, Any] | None") -> "dict[str, Any]":
|
|
283
|
+
"""Infer Spanner param_types from Python values.
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
params: Parameter dictionary or None.
|
|
287
|
+
|
|
288
|
+
Returns:
|
|
289
|
+
Dictionary mapping parameter names to Spanner param_types.
|
|
290
|
+
"""
|
|
291
|
+
if not params:
|
|
292
|
+
return {}
|
|
293
|
+
|
|
294
|
+
param_types = _get_param_types()
|
|
295
|
+
json_object_type = _get_json_object_type()
|
|
296
|
+
types: dict[str, Any] = {}
|
|
297
|
+
json_type = _json_param_type()
|
|
298
|
+
for key, value in params.items():
|
|
299
|
+
if isinstance(value, bool):
|
|
300
|
+
types[key] = param_types.BOOL
|
|
301
|
+
elif isinstance(value, int):
|
|
302
|
+
types[key] = param_types.INT64
|
|
303
|
+
elif isinstance(value, float):
|
|
304
|
+
types[key] = param_types.FLOAT64
|
|
305
|
+
elif isinstance(value, str):
|
|
306
|
+
types[key] = param_types.STRING
|
|
307
|
+
elif isinstance(value, bytes):
|
|
308
|
+
types[key] = param_types.BYTES
|
|
309
|
+
elif isinstance(value, datetime):
|
|
310
|
+
types[key] = param_types.TIMESTAMP
|
|
311
|
+
elif isinstance(value, date):
|
|
312
|
+
types[key] = param_types.DATE
|
|
313
|
+
elif isinstance(value, (dict, json_object_type)):
|
|
314
|
+
types[key] = json_type
|
|
315
|
+
elif isinstance(value, (list, tuple)):
|
|
316
|
+
if should_json_encode_sequence(value):
|
|
317
|
+
types[key] = json_type
|
|
318
|
+
continue
|
|
319
|
+
sequence = list(value)
|
|
320
|
+
if not sequence:
|
|
321
|
+
continue
|
|
322
|
+
first = sequence[0]
|
|
323
|
+
if isinstance(first, int):
|
|
324
|
+
types[key] = param_types.Array(param_types.INT64)
|
|
325
|
+
elif isinstance(first, str):
|
|
326
|
+
types[key] = param_types.Array(param_types.STRING)
|
|
327
|
+
elif isinstance(first, float):
|
|
328
|
+
types[key] = param_types.Array(param_types.FLOAT64)
|
|
329
|
+
elif isinstance(first, bool):
|
|
330
|
+
types[key] = param_types.Array(param_types.BOOL)
|
|
331
|
+
return types
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""SQLite adapter for SQLSpec."""
|
|
2
|
+
|
|
3
|
+
from sqlspec.adapters.sqlite._typing import SqliteConnection
|
|
4
|
+
from sqlspec.adapters.sqlite.config import SqliteConfig, SqliteConnectionParams, SqliteDriverFeatures
|
|
5
|
+
from sqlspec.adapters.sqlite.core import default_statement_config
|
|
6
|
+
from sqlspec.adapters.sqlite.driver import SqliteCursor, SqliteDriver, SqliteExceptionHandler
|
|
7
|
+
from sqlspec.adapters.sqlite.pool import SqliteConnectionPool
|
|
8
|
+
|
|
9
|
+
__all__ = (
|
|
10
|
+
"SqliteConfig",
|
|
11
|
+
"SqliteConnection",
|
|
12
|
+
"SqliteConnectionParams",
|
|
13
|
+
"SqliteConnectionPool",
|
|
14
|
+
"SqliteCursor",
|
|
15
|
+
"SqliteDriver",
|
|
16
|
+
"SqliteDriverFeatures",
|
|
17
|
+
"SqliteExceptionHandler",
|
|
18
|
+
"default_statement_config",
|
|
19
|
+
)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""SQLite adapter type definitions.
|
|
2
|
+
|
|
3
|
+
This module contains type aliases and classes that are excluded from mypyc
|
|
4
|
+
compilation to avoid ABI boundary issues.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import sqlite3
|
|
8
|
+
from typing import TYPE_CHECKING, Any
|
|
9
|
+
|
|
10
|
+
_SqliteConnection = sqlite3.Connection
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from collections.abc import Callable
|
|
14
|
+
from typing import TypeAlias
|
|
15
|
+
|
|
16
|
+
from sqlspec.adapters.sqlite.driver import SqliteDriver
|
|
17
|
+
from sqlspec.core import StatementConfig
|
|
18
|
+
|
|
19
|
+
SqliteConnection: TypeAlias = _SqliteConnection
|
|
20
|
+
|
|
21
|
+
if not TYPE_CHECKING:
|
|
22
|
+
SqliteConnection = _SqliteConnection
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class SqliteSessionContext:
|
|
26
|
+
"""Sync context manager for SQLite sessions.
|
|
27
|
+
|
|
28
|
+
This class is intentionally excluded from mypyc compilation to avoid ABI
|
|
29
|
+
boundary issues. It receives callables from uncompiled config classes and
|
|
30
|
+
instantiates compiled Driver objects, acting as a bridge between compiled
|
|
31
|
+
and uncompiled code.
|
|
32
|
+
|
|
33
|
+
Uses callable-based connection management to decouple from config implementation.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
__slots__ = (
|
|
37
|
+
"_acquire_connection",
|
|
38
|
+
"_connection",
|
|
39
|
+
"_driver",
|
|
40
|
+
"_driver_features",
|
|
41
|
+
"_prepare_driver",
|
|
42
|
+
"_release_connection",
|
|
43
|
+
"_statement_config",
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
def __init__(
|
|
47
|
+
self,
|
|
48
|
+
acquire_connection: "Callable[[], Any]",
|
|
49
|
+
release_connection: "Callable[[Any], Any]",
|
|
50
|
+
statement_config: "StatementConfig",
|
|
51
|
+
driver_features: "dict[str, Any]",
|
|
52
|
+
prepare_driver: "Callable[[SqliteDriver], SqliteDriver]",
|
|
53
|
+
) -> None:
|
|
54
|
+
self._acquire_connection = acquire_connection
|
|
55
|
+
self._release_connection = release_connection
|
|
56
|
+
self._statement_config = statement_config
|
|
57
|
+
self._driver_features = driver_features
|
|
58
|
+
self._prepare_driver = prepare_driver
|
|
59
|
+
self._connection: Any = None
|
|
60
|
+
self._driver: SqliteDriver | None = None
|
|
61
|
+
|
|
62
|
+
def __enter__(self) -> "SqliteDriver":
|
|
63
|
+
from sqlspec.adapters.sqlite.driver import SqliteDriver
|
|
64
|
+
|
|
65
|
+
self._connection = self._acquire_connection()
|
|
66
|
+
self._driver = SqliteDriver(
|
|
67
|
+
connection=self._connection, statement_config=self._statement_config, driver_features=self._driver_features
|
|
68
|
+
)
|
|
69
|
+
return self._prepare_driver(self._driver)
|
|
70
|
+
|
|
71
|
+
def __exit__(
|
|
72
|
+
self, exc_type: "type[BaseException] | None", exc_val: "BaseException | None", exc_tb: Any
|
|
73
|
+
) -> "bool | None":
|
|
74
|
+
if self._connection is not None:
|
|
75
|
+
self._release_connection(self._connection)
|
|
76
|
+
self._connection = None
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
__all__ = ("SqliteConnection", "SqliteSessionContext")
|