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,420 @@
|
|
|
1
|
+
"""Oracle event queue stores with auto-detected JSON storage.
|
|
2
|
+
|
|
3
|
+
JSON storage is automatically detected based on Oracle version:
|
|
4
|
+
- json: Native JSON type (Oracle 21c+ with COMPATIBLE >= 20)
|
|
5
|
+
- blob_json: BLOB with IS JSON constraint (Oracle 12c+, recommended)
|
|
6
|
+
- blob: Plain BLOB without constraint (Oracle 11g and earlier)
|
|
7
|
+
|
|
8
|
+
Note: CLOB should be avoided for JSON storage in Oracle. Oracle recommends
|
|
9
|
+
BLOB over CLOB for JSON data as BLOB performs significantly better.
|
|
10
|
+
|
|
11
|
+
Configuration (optional override):
|
|
12
|
+
extension_config={
|
|
13
|
+
"events": {
|
|
14
|
+
"json_storage": "blob_json", # Override auto-detection
|
|
15
|
+
"in_memory": False # Enable INMEMORY PRIORITY HIGH
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import logging
|
|
21
|
+
from enum import Enum
|
|
22
|
+
from typing import TYPE_CHECKING, Any
|
|
23
|
+
|
|
24
|
+
from sqlspec.adapters.oracledb.data_dictionary import (
|
|
25
|
+
OracledbAsyncDataDictionary,
|
|
26
|
+
OracledbSyncDataDictionary,
|
|
27
|
+
OracleVersionInfo,
|
|
28
|
+
)
|
|
29
|
+
from sqlspec.extensions.events import BaseEventQueueStore
|
|
30
|
+
from sqlspec.utils.logging import get_logger, log_with_context
|
|
31
|
+
|
|
32
|
+
if TYPE_CHECKING:
|
|
33
|
+
from sqlspec.adapters.oracledb.config import OracleAsyncConfig, OracleSyncConfig
|
|
34
|
+
|
|
35
|
+
__all__ = ("OracleAsyncEventQueueStore", "OracleSyncEventQueueStore")
|
|
36
|
+
|
|
37
|
+
logger = get_logger("sqlspec.adapters.oracledb.events.store")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class JSONStorageType(Enum):
|
|
41
|
+
"""Oracle JSON storage types based on database version."""
|
|
42
|
+
|
|
43
|
+
JSON_NATIVE = "json"
|
|
44
|
+
BLOB_JSON = "blob_json"
|
|
45
|
+
BLOB_PLAIN = "blob"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _storage_type_from_version(version_info: "OracleVersionInfo | None") -> JSONStorageType:
|
|
49
|
+
"""Determine JSON storage type based on Oracle version metadata."""
|
|
50
|
+
if version_info and version_info.supports_native_json():
|
|
51
|
+
log_with_context(
|
|
52
|
+
logger,
|
|
53
|
+
logging.DEBUG,
|
|
54
|
+
"events.queue.storage.detected",
|
|
55
|
+
storage_type=JSONStorageType.JSON_NATIVE.value,
|
|
56
|
+
version=str(version_info),
|
|
57
|
+
)
|
|
58
|
+
return JSONStorageType.JSON_NATIVE
|
|
59
|
+
|
|
60
|
+
if version_info and version_info.supports_json_blob():
|
|
61
|
+
log_with_context(
|
|
62
|
+
logger,
|
|
63
|
+
logging.DEBUG,
|
|
64
|
+
"events.queue.storage.detected",
|
|
65
|
+
storage_type=JSONStorageType.BLOB_JSON.value,
|
|
66
|
+
version=str(version_info),
|
|
67
|
+
)
|
|
68
|
+
return JSONStorageType.BLOB_JSON
|
|
69
|
+
|
|
70
|
+
log_with_context(
|
|
71
|
+
logger,
|
|
72
|
+
logging.DEBUG,
|
|
73
|
+
"events.queue.storage.detected",
|
|
74
|
+
storage_type=JSONStorageType.BLOB_PLAIN.value,
|
|
75
|
+
version=str(version_info),
|
|
76
|
+
)
|
|
77
|
+
return JSONStorageType.BLOB_PLAIN
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _init_oracle_settings(extension_settings: "dict[str, Any]") -> "tuple[bool, JSONStorageType | None]":
|
|
81
|
+
"""Initialize Oracle-specific settings from extension config.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
extension_settings: The events extension settings dict.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Tuple of (in_memory, json_storage) settings.
|
|
88
|
+
"""
|
|
89
|
+
in_memory = bool(extension_settings.get("in_memory", False))
|
|
90
|
+
|
|
91
|
+
json_storage_override = extension_settings.get("json_storage")
|
|
92
|
+
if json_storage_override == "json":
|
|
93
|
+
json_storage: JSONStorageType | None = JSONStorageType.JSON_NATIVE
|
|
94
|
+
elif json_storage_override == "blob_json":
|
|
95
|
+
json_storage = JSONStorageType.BLOB_JSON
|
|
96
|
+
elif json_storage_override == "blob":
|
|
97
|
+
json_storage = JSONStorageType.BLOB_PLAIN
|
|
98
|
+
else:
|
|
99
|
+
json_storage = None
|
|
100
|
+
|
|
101
|
+
return in_memory, json_storage
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def _build_oracle_create_table_sql(
|
|
105
|
+
table_name: str, storage_type: "JSONStorageType", in_memory: bool, index_name: str
|
|
106
|
+
) -> str:
|
|
107
|
+
"""Build Oracle CREATE TABLE and INDEX SQL as a single PL/SQL script.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
table_name: The queue table name.
|
|
111
|
+
storage_type: JSON storage type (native, blob_json, or blob).
|
|
112
|
+
in_memory: Whether to add INMEMORY clause.
|
|
113
|
+
index_name: The index name to create.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
PL/SQL script for creating table and index.
|
|
117
|
+
"""
|
|
118
|
+
inmemory_clause = "INMEMORY PRIORITY HIGH" if in_memory else ""
|
|
119
|
+
|
|
120
|
+
if storage_type == JSONStorageType.JSON_NATIVE:
|
|
121
|
+
payload_col = "payload_json JSON NOT NULL"
|
|
122
|
+
metadata_col = "metadata_json JSON"
|
|
123
|
+
elif storage_type == JSONStorageType.BLOB_JSON:
|
|
124
|
+
payload_col = "payload_json BLOB CHECK (payload_json IS JSON) NOT NULL"
|
|
125
|
+
metadata_col = "metadata_json BLOB CHECK (metadata_json IS JSON)"
|
|
126
|
+
else:
|
|
127
|
+
payload_col = "payload_json BLOB NOT NULL"
|
|
128
|
+
metadata_col = "metadata_json BLOB"
|
|
129
|
+
|
|
130
|
+
return f"""
|
|
131
|
+
BEGIN
|
|
132
|
+
EXECUTE IMMEDIATE 'CREATE TABLE {table_name} (
|
|
133
|
+
event_id VARCHAR2(64) PRIMARY KEY,
|
|
134
|
+
channel VARCHAR2(128) NOT NULL,
|
|
135
|
+
{payload_col},
|
|
136
|
+
{metadata_col},
|
|
137
|
+
status VARCHAR2(32) DEFAULT ''pending'' NOT NULL,
|
|
138
|
+
available_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
|
|
139
|
+
lease_expires_at TIMESTAMP,
|
|
140
|
+
attempts NUMBER(10) DEFAULT 0 NOT NULL,
|
|
141
|
+
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
|
|
142
|
+
acknowledged_at TIMESTAMP
|
|
143
|
+
) {inmemory_clause}';
|
|
144
|
+
EXCEPTION
|
|
145
|
+
WHEN OTHERS THEN
|
|
146
|
+
IF SQLCODE != -955 THEN
|
|
147
|
+
RAISE;
|
|
148
|
+
END IF;
|
|
149
|
+
END;
|
|
150
|
+
|
|
151
|
+
BEGIN
|
|
152
|
+
EXECUTE IMMEDIATE 'CREATE INDEX {index_name}
|
|
153
|
+
ON {table_name}(channel, status, available_at)';
|
|
154
|
+
EXCEPTION
|
|
155
|
+
WHEN OTHERS THEN
|
|
156
|
+
IF SQLCODE != -955 THEN
|
|
157
|
+
RAISE;
|
|
158
|
+
END IF;
|
|
159
|
+
END;
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def _build_oracle_drop_sql(table_name: str, index_name: str) -> "list[str]":
|
|
164
|
+
"""Build Oracle DROP TABLE SQL with PL/SQL error handling.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
table_name: The queue table name.
|
|
168
|
+
index_name: The index name to drop.
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
List of PL/SQL scripts for dropping index and table.
|
|
172
|
+
"""
|
|
173
|
+
return [
|
|
174
|
+
f"""
|
|
175
|
+
BEGIN
|
|
176
|
+
EXECUTE IMMEDIATE 'DROP INDEX {index_name}';
|
|
177
|
+
EXCEPTION
|
|
178
|
+
WHEN OTHERS THEN
|
|
179
|
+
IF SQLCODE != -1418 THEN
|
|
180
|
+
RAISE;
|
|
181
|
+
END IF;
|
|
182
|
+
END;
|
|
183
|
+
""",
|
|
184
|
+
f"""
|
|
185
|
+
BEGIN
|
|
186
|
+
EXECUTE IMMEDIATE 'DROP TABLE {table_name}';
|
|
187
|
+
EXCEPTION
|
|
188
|
+
WHEN OTHERS THEN
|
|
189
|
+
IF SQLCODE != -942 THEN
|
|
190
|
+
RAISE;
|
|
191
|
+
END IF;
|
|
192
|
+
END;
|
|
193
|
+
""",
|
|
194
|
+
]
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
class OracleSyncEventQueueStore(BaseEventQueueStore["OracleSyncConfig"]):
|
|
198
|
+
"""Oracle sync event queue store with auto-detected JSON storage.
|
|
199
|
+
|
|
200
|
+
Automatically detects the Oracle version and uses the optimal JSON storage:
|
|
201
|
+
- Oracle 21c+: Native JSON type
|
|
202
|
+
- Oracle 12c-19c: BLOB with IS JSON constraint
|
|
203
|
+
- Oracle 11g: Plain BLOB
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
config: OracleSyncConfig with extension_config["events"] settings.
|
|
207
|
+
|
|
208
|
+
Notes:
|
|
209
|
+
Configuration is read from config.extension_config["events"]:
|
|
210
|
+
- queue_table: Table name (default: "sqlspec_event_queue")
|
|
211
|
+
- json_storage: Override auto-detection ("json", "blob_json", "blob")
|
|
212
|
+
- in_memory: Enable INMEMORY PRIORITY HIGH clause (default: False)
|
|
213
|
+
|
|
214
|
+
Example:
|
|
215
|
+
from sqlspec.adapters.oracledb import OracleSyncConfig
|
|
216
|
+
from sqlspec.adapters.oracledb.events import OracleSyncEventQueueStore
|
|
217
|
+
|
|
218
|
+
config = OracleSyncConfig(connection_config={"dsn": "oracle://..."})
|
|
219
|
+
store = OracleSyncEventQueueStore(config)
|
|
220
|
+
store.create_table() # Auto-detects version and creates table
|
|
221
|
+
"""
|
|
222
|
+
|
|
223
|
+
__slots__ = ("_in_memory", "_json_storage", "_oracle_version_info")
|
|
224
|
+
|
|
225
|
+
def __init__(self, config: "OracleSyncConfig") -> None:
|
|
226
|
+
"""Initialize Oracle sync event queue store."""
|
|
227
|
+
super().__init__(config)
|
|
228
|
+
self._in_memory, self._json_storage = _init_oracle_settings(self._extension_settings)
|
|
229
|
+
self._oracle_version_info: OracleVersionInfo | None = None
|
|
230
|
+
|
|
231
|
+
def _column_types(self) -> "tuple[str, str, str]":
|
|
232
|
+
"""Return Oracle column types based on storage mode."""
|
|
233
|
+
storage = self._json_storage or JSONStorageType.BLOB_JSON
|
|
234
|
+
if storage == JSONStorageType.JSON_NATIVE:
|
|
235
|
+
return "JSON", "JSON", "TIMESTAMP"
|
|
236
|
+
return "BLOB", "BLOB", "TIMESTAMP"
|
|
237
|
+
|
|
238
|
+
def _string_type(self, length: int) -> str:
|
|
239
|
+
"""Return Oracle VARCHAR2 type syntax."""
|
|
240
|
+
return f"VARCHAR2({length})"
|
|
241
|
+
|
|
242
|
+
def _index_name(self) -> str:
|
|
243
|
+
"""Return index name truncated to Oracle's 30-character limit."""
|
|
244
|
+
base_name = f"idx_{self.table_name.replace('.', '_')}_channel_status"
|
|
245
|
+
return base_name[:30]
|
|
246
|
+
|
|
247
|
+
def create_statements(self) -> "list[str]":
|
|
248
|
+
"""Return single PL/SQL script for table and index creation.
|
|
249
|
+
|
|
250
|
+
Uses cached storage type if available, otherwise defaults to BLOB_JSON.
|
|
251
|
+
For auto-detection, use create_table() instead.
|
|
252
|
+
"""
|
|
253
|
+
storage_type = self._json_storage or JSONStorageType.BLOB_JSON
|
|
254
|
+
return [_build_oracle_create_table_sql(self.table_name, storage_type, self._in_memory, self._index_name())]
|
|
255
|
+
|
|
256
|
+
def drop_statements(self) -> "list[str]":
|
|
257
|
+
"""Return drop statements in reverse dependency order."""
|
|
258
|
+
return _build_oracle_drop_sql(self.table_name, self._index_name())
|
|
259
|
+
|
|
260
|
+
def _detect_json_storage_type(self) -> JSONStorageType:
|
|
261
|
+
"""Detect the appropriate JSON storage type based on Oracle version.
|
|
262
|
+
|
|
263
|
+
Returns cached storage type if already detected, otherwise queries the database.
|
|
264
|
+
"""
|
|
265
|
+
if self._json_storage is not None:
|
|
266
|
+
return self._json_storage
|
|
267
|
+
|
|
268
|
+
version_info = self._get_version_info()
|
|
269
|
+
self._json_storage = _storage_type_from_version(version_info)
|
|
270
|
+
return self._json_storage
|
|
271
|
+
|
|
272
|
+
def _get_version_info(self) -> "OracleVersionInfo | None":
|
|
273
|
+
"""Return cached Oracle version info using data dictionary."""
|
|
274
|
+
if self._oracle_version_info is not None:
|
|
275
|
+
return self._oracle_version_info
|
|
276
|
+
|
|
277
|
+
with self._config.provide_session() as driver:
|
|
278
|
+
dictionary = OracledbSyncDataDictionary()
|
|
279
|
+
self._oracle_version_info = dictionary.get_version(driver)
|
|
280
|
+
|
|
281
|
+
if self._oracle_version_info is None:
|
|
282
|
+
log_with_context(
|
|
283
|
+
logger,
|
|
284
|
+
logging.WARNING,
|
|
285
|
+
"events.queue.storage.fallback",
|
|
286
|
+
storage_type=JSONStorageType.BLOB_JSON.value,
|
|
287
|
+
reason="version_detection_failed",
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
return self._oracle_version_info
|
|
291
|
+
|
|
292
|
+
def create_table(self) -> None:
|
|
293
|
+
"""Create the event queue table with auto-detected storage type."""
|
|
294
|
+
storage_type = self._detect_json_storage_type()
|
|
295
|
+
log_with_context(
|
|
296
|
+
logger, logging.DEBUG, "events.queue.create", storage_type=storage_type.value, table_name=self.table_name
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
with self._config.provide_session() as driver:
|
|
300
|
+
sql = _build_oracle_create_table_sql(self.table_name, storage_type, self._in_memory, self._index_name())
|
|
301
|
+
driver.execute_script(sql)
|
|
302
|
+
|
|
303
|
+
def drop_table(self) -> None:
|
|
304
|
+
"""Drop the event queue table and index."""
|
|
305
|
+
with self._config.provide_session() as driver:
|
|
306
|
+
for stmt in _build_oracle_drop_sql(self.table_name, self._index_name()):
|
|
307
|
+
driver.execute_script(stmt)
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
class OracleAsyncEventQueueStore(BaseEventQueueStore["OracleAsyncConfig"]):
|
|
311
|
+
"""Oracle async event queue store with auto-detected JSON storage.
|
|
312
|
+
|
|
313
|
+
Automatically detects the Oracle version and uses the optimal JSON storage:
|
|
314
|
+
- Oracle 21c+: Native JSON type
|
|
315
|
+
- Oracle 12c-19c: BLOB with IS JSON constraint
|
|
316
|
+
- Oracle 11g: Plain BLOB
|
|
317
|
+
|
|
318
|
+
Args:
|
|
319
|
+
config: OracleAsyncConfig with extension_config["events"] settings.
|
|
320
|
+
|
|
321
|
+
Notes:
|
|
322
|
+
Configuration is read from config.extension_config["events"]:
|
|
323
|
+
- queue_table: Table name (default: "sqlspec_event_queue")
|
|
324
|
+
- json_storage: Override auto-detection ("json", "blob_json", "blob")
|
|
325
|
+
- in_memory: Enable INMEMORY PRIORITY HIGH clause (default: False)
|
|
326
|
+
|
|
327
|
+
Example:
|
|
328
|
+
from sqlspec.adapters.oracledb import OracleAsyncConfig
|
|
329
|
+
from sqlspec.adapters.oracledb.events import OracleAsyncEventQueueStore
|
|
330
|
+
|
|
331
|
+
config = OracleAsyncConfig(connection_config={"dsn": "oracle://..."})
|
|
332
|
+
store = OracleAsyncEventQueueStore(config)
|
|
333
|
+
await store.create_table() # Auto-detects version and creates table
|
|
334
|
+
"""
|
|
335
|
+
|
|
336
|
+
__slots__ = ("_in_memory", "_json_storage", "_oracle_version_info")
|
|
337
|
+
|
|
338
|
+
def __init__(self, config: "OracleAsyncConfig") -> None:
|
|
339
|
+
"""Initialize Oracle async event queue store."""
|
|
340
|
+
super().__init__(config)
|
|
341
|
+
self._in_memory, self._json_storage = _init_oracle_settings(self._extension_settings)
|
|
342
|
+
self._oracle_version_info: OracleVersionInfo | None = None
|
|
343
|
+
|
|
344
|
+
def _column_types(self) -> "tuple[str, str, str]":
|
|
345
|
+
"""Return Oracle column types based on storage mode."""
|
|
346
|
+
storage = self._json_storage or JSONStorageType.BLOB_JSON
|
|
347
|
+
if storage == JSONStorageType.JSON_NATIVE:
|
|
348
|
+
return "JSON", "JSON", "TIMESTAMP"
|
|
349
|
+
return "BLOB", "BLOB", "TIMESTAMP"
|
|
350
|
+
|
|
351
|
+
def _string_type(self, length: int) -> str:
|
|
352
|
+
"""Return Oracle VARCHAR2 type syntax."""
|
|
353
|
+
return f"VARCHAR2({length})"
|
|
354
|
+
|
|
355
|
+
def _index_name(self) -> str:
|
|
356
|
+
"""Return index name truncated to Oracle's 30-character limit."""
|
|
357
|
+
base_name = f"idx_{self.table_name.replace('.', '_')}_channel_status"
|
|
358
|
+
return base_name[:30]
|
|
359
|
+
|
|
360
|
+
def create_statements(self) -> "list[str]":
|
|
361
|
+
"""Return single PL/SQL script for table and index creation.
|
|
362
|
+
|
|
363
|
+
Uses cached storage type if available, otherwise defaults to BLOB_JSON.
|
|
364
|
+
For auto-detection, use create_table() instead.
|
|
365
|
+
"""
|
|
366
|
+
storage_type = self._json_storage or JSONStorageType.BLOB_JSON
|
|
367
|
+
return [_build_oracle_create_table_sql(self.table_name, storage_type, self._in_memory, self._index_name())]
|
|
368
|
+
|
|
369
|
+
def drop_statements(self) -> "list[str]":
|
|
370
|
+
"""Return drop statements in reverse dependency order."""
|
|
371
|
+
return _build_oracle_drop_sql(self.table_name, self._index_name())
|
|
372
|
+
|
|
373
|
+
async def _detect_json_storage_type(self) -> JSONStorageType:
|
|
374
|
+
"""Detect the appropriate JSON storage type based on Oracle version.
|
|
375
|
+
|
|
376
|
+
Returns cached storage type if already detected, otherwise queries the database.
|
|
377
|
+
"""
|
|
378
|
+
if self._json_storage is not None:
|
|
379
|
+
return self._json_storage
|
|
380
|
+
|
|
381
|
+
version_info = await self._get_version_info()
|
|
382
|
+
self._json_storage = _storage_type_from_version(version_info)
|
|
383
|
+
return self._json_storage
|
|
384
|
+
|
|
385
|
+
async def _get_version_info(self) -> "OracleVersionInfo | None":
|
|
386
|
+
"""Return cached Oracle version info using data dictionary."""
|
|
387
|
+
if self._oracle_version_info is not None:
|
|
388
|
+
return self._oracle_version_info
|
|
389
|
+
|
|
390
|
+
async with self._config.provide_session() as driver:
|
|
391
|
+
dictionary = OracledbAsyncDataDictionary()
|
|
392
|
+
self._oracle_version_info = await dictionary.get_version(driver)
|
|
393
|
+
|
|
394
|
+
if self._oracle_version_info is None:
|
|
395
|
+
log_with_context(
|
|
396
|
+
logger,
|
|
397
|
+
logging.WARNING,
|
|
398
|
+
"events.queue.storage.fallback",
|
|
399
|
+
storage_type=JSONStorageType.BLOB_JSON.value,
|
|
400
|
+
reason="version_detection_failed",
|
|
401
|
+
)
|
|
402
|
+
|
|
403
|
+
return self._oracle_version_info
|
|
404
|
+
|
|
405
|
+
async def create_table(self) -> None:
|
|
406
|
+
"""Create the event queue table with auto-detected storage type."""
|
|
407
|
+
storage_type = await self._detect_json_storage_type()
|
|
408
|
+
log_with_context(
|
|
409
|
+
logger, logging.DEBUG, "events.queue.create", storage_type=storage_type.value, table_name=self.table_name
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
async with self._config.provide_session() as driver:
|
|
413
|
+
sql = _build_oracle_create_table_sql(self.table_name, storage_type, self._in_memory, self._index_name())
|
|
414
|
+
await driver.execute_script(sql)
|
|
415
|
+
|
|
416
|
+
async def drop_table(self) -> None:
|
|
417
|
+
"""Drop the event queue table and index."""
|
|
418
|
+
async with self._config.provide_session() as driver:
|
|
419
|
+
for stmt in _build_oracle_drop_sql(self.table_name, self._index_name()):
|
|
420
|
+
await driver.execute_script(stmt)
|