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,246 @@
|
|
|
1
|
+
"""Create ADK session, events, and memory tables migration using store DDL definitions."""
|
|
2
|
+
|
|
3
|
+
import inspect
|
|
4
|
+
import logging
|
|
5
|
+
from typing import TYPE_CHECKING, Any, NoReturn, cast
|
|
6
|
+
|
|
7
|
+
from sqlspec.exceptions import SQLSpecError
|
|
8
|
+
from sqlspec.utils.logging import get_logger, log_with_context
|
|
9
|
+
from sqlspec.utils.module_loader import import_string
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from sqlspec.extensions.adk.memory.store import BaseAsyncADKMemoryStore, BaseSyncADKMemoryStore
|
|
13
|
+
from sqlspec.extensions.adk.store import BaseAsyncADKStore
|
|
14
|
+
from sqlspec.migrations.context import MigrationContext
|
|
15
|
+
|
|
16
|
+
logger = get_logger("sqlspec.migrations.adk.tables")
|
|
17
|
+
|
|
18
|
+
__all__ = ("down", "up")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _get_store_class(context: "MigrationContext | None") -> "type[BaseAsyncADKStore]":
|
|
22
|
+
"""Get the appropriate store class based on the config's module path.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
context: Migration context containing config.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
Store class matching the config's adapter.
|
|
29
|
+
|
|
30
|
+
Notes:
|
|
31
|
+
Dynamically imports the store class from the config's module path.
|
|
32
|
+
For example, AsyncpgConfig at 'sqlspec.adapters.asyncpg.config'
|
|
33
|
+
maps to AsyncpgADKStore at 'sqlspec.adapters.asyncpg.adk.store.AsyncpgADKStore'.
|
|
34
|
+
"""
|
|
35
|
+
if not context or not context.config:
|
|
36
|
+
_raise_missing_config()
|
|
37
|
+
|
|
38
|
+
config_class = type(context.config)
|
|
39
|
+
config_module = config_class.__module__
|
|
40
|
+
config_name = config_class.__name__
|
|
41
|
+
|
|
42
|
+
if not config_module.startswith("sqlspec.adapters."):
|
|
43
|
+
_raise_unsupported_config(f"{config_module}.{config_name}")
|
|
44
|
+
|
|
45
|
+
adapter_name = config_module.split(".")[2]
|
|
46
|
+
store_class_name = config_name.replace("Config", "ADKStore")
|
|
47
|
+
|
|
48
|
+
store_path = f"sqlspec.adapters.{adapter_name}.adk.store.{store_class_name}"
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
store_class: type[BaseAsyncADKStore] = import_string(store_path)
|
|
52
|
+
except ImportError as e:
|
|
53
|
+
_raise_store_import_failed(store_path, e)
|
|
54
|
+
|
|
55
|
+
return store_class
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _get_memory_store_class(
|
|
59
|
+
context: "MigrationContext | None",
|
|
60
|
+
) -> "type[BaseAsyncADKMemoryStore | BaseSyncADKMemoryStore] | None":
|
|
61
|
+
"""Get the appropriate memory store class based on the config's module path.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
context: Migration context containing config.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
Memory store class matching the config's adapter, or None if not available.
|
|
68
|
+
|
|
69
|
+
Notes:
|
|
70
|
+
Dynamically imports the memory store class from the config's module path.
|
|
71
|
+
For example, AsyncpgConfig at 'sqlspec.adapters.asyncpg.config'
|
|
72
|
+
maps to AsyncpgADKMemoryStore at 'sqlspec.adapters.asyncpg.adk.store.AsyncpgADKMemoryStore'.
|
|
73
|
+
"""
|
|
74
|
+
if not context or not context.config:
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
config_class = type(context.config)
|
|
78
|
+
config_module = config_class.__module__
|
|
79
|
+
config_name = config_class.__name__
|
|
80
|
+
|
|
81
|
+
if not config_module.startswith("sqlspec.adapters."):
|
|
82
|
+
return None
|
|
83
|
+
|
|
84
|
+
adapter_name = config_module.split(".")[2]
|
|
85
|
+
store_class_name = config_name.replace("Config", "ADKMemoryStore")
|
|
86
|
+
|
|
87
|
+
store_path = f"sqlspec.adapters.{adapter_name}.adk.store.{store_class_name}"
|
|
88
|
+
|
|
89
|
+
try:
|
|
90
|
+
store_class: type[BaseAsyncADKMemoryStore | BaseSyncADKMemoryStore] = import_string(store_path)
|
|
91
|
+
except ImportError:
|
|
92
|
+
log_with_context(logger, logging.DEBUG, "adk.migration.memory_store.missing", store_path=store_path)
|
|
93
|
+
return None
|
|
94
|
+
else:
|
|
95
|
+
return store_class
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _is_memory_enabled(context: "MigrationContext | None") -> bool:
|
|
99
|
+
"""Check if memory migration is enabled in the config.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
context: Migration context containing config.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
True if memory migration should be included, False otherwise.
|
|
106
|
+
|
|
107
|
+
Notes:
|
|
108
|
+
Checks config.extension_config["adk"]["include_memory_migration"].
|
|
109
|
+
Defaults to True if not specified and enable_memory is True.
|
|
110
|
+
"""
|
|
111
|
+
if not context or not context.config:
|
|
112
|
+
return False
|
|
113
|
+
|
|
114
|
+
config = context.config
|
|
115
|
+
extension_config = cast("dict[str, dict[str, Any]]", config.extension_config)
|
|
116
|
+
adk_config: dict[str, Any] = extension_config.get("adk", {})
|
|
117
|
+
|
|
118
|
+
include_memory = adk_config.get("include_memory_migration")
|
|
119
|
+
if include_memory is not None:
|
|
120
|
+
return bool(include_memory)
|
|
121
|
+
|
|
122
|
+
return bool(adk_config.get("enable_memory", True))
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _raise_missing_config() -> NoReturn:
|
|
126
|
+
"""Raise error when migration context has no config.
|
|
127
|
+
|
|
128
|
+
Raises:
|
|
129
|
+
SQLSpecError: Always raised.
|
|
130
|
+
"""
|
|
131
|
+
msg = "Migration context must have a config to determine store class"
|
|
132
|
+
raise SQLSpecError(msg)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _raise_unsupported_config(config_type: str) -> NoReturn:
|
|
136
|
+
"""Raise error for unsupported config type.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
config_type: The unsupported config type name.
|
|
140
|
+
|
|
141
|
+
Raises:
|
|
142
|
+
SQLSpecError: Always raised with config type info.
|
|
143
|
+
"""
|
|
144
|
+
msg = f"Unsupported config type for ADK migration: {config_type}"
|
|
145
|
+
raise SQLSpecError(msg)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def _raise_store_import_failed(store_path: str, error: ImportError) -> NoReturn:
|
|
149
|
+
"""Raise error when store class import fails.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
store_path: The import path that failed.
|
|
153
|
+
error: The original import error.
|
|
154
|
+
|
|
155
|
+
Raises:
|
|
156
|
+
SQLSpecError: Always raised with import details.
|
|
157
|
+
"""
|
|
158
|
+
msg = f"Failed to import ADK store class from {store_path}: {error}"
|
|
159
|
+
raise SQLSpecError(msg) from error
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
async def up(context: "MigrationContext | None" = None) -> "list[str]":
|
|
163
|
+
"""Create the ADK session, events, and memory tables using store DDL definitions.
|
|
164
|
+
|
|
165
|
+
This migration delegates to the appropriate store class to generate
|
|
166
|
+
dialect-specific DDL. The store classes contain the single source of
|
|
167
|
+
truth for table schemas.
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
context: Migration context containing config.
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
List of SQL statements to execute for upgrade.
|
|
174
|
+
|
|
175
|
+
Notes:
|
|
176
|
+
Configuration is read from context.config.extension_config["adk"].
|
|
177
|
+
Supports custom table names and optional owner_id_column for linking
|
|
178
|
+
sessions to owner tables (users, tenants, teams, etc.).
|
|
179
|
+
Memory table is included if enable_memory or include_memory_migration is True.
|
|
180
|
+
"""
|
|
181
|
+
if context is None or context.config is None:
|
|
182
|
+
_raise_missing_config()
|
|
183
|
+
|
|
184
|
+
store_class = _get_store_class(context)
|
|
185
|
+
store_instance = store_class(config=context.config)
|
|
186
|
+
|
|
187
|
+
statements = [
|
|
188
|
+
await store_instance._get_create_sessions_table_sql(), # pyright: ignore[reportPrivateUsage]
|
|
189
|
+
await store_instance._get_create_events_table_sql(), # pyright: ignore[reportPrivateUsage]
|
|
190
|
+
]
|
|
191
|
+
|
|
192
|
+
if _is_memory_enabled(context):
|
|
193
|
+
memory_store_class = _get_memory_store_class(context)
|
|
194
|
+
if memory_store_class is not None:
|
|
195
|
+
memory_store = memory_store_class(config=context.config)
|
|
196
|
+
memory_sql = memory_store._get_create_memory_table_sql() # pyright: ignore[reportPrivateUsage]
|
|
197
|
+
if inspect.isawaitable(memory_sql):
|
|
198
|
+
memory_sql = await memory_sql
|
|
199
|
+
if isinstance(memory_sql, list):
|
|
200
|
+
statements.extend(memory_sql)
|
|
201
|
+
else:
|
|
202
|
+
statements.append(memory_sql)
|
|
203
|
+
log_with_context(
|
|
204
|
+
logger, logging.DEBUG, "adk.migration.memory.include", table_name=memory_store.memory_table
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
return statements
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
async def down(context: "MigrationContext | None" = None) -> "list[str]":
|
|
211
|
+
"""Drop the ADK session, events, and memory tables using store DDL definitions.
|
|
212
|
+
|
|
213
|
+
This migration delegates to the appropriate store class to generate
|
|
214
|
+
dialect-specific DROP statements. The store classes contain the single
|
|
215
|
+
source of truth for table schemas.
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
context: Migration context containing config.
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
List of SQL statements to execute for downgrade.
|
|
222
|
+
|
|
223
|
+
Notes:
|
|
224
|
+
Configuration is read from context.config.extension_config["adk"].
|
|
225
|
+
Memory table is included if enable_memory or include_memory_migration is True.
|
|
226
|
+
"""
|
|
227
|
+
if context is None or context.config is None:
|
|
228
|
+
_raise_missing_config()
|
|
229
|
+
|
|
230
|
+
statements: list[str] = []
|
|
231
|
+
|
|
232
|
+
if _is_memory_enabled(context):
|
|
233
|
+
memory_store_class = _get_memory_store_class(context)
|
|
234
|
+
if memory_store_class is not None:
|
|
235
|
+
memory_store = memory_store_class(config=context.config)
|
|
236
|
+
memory_drop_stmts = memory_store._get_drop_memory_table_sql() # pyright: ignore[reportPrivateUsage]
|
|
237
|
+
statements.extend(memory_drop_stmts)
|
|
238
|
+
log_with_context(
|
|
239
|
+
logger, logging.DEBUG, "adk.migration.memory.drop.include", table_name=memory_store.memory_table
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
store_class = _get_store_class(context)
|
|
243
|
+
store_instance = store_class(config=context.config)
|
|
244
|
+
statements.extend(store_instance._get_drop_tables_sql()) # pyright: ignore[reportPrivateUsage]
|
|
245
|
+
|
|
246
|
+
return statements
|
|
File without changes
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"""SQLSpec-backed session service for Google ADK."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import uuid
|
|
5
|
+
from datetime import datetime, timezone
|
|
6
|
+
from typing import TYPE_CHECKING, Any
|
|
7
|
+
|
|
8
|
+
from google.adk.sessions.base_session_service import BaseSessionService, GetSessionConfig, ListSessionsResponse
|
|
9
|
+
|
|
10
|
+
from sqlspec.extensions.adk.converters import event_to_record, record_to_session
|
|
11
|
+
from sqlspec.utils.logging import get_logger, log_with_context
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from google.adk.events.event import Event
|
|
15
|
+
from google.adk.sessions import Session
|
|
16
|
+
|
|
17
|
+
from sqlspec.extensions.adk.store import BaseAsyncADKStore
|
|
18
|
+
|
|
19
|
+
logger = get_logger("sqlspec.extensions.adk.service")
|
|
20
|
+
|
|
21
|
+
__all__ = ("SQLSpecSessionService",)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class SQLSpecSessionService(BaseSessionService):
|
|
25
|
+
"""SQLSpec-backed implementation of BaseSessionService.
|
|
26
|
+
|
|
27
|
+
Provides session and event storage using SQLSpec database adapters.
|
|
28
|
+
Delegates all database operations to a store implementation.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
store: Database store implementation (e.g., AsyncpgADKStore).
|
|
32
|
+
|
|
33
|
+
Example:
|
|
34
|
+
from sqlspec.adapters.asyncpg import AsyncpgConfig
|
|
35
|
+
from sqlspec.adapters.asyncpg.adk.store import AsyncpgADKStore
|
|
36
|
+
from sqlspec.extensions.adk.service import SQLSpecSessionService
|
|
37
|
+
|
|
38
|
+
config = AsyncpgConfig(connection_config={"dsn": "postgresql://..."})
|
|
39
|
+
store = AsyncpgADKStore(config)
|
|
40
|
+
await store.ensure_tables()
|
|
41
|
+
|
|
42
|
+
service = SQLSpecSessionService(store)
|
|
43
|
+
session = await service.create_session(
|
|
44
|
+
app_name="my_app",
|
|
45
|
+
user_id="user123",
|
|
46
|
+
state={"key": "value"}
|
|
47
|
+
)
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
def __init__(self, store: "BaseAsyncADKStore") -> None:
|
|
51
|
+
"""Initialize the session service.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
store: Database store implementation.
|
|
55
|
+
"""
|
|
56
|
+
self._store = store
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def store(self) -> "BaseAsyncADKStore":
|
|
60
|
+
"""Return the database store."""
|
|
61
|
+
return self._store
|
|
62
|
+
|
|
63
|
+
async def create_session(
|
|
64
|
+
self, *, app_name: str, user_id: str, state: "dict[str, Any] | None" = None, session_id: "str | None" = None
|
|
65
|
+
) -> "Session":
|
|
66
|
+
"""Create a new session.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
app_name: Name of the application.
|
|
70
|
+
user_id: ID of the user.
|
|
71
|
+
state: Initial state of the session.
|
|
72
|
+
session_id: Client-provided session ID. If None, generates a UUID.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
The newly created session.
|
|
76
|
+
"""
|
|
77
|
+
if session_id is None:
|
|
78
|
+
session_id = str(uuid.uuid4())
|
|
79
|
+
|
|
80
|
+
if state is None:
|
|
81
|
+
state = {}
|
|
82
|
+
|
|
83
|
+
record = await self._store.create_session(
|
|
84
|
+
session_id=session_id, app_name=app_name, user_id=user_id, state=state
|
|
85
|
+
)
|
|
86
|
+
log_with_context(
|
|
87
|
+
logger, logging.DEBUG, "adk.session.create", app_name=app_name, session_id=session_id, has_state=bool(state)
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return record_to_session(record, events=[])
|
|
91
|
+
|
|
92
|
+
async def get_session(
|
|
93
|
+
self, *, app_name: str, user_id: str, session_id: str, config: "GetSessionConfig | None" = None
|
|
94
|
+
) -> "Session | None":
|
|
95
|
+
"""Get a session by ID.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
app_name: Name of the application.
|
|
99
|
+
user_id: ID of the user.
|
|
100
|
+
session_id: Session identifier.
|
|
101
|
+
config: Configuration for retrieving events.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Session object if found, None otherwise.
|
|
105
|
+
"""
|
|
106
|
+
record = await self._store.get_session(session_id)
|
|
107
|
+
|
|
108
|
+
if not record:
|
|
109
|
+
log_with_context(
|
|
110
|
+
logger, logging.DEBUG, "adk.session.get", app_name=app_name, session_id=session_id, found=False
|
|
111
|
+
)
|
|
112
|
+
return None
|
|
113
|
+
|
|
114
|
+
if record["app_name"] != app_name or record["user_id"] != user_id:
|
|
115
|
+
log_with_context(
|
|
116
|
+
logger, logging.DEBUG, "adk.session.get", app_name=app_name, session_id=session_id, found=False
|
|
117
|
+
)
|
|
118
|
+
return None
|
|
119
|
+
|
|
120
|
+
after_timestamp = None
|
|
121
|
+
limit = None
|
|
122
|
+
|
|
123
|
+
if config:
|
|
124
|
+
if config.after_timestamp:
|
|
125
|
+
after_timestamp = datetime.fromtimestamp(config.after_timestamp, tz=timezone.utc)
|
|
126
|
+
limit = config.num_recent_events
|
|
127
|
+
|
|
128
|
+
events = await self._store.get_events(session_id=session_id, after_timestamp=after_timestamp, limit=limit)
|
|
129
|
+
log_with_context(
|
|
130
|
+
logger,
|
|
131
|
+
logging.DEBUG,
|
|
132
|
+
"adk.session.get",
|
|
133
|
+
app_name=app_name,
|
|
134
|
+
session_id=session_id,
|
|
135
|
+
found=True,
|
|
136
|
+
event_count=len(events),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
return record_to_session(record, events)
|
|
140
|
+
|
|
141
|
+
async def list_sessions(self, *, app_name: str, user_id: str | None = None) -> "ListSessionsResponse":
|
|
142
|
+
"""List all sessions for an app, optionally filtered by user.
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
app_name: Name of the application.
|
|
146
|
+
user_id: ID of the user. If None, all sessions for the app are listed.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
Response containing list of sessions (without events).
|
|
150
|
+
"""
|
|
151
|
+
records = await self._store.list_sessions(app_name=app_name, user_id=user_id)
|
|
152
|
+
|
|
153
|
+
sessions = [record_to_session(record, events=[]) for record in records]
|
|
154
|
+
log_with_context(
|
|
155
|
+
logger,
|
|
156
|
+
logging.DEBUG,
|
|
157
|
+
"adk.session.list",
|
|
158
|
+
app_name=app_name,
|
|
159
|
+
has_user_id=user_id is not None,
|
|
160
|
+
count=len(sessions),
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
return ListSessionsResponse(sessions=sessions)
|
|
164
|
+
|
|
165
|
+
async def delete_session(self, *, app_name: str, user_id: str, session_id: str) -> None:
|
|
166
|
+
"""Delete a session and all its events.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
app_name: Name of the application.
|
|
170
|
+
user_id: ID of the user.
|
|
171
|
+
session_id: Session identifier.
|
|
172
|
+
"""
|
|
173
|
+
record = await self._store.get_session(session_id)
|
|
174
|
+
|
|
175
|
+
if not record:
|
|
176
|
+
log_with_context(
|
|
177
|
+
logger, logging.DEBUG, "adk.session.delete", app_name=app_name, session_id=session_id, deleted=False
|
|
178
|
+
)
|
|
179
|
+
return
|
|
180
|
+
|
|
181
|
+
if record["app_name"] != app_name or record["user_id"] != user_id:
|
|
182
|
+
log_with_context(
|
|
183
|
+
logger, logging.DEBUG, "adk.session.delete", app_name=app_name, session_id=session_id, deleted=False
|
|
184
|
+
)
|
|
185
|
+
return
|
|
186
|
+
|
|
187
|
+
await self._store.delete_session(session_id)
|
|
188
|
+
log_with_context(
|
|
189
|
+
logger, logging.DEBUG, "adk.session.delete", app_name=app_name, session_id=session_id, deleted=True
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
async def append_event(self, session: "Session", event: "Event") -> "Event":
|
|
193
|
+
"""Append an event to a session.
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
session: Session to append to.
|
|
197
|
+
event: Event to append.
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
The appended event.
|
|
201
|
+
"""
|
|
202
|
+
event = await super().append_event(session, event) # pyright: ignore
|
|
203
|
+
|
|
204
|
+
if event.partial:
|
|
205
|
+
return event
|
|
206
|
+
|
|
207
|
+
event_record = event_to_record(
|
|
208
|
+
event=event, session_id=session.id, app_name=session.app_name, user_id=session.user_id
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
await self._store.append_event(event_record)
|
|
212
|
+
log_with_context(
|
|
213
|
+
logger,
|
|
214
|
+
logging.DEBUG,
|
|
215
|
+
"adk.session.event.append",
|
|
216
|
+
app_name=session.app_name,
|
|
217
|
+
session_id=session.id,
|
|
218
|
+
partial=bool(event.partial),
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
session_record = await self._store.get_session(session.id)
|
|
222
|
+
if session_record:
|
|
223
|
+
session.last_update_time = session_record["update_time"].timestamp()
|
|
224
|
+
|
|
225
|
+
return event
|