pyoq-sql 1.0.2__tar.gz → 1.0.3__tar.gz
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.
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/Cargo.lock +1 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/Cargo.toml +1 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/PKG-INFO +80 -2
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/README.md +79 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/astro.config.mjs +13 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/package.json +1 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/agents.md +11 -1
- pyoq_sql-1.0.3/docs/web/src/content/docs/alembic.md +136 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/cli.md +79 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/commands.md +143 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/config.md +112 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/descriptors.md +108 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/diagnostics.md +105 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/django.md +67 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/dsl.md +233 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/errors.md +192 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/fastapi.md +60 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/fetching.md +88 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/generation.md +387 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/hydration.md +84 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/internals.md +398 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/migrations.md +46 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/naming.md +40 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/native.md +40 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/policies.md +69 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/pyoq.md +71 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/query-execution.md +95 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/query-expressions.md +216 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/query-functions.md +134 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/query-mysql.md +553 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/query-postgres.md +429 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/query-sqlite.md +267 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/query.md +275 -0
- pyoq_sql-1.0.2/docs/web/src/content/docs/reference.md → pyoq_sql-1.0.3/docs/web/src/content/docs/api/references.md +3 -3
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/relations.md +76 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/runtime.md +31 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/sanic.md +64 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/schema-dialects.md +196 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/schema.md +138 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/serving.md +57 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/snapshots.md +68 -0
- pyoq_sql-1.0.3/docs/web/src/content/docs/api/tracing.md +26 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/cli.md +9 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/configuration.md +63 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/django.md +35 -3
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/fastapi.md +29 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/generating.md +52 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/migrations.md +1 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/sanic.md +28 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/selecting.md +24 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/snapshots.md +21 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/troubleshooting.md +7 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/nav.ts +178 -2
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_integration.py +8 -7
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/README.md +7 -5
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/settings.py +5 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/dsl_context.py +7 -3
- pyoq_sql-1.0.3/examples/multi_database_generation.py +49 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/pyproject.toml +1 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/scripts/examples.py +1 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/cli/commands.py +34 -9
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/cli/defaults.py +6 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/cli/services.py +13 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/config/__init__.py +7 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/config/loader.py +38 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/config/models.py +96 -9
- pyoq_sql-1.0.3/src/pyoq/django/generation.py +110 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/management/commands/makemigrations.py +23 -5
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/management/commands/pyoq_codegen.py +13 -3
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/schema.py +19 -4
- pyoq_sql-1.0.3/src/pyoq/django/settings.py +188 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/aio/queries.py +10 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/aio/writes.py +18 -0
- pyoq_sql-1.0.3/src/pyoq/dsl/inspection.py +25 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/queries.py +10 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/writes.py +18 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/__init__.py +2 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/contracts.py +14 -0
- pyoq_sql-1.0.3/src/pyoq/generation/pipeline.py +225 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/writer.py +52 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/cli/test_cli.py +83 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/config/test_config.py +130 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_api_reference.py +22 -9
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/test_example.py +1 -1
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/test_generation.py +131 -3
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/test_makemigrations.py +23 -3
- pyoq_sql-1.0.3/tests/django/test_settings.py +194 -0
- pyoq_sql-1.0.3/tests/dsl/test_inspection.py +174 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_filesystem.py +68 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_generated_package_imports.py +40 -2
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_pipeline.py +133 -2
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/snapshots/test_offline_generation.py +33 -0
- pyoq_sql-1.0.2/src/pyoq/django/generation.py +0 -59
- pyoq_sql-1.0.2/src/pyoq/django/settings.py +0 -87
- pyoq_sql-1.0.2/src/pyoq/generation/pipeline.py +0 -119
- pyoq_sql-1.0.2/tests/django/test_settings.py +0 -84
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/.gitignore +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/LICENSE +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/benchmarks/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/benchmarks/bulk_planning.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/benchmarks/fetch_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/benchmarks/hydration.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/benchmarks/observability.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/benchmarks/performance_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/django.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/.gitignore +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/README.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/bun.lock +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/public/.nojekyll +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/public/brand/pyoq-banner.png +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/public/brand/pyoq-banner.svg +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/public/brand/pyoq-favicon-32.png +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/public/brand/pyoq-mark-180.png +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/public/brand/pyoq-mark-512.png +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/public/brand/pyoq-mark.svg +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/code-head.mjs +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/AppearanceToggle.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/Assumed.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/Brand.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/CodeCopy.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/CodeEditors.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/Contents.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/Diagrams.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/Pager.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/Search.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/Sidebar.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/components/SiteHead.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/async.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/bulk.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/conflicts.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/connections.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/diagnostics.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/dialects.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/errors.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/expressions.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/first-query.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/inserting.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/installing.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/joins.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/licence.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/mysql-application.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/overview.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/performance.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/policies.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/relations.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/releasing.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/results.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/routines.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/security.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/serving.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/testing.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/transactions.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/types.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/updating.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content/docs/when-to-use.md +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/content.config.ts +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/layouts/Doc.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/layouts/app.css +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/layouts/landing.css +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/links.ts +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/pages/404.astro +0 -0
- /pyoq_sql-1.0.2/docs/web/src/pages/[slug].astro → /pyoq_sql-1.0.3/docs/web/src/pages/[...slug].astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/pages/index.astro +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/pages/sitemap.xml.ts +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/project.ts +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/remark-base.mjs +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/remark-code-shell.mjs +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/remark-licence.mjs +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/remark-mermaid.mjs +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/src/remark-pairs.mjs +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/docs/web/tsconfig.json +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/bulk_writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/admin.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/apps.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/migrations/0001_initial.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/migrations/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/models.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/queries.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/urls.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/analytics/views.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/asgi.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/admin.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/apps.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/migrations/0001_initial.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/migrations/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/models.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/queries.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/templates/catalog/title_detail.html +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/urls.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/catalog/views.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/manage.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/routers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/urls.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/django_project/wsgi.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/expressions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/fastapi_application.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/fetch_plans.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/generated_types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/generation_pipeline.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/mysql_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/nested_collections.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/observability.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/policies.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/postgres_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/relation_model.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/sanic_application.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/select_queries.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/sqlite_compilation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/sqlite_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/sqlite_generation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/sqlite_transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/typed_inserts.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/typed_updates.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/examples/typed_upserts.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/rust/lib.rs +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/rust-toolchain.toml +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/scripts/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/scripts/example_requirements.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/scripts/run_examples.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/scripts/verify_sdist.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/scripts/verify_wheels.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/__main__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/_native.pyi +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/cli/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/config/connection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/config/values.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/descriptors.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/diagnostics/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/diagnostics/budget.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/diagnostics/events.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/diagnostics/fingerprint.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/diagnostics/instrumented.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/diagnostics/metrics.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/diagnostics/observation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/diagnostics/scoped.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/apps.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/management/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/management/commands/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/parameters.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/django/timeouts.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/aio/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/aio/context.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/context.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/entry.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/labels.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/dsl/result.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/errors.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fastapi/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fastapi/dependencies.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fastapi/lifespan.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fetching/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fetching/collections.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fetching/execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fetching/joined.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fetching/nesting.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fetching/plans.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fetching/select_in.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/fetching/tables.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/cleanup.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/drift.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/lock.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/manifest.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/model.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/domains.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/enums.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/exports.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/imports.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/package.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/relations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/routines.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/rows.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/source.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/tables.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/rendering/writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/generation/validation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/hydration/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/hydration/engine.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/hydration/identity.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/hydration/plan.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/migrations/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/migrations/alembic.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/migrations/hooks.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/naming.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/policies/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/policies/bypass.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/policies/governed.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/policies/model.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/policies/rewriting.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/py.typed +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/aggregates.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/arrays.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/binding.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/capabilities.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/casts.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/choices.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/decoding.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/documents.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/aio/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/aio/operations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/aio/pooling.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/aio/streaming.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/aio/transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/batch.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/binding_style.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/compilation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/context.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/control.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/operations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/planning.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/pooling.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/results.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/streaming.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/execution/transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/expressions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/fields.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/aio/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/aio/commands.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/aio/driver.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/aio/executor.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/aio/factory.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/aio/operations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/aio/pool.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/aio/transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/commands.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/compiler.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/context.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/executor.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/expressions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/factory.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/health.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/identifiers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/model.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/operations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/parameters.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/planning.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/pool.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/mysql/writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/nodes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/aio/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/aio/bulk.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/aio/commands.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/aio/executor.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/aio/factory.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/aio/operations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/aio/pool.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/aio/transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/bulk.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/commands.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/compiler.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/context.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/executor.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/expressions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/factory.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/health.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/identifiers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/model.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/operations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/parameters.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/planning.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/pool.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/postgres/writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/projections.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/raw.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/recursion.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/rendering/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/rendering/expressions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/rendering/identifiers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/rendering/projections.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/rendering/queries.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/rendering/sources.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/rendering/writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/results.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/routines.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/rows.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/select.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/select_nodes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sources.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/commands.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/compiler.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/context.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/executor.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/expressions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/factory.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/health.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/identifiers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/model.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/operations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/parameters.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/planning.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/pool.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/streaming.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/sqlite/writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/statements.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/values.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/vendor.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/windows.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/write_nodes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/query/writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/relations/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/relations/batching.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/relations/derivation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/relations/fetching.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/relations/graph.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/relations/loading.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/relations/model.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/relations/planning.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/runtime/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/runtime/kernels.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/runtime/python.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/runtime/selection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/sanic/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/sanic/scope.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/sanic/workers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/codec.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/models.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/mysql/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/mysql/connection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/mysql/dsn.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/mysql/records.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/mysql/reflection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/mysql/source.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/mysql/sql.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/mysql/types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/postgres/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/postgres/connection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/postgres/records.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/postgres/reflection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/postgres/source.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/postgres/sql.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/postgres/types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/registry.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/source.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/sqlite/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/sqlite/connection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/sqlite/records.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/sqlite/reflection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/sqlite/source.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/sqlite/sql.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/schema/sqlite/types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/serving/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/serving/databases.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/serving/opening.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/snapshots/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/snapshots/drift.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/snapshots/files.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/snapshots/routing.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/snapshots/source.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/tracing/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/tracing/spans.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/src/pyoq/unset.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/architecture/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/architecture/test_layering.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/cli/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/config/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/conftest.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/aliasing_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/array_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/async_execution_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/cast_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/collection_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/compiler_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/execution_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/fetch_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/joined_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/json_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/lateral_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/locking_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/null_order_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/recursion_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/roundtrip_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/routine_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/row_value_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/select_in_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/snapshot_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/support.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/contracts/window_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/test_budget.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/test_events.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/test_fingerprint.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/test_instrumented.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/test_instrumented_aio.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/test_metrics.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/test_observation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/diagnostics/test_scoped.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_capability_documentation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_ci_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_cognitive_complexity.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_every_example_runs.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_examples_run.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_fetch_execution_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_hydration_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_mysql_application_guide.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_one_source_of_versions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_performance_contract.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_public_attribution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_run_examples.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_verify_sdist.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/distribution/test_verify_wheels.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/catalog/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/catalog/apps.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/catalog/fields.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/catalog/migrations/0001_initial.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/catalog/migrations/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/catalog/models.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/conftest.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/routing.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/test_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/test_generation_equivalence.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/test_parameters.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/test_timeouts.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/django/test_transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/aio_support.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/conftest.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/test_aio.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/test_aio_writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/test_context.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/test_queries.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/test_result.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/dsl/test_writes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fastapi/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fastapi/conftest.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fastapi/test_async_routes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fastapi/test_lifespan.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fastapi/test_routes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_collection_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_collections.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_dialect_aliasing.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_dialect_fetching.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_dialect_fetching_aio.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_joined.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_joined_fetch.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_multi_schema_relations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_nesting.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_plans.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_select_in.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_select_in_reduction.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/fetching/test_typed_rows.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_contracts.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_generated_overloads.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_generated_relations.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_generated_result_types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_generated_types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/generation/test_manifest.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/hydration/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/hydration/test_engine.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/hydration/test_engine_properties.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/hydration/test_identity.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/policies/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/policies/test_adapters.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/policies/test_isolation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/policies/test_isolation_aio.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/policies/test_no_bypass.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/policies/test_rewriting.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/aio/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/aio/test_driver_failures.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/aio/test_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/aio/test_read_throughput.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/test_compiler.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/test_driver_failures.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/test_driver_recovery.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/mysql/test_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/aio/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/aio/test_driver_failures.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/aio/test_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/aio/test_final_paths.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/aio/test_lifecycle.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/aio/test_state_guards.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/test_command_translation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/test_compiler.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/test_driver_failures.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/test_driver_recovery.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/test_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/test_pipeline_bulk.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/postgres/test_transaction_lifecycle.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/test_bulk_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/test_compiler.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/test_control.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/test_dialect_contracts.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/test_executor.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/test_pool.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/test_streaming.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/sqlite/test_transactions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_advanced_types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_arrays.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_binding.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_capabilities.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_casts.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_choices.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_collection_execution.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_collection_rendering.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_decoding.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_expressions.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_json.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_locking.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_parameter_styles.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_recursion.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_results.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_routines.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_rows.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_select_queries.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_vendor.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_watchdog_cancellation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/test_windows.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/writes/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/writes/test_insert_statements.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/writes/test_update_delete_statements.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/query/writes/test_upsert_statements.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/relations/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/relations/test_batching.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/relations/test_derivation.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/relations/test_fetching.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/relations/test_graph.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/relations/test_loading.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/relations/test_planning.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/runtime/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/runtime/test_kernels.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/runtime/test_runtime.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/sanic/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/sanic/conftest.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/sanic/notes.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/sanic/test_attachment.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/sanic/test_scope.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/sanic/test_synchronous_scope.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/sanic/test_workers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/sanic/worker_application.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/mysql/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/mysql/test_catalog_records.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/mysql/test_dsn.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/mysql/test_reflection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/mysql/test_types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/postgres/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/postgres/test_catalog_records.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/postgres/test_reflection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/postgres/test_types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/sqlite/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/sqlite/test_records.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/sqlite/test_reflection.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/sqlite/test_source.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/sqlite/test_sql.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/sqlite/test_types.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/test_codec.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/test_registry.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/schema/test_schema.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/serving/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/serving/test_opening.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/serving/test_opening_servers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/snapshots/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/snapshots/test_alembic_lifecycle.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/snapshots/test_dialect_snapshots.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/snapshots/test_drift_and_hooks.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/snapshots/test_snapshot_files.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/support/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/support/checkers.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/support/generation_fixtures.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/support/mysql.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/support/postgres.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/support/schema_fixtures.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/test_descriptors.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/test_errors.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/test_naming.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/test_package.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/tracing/__init__.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/tests/tracing/test_spans.py +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/typings/cognitive_complexity/__init__.pyi +0 -0
- {pyoq_sql-1.0.2 → pyoq_sql-1.0.3}/typings/cognitive_complexity/api.pyi +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pyoq-sql
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: A fully typed, database-first SQL toolkit for Python.
|
|
5
5
|
Project-URL: Homepage, https://teqpod.com/pyoq-sql/
|
|
6
6
|
Project-URL: Documentation, https://teqpod.com/pyoq-sql/overview/
|
|
@@ -166,6 +166,14 @@ structured server or pool value. Any other string is literal. Server profiles
|
|
|
166
166
|
may alternatively define one `dsn`, but cannot combine it with structured
|
|
167
167
|
connection fields.
|
|
168
168
|
|
|
169
|
+
The default generation layout is flat and preserves the directory and import
|
|
170
|
+
name above. An application with several databases can set
|
|
171
|
+
`codegen-layout = "profiles"`, use the root output settings as bases, and put a
|
|
172
|
+
`codegen-name` and `schema-snapshot` on each profile. With both output bases set
|
|
173
|
+
to `generated`, a profile named `default` with `codegen-name = "database"`
|
|
174
|
+
produces `generated.database`, while an `analytics` profile produces
|
|
175
|
+
`generated.analytics` by default.
|
|
176
|
+
|
|
169
177
|
`SecretValue` renders as `[REDACTED]`; access to its underlying value is always
|
|
170
178
|
explicit. An explicit `Configuration` object takes precedence over the file,
|
|
171
179
|
and the `selected_profile` argument can override profile selection. Unknown
|
|
@@ -1055,6 +1063,27 @@ dsl.select(TITLE_ID, TITLE_NAME, TITLE_PRICE) \
|
|
|
1055
1063
|
.to_list()
|
|
1056
1064
|
```
|
|
1057
1065
|
|
|
1066
|
+
The same bound chain can show what it would send without running it:
|
|
1067
|
+
|
|
1068
|
+
```python
|
|
1069
|
+
query = (
|
|
1070
|
+
dsl.select(TITLE_ID, TITLE_NAME)
|
|
1071
|
+
.from_(table_source(TITLES))
|
|
1072
|
+
.where(TITLE_PRICE.gt(Decimal("10.00")))
|
|
1073
|
+
)
|
|
1074
|
+
|
|
1075
|
+
print(query.sql())
|
|
1076
|
+
compiled = query.compile()
|
|
1077
|
+
print(compiled.parameters)
|
|
1078
|
+
```
|
|
1079
|
+
|
|
1080
|
+
`sql()` uses the active database's quoting and placeholder style. It never
|
|
1081
|
+
interpolates values. `compile()` returns the same SQL together with its bound
|
|
1082
|
+
parameters, sensitive-parameter indexes, statement kind, and declared result
|
|
1083
|
+
types. Neither method executes, checks out a connection, records a query-budget
|
|
1084
|
+
use, or emits an execution event. The asynchronous DSL exposes the same two
|
|
1085
|
+
synchronous methods because compilation performs no I/O.
|
|
1086
|
+
|
|
1058
1087
|
A generated table names its own columns, so a query over all of them does not
|
|
1059
1088
|
have to list them:
|
|
1060
1089
|
|
|
@@ -1282,12 +1311,41 @@ python manage.py pyoq_codegen --dry-run
|
|
|
1282
1311
|
python manage.py pyoq_codegen --check
|
|
1283
1312
|
```
|
|
1284
1313
|
|
|
1314
|
+
For multiple Django aliases, use profile layout:
|
|
1315
|
+
|
|
1316
|
+
```python
|
|
1317
|
+
PYOQ = {
|
|
1318
|
+
"codegen_layout": "profiles",
|
|
1319
|
+
"codegen_directory": "app/generated",
|
|
1320
|
+
"codegen_package": "app.generated",
|
|
1321
|
+
"databases": {
|
|
1322
|
+
"default": {"codegen_name": "database"},
|
|
1323
|
+
"reporting": {},
|
|
1324
|
+
},
|
|
1325
|
+
}
|
|
1326
|
+
```
|
|
1327
|
+
|
|
1328
|
+
```bash
|
|
1329
|
+
python manage.py pyoq_codegen --database reporting
|
|
1330
|
+
python manage.py pyoq_codegen --all-databases
|
|
1331
|
+
python manage.py pyoq_codegen --all-databases --check
|
|
1332
|
+
python manage.py pyoq_codegen --all-databases --dry-run
|
|
1333
|
+
```
|
|
1334
|
+
|
|
1335
|
+
A single-alias run owns only that alias package. An all-database run loads and
|
|
1336
|
+
validates every configured alias before publishing the generated package base
|
|
1337
|
+
once, so one failure leaves every existing alias package unchanged.
|
|
1338
|
+
|
|
1285
1339
|
The schema comes from the migration files, not from a database. Migrations are
|
|
1286
1340
|
what the schema is going to be, and a developer generating types has usually
|
|
1287
1341
|
not applied them yet. Nothing connects: Django answers what column a field
|
|
1288
1342
|
takes on a backend without consulting a server, so the alias selects the
|
|
1289
1343
|
dialect rather than opening a socket.
|
|
1290
1344
|
|
|
1345
|
+
The selected alias also passes each historical model through Django's
|
|
1346
|
+
`allow_migrate` routers. Profile layout therefore produces a package for the
|
|
1347
|
+
tables eligible for each database, as well as using that alias's dialect.
|
|
1348
|
+
|
|
1291
1349
|
What that yields is the schema the database will really have, which is not
|
|
1292
1350
|
always the one the models appear to describe:
|
|
1293
1351
|
|
|
@@ -1352,6 +1410,12 @@ def open_notes() -> SyncDatabase:
|
|
|
1352
1410
|
app = FastAPI(lifespan=database_lifespan(synchronous={"default": open_notes}))
|
|
1353
1411
|
```
|
|
1354
1412
|
|
|
1413
|
+
For several databases, use profile-organized generation through the shared
|
|
1414
|
+
CLI and give the lifespan mapping the same names as those profiles. Each route
|
|
1415
|
+
then selects the matching alias, such as `database("reporting")`, while imports
|
|
1416
|
+
come from separate packages such as `generated.reporting.tables`. Generation
|
|
1417
|
+
does not run during application startup.
|
|
1418
|
+
|
|
1355
1419
|
A database that fails to open takes the application down, and the ones already
|
|
1356
1420
|
open are given back first. Starting up halfway and serving requests against a
|
|
1357
1421
|
partly opened application is worse than not starting.
|
|
@@ -1441,6 +1505,12 @@ async def open_notes() -> AsyncDatabase:
|
|
|
1441
1505
|
attach_databases(app, asynchronous={"default": open_notes})
|
|
1442
1506
|
```
|
|
1443
1507
|
|
|
1508
|
+
For several databases, use profile-organized generation through the shared
|
|
1509
|
+
CLI and give the attachment mapping the same names as those profiles. A handler
|
|
1510
|
+
can then pair `database_of(request, "reporting")` with descriptors imported
|
|
1511
|
+
from `generated.reporting.tables`. Generation happens before server startup,
|
|
1512
|
+
never inside a worker.
|
|
1513
|
+
|
|
1444
1514
|
A database that fails to open takes the worker down, and the ones already open
|
|
1445
1515
|
are given back first. Every one a worker opened is closed when it stops.
|
|
1446
1516
|
|
|
@@ -2954,6 +3024,8 @@ pyoq --version
|
|
|
2954
3024
|
pyoq generate --project-root .
|
|
2955
3025
|
pyoq generate --project-root . --check
|
|
2956
3026
|
pyoq generate --project-root . --dry-run
|
|
3027
|
+
pyoq generate --project-root . --profile reporting
|
|
3028
|
+
pyoq generate --project-root . --all-profiles
|
|
2957
3029
|
pyoq inspect --project-root .
|
|
2958
3030
|
```
|
|
2959
3031
|
|
|
@@ -2961,6 +3033,12 @@ Both database commands accept `--config` for a configuration file below the
|
|
|
2961
3033
|
project root and `--profile` for explicit profile selection. `--check` and
|
|
2962
3034
|
`--dry-run` are mutually exclusive.
|
|
2963
3035
|
|
|
3036
|
+
Generation defaults to one flat package. Set `codegen-layout = "profiles"` to
|
|
3037
|
+
treat `codegen-directory` and `codegen-package` as bases, then give any profile
|
|
3038
|
+
a `codegen-name` when its profile name is not the desired Python package
|
|
3039
|
+
segment. `--all-profiles` prepares every schema first and atomically publishes
|
|
3040
|
+
all changed profile packages. It cannot be combined with `--profile`.
|
|
3041
|
+
|
|
2964
3042
|
Command exit codes are stable:
|
|
2965
3043
|
|
|
2966
3044
|
- `0`: success
|
|
@@ -2975,7 +3053,7 @@ primary and unique keys, indexes, CHECK constraints, and foreign-key
|
|
|
2975
3053
|
relationships. Metadata is normalized before rendering, and the connection is
|
|
2976
3054
|
closed before generated files are checked or written.
|
|
2977
3055
|
|
|
2978
|
-
Generation writes
|
|
3056
|
+
Generation writes eight deterministic, fully typed modules and an ownership
|
|
2979
3057
|
manifest into `codegen-directory`. Repeating a write against an unchanged
|
|
2980
3058
|
database leaves the generated directory untouched. `--check` fails on drift,
|
|
2981
3059
|
while `--dry-run` reports planned creation, update, removal, and conflict counts
|
|
@@ -122,6 +122,14 @@ structured server or pool value. Any other string is literal. Server profiles
|
|
|
122
122
|
may alternatively define one `dsn`, but cannot combine it with structured
|
|
123
123
|
connection fields.
|
|
124
124
|
|
|
125
|
+
The default generation layout is flat and preserves the directory and import
|
|
126
|
+
name above. An application with several databases can set
|
|
127
|
+
`codegen-layout = "profiles"`, use the root output settings as bases, and put a
|
|
128
|
+
`codegen-name` and `schema-snapshot` on each profile. With both output bases set
|
|
129
|
+
to `generated`, a profile named `default` with `codegen-name = "database"`
|
|
130
|
+
produces `generated.database`, while an `analytics` profile produces
|
|
131
|
+
`generated.analytics` by default.
|
|
132
|
+
|
|
125
133
|
`SecretValue` renders as `[REDACTED]`; access to its underlying value is always
|
|
126
134
|
explicit. An explicit `Configuration` object takes precedence over the file,
|
|
127
135
|
and the `selected_profile` argument can override profile selection. Unknown
|
|
@@ -1011,6 +1019,27 @@ dsl.select(TITLE_ID, TITLE_NAME, TITLE_PRICE) \
|
|
|
1011
1019
|
.to_list()
|
|
1012
1020
|
```
|
|
1013
1021
|
|
|
1022
|
+
The same bound chain can show what it would send without running it:
|
|
1023
|
+
|
|
1024
|
+
```python
|
|
1025
|
+
query = (
|
|
1026
|
+
dsl.select(TITLE_ID, TITLE_NAME)
|
|
1027
|
+
.from_(table_source(TITLES))
|
|
1028
|
+
.where(TITLE_PRICE.gt(Decimal("10.00")))
|
|
1029
|
+
)
|
|
1030
|
+
|
|
1031
|
+
print(query.sql())
|
|
1032
|
+
compiled = query.compile()
|
|
1033
|
+
print(compiled.parameters)
|
|
1034
|
+
```
|
|
1035
|
+
|
|
1036
|
+
`sql()` uses the active database's quoting and placeholder style. It never
|
|
1037
|
+
interpolates values. `compile()` returns the same SQL together with its bound
|
|
1038
|
+
parameters, sensitive-parameter indexes, statement kind, and declared result
|
|
1039
|
+
types. Neither method executes, checks out a connection, records a query-budget
|
|
1040
|
+
use, or emits an execution event. The asynchronous DSL exposes the same two
|
|
1041
|
+
synchronous methods because compilation performs no I/O.
|
|
1042
|
+
|
|
1014
1043
|
A generated table names its own columns, so a query over all of them does not
|
|
1015
1044
|
have to list them:
|
|
1016
1045
|
|
|
@@ -1238,12 +1267,41 @@ python manage.py pyoq_codegen --dry-run
|
|
|
1238
1267
|
python manage.py pyoq_codegen --check
|
|
1239
1268
|
```
|
|
1240
1269
|
|
|
1270
|
+
For multiple Django aliases, use profile layout:
|
|
1271
|
+
|
|
1272
|
+
```python
|
|
1273
|
+
PYOQ = {
|
|
1274
|
+
"codegen_layout": "profiles",
|
|
1275
|
+
"codegen_directory": "app/generated",
|
|
1276
|
+
"codegen_package": "app.generated",
|
|
1277
|
+
"databases": {
|
|
1278
|
+
"default": {"codegen_name": "database"},
|
|
1279
|
+
"reporting": {},
|
|
1280
|
+
},
|
|
1281
|
+
}
|
|
1282
|
+
```
|
|
1283
|
+
|
|
1284
|
+
```bash
|
|
1285
|
+
python manage.py pyoq_codegen --database reporting
|
|
1286
|
+
python manage.py pyoq_codegen --all-databases
|
|
1287
|
+
python manage.py pyoq_codegen --all-databases --check
|
|
1288
|
+
python manage.py pyoq_codegen --all-databases --dry-run
|
|
1289
|
+
```
|
|
1290
|
+
|
|
1291
|
+
A single-alias run owns only that alias package. An all-database run loads and
|
|
1292
|
+
validates every configured alias before publishing the generated package base
|
|
1293
|
+
once, so one failure leaves every existing alias package unchanged.
|
|
1294
|
+
|
|
1241
1295
|
The schema comes from the migration files, not from a database. Migrations are
|
|
1242
1296
|
what the schema is going to be, and a developer generating types has usually
|
|
1243
1297
|
not applied them yet. Nothing connects: Django answers what column a field
|
|
1244
1298
|
takes on a backend without consulting a server, so the alias selects the
|
|
1245
1299
|
dialect rather than opening a socket.
|
|
1246
1300
|
|
|
1301
|
+
The selected alias also passes each historical model through Django's
|
|
1302
|
+
`allow_migrate` routers. Profile layout therefore produces a package for the
|
|
1303
|
+
tables eligible for each database, as well as using that alias's dialect.
|
|
1304
|
+
|
|
1247
1305
|
What that yields is the schema the database will really have, which is not
|
|
1248
1306
|
always the one the models appear to describe:
|
|
1249
1307
|
|
|
@@ -1308,6 +1366,12 @@ def open_notes() -> SyncDatabase:
|
|
|
1308
1366
|
app = FastAPI(lifespan=database_lifespan(synchronous={"default": open_notes}))
|
|
1309
1367
|
```
|
|
1310
1368
|
|
|
1369
|
+
For several databases, use profile-organized generation through the shared
|
|
1370
|
+
CLI and give the lifespan mapping the same names as those profiles. Each route
|
|
1371
|
+
then selects the matching alias, such as `database("reporting")`, while imports
|
|
1372
|
+
come from separate packages such as `generated.reporting.tables`. Generation
|
|
1373
|
+
does not run during application startup.
|
|
1374
|
+
|
|
1311
1375
|
A database that fails to open takes the application down, and the ones already
|
|
1312
1376
|
open are given back first. Starting up halfway and serving requests against a
|
|
1313
1377
|
partly opened application is worse than not starting.
|
|
@@ -1397,6 +1461,12 @@ async def open_notes() -> AsyncDatabase:
|
|
|
1397
1461
|
attach_databases(app, asynchronous={"default": open_notes})
|
|
1398
1462
|
```
|
|
1399
1463
|
|
|
1464
|
+
For several databases, use profile-organized generation through the shared
|
|
1465
|
+
CLI and give the attachment mapping the same names as those profiles. A handler
|
|
1466
|
+
can then pair `database_of(request, "reporting")` with descriptors imported
|
|
1467
|
+
from `generated.reporting.tables`. Generation happens before server startup,
|
|
1468
|
+
never inside a worker.
|
|
1469
|
+
|
|
1400
1470
|
A database that fails to open takes the worker down, and the ones already open
|
|
1401
1471
|
are given back first. Every one a worker opened is closed when it stops.
|
|
1402
1472
|
|
|
@@ -2910,6 +2980,8 @@ pyoq --version
|
|
|
2910
2980
|
pyoq generate --project-root .
|
|
2911
2981
|
pyoq generate --project-root . --check
|
|
2912
2982
|
pyoq generate --project-root . --dry-run
|
|
2983
|
+
pyoq generate --project-root . --profile reporting
|
|
2984
|
+
pyoq generate --project-root . --all-profiles
|
|
2913
2985
|
pyoq inspect --project-root .
|
|
2914
2986
|
```
|
|
2915
2987
|
|
|
@@ -2917,6 +2989,12 @@ Both database commands accept `--config` for a configuration file below the
|
|
|
2917
2989
|
project root and `--profile` for explicit profile selection. `--check` and
|
|
2918
2990
|
`--dry-run` are mutually exclusive.
|
|
2919
2991
|
|
|
2992
|
+
Generation defaults to one flat package. Set `codegen-layout = "profiles"` to
|
|
2993
|
+
treat `codegen-directory` and `codegen-package` as bases, then give any profile
|
|
2994
|
+
a `codegen-name` when its profile name is not the desired Python package
|
|
2995
|
+
segment. `--all-profiles` prepares every schema first and atomically publishes
|
|
2996
|
+
all changed profile packages. It cannot be combined with `--profile`.
|
|
2997
|
+
|
|
2920
2998
|
Command exit codes are stable:
|
|
2921
2999
|
|
|
2922
3000
|
- `0`: success
|
|
@@ -2931,7 +3009,7 @@ primary and unique keys, indexes, CHECK constraints, and foreign-key
|
|
|
2931
3009
|
relationships. Metadata is normalized before rendering, and the connection is
|
|
2932
3010
|
closed before generated files are checked or written.
|
|
2933
3011
|
|
|
2934
|
-
Generation writes
|
|
3012
|
+
Generation writes eight deterministic, fully typed modules and an ownership
|
|
2935
3013
|
manifest into `codegen-directory`. Repeating a write against an unchanged
|
|
2936
3014
|
database leaves the generated directory untouched. `--check` fails on drift,
|
|
2937
3015
|
while `--dry-run` reports planned creation, update, removal, and conflict counts
|
|
@@ -8,6 +8,15 @@ import { remarkLicence } from "./src/remark-licence.mjs";
|
|
|
8
8
|
import { remarkMermaid } from "./src/remark-mermaid.mjs";
|
|
9
9
|
import { remarkPairs } from "./src/remark-pairs.mjs";
|
|
10
10
|
|
|
11
|
+
const base = process.env.DOCS_BASE ?? "/";
|
|
12
|
+
|
|
13
|
+
/** Astro puts the base in front of where a redirect comes from, not where it
|
|
14
|
+
* goes, so the destination is built from the same value the rest of the site
|
|
15
|
+
* is. Written plainly it would send a reader to a path the host does not
|
|
16
|
+
* serve. */
|
|
17
|
+
/** @param {string} path */
|
|
18
|
+
const under = (path) => `${base}/${path}`.replace(/\/{2,}/g, "/");
|
|
19
|
+
|
|
11
20
|
// The site is a directory of files when it is built, so it works from a
|
|
12
21
|
// bucket, a static host, or a laptop without anything running behind it.
|
|
13
22
|
export default defineConfig({
|
|
@@ -19,6 +28,10 @@ export default defineConfig({
|
|
|
19
28
|
site: process.env.DOCS_SITE,
|
|
20
29
|
base: process.env.DOCS_BASE ?? "/",
|
|
21
30
|
build: { format: "directory" },
|
|
31
|
+
// The reference index was published at its old address before it moved into
|
|
32
|
+
// the API section. A link that already exists is not a link that can be
|
|
33
|
+
// corrected, so the old address still leads somewhere.
|
|
34
|
+
redirects: { "/reference": under("api/references") },
|
|
22
35
|
vite: {
|
|
23
36
|
// The package metadata sits above this directory, and src/project.ts reads
|
|
24
37
|
// the licence straight out of it.
|
|
@@ -73,7 +73,7 @@ for every task.
|
|
|
73
73
|
| Query limits and observability | `src/pyoq/policies`, `src/pyoq/diagnostics` | [Policies](../policies/) |
|
|
74
74
|
| Framework lifecycle | `src/pyoq/django`, `src/pyoq/fastapi`, `src/pyoq/sanic` | [Framework routing](#framework-routing) |
|
|
75
75
|
| Native runtime selection | `src/pyoq/runtime` | [Performance](../performance/) |
|
|
76
|
-
| Supported public names | Package `__init__.py` files | [API reference](../
|
|
76
|
+
| Supported public names | Package `__init__.py` files | [API reference](../api/references/) |
|
|
77
77
|
|
|
78
78
|
Tests mirror the source layout. Start with the matching directory under
|
|
79
79
|
`tests`, then inspect `tests/contracts` when behavior must be identical across
|
|
@@ -106,6 +106,11 @@ only when the required values have been supplied. Generated files must be
|
|
|
106
106
|
changed through the schema model and renderer, never by editing generated
|
|
107
107
|
output.
|
|
108
108
|
|
|
109
|
+
Generation has two layouts. Flat layout writes one package and is the default.
|
|
110
|
+
Profile layout writes one package per database below a shared base. Each has an
|
|
111
|
+
isolated manifest. An all-profile run prepares every schema and publishes the
|
|
112
|
+
base once, so no profile may write before every plan has validated.
|
|
113
|
+
|
|
109
114
|
See [Generating your types](../generating/), [Inserting rows](../inserting/),
|
|
110
115
|
and [Updating and deleting](../updating/) for complete application examples.
|
|
111
116
|
|
|
@@ -184,6 +189,11 @@ Shared reflection, generation, compilation, decoding, pooling, and transaction
|
|
|
184
189
|
behavior belongs in the core package. An adapter should translate framework
|
|
185
190
|
lifecycle and configuration into those shared services.
|
|
186
191
|
|
|
192
|
+
Django profile generation maps configured database aliases to core generation
|
|
193
|
+
profiles. One alias owns one generated package and manifest. An all-database
|
|
194
|
+
run must use the shared atomic profile publication path rather than looping
|
|
195
|
+
over single-profile writes.
|
|
196
|
+
|
|
187
197
|
## Invariants an agent must preserve
|
|
188
198
|
|
|
189
199
|
- Query trees and schema value objects remain immutable.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Alembic"
|
|
3
|
+
summary: "Keeping the snapshot and the generated package in step with your migrations."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Alembic owns the schema. PyOQ reads it. Nothing about that changes when you use
|
|
7
|
+
both: Alembic writes and applies migrations exactly as it did, and PyOQ needs
|
|
8
|
+
one thing from you, which is to be told when the database has moved.
|
|
9
|
+
|
|
10
|
+
There is no extra to install and no adapter to configure. PyOQ never opens a
|
|
11
|
+
connection through Alembic and never takes part in a migration.
|
|
12
|
+
|
|
13
|
+
## What has to happen, and in what order
|
|
14
|
+
|
|
15
|
+
After a migration is applied, two things are behind:
|
|
16
|
+
|
|
17
|
+
1. The recorded schema snapshot, which still describes the old database.
|
|
18
|
+
2. The generated package, which was generated from that snapshot.
|
|
19
|
+
|
|
20
|
+
They have to catch up in that order, because generation reads the snapshot.
|
|
21
|
+
Doing it the other way regenerates the old package and makes the update look
|
|
22
|
+
complete when it is not.
|
|
23
|
+
|
|
24
|
+
`after_migration_at` does both, in order.
|
|
25
|
+
|
|
26
|
+
## Where to put it
|
|
27
|
+
|
|
28
|
+
### In `env.py`, once the migrations have run
|
|
29
|
+
|
|
30
|
+
The project owns `env.py`, so this is the place with the most context.
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from pathlib import Path
|
|
34
|
+
|
|
35
|
+
from alembic import context
|
|
36
|
+
from pyoq.migrations import after_migration_at
|
|
37
|
+
|
|
38
|
+
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def run_migrations_online() -> None:
|
|
42
|
+
connectable = engine_from_config(
|
|
43
|
+
config.get_section(config.config_ini_section, {}),
|
|
44
|
+
prefix="sqlalchemy.",
|
|
45
|
+
poolclass=pool.NullPool,
|
|
46
|
+
)
|
|
47
|
+
with connectable.connect() as connection:
|
|
48
|
+
context.configure(connection=connection, target_metadata=target_metadata)
|
|
49
|
+
with context.begin_transaction():
|
|
50
|
+
context.run_migrations()
|
|
51
|
+
|
|
52
|
+
# The database has moved. Bring the snapshot and the package back in step.
|
|
53
|
+
after_migration_at(PROJECT_ROOT)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Put it after the `with` block, not inside it. Inside, the migration has not
|
|
57
|
+
committed yet, and reflection would read a schema no other connection can see.
|
|
58
|
+
|
|
59
|
+
### Or as a step of its own
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
alembic upgrade head && pyoq-after-migration
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The command takes a project directory, or nothing and uses the working
|
|
66
|
+
directory. `&&` matters: if the upgrade fails there is nothing to catch up to.
|
|
67
|
+
|
|
68
|
+
## Not as a post-write hook
|
|
69
|
+
|
|
70
|
+
This is the one thing that looks right and is not.
|
|
71
|
+
|
|
72
|
+
```toml
|
|
73
|
+
# Do not do this.
|
|
74
|
+
[post_write_hooks]
|
|
75
|
+
hooks = pyoq
|
|
76
|
+
pyoq.type = console_scripts
|
|
77
|
+
pyoq.entrypoint = pyoq-after-migration
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
A post-write hook runs inside `alembic revision`, which **writes a revision
|
|
81
|
+
file**. It does not apply one. The database at that moment is still whatever it
|
|
82
|
+
was, so recording the schema there records the schema the migration is about to
|
|
83
|
+
replace, and generates from it. The package would then describe the old
|
|
84
|
+
database while the migration sits unapplied.
|
|
85
|
+
|
|
86
|
+
Alembic hands a hook the file it has just written, and that is how PyOQ notices:
|
|
87
|
+
being given a file rather than a directory is refused, with a message saying
|
|
88
|
+
so, rather than quietly recording the wrong schema.
|
|
89
|
+
|
|
90
|
+
## What you get back
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
outcome = after_migration_at(PROJECT_ROOT)
|
|
94
|
+
print(outcome.describe())
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
`MigrationOutcome` carries what each step reported, as `recorded` and
|
|
98
|
+
`generated`, and `describe()` puts both on one line worth logging.
|
|
99
|
+
|
|
100
|
+
If your project has more than one profile, name the one the migration touched:
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
after_migration_at(PROJECT_ROOT, selected_profile="primary")
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
A caller that already holds a `Configuration` can use
|
|
107
|
+
[`after_migration`](../api/migrations/) instead, which takes it directly.
|
|
108
|
+
|
|
109
|
+
## In a pipeline
|
|
110
|
+
|
|
111
|
+
Where production has no credentials and no code generation, make the snapshot
|
|
112
|
+
and the generated package build artifacts instead:
|
|
113
|
+
|
|
114
|
+
1. Apply the migration in an integration environment.
|
|
115
|
+
2. Run `pyoq-after-migration`, or the hook from `env.py`.
|
|
116
|
+
3. Run `pyoq drift` and `pyoq generate --check`.
|
|
117
|
+
4. Run the type checks and the tests.
|
|
118
|
+
5. Ship the reviewed package and snapshot.
|
|
119
|
+
|
|
120
|
+
Steps 3 and 4 are what catch a migration that changed something the code did
|
|
121
|
+
not expect: `--check` fails when the generated package is not what the schema
|
|
122
|
+
now implies, and the type checker fails where code still reads a column that
|
|
123
|
+
moved.
|
|
124
|
+
|
|
125
|
+
## What can go wrong
|
|
126
|
+
|
|
127
|
+
| Symptom | Cause |
|
|
128
|
+
| --- | --- |
|
|
129
|
+
| The hook refuses, saying it was given a file | It is wired as a post-write hook. Move it after `alembic upgrade`. |
|
|
130
|
+
| The snapshot records the pre-migration schema | The call sits inside the `begin_transaction()` block, before the commit. |
|
|
131
|
+
| `pyoq generate --check` fails in CI after a migration | The catch-up step did not run, or ran before the upgrade. |
|
|
132
|
+
| The package regenerated but is unchanged | Generation ran before the snapshot was re-recorded. `after_migration_at` does both in the right order. |
|
|
133
|
+
|
|
134
|
+
See [Migration lifecycle](../migrations/) for the same ground without Alembic,
|
|
135
|
+
and [pyoq commands](../api/commands/) for what `pyoq-after-migration` exits
|
|
136
|
+
with.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "pyoq.cli"
|
|
3
|
+
summary: "Running the command line from Python, and what each exit code means."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The command line as a Python entry point. [Command line](../../cli/) covers the
|
|
7
|
+
commands themselves and their arguments; this is how to invoke them from code,
|
|
8
|
+
which is what a test or a wrapper script wants.
|
|
9
|
+
|
|
10
|
+
The package installs two commands, `pyoq` and `pyoq-after-migration`, and
|
|
11
|
+
`python -m pyoq` runs the same thing through `pyoq.__main__`.
|
|
12
|
+
|
|
13
|
+
## `main`
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
main(
|
|
17
|
+
arguments: Sequence[str] | None = None,
|
|
18
|
+
*,
|
|
19
|
+
services: CommandServices | None = None,
|
|
20
|
+
output: IO[str] | None = None,
|
|
21
|
+
error: IO[str] | None = None,
|
|
22
|
+
) -> int
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Runs one command and **returns** its exit code rather than exiting, which is
|
|
26
|
+
what makes it usable from a test.
|
|
27
|
+
|
|
28
|
+
| Argument | What it is for |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| `arguments` | The words after `pyoq`. Omitted, it reads `sys.argv`. |
|
|
31
|
+
| `services` | The services the command runs against, so a test can supply its own. |
|
|
32
|
+
| `output` | Where ordinary output goes. Defaults to standard output. |
|
|
33
|
+
| `error` | Where errors go. Defaults to standard error. |
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from pyoq.cli import ExitCode, main
|
|
37
|
+
|
|
38
|
+
assert main(["generate", "--check"]) == ExitCode.SUCCESS
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## `run`
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
run(arguments: Sequence[str] | None = None) -> NoReturn
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The same, but exits the process with that code rather than returning it. This
|
|
48
|
+
is what the installed `pyoq` command calls, and it never returns.
|
|
49
|
+
|
|
50
|
+
## `CommandServices`
|
|
51
|
+
|
|
52
|
+
*dataclass* — what a command runs against, in `pyoq.cli.services`. Passing your
|
|
53
|
+
own is how a test drives a command without a database.
|
|
54
|
+
|
|
55
|
+
| Field | What it does |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| `generation` | Runs `generate`. |
|
|
58
|
+
| `inspection` | Runs `inspect`. |
|
|
59
|
+
| `snapshot` | Runs `snapshot`. |
|
|
60
|
+
| `drift` | Runs `drift`. |
|
|
61
|
+
|
|
62
|
+
The same type is accepted by [`after_migration`](../migrations/), which runs
|
|
63
|
+
two of those steps.
|
|
64
|
+
|
|
65
|
+
## `ExitCode`
|
|
66
|
+
|
|
67
|
+
*enum of `int`* — what the process exits with, so a shell can tell one failure
|
|
68
|
+
from another.
|
|
69
|
+
|
|
70
|
+
| Member | Value | Means |
|
|
71
|
+
| --- | --- | --- |
|
|
72
|
+
| `SUCCESS` | `0` | The command did what was asked. |
|
|
73
|
+
| `COMMAND_FAILED` | `1` | It ran and reported a failure, such as generated output being out of date. |
|
|
74
|
+
| `USAGE` | `2` | The arguments were wrong. |
|
|
75
|
+
| `CONFIGURATION` | `3` | Configuration was missing, unreadable, or invalid. |
|
|
76
|
+
| `UNAVAILABLE` | `4` | The command is not available for this dialect or this build. |
|
|
77
|
+
|
|
78
|
+
Because the members are integers, `main(...) == 0` works, and a shell reading
|
|
79
|
+
`$?` sees the same numbers.
|