datajunction-server 0.0.1a49__tar.gz → 0.0.1a49.dev0__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.
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/PKG-INFO +2 -2
- datajunction_server-0.0.1a49.dev0/datajunction_server/__about__.py +4 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/data.py +5 -1
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/helpers.py +3 -15
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/nodes.py +14 -4
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/sql.py +68 -24
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/construction/build.py +76 -85
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/node.py +16 -3
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/materialization/jobs/cube_materialization.py +0 -2
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/types.py +2 -2
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/nodes_test.py +44 -7
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/sql_test.py +10 -12
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/examples.py +10 -0
- datajunction_server-0.0.1a49/datajunction_server/__about__.py +0 -4
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/.coveragerc +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/.env +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/.env.integration +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/.flake8 +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/.gitignore +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/.isort.cfg +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/.pre-commit-config.yaml +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/.pylintrc +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/Dockerfile +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/Makefile +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/README.md +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/README +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/env.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/script.py.mako +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2023_12_20_1829-724445d2b29d_initial_migration.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_01_08_2034-945d44abcd32_add_dimension_links.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_01_11_2032-c74b11566d82_add_column_order.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_01_18_2011-20f060b02772_switch_enum_values.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_01_23_0617-c9cef8864ecb_add_missing_table_attribute_to_source_.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_01_23_1655-a8e22109be24_availability_state_s_valid_through_ts_.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_02_22_0713-d61fb7e48cc3_cascade_deletes_to_dimension_links.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_04_30_1556-de7ec1c82fe0_add_query_requests.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_05_09_1420-9b1227ff17f4_update_backfill_spec.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic/versions/2024_05_21_0012-57fc93ef6947_add_query_id_to_queryrequest.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/alembic.ini +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/access/authentication/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/access/authentication/basic.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/access/authentication/github.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/access/authentication/google.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/access/authentication/whoami.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/attributes.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/catalogs.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/client.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/cubes.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/dimensions.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/djsql.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/engines.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/graphql/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/graphql/catalogs.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/graphql/engines.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/graphql/main.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/health.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/history.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/logging.conf +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/main.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/materializations.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/measures.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/metrics.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/namespaces.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/tags.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/config.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/constants.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/construction/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/construction/dimensions.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/construction/dj_query.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/construction/exceptions.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/construction/utils.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/attributetype.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/availabilitystate.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/backfill.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/base.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/catalog.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/column.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/database.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/dimensionlink.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/engine.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/history.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/materialization.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/measure.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/metricmetadata.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/namespace.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/partition.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/queryrequest.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/tag.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/database/user.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/enum.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/errors.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/access/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/access/authentication/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/access/authentication/basic.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/access/authentication/github.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/access/authentication/google.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/access/authentication/http.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/access/authentication/tokens.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/access/authorization.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/engines.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/materializations.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/namespaces.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/nodes.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/internal/validation.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/materialization/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/materialization/jobs/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/materialization/jobs/job_types.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/materialization/jobs/materialization_job.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/access.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/attribute.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/base.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/catalog.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/column.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/cube.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/database.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/dimensionlink.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/engine.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/history.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/materialization.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/measure.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/metric.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/node.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/node_type.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/partition.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/query.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/table.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/tag.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/models/user.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/naming.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/service_clients.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/dag.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/functions.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/ast.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/antlr4.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/exceptions.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/SqlBaseLexer.g4 +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/SqlBaseParser.g4 +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.interp +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.tokens +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.interp +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/superset.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/transpilation.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/typing.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/utils.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/pdm.lock +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/pyproject.toml +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/requirements/docker.txt +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/requirements/test.txt +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/scripts/docs-snippets.js +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/scripts/docs-snippets.sh +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/scripts/generate-openapi.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/attributes_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/catalog_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/client_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/cubes_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/data_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/dimension_links_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/dimensions_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/djql_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/engine_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.druid_spec.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.partition.druid_spec.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.partition.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.categorical.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.druid_spec.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.patched.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.categorical.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.druid_spec.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.full.config.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.full.materializations.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.config.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.materializations.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.full.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.incremental.additional.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.incremental.categorical.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.incremental.config.json +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.incremental.lookback.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/files/materializations_test/spark_sql.incremental.query.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/graphql/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/graphql/catalog_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/graphql/engine_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/health_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/helpers_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/history_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/materializations_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/measures_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/metrics_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/namespaces_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/node_update_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/routers_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/api/tags_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/conftest.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/construction/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/construction/build_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/construction/compile_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/construction/exceptions_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/construction/fixtures.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/construction/inference_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/construction/utils_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/default.duckdb +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/duckdb.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/errors_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/fixes_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/integration/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/integration/basic_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/internal/authentication/basic_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/internal/authentication/github_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/internal/authentication/http_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/internal/authentication/token_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/internal/authentication/whoami_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/migrations_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/models/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/models/catalog_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/models/hash_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/models/measure_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/models/node_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/models/query_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/pytest.ini +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/service_clients_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/dag_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/functions_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/backends/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/backends/antlr4_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/backends/types_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/__init__.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query1.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query10.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query11.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query12.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query13.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query14.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query15.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query16.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query17.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query18.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query19.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query2.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query20.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query21.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query22.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query23.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query24.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query25.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query26.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query27.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query28.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query29.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query3.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query30.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query31.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query32.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query33.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query34.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query35.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query36.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query37.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query38.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query39.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query4.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query40.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query41.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query42.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query43.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query44.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query45.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query46.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query47.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query48.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query49.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query5.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query50.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query51.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query52.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query53.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query54.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query55.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query56.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query57.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query58.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query59.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query6.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query60.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query61.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query62.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query63.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query64.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query65.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query66.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query67.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query68.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query69.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query7.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query70.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query71.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query72.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query73.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query74.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query75.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query76.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query77.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query78.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query79.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query8.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query80.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query81.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query82.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query83.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query84.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query85.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query86.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query87.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query88.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query89.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query9.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query90.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query91.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query92.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query93.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query94.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query95.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query96.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query97.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query98.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/ansi/query99.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query1.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query10.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query11.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query12.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query13.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query14.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query15.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query16.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query17.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query18.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query19.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query2.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query20.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query21.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query22.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query23.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query24.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query25.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query26.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query27.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query28.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query29.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query3.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query30.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query31.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query32.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query33.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query34.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query35.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query36.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query37.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query38.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query39.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query4.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query40.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query41.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query42.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query43.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query44.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query45.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query46.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query47.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query48.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query49.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query5.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query50.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query51.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query52.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query53.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query54.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query55.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query56.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query57.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query58.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query59.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query6.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query60.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query61.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query62.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query63.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query64.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query65.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query66.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query67.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query68.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query69.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query7.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query70.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query71.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query72.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query73.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query74.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query75.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query76.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query77.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query78.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query79.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query8.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query80.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query81.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query82.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query83.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query84.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query85.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query86.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query87.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query88.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query89.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query9.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query90.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query91.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query92.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query93.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query94.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query95.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query96.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query97.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query98.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query99.sql +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/queries/tpcds/test_tpcds.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/parsing/test_ast.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/sql/utils.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/superset_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/transpilation_test.py +0 -0
- {datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/tests/utils_test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: datajunction-server
|
|
3
|
-
Version: 0.0.1a49
|
|
3
|
+
Version: 0.0.1a49.dev0
|
|
4
4
|
Summary: DataJunction server library for running to a DataJunction server
|
|
5
5
|
Project-URL: repository, https://github.com/DataJunction/dj
|
|
6
6
|
Author-email: DataJunction Authors <yian.shang@gmail.com>
|
{datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/data.py
RENAMED
|
@@ -5,7 +5,7 @@ Data related APIs.
|
|
|
5
5
|
from http import HTTPStatus
|
|
6
6
|
from typing import Annotated, Dict, List, Optional
|
|
7
7
|
|
|
8
|
-
from fastapi import Depends, Header, Query, Request
|
|
8
|
+
from fastapi import BackgroundTasks, Depends, Header, Query, Request
|
|
9
9
|
from fastapi.responses import JSONResponse
|
|
10
10
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
11
11
|
from sqlalchemy.orm import joinedload, selectinload
|
|
@@ -181,6 +181,7 @@ async def get_data( # pylint: disable=too-many-locals
|
|
|
181
181
|
validate_access: access.ValidateAccessFn = Depends( # pylint: disable=W0621
|
|
182
182
|
validate_access,
|
|
183
183
|
),
|
|
184
|
+
background_tasks: BackgroundTasks,
|
|
184
185
|
) -> QueryWithResults:
|
|
185
186
|
"""
|
|
186
187
|
Gets data for a node
|
|
@@ -196,6 +197,7 @@ async def get_data( # pylint: disable=too-many-locals
|
|
|
196
197
|
engine_version=engine_version,
|
|
197
198
|
current_user=current_user,
|
|
198
199
|
validate_access=validate_access,
|
|
200
|
+
background_tasks=background_tasks,
|
|
199
201
|
)
|
|
200
202
|
node = await Node.get_by_name(session, node_name, raise_if_not_exists=True)
|
|
201
203
|
available_engines = node.current.catalog.engines # type: ignore
|
|
@@ -250,6 +252,7 @@ async def get_data_stream_for_node( # pylint: disable=R0914, R0913
|
|
|
250
252
|
validate_access: access.ValidateAccessFn = Depends( # pylint: disable=W0621
|
|
251
253
|
validate_access,
|
|
252
254
|
),
|
|
255
|
+
background_tasks: BackgroundTasks,
|
|
253
256
|
) -> QueryWithResults:
|
|
254
257
|
"""
|
|
255
258
|
Return data for a node using server side events
|
|
@@ -265,6 +268,7 @@ async def get_data_stream_for_node( # pylint: disable=R0914, R0913
|
|
|
265
268
|
engine_version=engine_version,
|
|
266
269
|
current_user=current_user,
|
|
267
270
|
validate_access=validate_access,
|
|
271
|
+
background_tasks=background_tasks,
|
|
268
272
|
)
|
|
269
273
|
if query_request and query_request.query_id:
|
|
270
274
|
return EventSourceResponse(
|
|
@@ -21,6 +21,7 @@ from datajunction_server.construction.build import (
|
|
|
21
21
|
build_materialized_cube_node,
|
|
22
22
|
build_metric_nodes,
|
|
23
23
|
build_node,
|
|
24
|
+
get_default_criteria,
|
|
24
25
|
rename_columns,
|
|
25
26
|
validate_shared_dimensions,
|
|
26
27
|
)
|
|
@@ -50,10 +51,9 @@ from datajunction_server.errors import (
|
|
|
50
51
|
from datajunction_server.internal.engines import get_engine
|
|
51
52
|
from datajunction_server.models import access
|
|
52
53
|
from datajunction_server.models.attribute import RESERVED_ATTRIBUTE_NAMESPACE
|
|
53
|
-
from datajunction_server.models.engine import Dialect
|
|
54
54
|
from datajunction_server.models.history import status_change_history
|
|
55
55
|
from datajunction_server.models.metric import TranslatedSQL
|
|
56
|
-
from datajunction_server.models.node import
|
|
56
|
+
from datajunction_server.models.node import NodeStatus
|
|
57
57
|
from datajunction_server.models.node_type import NodeType
|
|
58
58
|
from datajunction_server.models.query import ColumnMetadata, QueryWithResults
|
|
59
59
|
from datajunction_server.naming import LOOKUP_CHARS
|
|
@@ -204,19 +204,7 @@ async def get_query( # pylint: disable=too-many-arguments
|
|
|
204
204
|
Get a query for a metric, dimensions, and filters
|
|
205
205
|
"""
|
|
206
206
|
node = await Node.get_by_name(session, node_name)
|
|
207
|
-
|
|
208
|
-
# Builds the node for the engine's dialect if one is set or defaults to Spark
|
|
209
|
-
if (
|
|
210
|
-
not engine
|
|
211
|
-
and node.current # type: ignore
|
|
212
|
-
and node.current.catalog # type: ignore
|
|
213
|
-
and node.current.catalog.engines # type: ignore
|
|
214
|
-
):
|
|
215
|
-
engine = node.current.catalog.engines[0] # type: ignore
|
|
216
|
-
build_criteria = BuildCriteria(
|
|
217
|
-
dialect=(engine.dialect if engine and engine.dialect else Dialect.SPARK),
|
|
218
|
-
)
|
|
219
|
-
|
|
207
|
+
build_criteria = get_default_criteria(node.current, engine) # type: ignore
|
|
220
208
|
query_ast = await build_node(
|
|
221
209
|
session=session,
|
|
222
210
|
node=node.current, # type: ignore
|
{datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/nodes.py
RENAMED
|
@@ -26,6 +26,7 @@ from datajunction_server.api.helpers import (
|
|
|
26
26
|
from datajunction_server.api.namespaces import create_node_namespace
|
|
27
27
|
from datajunction_server.api.tags import get_tags_by_name
|
|
28
28
|
from datajunction_server.constants import NODE_LIST_MAX
|
|
29
|
+
from datajunction_server.database import DimensionLink
|
|
29
30
|
from datajunction_server.database.attributetype import ColumnAttribute
|
|
30
31
|
from datajunction_server.database.column import Column
|
|
31
32
|
from datajunction_server.database.history import ActivityType, EntityType, History
|
|
@@ -103,7 +104,7 @@ from datajunction_server.sql.dag import (
|
|
|
103
104
|
get_downstream_nodes,
|
|
104
105
|
get_upstream_nodes,
|
|
105
106
|
)
|
|
106
|
-
from datajunction_server.sql.parsing.backends.antlr4 import parse
|
|
107
|
+
from datajunction_server.sql.parsing.backends.antlr4 import parse, parse_rule
|
|
107
108
|
from datajunction_server.utils import (
|
|
108
109
|
Version,
|
|
109
110
|
get_current_user,
|
|
@@ -967,11 +968,10 @@ async def refresh_source_node(
|
|
|
967
968
|
if new_columns:
|
|
968
969
|
# check if any of the columns have changed (only continue with update if they have)
|
|
969
970
|
column_changes = {col.identifier() for col in current_revision.columns} != {
|
|
970
|
-
col.
|
|
971
|
+
(col.name, str(parse_rule(str(col.type), "dataType")))
|
|
972
|
+
for col in new_columns
|
|
971
973
|
}
|
|
972
974
|
|
|
973
|
-
# FIXME: there is a bug with type translation (bigint != long) - fix it. # pylint: disable=fixme
|
|
974
|
-
|
|
975
975
|
# if the columns haven't changed and the node has a table, we can skip the update
|
|
976
976
|
if not column_changes:
|
|
977
977
|
if not source_node.missing_table: # type: ignore
|
|
@@ -998,6 +998,16 @@ async def refresh_source_node(
|
|
|
998
998
|
schema_=current_revision.schema_,
|
|
999
999
|
table=current_revision.table,
|
|
1000
1000
|
status=current_revision.status,
|
|
1001
|
+
dimension_links=[
|
|
1002
|
+
DimensionLink(
|
|
1003
|
+
dimension_id=link.dimension_id,
|
|
1004
|
+
join_sql=link.join_sql,
|
|
1005
|
+
join_type=link.join_type,
|
|
1006
|
+
join_cardinality=link.join_cardinality,
|
|
1007
|
+
materialization_conf=link.materialization_conf,
|
|
1008
|
+
)
|
|
1009
|
+
for link in current_revision.dimension_links
|
|
1010
|
+
],
|
|
1001
1011
|
)
|
|
1002
1012
|
new_revision.version = str(old_version.next_major_version())
|
|
1003
1013
|
new_revision.columns = [
|
{datajunction_server-0.0.1a49 → datajunction_server-0.0.1a49.dev0}/datajunction_server/api/sql.py
RENAMED
|
@@ -5,7 +5,7 @@ SQL related APIs.
|
|
|
5
5
|
import logging
|
|
6
6
|
from typing import List, Optional, Tuple
|
|
7
7
|
|
|
8
|
-
from fastapi import Depends, Query
|
|
8
|
+
from fastapi import BackgroundTasks, Depends, Query
|
|
9
9
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
10
10
|
|
|
11
11
|
from datajunction_server.api.helpers import (
|
|
@@ -15,12 +15,14 @@ from datajunction_server.api.helpers import (
|
|
|
15
15
|
validate_orderby,
|
|
16
16
|
)
|
|
17
17
|
from datajunction_server.construction.build import get_measures_query
|
|
18
|
+
from datajunction_server.database import Engine
|
|
18
19
|
from datajunction_server.database.queryrequest import QueryBuildType, QueryRequest
|
|
19
20
|
from datajunction_server.database.user import User
|
|
20
21
|
from datajunction_server.internal.access.authentication.http import SecureAPIRouter
|
|
21
22
|
from datajunction_server.internal.access.authorization import validate_access
|
|
22
23
|
from datajunction_server.internal.engines import get_engine
|
|
23
24
|
from datajunction_server.models import access
|
|
25
|
+
from datajunction_server.models.access import AccessControlStore
|
|
24
26
|
from datajunction_server.models.metric import TranslatedSQL
|
|
25
27
|
from datajunction_server.models.user import UserOutput
|
|
26
28
|
from datajunction_server.utils import get_current_user, get_session, get_settings
|
|
@@ -108,6 +110,51 @@ async def get_measures_sql_for_cube(
|
|
|
108
110
|
return measures_query
|
|
109
111
|
|
|
110
112
|
|
|
113
|
+
async def build_and_save_node_sql( # pylint: disable=too-many-locals
|
|
114
|
+
node_name: str,
|
|
115
|
+
dimensions: List[str] = Query([]),
|
|
116
|
+
filters: List[str] = Query([]),
|
|
117
|
+
orderby: List[str] = Query([]),
|
|
118
|
+
limit: Optional[int] = None,
|
|
119
|
+
*,
|
|
120
|
+
session: AsyncSession = Depends(get_session),
|
|
121
|
+
engine: Engine,
|
|
122
|
+
access_control: AccessControlStore,
|
|
123
|
+
) -> QueryRequest:
|
|
124
|
+
"""
|
|
125
|
+
Build node SQL and save it to query requests
|
|
126
|
+
"""
|
|
127
|
+
query_ast = await get_query(
|
|
128
|
+
session=session,
|
|
129
|
+
node_name=node_name,
|
|
130
|
+
dimensions=dimensions,
|
|
131
|
+
filters=filters,
|
|
132
|
+
orderby=orderby,
|
|
133
|
+
limit=limit,
|
|
134
|
+
engine=engine,
|
|
135
|
+
access_control=access_control,
|
|
136
|
+
)
|
|
137
|
+
columns = [
|
|
138
|
+
assemble_column_metadata(col) # type: ignore
|
|
139
|
+
for col in query_ast.select.projection
|
|
140
|
+
]
|
|
141
|
+
query = str(query_ast)
|
|
142
|
+
query_request = await QueryRequest.save_query_request(
|
|
143
|
+
session=session,
|
|
144
|
+
nodes=[node_name],
|
|
145
|
+
dimensions=dimensions,
|
|
146
|
+
filters=filters,
|
|
147
|
+
orderby=orderby,
|
|
148
|
+
limit=limit,
|
|
149
|
+
engine_name=engine.name if engine else None,
|
|
150
|
+
engine_version=engine.version if engine else None,
|
|
151
|
+
query_type=QueryBuildType.NODE,
|
|
152
|
+
query=query,
|
|
153
|
+
columns=[col.dict() for col in columns],
|
|
154
|
+
)
|
|
155
|
+
return query_request
|
|
156
|
+
|
|
157
|
+
|
|
111
158
|
async def get_node_sql( # pylint: disable=too-many-locals
|
|
112
159
|
node_name: str,
|
|
113
160
|
dimensions: List[str] = Query([]),
|
|
@@ -120,6 +167,7 @@ async def get_node_sql( # pylint: disable=too-many-locals
|
|
|
120
167
|
engine_version: Optional[str] = None,
|
|
121
168
|
current_user: Optional[User],
|
|
122
169
|
validate_access: access.ValidateAccessFn, # pylint: disable=redefined-outer-name
|
|
170
|
+
background_tasks: BackgroundTasks,
|
|
123
171
|
) -> Tuple[TranslatedSQL, QueryRequest]:
|
|
124
172
|
"""
|
|
125
173
|
Return SQL for a node.
|
|
@@ -149,6 +197,18 @@ async def get_node_sql( # pylint: disable=too-many-locals
|
|
|
149
197
|
engine_version=engine.version if engine else None,
|
|
150
198
|
query_type=QueryBuildType.NODE,
|
|
151
199
|
):
|
|
200
|
+
# Update the node SQL in a background task to keep it up-to-date
|
|
201
|
+
background_tasks.add_task(
|
|
202
|
+
build_and_save_node_sql,
|
|
203
|
+
node_name=node_name,
|
|
204
|
+
dimensions=dimensions,
|
|
205
|
+
filters=filters,
|
|
206
|
+
orderby=orderby,
|
|
207
|
+
limit=limit,
|
|
208
|
+
session=session,
|
|
209
|
+
engine=engine,
|
|
210
|
+
access_control=access_control,
|
|
211
|
+
)
|
|
152
212
|
return (
|
|
153
213
|
TranslatedSQL(
|
|
154
214
|
sql=query_request.query,
|
|
@@ -158,38 +218,20 @@ async def get_node_sql( # pylint: disable=too-many-locals
|
|
|
158
218
|
query_request,
|
|
159
219
|
)
|
|
160
220
|
|
|
161
|
-
|
|
162
|
-
session=session,
|
|
221
|
+
query_request = await build_and_save_node_sql(
|
|
163
222
|
node_name=node_name,
|
|
164
223
|
dimensions=dimensions,
|
|
165
224
|
filters=filters,
|
|
166
225
|
orderby=orderby,
|
|
167
226
|
limit=limit,
|
|
168
|
-
engine=engine,
|
|
169
|
-
access_control=access_control,
|
|
170
|
-
)
|
|
171
|
-
columns = [
|
|
172
|
-
assemble_column_metadata(col) # type: ignore
|
|
173
|
-
for col in query_ast.select.projection
|
|
174
|
-
]
|
|
175
|
-
query = str(query_ast)
|
|
176
|
-
query_request = await QueryRequest.save_query_request(
|
|
177
227
|
session=session,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
filters=filters,
|
|
181
|
-
orderby=orderby,
|
|
182
|
-
limit=limit,
|
|
183
|
-
engine_name=engine.name if engine else None,
|
|
184
|
-
engine_version=engine.version if engine else None,
|
|
185
|
-
query_type=QueryBuildType.NODE,
|
|
186
|
-
query=query,
|
|
187
|
-
columns=[col.dict() for col in columns],
|
|
228
|
+
engine=engine, # type: ignore
|
|
229
|
+
access_control=access_control,
|
|
188
230
|
)
|
|
189
231
|
return (
|
|
190
232
|
TranslatedSQL(
|
|
191
|
-
sql=query,
|
|
192
|
-
columns=columns,
|
|
233
|
+
sql=query_request.query,
|
|
234
|
+
columns=query_request.columns,
|
|
193
235
|
dialect=engine.dialect if engine else None,
|
|
194
236
|
),
|
|
195
237
|
query_request,
|
|
@@ -215,6 +257,7 @@ async def get_sql( # pylint: disable=too-many-locals
|
|
|
215
257
|
validate_access: access.ValidateAccessFn = Depends( # pylint: disable=W0621
|
|
216
258
|
validate_access,
|
|
217
259
|
),
|
|
260
|
+
background_tasks: BackgroundTasks,
|
|
218
261
|
) -> TranslatedSQL:
|
|
219
262
|
"""
|
|
220
263
|
Return SQL for a node.
|
|
@@ -230,6 +273,7 @@ async def get_sql( # pylint: disable=too-many-locals
|
|
|
230
273
|
engine_version=engine_version,
|
|
231
274
|
current_user=current_user,
|
|
232
275
|
validate_access=validate_access,
|
|
276
|
+
background_tasks=background_tasks,
|
|
233
277
|
)
|
|
234
278
|
return translated_sql
|
|
235
279
|
|
|
@@ -7,9 +7,9 @@ import time
|
|
|
7
7
|
from typing import DefaultDict, Deque, Dict, List, Optional, Set, Tuple, Union, cast
|
|
8
8
|
|
|
9
9
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
10
|
-
from sqlalchemy.orm import joinedload
|
|
11
10
|
|
|
12
11
|
from datajunction_server.construction.utils import to_namespaced_name
|
|
12
|
+
from datajunction_server.database import Engine
|
|
13
13
|
from datajunction_server.database.column import Column
|
|
14
14
|
from datajunction_server.database.node import Node, NodeRevision
|
|
15
15
|
from datajunction_server.database.user import User
|
|
@@ -382,6 +382,42 @@ async def join_tables_for_dimensions(
|
|
|
382
382
|
)
|
|
383
383
|
|
|
384
384
|
|
|
385
|
+
def build_filters(
|
|
386
|
+
node: NodeRevision,
|
|
387
|
+
node_table: Optional[ast.Table],
|
|
388
|
+
filters: Optional[List[str]],
|
|
389
|
+
) -> List[ast.Expression]:
|
|
390
|
+
"""
|
|
391
|
+
Returns a list of built filter expressions based on the provided node
|
|
392
|
+
and its table expression.
|
|
393
|
+
"""
|
|
394
|
+
filter_asts: List[ast.Expression] = []
|
|
395
|
+
if not filters:
|
|
396
|
+
return filter_asts
|
|
397
|
+
dimensions_to_columns_map = node.dimensions_to_columns_map()
|
|
398
|
+
for filter_ in filters:
|
|
399
|
+
temp_select = parse(f"select * where {filter_}").select
|
|
400
|
+
referenced_dimensions = list(temp_select.find_all(ast.Column))
|
|
401
|
+
# We can only push down the filter if all dimensions referenced by the filter
|
|
402
|
+
# are available as foreign key columns on the node
|
|
403
|
+
all_referenced_dimensions_available_on_node = all(
|
|
404
|
+
dim.identifier() in dimensions_to_columns_map
|
|
405
|
+
for dim in referenced_dimensions
|
|
406
|
+
)
|
|
407
|
+
if all_referenced_dimensions_available_on_node:
|
|
408
|
+
# Renames the columns from dimension attributes to columns that match those
|
|
409
|
+
# dimension attributes on the node
|
|
410
|
+
for dim in referenced_dimensions:
|
|
411
|
+
col_name = dimensions_to_columns_map[dim.identifier()].alias_or_name
|
|
412
|
+
dim.name = ast.Name(name=col_name)
|
|
413
|
+
if node_table:
|
|
414
|
+
dim.add_table(node_table)
|
|
415
|
+
filter_asts.append(
|
|
416
|
+
temp_select.where, # type: ignore
|
|
417
|
+
)
|
|
418
|
+
return filter_asts
|
|
419
|
+
|
|
420
|
+
|
|
385
421
|
async def _build_tables_on_select(
|
|
386
422
|
session: AsyncSession,
|
|
387
423
|
select: ast.SelectExpression,
|
|
@@ -395,87 +431,25 @@ async def _build_tables_on_select(
|
|
|
395
431
|
"""
|
|
396
432
|
Add all nodes not agg or filter dimensions to the select
|
|
397
433
|
"""
|
|
434
|
+
context = CompileContext(session=session, exception=DJException())
|
|
435
|
+
|
|
398
436
|
for node, tbls in tables.items():
|
|
399
|
-
|
|
437
|
+
await session.refresh(node, ["dimension_links"])
|
|
438
|
+
# Save any existing filters on the query
|
|
439
|
+
filter_asts = [select.where] if select.where else []
|
|
440
|
+
|
|
441
|
+
# Try to find a physical table attached to this node, if one exists.
|
|
442
|
+
physical_table = cast(
|
|
400
443
|
Optional[ast.Table],
|
|
401
444
|
_get_node_table(node, build_criteria),
|
|
402
|
-
)
|
|
403
|
-
fk_column_mapping = {}
|
|
404
|
-
for col in node.columns:
|
|
405
|
-
if col.dimension_id:
|
|
406
|
-
col_dimension = await Node.get_by_id(
|
|
407
|
-
session,
|
|
408
|
-
col.dimension_id,
|
|
409
|
-
joinedload(Node.current).options(
|
|
410
|
-
*NodeRevision.default_load_options()
|
|
411
|
-
),
|
|
412
|
-
)
|
|
413
|
-
fk_column_mapping[
|
|
414
|
-
",".join(
|
|
415
|
-
sorted(
|
|
416
|
-
[
|
|
417
|
-
pk.name for pk in col_dimension.current.primary_key() # type: ignore # pylint: disable=line-too-long
|
|
418
|
-
],
|
|
419
|
-
),
|
|
420
|
-
)
|
|
421
|
-
] = col
|
|
445
|
+
)
|
|
422
446
|
|
|
423
|
-
|
|
447
|
+
# If no attached physical table was found, recursively build the node
|
|
448
|
+
if physical_table is None:
|
|
424
449
|
node_query = parse(cast(str, node.query))
|
|
425
450
|
if hash(node_query) in memoized_queries: # pragma: no cover
|
|
426
|
-
|
|
451
|
+
query_ast = memoized_queries[hash(node_query)] # type: ignore
|
|
427
452
|
else:
|
|
428
|
-
if filters:
|
|
429
|
-
filter_asts = ( # pylint: disable=consider-using-ternary
|
|
430
|
-
node_query.select.where and [node_query.select.where] or []
|
|
431
|
-
)
|
|
432
|
-
foreign_keys_map = {
|
|
433
|
-
left.alias_or_name.name: right
|
|
434
|
-
for link in node.dimension_links
|
|
435
|
-
for left, right in link.foreign_key_mapping().items()
|
|
436
|
-
}
|
|
437
|
-
foreign_keys_alias_map = {
|
|
438
|
-
col.alias_or_name.name: col # type: ignore
|
|
439
|
-
for col in node_query.select.projection
|
|
440
|
-
}
|
|
441
|
-
for filter_ in filters:
|
|
442
|
-
temp_select = parse(f"select * where {filter_}").select
|
|
443
|
-
referenced_cols = list(temp_select.find_all(ast.Column))
|
|
444
|
-
|
|
445
|
-
# We can only push down the filter if all columns referenced by the filter
|
|
446
|
-
# are available as foreign key columns on the node
|
|
447
|
-
if all(
|
|
448
|
-
col.alias_or_name.name in fk_column_mapping
|
|
449
|
-
or col.alias_or_name.name in foreign_keys_map
|
|
450
|
-
for col in referenced_cols
|
|
451
|
-
):
|
|
452
|
-
# Renames the columns to the foreign key columns
|
|
453
|
-
for col in referenced_cols:
|
|
454
|
-
ref_col_name = (
|
|
455
|
-
fk_column_mapping[col.alias_or_name.name].name
|
|
456
|
-
if col.alias_or_name.name in fk_column_mapping
|
|
457
|
-
else foreign_keys_map[
|
|
458
|
-
col.alias_or_name.name
|
|
459
|
-
].alias_or_name
|
|
460
|
-
)
|
|
461
|
-
col.name = ast.Name(name=ref_col_name)
|
|
462
|
-
if ( # pragma: no cover
|
|
463
|
-
col.alias_or_name.name in foreign_keys_alias_map
|
|
464
|
-
):
|
|
465
|
-
key = foreign_keys_alias_map[ # type: ignore
|
|
466
|
-
col.alias_or_name.name
|
|
467
|
-
]
|
|
468
|
-
col.name = (
|
|
469
|
-
key.name
|
|
470
|
-
if isinstance(key, ast.Named)
|
|
471
|
-
else key.alias_or_name # type: ignore
|
|
472
|
-
)
|
|
473
|
-
filter_asts.append(
|
|
474
|
-
temp_select.where, # type: ignore
|
|
475
|
-
)
|
|
476
|
-
if filter_asts:
|
|
477
|
-
node_query.select.where = ast.BinaryOp.And(*filter_asts)
|
|
478
|
-
|
|
479
453
|
query_ast = await build_ast( # type: ignore
|
|
480
454
|
session,
|
|
481
455
|
node_query,
|
|
@@ -485,16 +459,26 @@ async def _build_tables_on_select(
|
|
|
485
459
|
dimensions,
|
|
486
460
|
access_control,
|
|
487
461
|
)
|
|
488
|
-
node_table = query_ast.select # type: ignore
|
|
489
|
-
node_table.parenthesized = True # type: ignore
|
|
490
462
|
memoized_queries[hash(node_query)] = query_ast
|
|
491
463
|
|
|
492
|
-
|
|
493
|
-
|
|
464
|
+
alias = amenable_name(node.name)
|
|
465
|
+
node_ast = ast.Alias(ast.Name(alias), child=query_ast.select, as_=True) # type: ignore
|
|
466
|
+
query_ast.select.parenthesized = True # type: ignore
|
|
467
|
+
|
|
468
|
+
filter_asts.extend(build_filters(node, node_ast, filters)) # type: ignore
|
|
469
|
+
else:
|
|
470
|
+
alias = amenable_name(node.name)
|
|
471
|
+
node_ast = ast.Alias(ast.Name(alias), child=physical_table, as_=True) # type: ignore
|
|
472
|
+
filter_asts.extend(build_filters(node, physical_table, filters))
|
|
473
|
+
|
|
474
|
+
if filter_asts:
|
|
475
|
+
print("filter_asts", node.name, filter_asts, select)
|
|
476
|
+
select.where = ast.BinaryOp.And(*filter_asts)
|
|
477
|
+
await select.compile(context)
|
|
494
478
|
|
|
495
|
-
node_ast = ast.Alias(ast.Name(alias), child=node_table, as_=True) # type: ignore
|
|
496
479
|
for tbl in tbls:
|
|
497
|
-
|
|
480
|
+
print("node_ast", type(node_ast), node_ast)
|
|
481
|
+
if isinstance(node_ast.child, ast.Select) and isinstance(tbl, ast.Alias): # type: ignore
|
|
498
482
|
node_ast.child.projection = [
|
|
499
483
|
col
|
|
500
484
|
for col in node_ast.child.projection
|
|
@@ -831,17 +815,24 @@ def _get_node_table(
|
|
|
831
815
|
|
|
832
816
|
def get_default_criteria(
|
|
833
817
|
node: NodeRevision,
|
|
818
|
+
engine: Optional[Engine] = None,
|
|
834
819
|
) -> BuildCriteria:
|
|
835
820
|
"""
|
|
836
821
|
Get the default build criteria for a node.
|
|
837
822
|
"""
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
823
|
+
# Set the dialect by using the provided engine, if any. If no engine is specified,
|
|
824
|
+
# set the dialect by finding available engines for this node, or default to Spark
|
|
825
|
+
dialect = (
|
|
826
|
+
engine.dialect
|
|
827
|
+
if engine
|
|
828
|
+
else (
|
|
841
829
|
node.catalog.engines[0].dialect
|
|
842
830
|
if node.catalog and node.catalog.engines and node.catalog.engines[0].dialect
|
|
843
831
|
else Dialect.SPARK
|
|
844
|
-
)
|
|
832
|
+
)
|
|
833
|
+
)
|
|
834
|
+
return BuildCriteria(
|
|
835
|
+
dialect=dialect,
|
|
845
836
|
target_node_name=node.name,
|
|
846
837
|
)
|
|
847
838
|
|
|
@@ -330,9 +330,11 @@ class Node(Base): # pylint: disable=too-few-public-methods
|
|
|
330
330
|
"""
|
|
331
331
|
Get a node by id
|
|
332
332
|
"""
|
|
333
|
-
statement =
|
|
334
|
-
|
|
335
|
-
|
|
333
|
+
statement = (
|
|
334
|
+
select(Node).where(Node.id == node_id).options(*options)
|
|
335
|
+
) # pragma: no cover
|
|
336
|
+
result = await session.execute(statement) # pragma: no cover
|
|
337
|
+
node = result.unique().scalar_one_or_none() # pragma: no cover
|
|
336
338
|
return node
|
|
337
339
|
|
|
338
340
|
@classmethod
|
|
@@ -741,6 +743,17 @@ class NodeRevision(
|
|
|
741
743
|
if col.partition and col.partition.type_ == PartitionType.CATEGORICAL
|
|
742
744
|
]
|
|
743
745
|
|
|
746
|
+
def dimensions_to_columns_map(self):
|
|
747
|
+
"""
|
|
748
|
+
A mapping between each of the dimension attributes linked to this node to the columns
|
|
749
|
+
that they're linked to.
|
|
750
|
+
"""
|
|
751
|
+
return {
|
|
752
|
+
left.identifier(): right
|
|
753
|
+
for link in self.dimension_links
|
|
754
|
+
for left, right in link.foreign_key_mapping().items()
|
|
755
|
+
}
|
|
756
|
+
|
|
744
757
|
def __deepcopy__(self, memo):
|
|
745
758
|
"""
|
|
746
759
|
Note: We should not use copy or deepcopy to copy any SQLAlchemy objects.
|
|
@@ -147,7 +147,6 @@ def build_materialization_query(
|
|
|
147
147
|
)
|
|
148
148
|
|
|
149
149
|
categorical_partitions = node_revision.categorical_partition_columns()
|
|
150
|
-
print("categorical_partitions", categorical_partitions)
|
|
151
150
|
if categorical_partitions:
|
|
152
151
|
categorical_partition_col = [
|
|
153
152
|
col
|
|
@@ -181,5 +180,4 @@ def build_materialization_query(
|
|
|
181
180
|
final_query.select.from_ = ast.From(
|
|
182
181
|
relations=[ast.Relation(primary=ast.Table(name=ast.Name("combiner_query")))],
|
|
183
182
|
)
|
|
184
|
-
print("final_queryfinal_query", final_query)
|
|
185
183
|
return final_query
|
|
@@ -291,7 +291,7 @@ class NestedField(ColumnType):
|
|
|
291
291
|
doc_string = "" if doc is None else f", doc={repr(doc)}"
|
|
292
292
|
super().__init__(
|
|
293
293
|
(
|
|
294
|
-
f"{name}
|
|
294
|
+
f"{name} {field_type}"
|
|
295
295
|
f"{' NOT NULL' if not is_optional else ''}"
|
|
296
296
|
+ ("" if doc is None else f" {doc}")
|
|
297
297
|
),
|
|
@@ -364,7 +364,7 @@ field_type=IntegerType(), is_optional=True, doc='an optional field'))
|
|
|
364
364
|
def __init__(self, *fields: NestedField):
|
|
365
365
|
if not self._initialized:
|
|
366
366
|
super().__init__(
|
|
367
|
-
f"struct<{',
|
|
367
|
+
f"struct<{','.join(map(str, fields))}>",
|
|
368
368
|
f"StructType{repr(fields)}",
|
|
369
369
|
)
|
|
370
370
|
self._fields = fields
|
|
@@ -1639,7 +1639,12 @@ class TestNodeCRUD: # pylint: disable=too-many-public-methods
|
|
|
1639
1639
|
history = response.json()
|
|
1640
1640
|
assert [
|
|
1641
1641
|
(activity["activity_type"], activity["entity_type"]) for activity in history
|
|
1642
|
-
] == [
|
|
1642
|
+
] == [
|
|
1643
|
+
("refresh", "node"),
|
|
1644
|
+
("create", "link"),
|
|
1645
|
+
("create", "link"),
|
|
1646
|
+
("create", "node"),
|
|
1647
|
+
]
|
|
1643
1648
|
|
|
1644
1649
|
# Refresh it again, but this time no columns will have changed so
|
|
1645
1650
|
# verify that the node revision stays the same
|
|
@@ -1651,6 +1656,33 @@ class TestNodeCRUD: # pylint: disable=too-many-public-methods
|
|
|
1651
1656
|
assert data_second["node_revision_id"] == data["node_revision_id"]
|
|
1652
1657
|
assert data_second["columns"] == new_columns
|
|
1653
1658
|
|
|
1659
|
+
# The refreshed source node should retain the existing dimension links
|
|
1660
|
+
response = await custom_client.get("/nodes/default.repair_orders")
|
|
1661
|
+
assert response.json()["dimension_links"] == [
|
|
1662
|
+
{
|
|
1663
|
+
"dimension": {"name": "default.repair_order"},
|
|
1664
|
+
"foreign_keys": {
|
|
1665
|
+
"default.repair_orders.repair_order_id": "default.repair_order.repair_order_id",
|
|
1666
|
+
},
|
|
1667
|
+
"join_cardinality": "many_to_one",
|
|
1668
|
+
"join_sql": "default.repair_orders.repair_order_id = "
|
|
1669
|
+
"default.repair_order.repair_order_id",
|
|
1670
|
+
"join_type": "left",
|
|
1671
|
+
"role": None,
|
|
1672
|
+
},
|
|
1673
|
+
{
|
|
1674
|
+
"dimension": {"name": "default.dispatcher"},
|
|
1675
|
+
"foreign_keys": {
|
|
1676
|
+
"default.repair_orders.dispatcher_id": "default.dispatcher.dispatcher_id",
|
|
1677
|
+
},
|
|
1678
|
+
"join_cardinality": "many_to_one",
|
|
1679
|
+
"join_sql": "default.repair_orders.dispatcher_id = "
|
|
1680
|
+
"default.dispatcher.dispatcher_id",
|
|
1681
|
+
"join_type": "left",
|
|
1682
|
+
"role": None,
|
|
1683
|
+
},
|
|
1684
|
+
]
|
|
1685
|
+
|
|
1654
1686
|
@pytest.mark.asyncio
|
|
1655
1687
|
async def test_refresh_source_node_with_problems(
|
|
1656
1688
|
self,
|
|
@@ -1684,7 +1716,12 @@ class TestNodeCRUD: # pylint: disable=too-many-public-methods
|
|
|
1684
1716
|
history = response.json()
|
|
1685
1717
|
assert [
|
|
1686
1718
|
(activity["activity_type"], activity["entity_type"]) for activity in history
|
|
1687
|
-
] == [
|
|
1719
|
+
] == [
|
|
1720
|
+
("refresh", "node"),
|
|
1721
|
+
("create", "link"),
|
|
1722
|
+
("create", "link"),
|
|
1723
|
+
("create", "node"),
|
|
1724
|
+
]
|
|
1688
1725
|
|
|
1689
1726
|
# Refresh it again, but this time no columns are found
|
|
1690
1727
|
mocker.patch.object(
|
|
@@ -2692,11 +2729,11 @@ GROUP BY
|
|
|
2692
2729
|
"attributes": [],
|
|
2693
2730
|
"dimension": None,
|
|
2694
2731
|
"name": "measures",
|
|
2695
|
-
"type": "struct<completed_repairs
|
|
2696
|
-
"total_repairs_dispatched
|
|
2697
|
-
"total_amount_in_region
|
|
2698
|
-
"avg_repair_amount_in_region
|
|
2699
|
-
"avg_dispatch_delay
|
|
2732
|
+
"type": "struct<completed_repairs bigint,"
|
|
2733
|
+
"total_repairs_dispatched bigint,"
|
|
2734
|
+
"total_amount_in_region double,"
|
|
2735
|
+
"avg_repair_amount_in_region double,"
|
|
2736
|
+
"avg_dispatch_delay double,unique_contractors "
|
|
2700
2737
|
"bigint>",
|
|
2701
2738
|
"display_name": "Measures",
|
|
2702
2739
|
"partition": None,
|