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,502 @@
|
|
|
1
|
+
"""ADBC session store for Litestar integration with multi-dialect support.
|
|
2
|
+
|
|
3
|
+
ADBC (Arrow Database Connectivity) supports multiple database backends including
|
|
4
|
+
PostgreSQL, SQLite, DuckDB, BigQuery, MySQL, and Snowflake. This store automatically
|
|
5
|
+
detects the dialect and adapts SQL syntax accordingly.
|
|
6
|
+
|
|
7
|
+
Supports:
|
|
8
|
+
- PostgreSQL: BYTEA data type, TIMESTAMPTZ, $1 parameters, ON CONFLICT
|
|
9
|
+
- SQLite: BLOB data type, DATETIME, ? parameters, INSERT OR REPLACE
|
|
10
|
+
- DuckDB: BLOB data type, TIMESTAMP, ? parameters, ON CONFLICT
|
|
11
|
+
- MySQL/MariaDB: BLOB data type, DATETIME, %s parameters, ON DUPLICATE KEY UPDATE
|
|
12
|
+
- BigQuery: BYTES data type, TIMESTAMP, @param parameters, MERGE
|
|
13
|
+
- Snowflake: BINARY data type, TIMESTAMP WITH TIME ZONE, ? parameters, MERGE
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from datetime import datetime, timedelta, timezone
|
|
17
|
+
from typing import TYPE_CHECKING
|
|
18
|
+
|
|
19
|
+
from sqlspec.extensions.litestar.store import BaseSQLSpecStore
|
|
20
|
+
from sqlspec.utils.sync_tools import async_
|
|
21
|
+
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from sqlspec.adapters.adbc.config import AdbcConfig
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
__all__ = ("ADBCStore",)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ADBCStore(BaseSQLSpecStore["AdbcConfig"]):
|
|
30
|
+
"""ADBC session store using synchronous ADBC driver.
|
|
31
|
+
|
|
32
|
+
Implements server-side session storage for Litestar using ADBC
|
|
33
|
+
(Arrow Database Connectivity) via the synchronous driver. Uses
|
|
34
|
+
Litestar's sync_to_thread utility to provide an async interface
|
|
35
|
+
compatible with the Store protocol.
|
|
36
|
+
|
|
37
|
+
ADBC supports multiple database backends (PostgreSQL, SQLite, DuckDB, etc.).
|
|
38
|
+
The SQL schema is optimized for PostgreSQL by default, but can work with
|
|
39
|
+
other backends that support TIMESTAMPTZ and BYTEA equivalents.
|
|
40
|
+
|
|
41
|
+
Provides efficient session management with:
|
|
42
|
+
- Sync operations wrapped for async compatibility
|
|
43
|
+
- INSERT ON CONFLICT (UPSERT) for PostgreSQL
|
|
44
|
+
- Automatic expiration handling with TIMESTAMPTZ
|
|
45
|
+
- Efficient cleanup of expired sessions
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
config: AdbcConfig instance.
|
|
49
|
+
|
|
50
|
+
Example:
|
|
51
|
+
from sqlspec.adapters.adbc import AdbcConfig
|
|
52
|
+
from sqlspec.adapters.adbc.litestar.store import ADBCStore
|
|
53
|
+
|
|
54
|
+
config = AdbcConfig(
|
|
55
|
+
connection_config={
|
|
56
|
+
"uri": "postgresql://user:pass@localhost/db"
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
store = ADBCStore(config)
|
|
60
|
+
await store.create_table()
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
__slots__ = ("_dialect",)
|
|
64
|
+
|
|
65
|
+
def __init__(self, config: "AdbcConfig") -> None:
|
|
66
|
+
"""Initialize ADBC session store.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
config: AdbcConfig instance.
|
|
70
|
+
|
|
71
|
+
Notes:
|
|
72
|
+
Table name is read from config.extension_config["litestar"]["session_table"].
|
|
73
|
+
"""
|
|
74
|
+
super().__init__(config)
|
|
75
|
+
self._dialect: str | None = None
|
|
76
|
+
|
|
77
|
+
def _get_dialect(self) -> str:
|
|
78
|
+
"""Get the database dialect, caching it after first access.
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
Dialect name (postgres, sqlite, duckdb, mysql, bigquery, snowflake).
|
|
82
|
+
"""
|
|
83
|
+
if self._dialect is not None:
|
|
84
|
+
return self._dialect
|
|
85
|
+
|
|
86
|
+
with self._config.provide_session() as driver:
|
|
87
|
+
dialect_value = driver.dialect
|
|
88
|
+
self._dialect = str(dialect_value) if dialect_value else "postgres"
|
|
89
|
+
|
|
90
|
+
assert self._dialect is not None
|
|
91
|
+
return self._dialect
|
|
92
|
+
|
|
93
|
+
def _get_create_table_sql(self) -> str:
|
|
94
|
+
"""Get dialect-specific CREATE TABLE SQL for ADBC.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
SQL statement to create the sessions table with proper indexes.
|
|
98
|
+
|
|
99
|
+
Notes:
|
|
100
|
+
Automatically adapts to the detected database dialect:
|
|
101
|
+
- PostgreSQL: BYTEA, TIMESTAMPTZ with partial index
|
|
102
|
+
- SQLite: BLOB, DATETIME
|
|
103
|
+
- DuckDB: BLOB, TIMESTAMP
|
|
104
|
+
- MySQL/MariaDB: BLOB, DATETIME
|
|
105
|
+
- BigQuery: BYTES, TIMESTAMP
|
|
106
|
+
- Snowflake: BINARY, TIMESTAMP WITH TIME ZONE
|
|
107
|
+
"""
|
|
108
|
+
dialect = self._get_dialect()
|
|
109
|
+
|
|
110
|
+
if dialect in {"postgres", "postgresql"}:
|
|
111
|
+
return f"""
|
|
112
|
+
CREATE TABLE IF NOT EXISTS {self._table_name} (
|
|
113
|
+
session_id TEXT PRIMARY KEY,
|
|
114
|
+
data BYTEA NOT NULL,
|
|
115
|
+
expires_at TIMESTAMPTZ
|
|
116
|
+
);
|
|
117
|
+
CREATE INDEX IF NOT EXISTS idx_{self._table_name}_expires_at
|
|
118
|
+
ON {self._table_name}(expires_at) WHERE expires_at IS NOT NULL;
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
if dialect == "sqlite":
|
|
122
|
+
return f"""
|
|
123
|
+
CREATE TABLE IF NOT EXISTS {self._table_name} (
|
|
124
|
+
session_id TEXT PRIMARY KEY,
|
|
125
|
+
data BLOB NOT NULL,
|
|
126
|
+
expires_at DATETIME
|
|
127
|
+
);
|
|
128
|
+
CREATE INDEX IF NOT EXISTS idx_{self._table_name}_expires_at
|
|
129
|
+
ON {self._table_name}(expires_at);
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
if dialect == "duckdb":
|
|
133
|
+
return f"""
|
|
134
|
+
CREATE TABLE IF NOT EXISTS {self._table_name} (
|
|
135
|
+
session_id VARCHAR PRIMARY KEY,
|
|
136
|
+
data BLOB NOT NULL,
|
|
137
|
+
expires_at TIMESTAMP
|
|
138
|
+
);
|
|
139
|
+
CREATE INDEX IF NOT EXISTS idx_{self._table_name}_expires_at
|
|
140
|
+
ON {self._table_name}(expires_at);
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
if dialect in {"mysql", "mariadb"}:
|
|
144
|
+
return f"""
|
|
145
|
+
CREATE TABLE IF NOT EXISTS {self._table_name} (
|
|
146
|
+
session_id VARCHAR(255) PRIMARY KEY,
|
|
147
|
+
data BLOB NOT NULL,
|
|
148
|
+
expires_at DATETIME
|
|
149
|
+
);
|
|
150
|
+
CREATE INDEX idx_{self._table_name}_expires_at
|
|
151
|
+
ON {self._table_name}(expires_at);
|
|
152
|
+
"""
|
|
153
|
+
|
|
154
|
+
if dialect == "bigquery":
|
|
155
|
+
return f"""
|
|
156
|
+
CREATE TABLE IF NOT EXISTS {self._table_name} (
|
|
157
|
+
session_id STRING NOT NULL,
|
|
158
|
+
data BYTES NOT NULL,
|
|
159
|
+
expires_at TIMESTAMP
|
|
160
|
+
);
|
|
161
|
+
CREATE INDEX idx_{self._table_name}_expires_at
|
|
162
|
+
ON {self._table_name}(expires_at);
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
if dialect == "snowflake":
|
|
166
|
+
return f"""
|
|
167
|
+
CREATE TABLE IF NOT EXISTS {self._table_name} (
|
|
168
|
+
session_id VARCHAR(255) PRIMARY KEY,
|
|
169
|
+
data BINARY NOT NULL,
|
|
170
|
+
expires_at TIMESTAMP WITH TIME ZONE
|
|
171
|
+
);
|
|
172
|
+
CREATE INDEX IF NOT EXISTS idx_{self._table_name}_expires_at
|
|
173
|
+
ON {self._table_name}(expires_at);
|
|
174
|
+
"""
|
|
175
|
+
|
|
176
|
+
return f"""
|
|
177
|
+
CREATE TABLE IF NOT EXISTS {self._table_name} (
|
|
178
|
+
session_id TEXT PRIMARY KEY,
|
|
179
|
+
data BYTEA NOT NULL,
|
|
180
|
+
expires_at TIMESTAMPTZ
|
|
181
|
+
);
|
|
182
|
+
CREATE INDEX IF NOT EXISTS idx_{self._table_name}_expires_at
|
|
183
|
+
ON {self._table_name}(expires_at);
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
def _get_param_placeholder(self, position: int) -> str:
|
|
187
|
+
"""Get the parameter placeholder syntax for the current dialect.
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
position: 1-based parameter position.
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
Parameter placeholder string (e.g., '$1', '?', '%s', '@param1').
|
|
194
|
+
"""
|
|
195
|
+
dialect = self._get_dialect()
|
|
196
|
+
|
|
197
|
+
if dialect in {"postgres", "postgresql"}:
|
|
198
|
+
return f"${position}"
|
|
199
|
+
if dialect in {"mysql", "mariadb"}:
|
|
200
|
+
return "%s"
|
|
201
|
+
if dialect == "bigquery":
|
|
202
|
+
return f"@param{position}"
|
|
203
|
+
return "?"
|
|
204
|
+
|
|
205
|
+
def _get_current_timestamp_expr(self) -> str:
|
|
206
|
+
"""Get the current timestamp expression for the current dialect.
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
SQL expression for getting current timestamp with timezone.
|
|
210
|
+
"""
|
|
211
|
+
dialect = self._get_dialect()
|
|
212
|
+
|
|
213
|
+
if dialect in {"postgres", "postgresql"}:
|
|
214
|
+
return "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'"
|
|
215
|
+
if dialect in {"mysql", "mariadb"}:
|
|
216
|
+
return "UTC_TIMESTAMP()"
|
|
217
|
+
if dialect == "bigquery":
|
|
218
|
+
return "CURRENT_TIMESTAMP()"
|
|
219
|
+
if dialect == "snowflake":
|
|
220
|
+
return "CONVERT_TIMEZONE('UTC', CURRENT_TIMESTAMP())"
|
|
221
|
+
return "CURRENT_TIMESTAMP"
|
|
222
|
+
|
|
223
|
+
def _create_table(self) -> None:
|
|
224
|
+
"""Synchronous implementation of create_table using ADBC driver."""
|
|
225
|
+
sql_text = self._get_create_table_sql()
|
|
226
|
+
with self._config.provide_session() as driver:
|
|
227
|
+
driver.execute_script(sql_text)
|
|
228
|
+
driver.commit()
|
|
229
|
+
self._log_table_created()
|
|
230
|
+
|
|
231
|
+
def _get_drop_table_sql(self) -> "list[str]":
|
|
232
|
+
"""Get dialect-specific DROP TABLE SQL statements for ADBC.
|
|
233
|
+
|
|
234
|
+
Returns:
|
|
235
|
+
List of SQL statements to drop indexes and table.
|
|
236
|
+
"""
|
|
237
|
+
dialect = self._get_dialect()
|
|
238
|
+
|
|
239
|
+
if dialect in {"mysql", "mariadb"}:
|
|
240
|
+
return [
|
|
241
|
+
f"DROP INDEX idx_{self._table_name}_expires_at ON {self._table_name}",
|
|
242
|
+
f"DROP TABLE IF EXISTS {self._table_name}",
|
|
243
|
+
]
|
|
244
|
+
|
|
245
|
+
return [f"DROP INDEX IF EXISTS idx_{self._table_name}_expires_at", f"DROP TABLE IF EXISTS {self._table_name}"]
|
|
246
|
+
|
|
247
|
+
async def create_table(self) -> None:
|
|
248
|
+
"""Create the session table if it doesn't exist."""
|
|
249
|
+
await async_(self._create_table)()
|
|
250
|
+
|
|
251
|
+
def _get(self, key: str, renew_for: "int | timedelta | None" = None) -> "bytes | None":
|
|
252
|
+
"""Synchronous implementation of get using ADBC driver."""
|
|
253
|
+
p1 = self._get_param_placeholder(1)
|
|
254
|
+
current_ts = self._get_current_timestamp_expr()
|
|
255
|
+
|
|
256
|
+
sql = f"""
|
|
257
|
+
SELECT data, expires_at FROM {self._table_name}
|
|
258
|
+
WHERE session_id = {p1}
|
|
259
|
+
AND (expires_at IS NULL OR expires_at > {current_ts})
|
|
260
|
+
"""
|
|
261
|
+
|
|
262
|
+
with self._config.provide_session() as driver:
|
|
263
|
+
result = driver.select_one_or_none(sql, key)
|
|
264
|
+
|
|
265
|
+
if result is None:
|
|
266
|
+
return None
|
|
267
|
+
|
|
268
|
+
data = result["data"]
|
|
269
|
+
expires_at = result["expires_at"]
|
|
270
|
+
|
|
271
|
+
if renew_for is not None and expires_at is not None:
|
|
272
|
+
new_expires_at = self._calculate_expires_at(renew_for)
|
|
273
|
+
p1_update = self._get_param_placeholder(1)
|
|
274
|
+
p2_update = self._get_param_placeholder(2)
|
|
275
|
+
update_sql = f"""
|
|
276
|
+
UPDATE {self._table_name}
|
|
277
|
+
SET expires_at = {p1_update}
|
|
278
|
+
WHERE session_id = {p2_update}
|
|
279
|
+
"""
|
|
280
|
+
driver.execute(update_sql, new_expires_at, key)
|
|
281
|
+
driver.commit()
|
|
282
|
+
|
|
283
|
+
return bytes(data)
|
|
284
|
+
|
|
285
|
+
async def get(self, key: str, renew_for: "int | timedelta | None" = None) -> "bytes | None":
|
|
286
|
+
"""Get a session value by key.
|
|
287
|
+
|
|
288
|
+
Args:
|
|
289
|
+
key: Session ID to retrieve.
|
|
290
|
+
renew_for: If given, renew the expiry time for this duration.
|
|
291
|
+
|
|
292
|
+
Returns:
|
|
293
|
+
Session data as bytes if found and not expired, None otherwise.
|
|
294
|
+
"""
|
|
295
|
+
return await async_(self._get)(key, renew_for)
|
|
296
|
+
|
|
297
|
+
def _set(self, key: str, value: "str | bytes", expires_in: "int | timedelta | None" = None) -> None:
|
|
298
|
+
"""Synchronous implementation of set using ADBC driver with dialect-specific UPSERT."""
|
|
299
|
+
data = self._value_to_bytes(value)
|
|
300
|
+
expires_at = self._calculate_expires_at(expires_in)
|
|
301
|
+
dialect = self._get_dialect()
|
|
302
|
+
|
|
303
|
+
p1 = self._get_param_placeholder(1)
|
|
304
|
+
p2 = self._get_param_placeholder(2)
|
|
305
|
+
p3 = self._get_param_placeholder(3)
|
|
306
|
+
|
|
307
|
+
if dialect in {"postgres", "postgresql", "sqlite", "duckdb"}:
|
|
308
|
+
if dialect == "sqlite":
|
|
309
|
+
sql = f"""
|
|
310
|
+
INSERT OR REPLACE INTO {self._table_name} (session_id, data, expires_at)
|
|
311
|
+
VALUES ({p1}, {p2}, {p3})
|
|
312
|
+
"""
|
|
313
|
+
else:
|
|
314
|
+
sql = f"""
|
|
315
|
+
INSERT INTO {self._table_name} (session_id, data, expires_at)
|
|
316
|
+
VALUES ({p1}, {p2}, {p3})
|
|
317
|
+
ON CONFLICT (session_id) DO UPDATE
|
|
318
|
+
SET data = EXCLUDED.data, expires_at = EXCLUDED.expires_at
|
|
319
|
+
"""
|
|
320
|
+
elif dialect in {"mysql", "mariadb"}:
|
|
321
|
+
sql = f"""
|
|
322
|
+
INSERT INTO {self._table_name} (session_id, data, expires_at)
|
|
323
|
+
VALUES ({p1}, {p2}, {p3})
|
|
324
|
+
ON DUPLICATE KEY UPDATE data = VALUES(data), expires_at = VALUES(expires_at)
|
|
325
|
+
"""
|
|
326
|
+
elif dialect in {"bigquery", "snowflake"}:
|
|
327
|
+
with self._config.provide_session() as driver:
|
|
328
|
+
check_sql = f"SELECT COUNT(*) as count FROM {self._table_name} WHERE session_id = {p1}"
|
|
329
|
+
result = driver.select_one(check_sql, key)
|
|
330
|
+
exists = result and result.get("count", 0) > 0
|
|
331
|
+
|
|
332
|
+
if exists:
|
|
333
|
+
sql = f"""
|
|
334
|
+
UPDATE {self._table_name}
|
|
335
|
+
SET data = {p1}, expires_at = {p2}
|
|
336
|
+
WHERE session_id = {p3}
|
|
337
|
+
"""
|
|
338
|
+
driver.execute(sql, data, expires_at, key)
|
|
339
|
+
else:
|
|
340
|
+
sql = f"""
|
|
341
|
+
INSERT INTO {self._table_name} (session_id, data, expires_at)
|
|
342
|
+
VALUES ({p1}, {p2}, {p3})
|
|
343
|
+
"""
|
|
344
|
+
driver.execute(sql, key, data, expires_at)
|
|
345
|
+
driver.commit()
|
|
346
|
+
return
|
|
347
|
+
else:
|
|
348
|
+
sql = f"""
|
|
349
|
+
INSERT INTO {self._table_name} (session_id, data, expires_at)
|
|
350
|
+
VALUES ({p1}, {p2}, {p3})
|
|
351
|
+
ON CONFLICT (session_id) DO UPDATE
|
|
352
|
+
SET data = EXCLUDED.data, expires_at = EXCLUDED.expires_at
|
|
353
|
+
"""
|
|
354
|
+
|
|
355
|
+
with self._config.provide_session() as driver:
|
|
356
|
+
driver.execute(sql, key, data, expires_at)
|
|
357
|
+
driver.commit()
|
|
358
|
+
|
|
359
|
+
async def set(self, key: str, value: "str | bytes", expires_in: "int | timedelta | None" = None) -> None:
|
|
360
|
+
"""Store a session value.
|
|
361
|
+
|
|
362
|
+
Args:
|
|
363
|
+
key: Session ID.
|
|
364
|
+
value: Session data.
|
|
365
|
+
expires_in: Time until expiration.
|
|
366
|
+
"""
|
|
367
|
+
await async_(self._set)(key, value, expires_in)
|
|
368
|
+
|
|
369
|
+
def _delete(self, key: str) -> None:
|
|
370
|
+
"""Synchronous implementation of delete using ADBC driver."""
|
|
371
|
+
p1 = self._get_param_placeholder(1)
|
|
372
|
+
sql = f"DELETE FROM {self._table_name} WHERE session_id = {p1}"
|
|
373
|
+
|
|
374
|
+
with self._config.provide_session() as driver:
|
|
375
|
+
driver.execute(sql, key)
|
|
376
|
+
driver.commit()
|
|
377
|
+
|
|
378
|
+
async def delete(self, key: str) -> None:
|
|
379
|
+
"""Delete a session by key.
|
|
380
|
+
|
|
381
|
+
Args:
|
|
382
|
+
key: Session ID to delete.
|
|
383
|
+
"""
|
|
384
|
+
await async_(self._delete)(key)
|
|
385
|
+
|
|
386
|
+
def _delete_all(self) -> None:
|
|
387
|
+
"""Synchronous implementation of delete_all using ADBC driver."""
|
|
388
|
+
|
|
389
|
+
sql = f"DELETE FROM {self._table_name}"
|
|
390
|
+
|
|
391
|
+
with self._config.provide_session() as driver:
|
|
392
|
+
driver.execute(sql)
|
|
393
|
+
driver.commit()
|
|
394
|
+
|
|
395
|
+
async def delete_all(self) -> None:
|
|
396
|
+
"""Delete all sessions from the store."""
|
|
397
|
+
await async_(self._delete_all)()
|
|
398
|
+
|
|
399
|
+
def _exists(self, key: str) -> bool:
|
|
400
|
+
"""Synchronous implementation of exists using ADBC driver."""
|
|
401
|
+
|
|
402
|
+
p1 = self._get_param_placeholder(1)
|
|
403
|
+
current_ts = self._get_current_timestamp_expr()
|
|
404
|
+
|
|
405
|
+
sql = f"""
|
|
406
|
+
SELECT 1 FROM {self._table_name}
|
|
407
|
+
WHERE session_id = {p1}
|
|
408
|
+
AND (expires_at IS NULL OR expires_at > {current_ts})
|
|
409
|
+
"""
|
|
410
|
+
|
|
411
|
+
with self._config.provide_session() as driver:
|
|
412
|
+
return bool(driver.select_one_or_none(sql, key) is not None)
|
|
413
|
+
|
|
414
|
+
async def exists(self, key: str) -> bool:
|
|
415
|
+
"""Check if a session key exists and is not expired.
|
|
416
|
+
|
|
417
|
+
Args:
|
|
418
|
+
key: Session ID to check.
|
|
419
|
+
|
|
420
|
+
Returns:
|
|
421
|
+
True if the session exists and is not expired.
|
|
422
|
+
"""
|
|
423
|
+
return await async_(self._exists)(key)
|
|
424
|
+
|
|
425
|
+
def _expires_in(self, key: str) -> "int | None":
|
|
426
|
+
"""Synchronous implementation of expires_in using ADBC driver."""
|
|
427
|
+
p1 = self._get_param_placeholder(1)
|
|
428
|
+
sql = f"""
|
|
429
|
+
SELECT expires_at FROM {self._table_name}
|
|
430
|
+
WHERE session_id = {p1}
|
|
431
|
+
"""
|
|
432
|
+
|
|
433
|
+
with self._config.provide_session() as driver:
|
|
434
|
+
result = driver.select_one(sql, key)
|
|
435
|
+
|
|
436
|
+
if result is None or result.get("expires_at") is None:
|
|
437
|
+
return None
|
|
438
|
+
|
|
439
|
+
expires_at = result["expires_at"]
|
|
440
|
+
|
|
441
|
+
if not isinstance(expires_at, datetime):
|
|
442
|
+
return None
|
|
443
|
+
|
|
444
|
+
if expires_at.tzinfo is None:
|
|
445
|
+
expires_at = expires_at.replace(tzinfo=timezone.utc)
|
|
446
|
+
|
|
447
|
+
now = datetime.now(timezone.utc)
|
|
448
|
+
|
|
449
|
+
if expires_at <= now:
|
|
450
|
+
return 0
|
|
451
|
+
|
|
452
|
+
delta = expires_at - now
|
|
453
|
+
return int(delta.total_seconds())
|
|
454
|
+
|
|
455
|
+
async def expires_in(self, key: str) -> "int | None":
|
|
456
|
+
"""Get the time in seconds until the session expires.
|
|
457
|
+
|
|
458
|
+
Args:
|
|
459
|
+
key: Session ID to check.
|
|
460
|
+
|
|
461
|
+
Returns:
|
|
462
|
+
Seconds until expiration, or None if no expiry or key doesn't exist.
|
|
463
|
+
"""
|
|
464
|
+
return await async_(self._expires_in)(key)
|
|
465
|
+
|
|
466
|
+
def _delete_expired(self) -> int:
|
|
467
|
+
"""Synchronous implementation of delete_expired using ADBC driver."""
|
|
468
|
+
current_ts = self._get_current_timestamp_expr()
|
|
469
|
+
dialect = self._get_dialect()
|
|
470
|
+
|
|
471
|
+
if dialect in {"postgres", "postgresql"}:
|
|
472
|
+
sql = f"DELETE FROM {self._table_name} WHERE expires_at <= {current_ts} RETURNING session_id"
|
|
473
|
+
else:
|
|
474
|
+
count_sql = f"SELECT COUNT(*) as count FROM {self._table_name} WHERE expires_at <= {current_ts}"
|
|
475
|
+
delete_sql = f"DELETE FROM {self._table_name} WHERE expires_at <= {current_ts}"
|
|
476
|
+
|
|
477
|
+
with self._config.provide_session() as driver:
|
|
478
|
+
result = driver.select_one(count_sql)
|
|
479
|
+
count = result.get("count", 0) if result else 0
|
|
480
|
+
|
|
481
|
+
if count > 0:
|
|
482
|
+
driver.execute(delete_sql)
|
|
483
|
+
driver.commit()
|
|
484
|
+
self._log_delete_expired(count)
|
|
485
|
+
|
|
486
|
+
return count
|
|
487
|
+
|
|
488
|
+
with self._config.provide_session() as driver:
|
|
489
|
+
exec_result = driver.execute(sql)
|
|
490
|
+
driver.commit()
|
|
491
|
+
count = exec_result.rows_affected
|
|
492
|
+
if count > 0:
|
|
493
|
+
self._log_delete_expired(count)
|
|
494
|
+
return count
|
|
495
|
+
|
|
496
|
+
async def delete_expired(self) -> int:
|
|
497
|
+
"""Delete all expired sessions.
|
|
498
|
+
|
|
499
|
+
Returns:
|
|
500
|
+
Number of sessions deleted.
|
|
501
|
+
"""
|
|
502
|
+
return await async_(self._delete_expired)()
|
|
Binary file
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""ADBC-specific type conversion with multi-dialect support.
|
|
2
|
+
|
|
3
|
+
Provides specialized type handling for ADBC adapters, including dialect-aware
|
|
4
|
+
type conversion for different database backends (PostgreSQL, SQLite, DuckDB,
|
|
5
|
+
MySQL, BigQuery, Snowflake).
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from sqlspec.core.type_converter import CachedOutputConverter
|
|
11
|
+
from sqlspec.utils.serializers import to_json
|
|
12
|
+
|
|
13
|
+
__all__ = ("ADBC_SPECIAL_CHARS", "ADBCOutputConverter", "get_adbc_type_converter")
|
|
14
|
+
|
|
15
|
+
ADBC_SPECIAL_CHARS: "frozenset[str]" = frozenset({"{", "[", "-", ":", "T", "."})
|
|
16
|
+
|
|
17
|
+
# Native type support by dialect
|
|
18
|
+
_NATIVE_SUPPORT: "dict[str, list[str]]" = {
|
|
19
|
+
"postgres": ["uuid", "json", "interval", "pg_array"],
|
|
20
|
+
"postgresql": ["uuid", "json", "interval", "pg_array"],
|
|
21
|
+
"duckdb": ["uuid", "json"],
|
|
22
|
+
"bigquery": ["json"],
|
|
23
|
+
"sqlite": [],
|
|
24
|
+
"mysql": ["json"],
|
|
25
|
+
"snowflake": ["json"],
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ADBCOutputConverter(CachedOutputConverter):
|
|
30
|
+
"""ADBC-specific output conversion with dialect awareness.
|
|
31
|
+
|
|
32
|
+
Extends CachedOutputConverter with ADBC multi-backend functionality
|
|
33
|
+
including dialect-specific type handling for different database systems.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
__slots__ = ("dialect",)
|
|
37
|
+
|
|
38
|
+
def __init__(self, dialect: str, cache_size: int = 5000) -> None:
|
|
39
|
+
"""Initialize with dialect-specific configuration.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
dialect: Target database dialect (postgres, sqlite, duckdb, etc.)
|
|
43
|
+
cache_size: Maximum number of string values to cache (default: 5000)
|
|
44
|
+
"""
|
|
45
|
+
super().__init__(special_chars=ADBC_SPECIAL_CHARS, cache_size=cache_size)
|
|
46
|
+
self.dialect = dialect.lower()
|
|
47
|
+
|
|
48
|
+
def _convert_detected(self, value: str, detected_type: str) -> Any:
|
|
49
|
+
"""Convert value with dialect-specific handling.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
value: String value to convert.
|
|
53
|
+
detected_type: Detected type name.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Converted value according to dialect requirements.
|
|
57
|
+
"""
|
|
58
|
+
try:
|
|
59
|
+
if self.dialect in {"postgres", "postgresql"}:
|
|
60
|
+
if detected_type in {"uuid", "interval"}:
|
|
61
|
+
return self.convert_value(value, detected_type)
|
|
62
|
+
elif self.dialect == "duckdb":
|
|
63
|
+
if detected_type == "uuid":
|
|
64
|
+
return self.convert_value(value, detected_type)
|
|
65
|
+
elif self.dialect == "sqlite":
|
|
66
|
+
if detected_type == "uuid":
|
|
67
|
+
return str(value)
|
|
68
|
+
elif self.dialect == "bigquery":
|
|
69
|
+
if detected_type == "uuid":
|
|
70
|
+
return self.convert_value(value, detected_type)
|
|
71
|
+
elif self.dialect in {"mysql", "snowflake"} and detected_type in {"uuid", "json"}:
|
|
72
|
+
return self.convert_value(value, detected_type)
|
|
73
|
+
return self.convert_value(value, detected_type)
|
|
74
|
+
except Exception:
|
|
75
|
+
return value
|
|
76
|
+
|
|
77
|
+
def convert_dict(self, value: "dict[str, Any]") -> Any:
|
|
78
|
+
"""Convert dictionary values with dialect-specific handling.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
value: Dictionary to convert.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
Converted value appropriate for the dialect.
|
|
85
|
+
"""
|
|
86
|
+
if self.dialect in {"postgres", "postgresql", "bigquery"}:
|
|
87
|
+
return to_json(value)
|
|
88
|
+
return value
|
|
89
|
+
|
|
90
|
+
def supports_native_type(self, type_name: str) -> bool:
|
|
91
|
+
"""Check if dialect supports native handling of a type.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
type_name: Type name to check (e.g., 'uuid', 'json')
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
True if dialect supports native handling, False otherwise.
|
|
98
|
+
"""
|
|
99
|
+
return type_name in _NATIVE_SUPPORT.get(self.dialect, [])
|
|
100
|
+
|
|
101
|
+
def get_dialect_specific_converter(self, value: Any, target_type: str) -> Any:
|
|
102
|
+
"""Apply dialect-specific conversion logic.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
value: Value to convert.
|
|
106
|
+
target_type: Target type for conversion.
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
Converted value according to dialect requirements.
|
|
110
|
+
"""
|
|
111
|
+
if self.dialect in {"postgres", "postgresql"}:
|
|
112
|
+
if target_type in {"uuid", "json", "interval"}:
|
|
113
|
+
return self.convert_value(value, target_type)
|
|
114
|
+
elif self.dialect == "duckdb":
|
|
115
|
+
if target_type in {"uuid", "json"}:
|
|
116
|
+
return self.convert_value(value, target_type)
|
|
117
|
+
elif self.dialect == "sqlite":
|
|
118
|
+
if target_type == "uuid":
|
|
119
|
+
return str(value)
|
|
120
|
+
if target_type == "json":
|
|
121
|
+
return self.convert_value(value, target_type)
|
|
122
|
+
elif self.dialect == "bigquery":
|
|
123
|
+
if target_type == "uuid":
|
|
124
|
+
return str(self.convert_value(value, target_type))
|
|
125
|
+
if target_type == "json":
|
|
126
|
+
return self.convert_value(value, target_type)
|
|
127
|
+
return self.convert_value(value, target_type)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def get_adbc_type_converter(dialect: str, cache_size: int = 5000) -> ADBCOutputConverter:
|
|
131
|
+
"""Factory function to create dialect-specific ADBC type converter.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
dialect: Database dialect name.
|
|
135
|
+
cache_size: Maximum number of string values to cache (default: 5000)
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
Configured ADBCOutputConverter instance.
|
|
139
|
+
"""
|
|
140
|
+
return ADBCOutputConverter(dialect, cache_size)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from sqlspec.adapters.aiosqlite._typing import AiosqliteConnection
|
|
2
|
+
from sqlspec.adapters.aiosqlite.config import AiosqliteConfig, AiosqliteConnectionParams, AiosqlitePoolParams
|
|
3
|
+
from sqlspec.adapters.aiosqlite.core import default_statement_config
|
|
4
|
+
from sqlspec.adapters.aiosqlite.driver import AiosqliteCursor, AiosqliteDriver, AiosqliteExceptionHandler
|
|
5
|
+
from sqlspec.adapters.aiosqlite.pool import (
|
|
6
|
+
AiosqliteConnectionPool,
|
|
7
|
+
AiosqliteConnectTimeoutError,
|
|
8
|
+
AiosqlitePoolClosedError,
|
|
9
|
+
AiosqlitePoolConnection,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = (
|
|
13
|
+
"AiosqliteConfig",
|
|
14
|
+
"AiosqliteConnectTimeoutError",
|
|
15
|
+
"AiosqliteConnection",
|
|
16
|
+
"AiosqliteConnectionParams",
|
|
17
|
+
"AiosqliteConnectionPool",
|
|
18
|
+
"AiosqliteCursor",
|
|
19
|
+
"AiosqliteDriver",
|
|
20
|
+
"AiosqliteExceptionHandler",
|
|
21
|
+
"AiosqlitePoolClosedError",
|
|
22
|
+
"AiosqlitePoolConnection",
|
|
23
|
+
"AiosqlitePoolParams",
|
|
24
|
+
"default_statement_config",
|
|
25
|
+
)
|