datajunction-server 0.0.1a49.dev0__tar.gz → 0.0.1a49.dev2__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.dev0 → datajunction_server-0.0.1a49.dev2}/PKG-INFO +1 -1
- datajunction_server-0.0.1a49.dev2/datajunction_server/__about__.py +4 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/data.py +1 -1
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/dimensions.py +15 -4
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/build.py +30 -12
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/dimensionlink.py +22 -3
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/node.py +1 -2
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/nodes.py +16 -11
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/node.py +9 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/dag.py +17 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/cubes_test.py +91 -56
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/data_test.py +1 -25
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/dimensions_test.py +9 -1
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/djql_test.py +36 -43
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_measures_cube.full.query.sql +19 -19
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_measures_cube.incremental.categorical.query.sql +20 -20
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_measures_cube.incremental.patched.query.sql +20 -20
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_measures_cube.incremental.query.sql +19 -19
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_metrics_cube.incremental.categorical.query.sql +19 -19
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_metrics_cube.incremental.query.sql +19 -19
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/materializations_test.py +2 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/nodes_test.py +18 -18
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/sql_test.py +323 -303
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/build_test.py +1 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/fixtures.py +5 -5
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/utils.py +7 -0
- datajunction_server-0.0.1a49.dev0/datajunction_server/__about__.py +0 -4
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.coveragerc +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.env +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.env.integration +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.flake8 +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.gitignore +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.isort.cfg +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.pre-commit-config.yaml +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.pylintrc +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/Dockerfile +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/Makefile +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/README.md +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/README +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/env.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/script.py.mako +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2023_12_20_1829-724445d2b29d_initial_migration.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_01_08_2034-945d44abcd32_add_dimension_links.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_01_11_2032-c74b11566d82_add_column_order.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_01_18_2011-20f060b02772_switch_enum_values.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_01_23_0617-c9cef8864ecb_add_missing_table_attribute_to_source_.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_01_23_1655-a8e22109be24_availability_state_s_valid_through_ts_.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_02_22_0713-d61fb7e48cc3_cascade_deletes_to_dimension_links.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_04_30_1556-de7ec1c82fe0_add_query_requests.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_05_09_1420-9b1227ff17f4_update_backfill_spec.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2024_05_21_0012-57fc93ef6947_add_query_id_to_queryrequest.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic.ini +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/basic.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/github.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/google.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/whoami.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/attributes.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/catalogs.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/client.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/cubes.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/djsql.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/engines.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/graphql/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/graphql/catalogs.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/graphql/engines.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/graphql/main.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/health.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/helpers.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/history.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/logging.conf +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/main.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/materializations.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/measures.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/metrics.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/namespaces.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/nodes.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/sql.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/tags.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/config.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/constants.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/dimensions.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/dj_query.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/exceptions.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/utils.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/attributetype.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/availabilitystate.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/backfill.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/base.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/catalog.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/column.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/database.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/engine.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/history.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/materialization.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/measure.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/metricmetadata.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/namespace.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/partition.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/queryrequest.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/tag.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/user.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/enum.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/errors.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/basic.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/github.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/google.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/http.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/tokens.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authorization.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/engines.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/materializations.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/namespaces.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/validation.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/jobs/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/jobs/cube_materialization.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/jobs/job_types.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/jobs/materialization_job.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/access.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/attribute.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/base.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/catalog.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/column.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/cube.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/database.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/dimensionlink.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/engine.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/history.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/materialization.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/measure.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/metric.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/node_type.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/partition.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/query.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/table.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/tag.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/user.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/naming.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/service_clients.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/functions.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/ast.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/antlr4.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/exceptions.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/SqlBaseLexer.g4 +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/SqlBaseParser.g4 +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.interp +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.tokens +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.interp +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/types.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/superset.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/transpilation.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/typing.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/utils.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/pdm.lock +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/pyproject.toml +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/requirements/docker.txt +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/requirements/test.txt +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/scripts/docs-snippets.js +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/scripts/docs-snippets.sh +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/scripts/generate-openapi.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/attributes_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/catalog_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/client_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/dimension_links_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/engine_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_measures_cube.full.druid_spec.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_measures_cube.full.partition.druid_spec.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_measures_cube.full.partition.query.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_measures_cube.incremental.druid_spec.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/druid_metrics_cube.incremental.druid_spec.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.config.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.materializations.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.partition.config.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.partition.materializations.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.partition.query.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.query.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.incremental.additional.query.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.incremental.categorical.query.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.incremental.config.json +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.incremental.lookback.query.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.incremental.query.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/graphql/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/graphql/catalog_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/graphql/engine_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/health_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/helpers_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/history_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/measures_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/metrics_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/namespaces_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/node_update_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/routers_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/tags_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/conftest.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/compile_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/exceptions_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/inference_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/utils_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/default.duckdb +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/duckdb.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/errors_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/examples.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/fixes_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/integration/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/integration/basic_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/basic_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/github_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/http_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/token_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/whoami_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/migrations_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/catalog_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/hash_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/measure_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/node_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/query_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/pytest.ini +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/service_clients_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/dag_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/functions_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/backends/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/backends/antlr4_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/backends/types_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/__init__.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query1.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query10.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query11.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query12.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query13.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query14.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query15.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query16.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query17.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query18.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query19.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query2.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query20.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query21.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query22.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query23.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query24.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query25.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query26.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query27.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query28.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query29.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query3.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query30.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query31.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query32.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query33.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query34.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query35.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query36.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query37.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query38.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query39.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query4.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query40.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query41.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query42.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query43.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query44.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query45.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query46.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query47.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query48.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query49.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query5.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query50.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query51.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query52.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query53.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query54.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query55.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query56.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query57.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query58.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query59.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query6.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query60.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query61.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query62.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query63.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query64.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query65.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query66.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query67.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query68.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query69.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query7.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query70.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query71.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query72.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query73.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query74.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query75.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query76.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query77.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query78.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query79.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query8.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query80.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query81.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query82.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query83.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query84.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query85.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query86.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query87.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query88.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query89.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query9.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query90.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query91.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query92.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query93.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query94.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query95.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query96.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query97.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query98.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query99.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query1.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query10.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query11.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query12.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query13.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query14.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query15.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query16.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query17.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query18.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query19.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query2.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query20.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query21.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query22.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query23.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query24.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query25.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query26.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query27.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query28.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query29.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query3.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query30.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query31.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query32.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query33.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query34.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query35.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query36.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query37.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query38.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query39.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query4.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query40.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query41.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query42.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query43.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query44.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query45.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query46.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query47.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query48.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query49.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query5.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query50.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query51.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query52.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query53.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query54.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query55.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query56.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query57.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query58.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query59.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query6.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query60.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query61.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query62.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query63.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query64.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query65.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query66.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query67.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query68.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query69.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query7.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query70.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query71.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query72.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query73.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query74.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query75.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query76.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query77.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query78.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query79.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query8.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query80.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query81.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query82.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query83.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query84.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query85.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query86.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query87.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query88.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query89.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query9.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query90.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query91.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query92.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query93.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query94.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query95.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query96.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query97.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query98.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query99.sql +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/test_tpcds.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/test_ast.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/superset_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/transpilation_test.py +0 -0
- {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/utils_test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: datajunction-server
|
|
3
|
-
Version: 0.0.1a49.
|
|
3
|
+
Version: 0.0.1a49.dev2
|
|
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>
|
|
@@ -17,9 +17,10 @@ from datajunction_server.internal.access.authorization import (
|
|
|
17
17
|
validate_access_requests,
|
|
18
18
|
)
|
|
19
19
|
from datajunction_server.models import access
|
|
20
|
-
from datajunction_server.models.node import NodeRevisionOutput
|
|
20
|
+
from datajunction_server.models.node import NodeIndegreeOutput, NodeRevisionOutput
|
|
21
21
|
from datajunction_server.models.node_type import NodeType
|
|
22
22
|
from datajunction_server.sql.dag import (
|
|
23
|
+
get_dimension_dag_indegree,
|
|
23
24
|
get_nodes_with_common_dimensions,
|
|
24
25
|
get_nodes_with_dimension,
|
|
25
26
|
)
|
|
@@ -30,7 +31,7 @@ _logger = logging.getLogger(__name__)
|
|
|
30
31
|
router = SecureAPIRouter(tags=["dimensions"])
|
|
31
32
|
|
|
32
33
|
|
|
33
|
-
@router.get("/dimensions/", response_model=List[
|
|
34
|
+
@router.get("/dimensions/", response_model=List[NodeIndegreeOutput])
|
|
34
35
|
async def list_dimensions(
|
|
35
36
|
prefix: Optional[str] = None,
|
|
36
37
|
*,
|
|
@@ -39,17 +40,27 @@ async def list_dimensions(
|
|
|
39
40
|
validate_access: access.ValidateAccessFn = Depends( # pylint: disable=W0621
|
|
40
41
|
validate_access,
|
|
41
42
|
),
|
|
42
|
-
) -> List[
|
|
43
|
+
) -> List[NodeIndegreeOutput]:
|
|
43
44
|
"""
|
|
44
45
|
List all available dimensions.
|
|
45
46
|
"""
|
|
46
|
-
|
|
47
|
+
node_names = await list_nodes(
|
|
47
48
|
node_type=NodeType.DIMENSION,
|
|
48
49
|
prefix=prefix,
|
|
49
50
|
session=session,
|
|
50
51
|
current_user=current_user,
|
|
51
52
|
validate_access=validate_access,
|
|
52
53
|
)
|
|
54
|
+
node_indegrees = {}
|
|
55
|
+
for node in node_names:
|
|
56
|
+
node_indegrees[node] = await get_dimension_dag_indegree(session, node)
|
|
57
|
+
return sorted(
|
|
58
|
+
[
|
|
59
|
+
NodeIndegreeOutput(name=node, indegree=node_indegrees[node])
|
|
60
|
+
for node in node_names
|
|
61
|
+
],
|
|
62
|
+
key=lambda n: -n.indegree,
|
|
63
|
+
)
|
|
53
64
|
|
|
54
65
|
|
|
55
66
|
@router.get("/dimensions/{name}/nodes/", response_model=List[NodeRevisionOutput])
|
|
@@ -384,7 +384,7 @@ async def join_tables_for_dimensions(
|
|
|
384
384
|
|
|
385
385
|
def build_filters(
|
|
386
386
|
node: NodeRevision,
|
|
387
|
-
node_table: Optional[ast.
|
|
387
|
+
node_table: Optional[ast.TableExpression],
|
|
388
388
|
filters: Optional[List[str]],
|
|
389
389
|
) -> List[ast.Expression]:
|
|
390
390
|
"""
|
|
@@ -410,7 +410,7 @@ def build_filters(
|
|
|
410
410
|
for dim in referenced_dimensions:
|
|
411
411
|
col_name = dimensions_to_columns_map[dim.identifier()].alias_or_name
|
|
412
412
|
dim.name = ast.Name(name=col_name)
|
|
413
|
-
if node_table:
|
|
413
|
+
if node_table: # pragma: no cover
|
|
414
414
|
dim.add_table(node_table)
|
|
415
415
|
filter_asts.append(
|
|
416
416
|
temp_select.where, # type: ignore
|
|
@@ -435,8 +435,6 @@ async def _build_tables_on_select(
|
|
|
435
435
|
|
|
436
436
|
for node, tbls in tables.items():
|
|
437
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
438
|
|
|
441
439
|
# Try to find a physical table attached to this node, if one exists.
|
|
442
440
|
physical_table = cast(
|
|
@@ -465,31 +463,51 @@ async def _build_tables_on_select(
|
|
|
465
463
|
node_ast = ast.Alias(ast.Name(alias), child=query_ast.select, as_=True) # type: ignore
|
|
466
464
|
query_ast.select.parenthesized = True # type: ignore
|
|
467
465
|
|
|
468
|
-
filter_asts
|
|
466
|
+
filter_asts = build_filters(node, node_ast, filters) # type: ignore
|
|
469
467
|
else:
|
|
470
468
|
alias = amenable_name(node.name)
|
|
471
469
|
node_ast = ast.Alias(ast.Name(alias), child=physical_table, as_=True) # type: ignore
|
|
472
|
-
filter_asts
|
|
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)
|
|
470
|
+
filter_asts = build_filters(node, physical_table, filters)
|
|
478
471
|
|
|
479
472
|
for tbl in tbls:
|
|
480
|
-
print("node_ast", type(node_ast), node_ast)
|
|
481
473
|
if isinstance(node_ast.child, ast.Select) and isinstance(tbl, ast.Alias): # type: ignore
|
|
482
474
|
node_ast.child.projection = [
|
|
483
475
|
col
|
|
484
476
|
for col in node_ast.child.projection
|
|
485
477
|
if col in set(tbl.child.select.projection)
|
|
486
478
|
]
|
|
479
|
+
if (
|
|
480
|
+
isinstance(node_ast.child, ast.Table)
|
|
481
|
+
and isinstance(tbl, ast.Aliasable)
|
|
482
|
+
and hasattr(tbl, "alias")
|
|
483
|
+
and tbl.alias
|
|
484
|
+
):
|
|
485
|
+
node_ast.alias.name = tbl.alias
|
|
486
|
+
|
|
487
487
|
await node_ast.compile(context)
|
|
488
|
+
|
|
489
|
+
# This will push down the filter expression to CTEs, subqueries, and top-level queries.
|
|
490
|
+
# Each `tbl` is a TableExpression that references the node in question, where the
|
|
491
|
+
# provided filters might apply. We find the table reference's nearest parent SELECT
|
|
492
|
+
# clause and populate its WHERE clause with the filters.
|
|
493
|
+
if filter_asts:
|
|
494
|
+
if nearest_select := tbl.get_nearest_parent_of_type(
|
|
495
|
+
ast.Select,
|
|
496
|
+
): # pragma: no cover
|
|
497
|
+
if nearest_select.where:
|
|
498
|
+
filter_asts.append(nearest_select.where)
|
|
499
|
+
nearest_select.where = (
|
|
500
|
+
ast.BinaryOp.And( # pylint: disable=no-value-for-parameter
|
|
501
|
+
*filter_asts
|
|
502
|
+
)
|
|
503
|
+
)
|
|
504
|
+
|
|
488
505
|
select.replace(
|
|
489
506
|
tbl,
|
|
490
507
|
node_ast,
|
|
491
508
|
copy=False,
|
|
492
509
|
)
|
|
510
|
+
await select.compile(context)
|
|
493
511
|
for col in select.find_all(ast.Column):
|
|
494
512
|
if (
|
|
495
513
|
col._table
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Dimension links table."""
|
|
2
|
-
from typing import TYPE_CHECKING, Dict, Optional
|
|
2
|
+
from typing import TYPE_CHECKING, Dict, List, Optional
|
|
3
3
|
|
|
4
|
-
from sqlalchemy import JSON, BigInteger, Enum, ForeignKey, Integer
|
|
4
|
+
from sqlalchemy import JSON, BigInteger, Enum, ForeignKey, Integer, select
|
|
5
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
5
6
|
from sqlalchemy.ext.hybrid import hybrid_property
|
|
6
|
-
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
7
|
+
from sqlalchemy.orm import Mapped, joinedload, mapped_column, relationship
|
|
7
8
|
|
|
8
9
|
from datajunction_server.database.base import Base
|
|
9
10
|
from datajunction_server.database.node import Node, NodeRevision
|
|
@@ -142,3 +143,21 @@ class DimensionLink(Base): # pylint: disable=too-few-public-methods
|
|
|
142
143
|
right.identifier(): left.identifier()
|
|
143
144
|
for left, right in self.foreign_key_mapping().items()
|
|
144
145
|
}
|
|
146
|
+
|
|
147
|
+
@classmethod
|
|
148
|
+
async def get_links_for_dimension_id(
|
|
149
|
+
cls,
|
|
150
|
+
session: AsyncSession,
|
|
151
|
+
dimension_id: int,
|
|
152
|
+
) -> List["DimensionLink"]:
|
|
153
|
+
"""
|
|
154
|
+
Get dimension links by dimension node id
|
|
155
|
+
"""
|
|
156
|
+
statement = (
|
|
157
|
+
select(cls)
|
|
158
|
+
.where(cls.dimension_id == dimension_id)
|
|
159
|
+
.options(joinedload(DimensionLink.node_revision))
|
|
160
|
+
)
|
|
161
|
+
result = await session.execute(statement)
|
|
162
|
+
links = result.unique().scalars().all()
|
|
163
|
+
return links
|
|
@@ -218,7 +218,6 @@ class Node(Base): # pylint: disable=too-few-public-methods
|
|
|
218
218
|
secondary="tagnoderelationship",
|
|
219
219
|
primaryjoin="TagNodeRelationship.node_id==Node.id",
|
|
220
220
|
secondaryjoin="TagNodeRelationship.tag_id==Tag.id",
|
|
221
|
-
# lazy="selectin",
|
|
222
221
|
)
|
|
223
222
|
|
|
224
223
|
missing_table: Mapped[bool] = mapped_column(sa.Boolean, default=False)
|
|
@@ -335,7 +334,7 @@ class Node(Base): # pylint: disable=too-few-public-methods
|
|
|
335
334
|
) # pragma: no cover
|
|
336
335
|
result = await session.execute(statement) # pragma: no cover
|
|
337
336
|
node = result.unique().scalar_one_or_none() # pragma: no cover
|
|
338
|
-
return node
|
|
337
|
+
return node # pragma: no cover
|
|
339
338
|
|
|
340
339
|
@classmethod
|
|
341
340
|
async def find(
|
|
@@ -1538,26 +1538,31 @@ async def remove_dimension_link(
|
|
|
1538
1538
|
removed = False
|
|
1539
1539
|
|
|
1540
1540
|
# Find cubes that are affected by this dimension link removal and update their statuses
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
[NodeType.CUBE],
|
|
1546
|
-
)
|
|
1547
|
-
or []
|
|
1541
|
+
downstream_cubes = await get_downstream_nodes(
|
|
1542
|
+
session,
|
|
1543
|
+
node_name,
|
|
1544
|
+
node_type=NodeType.CUBE,
|
|
1548
1545
|
)
|
|
1549
|
-
for cube in
|
|
1550
|
-
|
|
1551
|
-
|
|
1546
|
+
for cube in downstream_cubes:
|
|
1547
|
+
for elem in cube.current.cube_elements:
|
|
1548
|
+
await session.refresh(elem, ["node_revisions"])
|
|
1549
|
+
cube_dimension_nodes = [
|
|
1550
|
+
cube_elem_node.name
|
|
1551
|
+
for (element, cube_elem_node) in cube.current.cube_elements_with_nodes()
|
|
1552
|
+
if cube_elem_node.type == NodeType.DIMENSION
|
|
1553
|
+
]
|
|
1554
|
+
if dimension_node.name in cube_dimension_nodes:
|
|
1555
|
+
cube.current.status = NodeStatus.INVALID
|
|
1552
1556
|
session.add(cube)
|
|
1553
1557
|
session.add(
|
|
1554
1558
|
status_change_history(
|
|
1555
|
-
|
|
1559
|
+
cube.current, # type: ignore
|
|
1556
1560
|
NodeStatus.VALID,
|
|
1557
1561
|
NodeStatus.INVALID,
|
|
1558
1562
|
current_user=current_user,
|
|
1559
1563
|
),
|
|
1560
1564
|
)
|
|
1565
|
+
await session.commit()
|
|
1561
1566
|
|
|
1562
1567
|
# Delete the dimension link if one exists
|
|
1563
1568
|
for link in node.current.dimension_links: # type: ignore
|
|
@@ -720,3 +720,20 @@ def topological_sort(nodes: List[Node]) -> List[Node]:
|
|
|
720
720
|
raise DJException("Graph has at least one cycle")
|
|
721
721
|
|
|
722
722
|
return sorted_nodes[::-1]
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
async def get_dimension_dag_indegree(session, node_name: str):
|
|
726
|
+
"""
|
|
727
|
+
For a given node, calculate the indegrees for its dimensions graph by finding the number
|
|
728
|
+
of dimension links that reference this node. Non-dimension nodes will always have an
|
|
729
|
+
indegree of 0.
|
|
730
|
+
"""
|
|
731
|
+
node = await Node.get_by_name(session, node_name, raise_if_not_exists=True)
|
|
732
|
+
dimension_dag_indegree = 0
|
|
733
|
+
if node.type == NodeType.DIMENSION: # type: ignore
|
|
734
|
+
links = await DimensionLink.get_links_for_dimension_id(
|
|
735
|
+
session,
|
|
736
|
+
dimension_id=node.id, # type: ignore
|
|
737
|
+
)
|
|
738
|
+
dimension_dag_indegree = len({link.node_revision.name for link in links})
|
|
739
|
+
return dimension_dag_indegree
|
{datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/cubes_test.py
RENAMED
|
@@ -13,7 +13,7 @@ from httpx import AsyncClient
|
|
|
13
13
|
from datajunction_server.models.query import ColumnMetadata
|
|
14
14
|
from datajunction_server.service_clients import QueryServiceClient
|
|
15
15
|
from datajunction_server.sql.parsing.backends.antlr4 import parse
|
|
16
|
-
from tests.sql.utils import compare_query_strings
|
|
16
|
+
from tests.sql.utils import assert_query_strings_equal, compare_query_strings
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
async def set_temporal_partition_cube(client: AsyncClient):
|
|
@@ -626,21 +626,21 @@ async def test_create_cube(
|
|
|
626
626
|
avg(default_DOT_repair_orders_fact.price) default_DOT_avg_repair_price,
|
|
627
627
|
sum(default_DOT_repair_orders_fact.total_repair_cost) default_DOT_total_repair_cost,
|
|
628
628
|
sum(default_DOT_repair_orders_fact.price * default_DOT_repair_orders_fact.discount) default_DOT_total_repair_order_discounts
|
|
629
|
-
FROM (SELECT
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
FROM roads.repair_orders AS
|
|
629
|
+
FROM (SELECT repair_orders.repair_order_id,
|
|
630
|
+
repair_orders.municipality_id,
|
|
631
|
+
repair_orders.hard_hat_id,
|
|
632
|
+
repair_orders.dispatcher_id,
|
|
633
|
+
repair_orders.order_date,
|
|
634
|
+
repair_orders.dispatched_date,
|
|
635
|
+
repair_orders.required_date,
|
|
636
|
+
repair_order_details.discount,
|
|
637
|
+
repair_order_details.price,
|
|
638
|
+
repair_order_details.quantity,
|
|
639
|
+
repair_order_details.repair_type_id,
|
|
640
|
+
repair_order_details.price * repair_order_details.quantity AS total_repair_cost,
|
|
641
|
+
repair_orders.dispatched_date - repair_orders.order_date AS time_to_dispatch,
|
|
642
|
+
repair_orders.dispatched_date - repair_orders.required_date AS dispatch_delay
|
|
643
|
+
FROM roads.repair_orders AS repair_orders JOIN roads.repair_order_details AS repair_order_details ON repair_orders.repair_order_id = repair_order_details.repair_order_id)
|
|
644
644
|
AS default_DOT_repair_orders_fact LEFT JOIN (SELECT default_DOT_dispatchers.dispatcher_id,
|
|
645
645
|
default_DOT_dispatchers.company_name
|
|
646
646
|
FROM roads.dispatchers AS default_DOT_dispatchers)
|
|
@@ -653,10 +653,10 @@ async def test_create_cube(
|
|
|
653
653
|
default_DOT_hard_hats.country
|
|
654
654
|
FROM roads.hard_hats AS default_DOT_hard_hats)
|
|
655
655
|
AS default_DOT_hard_hat ON default_DOT_repair_orders_fact.hard_hat_id = default_DOT_hard_hat.hard_hat_id
|
|
656
|
-
LEFT JOIN (SELECT
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
LEFT JOIN roads.municipality_type AS
|
|
656
|
+
LEFT JOIN (SELECT m.municipality_id AS municipality_id,
|
|
657
|
+
m.local_region
|
|
658
|
+
FROM roads.municipality AS m LEFT JOIN roads.municipality_municipality_type AS mmt ON m.municipality_id = mmt.municipality_id
|
|
659
|
+
LEFT JOIN roads.municipality_type AS mt ON mmt.municipality_type_id = mt.municipality_type_desc)
|
|
660
660
|
AS default_DOT_municipality_dim ON default_DOT_repair_orders_fact.municipality_id = default_DOT_municipality_dim.municipality_id
|
|
661
661
|
WHERE default_DOT_hard_hat.state = 'AZ'
|
|
662
662
|
GROUP BY default_DOT_hard_hat.country, default_DOT_hard_hat.postal_code, default_DOT_hard_hat.city, default_DOT_hard_hat.hire_date, default_DOT_hard_hat.state, default_DOT_dispatcher.company_name, default_DOT_municipality_dim.local_region
|
|
@@ -687,10 +687,10 @@ async def test_create_cube(
|
|
|
687
687
|
default_DOT_hard_hats.country
|
|
688
688
|
FROM roads.hard_hats AS default_DOT_hard_hats)
|
|
689
689
|
AS default_DOT_hard_hat ON default_DOT_repair_order.hard_hat_id = default_DOT_hard_hat.hard_hat_id
|
|
690
|
-
LEFT JOIN (SELECT
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
LEFT JOIN roads.municipality_type AS
|
|
690
|
+
LEFT JOIN (SELECT m.municipality_id AS municipality_id,
|
|
691
|
+
m.local_region
|
|
692
|
+
FROM roads.municipality AS m LEFT JOIN roads.municipality_municipality_type AS mmt ON m.municipality_id = mmt.municipality_id
|
|
693
|
+
LEFT JOIN roads.municipality_type AS mt ON mmt.municipality_type_id = mt.municipality_type_desc)
|
|
694
694
|
AS default_DOT_municipality_dim ON default_DOT_repair_order.municipality_id = default_DOT_municipality_dim.municipality_id
|
|
695
695
|
WHERE default_DOT_hard_hat.state = 'AZ'
|
|
696
696
|
GROUP BY default_DOT_hard_hat.country, default_DOT_hard_hat.postal_code, default_DOT_hard_hat.city, default_DOT_hard_hat.hire_date, default_DOT_hard_hat.state, default_DOT_dispatcher.company_name, default_DOT_municipality_dim.local_region
|
|
@@ -724,7 +724,7 @@ async def test_create_cube(
|
|
|
724
724
|
= default_DOT_repair_order_details.default_DOT_dispatcher_DOT_company_name
|
|
725
725
|
AND default_DOT_repair_orders_fact.default_DOT_municipality_dim_DOT_local_region
|
|
726
726
|
= default_DOT_repair_order_details.default_DOT_municipality_dim_DOT_local_region"""
|
|
727
|
-
|
|
727
|
+
assert_query_strings_equal(results["sql"], expected_query)
|
|
728
728
|
|
|
729
729
|
|
|
730
730
|
@pytest.mark.asyncio
|
|
@@ -754,21 +754,21 @@ default_DOT_repair_orders_fact AS (SELECT default_DOT_repair_orders_fact.repair
|
|
|
754
754
|
default_DOT_hard_hat.state default_DOT_hard_hat_DOT_state,
|
|
755
755
|
default_DOT_dispatcher.company_name default_DOT_dispatcher_DOT_company_name,
|
|
756
756
|
default_DOT_municipality_dim.local_region default_DOT_municipality_dim_DOT_local_region
|
|
757
|
-
FROM (SELECT
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
FROM roads.repair_orders AS
|
|
757
|
+
FROM (SELECT repair_orders.repair_order_id,
|
|
758
|
+
repair_orders.municipality_id,
|
|
759
|
+
repair_orders.hard_hat_id,
|
|
760
|
+
repair_orders.dispatcher_id,
|
|
761
|
+
repair_orders.order_date,
|
|
762
|
+
repair_orders.dispatched_date,
|
|
763
|
+
repair_orders.required_date,
|
|
764
|
+
repair_order_details.discount,
|
|
765
|
+
repair_order_details.price,
|
|
766
|
+
repair_order_details.quantity,
|
|
767
|
+
repair_order_details.repair_type_id,
|
|
768
|
+
repair_order_details.price * repair_order_details.quantity AS total_repair_cost,
|
|
769
|
+
repair_orders.dispatched_date - repair_orders.order_date AS time_to_dispatch,
|
|
770
|
+
repair_orders.dispatched_date - repair_orders.required_date AS dispatch_delay
|
|
771
|
+
FROM roads.repair_orders AS repair_orders JOIN roads.repair_order_details AS repair_order_details ON repair_orders.repair_order_id = repair_order_details.repair_order_id)
|
|
772
772
|
AS default_DOT_repair_orders_fact LEFT JOIN (SELECT default_DOT_dispatchers.dispatcher_id,
|
|
773
773
|
default_DOT_dispatchers.company_name
|
|
774
774
|
FROM roads.dispatchers AS default_DOT_dispatchers)
|
|
@@ -781,13 +781,11 @@ LEFT JOIN (SELECT default_DOT_hard_hats.hard_hat_id,
|
|
|
781
781
|
default_DOT_hard_hats.country
|
|
782
782
|
FROM roads.hard_hats AS default_DOT_hard_hats)
|
|
783
783
|
AS default_DOT_hard_hat ON default_DOT_repair_orders_fact.hard_hat_id = default_DOT_hard_hat.hard_hat_id
|
|
784
|
-
LEFT JOIN (SELECT
|
|
785
|
-
|
|
786
|
-
FROM roads.municipality AS
|
|
787
|
-
LEFT JOIN roads.municipality_type AS
|
|
788
|
-
AS default_DOT_municipality_dim ON default_DOT_repair_orders_fact.municipality_id = default_DOT_municipality_dim.municipality_id
|
|
789
|
-
|
|
790
|
-
),
|
|
784
|
+
LEFT JOIN (SELECT m.municipality_id AS municipality_id,
|
|
785
|
+
m.local_region
|
|
786
|
+
FROM roads.municipality AS m LEFT JOIN roads.municipality_municipality_type AS mmt ON m.municipality_id = mmt.municipality_id
|
|
787
|
+
LEFT JOIN roads.municipality_type AS mt ON mmt.municipality_type_id = mt.municipality_type_desc)
|
|
788
|
+
AS default_DOT_municipality_dim ON default_DOT_repair_orders_fact.municipality_id = default_DOT_municipality_dim.municipality_id),
|
|
791
789
|
default_DOT_repair_order_details AS (SELECT default_DOT_repair_order_details.price default_DOT_repair_order_details_DOT_price,
|
|
792
790
|
default_DOT_hard_hat.country default_DOT_hard_hat_DOT_country,
|
|
793
791
|
default_DOT_hard_hat.postal_code default_DOT_hard_hat_DOT_postal_code,
|
|
@@ -814,12 +812,11 @@ LEFT JOIN (SELECT default_DOT_hard_hats.hard_hat_id,
|
|
|
814
812
|
default_DOT_hard_hats.country
|
|
815
813
|
FROM roads.hard_hats AS default_DOT_hard_hats)
|
|
816
814
|
AS default_DOT_hard_hat ON default_DOT_repair_order.hard_hat_id = default_DOT_hard_hat.hard_hat_id
|
|
817
|
-
LEFT JOIN (SELECT
|
|
818
|
-
|
|
819
|
-
FROM roads.municipality AS
|
|
820
|
-
LEFT JOIN roads.municipality_type AS
|
|
821
|
-
AS default_DOT_municipality_dim ON default_DOT_repair_order.municipality_id = default_DOT_municipality_dim.municipality_id
|
|
822
|
-
)
|
|
815
|
+
LEFT JOIN (SELECT m.municipality_id AS municipality_id,
|
|
816
|
+
m.local_region
|
|
817
|
+
FROM roads.municipality AS m LEFT JOIN roads.municipality_municipality_type AS mmt ON m.municipality_id = mmt.municipality_id
|
|
818
|
+
LEFT JOIN roads.municipality_type AS mt ON mmt.municipality_type_id = mt.municipality_type_desc)
|
|
819
|
+
AS default_DOT_municipality_dim ON default_DOT_repair_order.municipality_id = default_DOT_municipality_dim.municipality_id)
|
|
823
820
|
SELECT default_DOT_repair_orders_fact.default_DOT_repair_orders_fact_DOT_repair_order_id,
|
|
824
821
|
default_DOT_repair_orders_fact.default_DOT_repair_orders_fact_DOT_discount,
|
|
825
822
|
default_DOT_repair_orders_fact.default_DOT_repair_orders_fact_DOT_price,
|
|
@@ -1374,12 +1371,13 @@ GROUP BY
|
|
|
1374
1371
|
|
|
1375
1372
|
|
|
1376
1373
|
@pytest.mark.asyncio
|
|
1377
|
-
async def
|
|
1374
|
+
async def test_remove_dimension_link_invalidate_cube(
|
|
1378
1375
|
client_with_repairs_cube: AsyncClient, # pylint: disable=redefined-outer-name
|
|
1379
1376
|
):
|
|
1380
1377
|
"""
|
|
1381
|
-
|
|
1378
|
+
Verify that removing a dimension link can invalidate a cube.
|
|
1382
1379
|
"""
|
|
1380
|
+
# Delete an irrelevant dimension link
|
|
1383
1381
|
response = await client_with_repairs_cube.request(
|
|
1384
1382
|
"DELETE",
|
|
1385
1383
|
"/nodes/default.repair_order/link/",
|
|
@@ -1392,9 +1390,46 @@ async def test_unlink_node_column_dimension(
|
|
|
1392
1390
|
"message": "Dimension link default.hard_hat to node default.repair_order has "
|
|
1393
1391
|
"been removed.",
|
|
1394
1392
|
}
|
|
1393
|
+
# The cube remains valid
|
|
1395
1394
|
response = await client_with_repairs_cube.get("/nodes/default.repairs_cube")
|
|
1396
1395
|
data = response.json()
|
|
1397
|
-
assert data["status"] == "
|
|
1396
|
+
assert data["status"] == "valid"
|
|
1397
|
+
|
|
1398
|
+
# Add an unaffected cube
|
|
1399
|
+
await client_with_repairs_cube.post(
|
|
1400
|
+
"/nodes/cube/",
|
|
1401
|
+
json={
|
|
1402
|
+
"metrics": ["default.num_repair_orders"],
|
|
1403
|
+
"dimensions": [
|
|
1404
|
+
"default.dispatcher.company_name",
|
|
1405
|
+
"default.municipality_dim.local_region",
|
|
1406
|
+
],
|
|
1407
|
+
"filters": ["default.dispatcher.company_name='Pothole Pete'"],
|
|
1408
|
+
"description": "Cube of various metrics related to repairs",
|
|
1409
|
+
"mode": "published",
|
|
1410
|
+
"name": "default.repairs_cube_unaffected",
|
|
1411
|
+
},
|
|
1412
|
+
)
|
|
1413
|
+
|
|
1414
|
+
# Delete the link between default.repair_orders_fact and default.hard_hat
|
|
1415
|
+
response = await client_with_repairs_cube.request(
|
|
1416
|
+
"DELETE",
|
|
1417
|
+
"/nodes/default.repair_orders_fact/link",
|
|
1418
|
+
json={
|
|
1419
|
+
"dimension_node": "default.hard_hat",
|
|
1420
|
+
},
|
|
1421
|
+
)
|
|
1422
|
+
assert response.status_code == 201
|
|
1423
|
+
|
|
1424
|
+
# The cube that has default.hard_hat dimensions should be invalid
|
|
1425
|
+
response = await client_with_repairs_cube.get("/nodes/default.repairs_cube")
|
|
1426
|
+
assert response.json()["status"] == "invalid"
|
|
1427
|
+
|
|
1428
|
+
# The cube without default.hard_hat dimensions should remain valid
|
|
1429
|
+
response = await client_with_repairs_cube.get(
|
|
1430
|
+
"/nodes/default.repairs_cube_unaffected",
|
|
1431
|
+
)
|
|
1432
|
+
assert response.json()["status"] == "valid"
|
|
1398
1433
|
|
|
1399
1434
|
|
|
1400
1435
|
@pytest.mark.asyncio
|
{datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/data_test.py
RENAMED
|
@@ -666,31 +666,7 @@ class TestDataForNode:
|
|
|
666
666
|
],
|
|
667
667
|
"row_count": 0,
|
|
668
668
|
"rows": [[25]],
|
|
669
|
-
"sql":
|
|
670
|
-
"default_DOT_num_repair_orders \n"
|
|
671
|
-
" FROM (SELECT default_DOT_repair_orders.repair_order_id,\n"
|
|
672
|
-
"\tdefault_DOT_repair_orders.municipality_id,\n"
|
|
673
|
-
"\tdefault_DOT_repair_orders.hard_hat_id,\n"
|
|
674
|
-
"\tdefault_DOT_repair_orders.dispatcher_id,\n"
|
|
675
|
-
"\tdefault_DOT_repair_orders.order_date,\n"
|
|
676
|
-
"\tdefault_DOT_repair_orders.dispatched_date,\n"
|
|
677
|
-
"\tdefault_DOT_repair_orders.required_date,\n"
|
|
678
|
-
"\tdefault_DOT_repair_order_details.discount,\n"
|
|
679
|
-
"\tdefault_DOT_repair_order_details.price,\n"
|
|
680
|
-
"\tdefault_DOT_repair_order_details.quantity,\n"
|
|
681
|
-
"\tdefault_DOT_repair_order_details.repair_type_id,\n"
|
|
682
|
-
"\tdefault_DOT_repair_order_details.price * "
|
|
683
|
-
"default_DOT_repair_order_details.quantity AS total_repair_cost,\n"
|
|
684
|
-
"\tdefault_DOT_repair_orders.dispatched_date - "
|
|
685
|
-
"default_DOT_repair_orders.order_date AS time_to_dispatch,\n"
|
|
686
|
-
"\tdefault_DOT_repair_orders.dispatched_date - "
|
|
687
|
-
"default_DOT_repair_orders.required_date AS dispatch_delay \n"
|
|
688
|
-
" FROM roads.repair_orders AS default_DOT_repair_orders JOIN "
|
|
689
|
-
"roads.repair_order_details AS default_DOT_repair_order_details ON "
|
|
690
|
-
"default_DOT_repair_orders.repair_order_id = "
|
|
691
|
-
"default_DOT_repair_order_details.repair_order_id)\n"
|
|
692
|
-
" AS default_DOT_repair_orders_fact\n"
|
|
693
|
-
"\n",
|
|
669
|
+
"sql": mock.ANY,
|
|
694
670
|
},
|
|
695
671
|
]
|
|
696
672
|
|
{datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/dimensions_test.py
RENAMED
|
@@ -18,7 +18,15 @@ async def test_list_dimension(client_with_roads: AsyncClient) -> None:
|
|
|
18
18
|
data = response.json()
|
|
19
19
|
|
|
20
20
|
assert response.status_code == 200
|
|
21
|
-
assert
|
|
21
|
+
assert data == [
|
|
22
|
+
{"indegree": 3, "name": "default.dispatcher"},
|
|
23
|
+
{"indegree": 2, "name": "default.repair_order"},
|
|
24
|
+
{"indegree": 2, "name": "default.hard_hat"},
|
|
25
|
+
{"indegree": 2, "name": "default.municipality_dim"},
|
|
26
|
+
{"indegree": 1, "name": "default.contractor"},
|
|
27
|
+
{"indegree": 1, "name": "default.us_state"},
|
|
28
|
+
{"indegree": 0, "name": "default.local_hard_hats"},
|
|
29
|
+
]
|
|
22
30
|
|
|
23
31
|
|
|
24
32
|
@pytest.mark.asyncio
|