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.
Files changed (451) hide show
  1. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/PKG-INFO +1 -1
  2. datajunction_server-0.0.1a49.dev2/datajunction_server/__about__.py +4 -0
  3. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/data.py +1 -1
  4. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/dimensions.py +15 -4
  5. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/build.py +30 -12
  6. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/dimensionlink.py +22 -3
  7. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/node.py +1 -2
  8. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/nodes.py +16 -11
  9. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/node.py +9 -0
  10. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/dag.py +17 -0
  11. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/cubes_test.py +91 -56
  12. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/data_test.py +1 -25
  13. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/dimensions_test.py +9 -1
  14. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/djql_test.py +36 -43
  15. {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
  16. {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
  17. {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
  18. {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
  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
  20. {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
  21. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/materializations_test.py +2 -0
  22. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/nodes_test.py +18 -18
  23. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/sql_test.py +323 -303
  24. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/build_test.py +1 -0
  25. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/fixtures.py +5 -5
  26. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/utils.py +7 -0
  27. datajunction_server-0.0.1a49.dev0/datajunction_server/__about__.py +0 -4
  28. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.coveragerc +0 -0
  29. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.env +0 -0
  30. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.env.integration +0 -0
  31. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.flake8 +0 -0
  32. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.gitignore +0 -0
  33. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.isort.cfg +0 -0
  34. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.pre-commit-config.yaml +0 -0
  35. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/.pylintrc +0 -0
  36. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/Dockerfile +0 -0
  37. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/Makefile +0 -0
  38. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/README.md +0 -0
  39. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/README +0 -0
  40. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/env.py +0 -0
  41. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/script.py.mako +0 -0
  42. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic/versions/2023_12_20_1829-724445d2b29d_initial_migration.py +0 -0
  43. {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
  44. {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
  45. {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
  46. {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
  47. {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
  48. {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
  49. {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
  50. {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
  51. {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
  52. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/alembic.ini +0 -0
  53. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/__init__.py +0 -0
  54. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/__init__.py +0 -0
  55. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/__init__.py +0 -0
  56. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/basic.py +0 -0
  57. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/github.py +0 -0
  58. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/google.py +0 -0
  59. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/access/authentication/whoami.py +0 -0
  60. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/attributes.py +0 -0
  61. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/catalogs.py +0 -0
  62. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/client.py +0 -0
  63. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/cubes.py +0 -0
  64. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/djsql.py +0 -0
  65. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/engines.py +0 -0
  66. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/graphql/__init__.py +0 -0
  67. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/graphql/catalogs.py +0 -0
  68. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/graphql/engines.py +0 -0
  69. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/graphql/main.py +0 -0
  70. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/health.py +0 -0
  71. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/helpers.py +0 -0
  72. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/history.py +0 -0
  73. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/logging.conf +0 -0
  74. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/main.py +0 -0
  75. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/materializations.py +0 -0
  76. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/measures.py +0 -0
  77. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/metrics.py +0 -0
  78. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/namespaces.py +0 -0
  79. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/nodes.py +0 -0
  80. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/sql.py +0 -0
  81. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/api/tags.py +0 -0
  82. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/config.py +0 -0
  83. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/constants.py +0 -0
  84. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/__init__.py +0 -0
  85. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/dimensions.py +0 -0
  86. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/dj_query.py +0 -0
  87. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/exceptions.py +0 -0
  88. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/construction/utils.py +0 -0
  89. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/__init__.py +0 -0
  90. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/attributetype.py +0 -0
  91. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/availabilitystate.py +0 -0
  92. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/backfill.py +0 -0
  93. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/base.py +0 -0
  94. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/catalog.py +0 -0
  95. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/column.py +0 -0
  96. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/database.py +0 -0
  97. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/engine.py +0 -0
  98. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/history.py +0 -0
  99. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/materialization.py +0 -0
  100. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/measure.py +0 -0
  101. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/metricmetadata.py +0 -0
  102. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/namespace.py +0 -0
  103. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/partition.py +0 -0
  104. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/queryrequest.py +0 -0
  105. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/tag.py +0 -0
  106. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/database/user.py +0 -0
  107. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/enum.py +0 -0
  108. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/errors.py +0 -0
  109. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/__init__.py +0 -0
  110. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/__init__.py +0 -0
  111. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/__init__.py +0 -0
  112. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/basic.py +0 -0
  113. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/github.py +0 -0
  114. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/google.py +0 -0
  115. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/http.py +0 -0
  116. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authentication/tokens.py +0 -0
  117. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/access/authorization.py +0 -0
  118. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/engines.py +0 -0
  119. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/materializations.py +0 -0
  120. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/namespaces.py +0 -0
  121. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/internal/validation.py +0 -0
  122. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/__init__.py +0 -0
  123. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/jobs/__init__.py +0 -0
  124. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/jobs/cube_materialization.py +0 -0
  125. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/jobs/job_types.py +0 -0
  126. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/materialization/jobs/materialization_job.py +0 -0
  127. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/__init__.py +0 -0
  128. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/access.py +0 -0
  129. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/attribute.py +0 -0
  130. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/base.py +0 -0
  131. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/catalog.py +0 -0
  132. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/column.py +0 -0
  133. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/cube.py +0 -0
  134. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/database.py +0 -0
  135. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/dimensionlink.py +0 -0
  136. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/engine.py +0 -0
  137. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/history.py +0 -0
  138. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/materialization.py +0 -0
  139. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/measure.py +0 -0
  140. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/metric.py +0 -0
  141. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/node_type.py +0 -0
  142. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/partition.py +0 -0
  143. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/query.py +0 -0
  144. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/table.py +0 -0
  145. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/tag.py +0 -0
  146. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/models/user.py +0 -0
  147. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/naming.py +0 -0
  148. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/service_clients.py +0 -0
  149. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/__init__.py +0 -0
  150. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/functions.py +0 -0
  151. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/__init__.py +0 -0
  152. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/ast.py +0 -0
  153. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/__init__.py +0 -0
  154. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/antlr4.py +0 -0
  155. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/exceptions.py +0 -0
  156. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/SqlBaseLexer.g4 +0 -0
  157. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/SqlBaseParser.g4 +0 -0
  158. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/__init__.py +0 -0
  159. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.interp +0 -0
  160. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.py +0 -0
  161. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.tokens +0 -0
  162. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.interp +0 -0
  163. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py +0 -0
  164. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens +0 -0
  165. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py +0 -0
  166. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py +0 -0
  167. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/sql/parsing/types.py +0 -0
  168. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/superset.py +0 -0
  169. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/transpilation.py +0 -0
  170. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/typing.py +0 -0
  171. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/datajunction_server/utils.py +0 -0
  172. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/pdm.lock +0 -0
  173. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/pyproject.toml +0 -0
  174. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/requirements/docker.txt +0 -0
  175. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/requirements/test.txt +0 -0
  176. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/scripts/docs-snippets.js +0 -0
  177. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/scripts/docs-snippets.sh +0 -0
  178. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/scripts/generate-openapi.py +0 -0
  179. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/__init__.py +0 -0
  180. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/__init__.py +0 -0
  181. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/attributes_test.py +0 -0
  182. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/catalog_test.py +0 -0
  183. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/client_test.py +0 -0
  184. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/dimension_links_test.py +0 -0
  185. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/engine_test.py +0 -0
  186. {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
  187. {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
  188. {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
  189. {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
  190. {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
  191. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.config.json +0 -0
  192. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.materializations.json +0 -0
  193. {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
  194. {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
  195. {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
  196. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.full.query.sql +0 -0
  197. {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
  198. {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
  199. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.incremental.config.json +0 -0
  200. {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
  201. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/files/materializations_test/spark_sql.incremental.query.sql +0 -0
  202. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/graphql/__init__.py +0 -0
  203. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/graphql/catalog_test.py +0 -0
  204. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/graphql/engine_test.py +0 -0
  205. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/health_test.py +0 -0
  206. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/helpers_test.py +0 -0
  207. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/history_test.py +0 -0
  208. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/measures_test.py +0 -0
  209. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/metrics_test.py +0 -0
  210. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/namespaces_test.py +0 -0
  211. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/node_update_test.py +0 -0
  212. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/routers_test.py +0 -0
  213. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/api/tags_test.py +0 -0
  214. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/conftest.py +0 -0
  215. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/__init__.py +0 -0
  216. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/compile_test.py +0 -0
  217. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/exceptions_test.py +0 -0
  218. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/inference_test.py +0 -0
  219. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/construction/utils_test.py +0 -0
  220. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/default.duckdb +0 -0
  221. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/duckdb.sql +0 -0
  222. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/errors_test.py +0 -0
  223. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/examples.py +0 -0
  224. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/fixes_test.py +0 -0
  225. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/integration/__init__.py +0 -0
  226. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/integration/basic_test.py +0 -0
  227. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/basic_test.py +0 -0
  228. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/github_test.py +0 -0
  229. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/http_test.py +0 -0
  230. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/token_test.py +0 -0
  231. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/internal/authentication/whoami_test.py +0 -0
  232. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/migrations_test.py +0 -0
  233. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/__init__.py +0 -0
  234. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/catalog_test.py +0 -0
  235. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/hash_test.py +0 -0
  236. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/measure_test.py +0 -0
  237. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/node_test.py +0 -0
  238. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/models/query_test.py +0 -0
  239. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/pytest.ini +0 -0
  240. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/service_clients_test.py +0 -0
  241. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/__init__.py +0 -0
  242. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/dag_test.py +0 -0
  243. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/functions_test.py +0 -0
  244. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/__init__.py +0 -0
  245. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/backends/__init__.py +0 -0
  246. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/backends/antlr4_test.py +0 -0
  247. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/backends/types_test.py +0 -0
  248. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/__init__.py +0 -0
  249. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query1.sql +0 -0
  250. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query10.sql +0 -0
  251. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query11.sql +0 -0
  252. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query12.sql +0 -0
  253. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query13.sql +0 -0
  254. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query14.sql +0 -0
  255. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query15.sql +0 -0
  256. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query16.sql +0 -0
  257. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query17.sql +0 -0
  258. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query18.sql +0 -0
  259. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query19.sql +0 -0
  260. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query2.sql +0 -0
  261. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query20.sql +0 -0
  262. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query21.sql +0 -0
  263. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query22.sql +0 -0
  264. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query23.sql +0 -0
  265. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query24.sql +0 -0
  266. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query25.sql +0 -0
  267. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query26.sql +0 -0
  268. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query27.sql +0 -0
  269. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query28.sql +0 -0
  270. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query29.sql +0 -0
  271. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query3.sql +0 -0
  272. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query30.sql +0 -0
  273. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query31.sql +0 -0
  274. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query32.sql +0 -0
  275. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query33.sql +0 -0
  276. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query34.sql +0 -0
  277. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query35.sql +0 -0
  278. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query36.sql +0 -0
  279. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query37.sql +0 -0
  280. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query38.sql +0 -0
  281. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query39.sql +0 -0
  282. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query4.sql +0 -0
  283. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query40.sql +0 -0
  284. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query41.sql +0 -0
  285. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query42.sql +0 -0
  286. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query43.sql +0 -0
  287. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query44.sql +0 -0
  288. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query45.sql +0 -0
  289. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query46.sql +0 -0
  290. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query47.sql +0 -0
  291. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query48.sql +0 -0
  292. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query49.sql +0 -0
  293. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query5.sql +0 -0
  294. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query50.sql +0 -0
  295. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query51.sql +0 -0
  296. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query52.sql +0 -0
  297. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query53.sql +0 -0
  298. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query54.sql +0 -0
  299. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query55.sql +0 -0
  300. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query56.sql +0 -0
  301. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query57.sql +0 -0
  302. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query58.sql +0 -0
  303. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query59.sql +0 -0
  304. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query6.sql +0 -0
  305. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query60.sql +0 -0
  306. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query61.sql +0 -0
  307. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query62.sql +0 -0
  308. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query63.sql +0 -0
  309. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query64.sql +0 -0
  310. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query65.sql +0 -0
  311. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query66.sql +0 -0
  312. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query67.sql +0 -0
  313. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query68.sql +0 -0
  314. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query69.sql +0 -0
  315. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query7.sql +0 -0
  316. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query70.sql +0 -0
  317. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query71.sql +0 -0
  318. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query72.sql +0 -0
  319. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query73.sql +0 -0
  320. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query74.sql +0 -0
  321. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query75.sql +0 -0
  322. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query76.sql +0 -0
  323. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query77.sql +0 -0
  324. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query78.sql +0 -0
  325. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query79.sql +0 -0
  326. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query8.sql +0 -0
  327. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query80.sql +0 -0
  328. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query81.sql +0 -0
  329. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query82.sql +0 -0
  330. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query83.sql +0 -0
  331. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query84.sql +0 -0
  332. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query85.sql +0 -0
  333. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query86.sql +0 -0
  334. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query87.sql +0 -0
  335. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query88.sql +0 -0
  336. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query89.sql +0 -0
  337. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query9.sql +0 -0
  338. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query90.sql +0 -0
  339. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query91.sql +0 -0
  340. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query92.sql +0 -0
  341. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query93.sql +0 -0
  342. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query94.sql +0 -0
  343. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query95.sql +0 -0
  344. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query96.sql +0 -0
  345. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query97.sql +0 -0
  346. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query98.sql +0 -0
  347. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/ansi/query99.sql +0 -0
  348. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query1.sql +0 -0
  349. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query10.sql +0 -0
  350. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query11.sql +0 -0
  351. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query12.sql +0 -0
  352. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query13.sql +0 -0
  353. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query14.sql +0 -0
  354. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query15.sql +0 -0
  355. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query16.sql +0 -0
  356. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query17.sql +0 -0
  357. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query18.sql +0 -0
  358. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query19.sql +0 -0
  359. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query2.sql +0 -0
  360. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query20.sql +0 -0
  361. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query21.sql +0 -0
  362. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query22.sql +0 -0
  363. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query23.sql +0 -0
  364. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query24.sql +0 -0
  365. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query25.sql +0 -0
  366. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query26.sql +0 -0
  367. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query27.sql +0 -0
  368. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query28.sql +0 -0
  369. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query29.sql +0 -0
  370. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query3.sql +0 -0
  371. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query30.sql +0 -0
  372. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query31.sql +0 -0
  373. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query32.sql +0 -0
  374. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query33.sql +0 -0
  375. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query34.sql +0 -0
  376. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query35.sql +0 -0
  377. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query36.sql +0 -0
  378. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query37.sql +0 -0
  379. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query38.sql +0 -0
  380. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query39.sql +0 -0
  381. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query4.sql +0 -0
  382. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query40.sql +0 -0
  383. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query41.sql +0 -0
  384. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query42.sql +0 -0
  385. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query43.sql +0 -0
  386. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query44.sql +0 -0
  387. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query45.sql +0 -0
  388. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query46.sql +0 -0
  389. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query47.sql +0 -0
  390. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query48.sql +0 -0
  391. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query49.sql +0 -0
  392. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query5.sql +0 -0
  393. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query50.sql +0 -0
  394. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query51.sql +0 -0
  395. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query52.sql +0 -0
  396. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query53.sql +0 -0
  397. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query54.sql +0 -0
  398. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query55.sql +0 -0
  399. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query56.sql +0 -0
  400. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query57.sql +0 -0
  401. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query58.sql +0 -0
  402. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query59.sql +0 -0
  403. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query6.sql +0 -0
  404. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query60.sql +0 -0
  405. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query61.sql +0 -0
  406. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query62.sql +0 -0
  407. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query63.sql +0 -0
  408. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query64.sql +0 -0
  409. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query65.sql +0 -0
  410. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query66.sql +0 -0
  411. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query67.sql +0 -0
  412. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query68.sql +0 -0
  413. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query69.sql +0 -0
  414. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query7.sql +0 -0
  415. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query70.sql +0 -0
  416. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query71.sql +0 -0
  417. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query72.sql +0 -0
  418. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query73.sql +0 -0
  419. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query74.sql +0 -0
  420. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query75.sql +0 -0
  421. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query76.sql +0 -0
  422. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query77.sql +0 -0
  423. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query78.sql +0 -0
  424. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query79.sql +0 -0
  425. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query8.sql +0 -0
  426. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query80.sql +0 -0
  427. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query81.sql +0 -0
  428. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query82.sql +0 -0
  429. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query83.sql +0 -0
  430. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query84.sql +0 -0
  431. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query85.sql +0 -0
  432. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query86.sql +0 -0
  433. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query87.sql +0 -0
  434. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query88.sql +0 -0
  435. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query89.sql +0 -0
  436. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query9.sql +0 -0
  437. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query90.sql +0 -0
  438. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query91.sql +0 -0
  439. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query92.sql +0 -0
  440. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query93.sql +0 -0
  441. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query94.sql +0 -0
  442. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query95.sql +0 -0
  443. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query96.sql +0 -0
  444. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query97.sql +0 -0
  445. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query98.sql +0 -0
  446. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/sparksql/query99.sql +0 -0
  447. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/queries/tpcds/test_tpcds.py +0 -0
  448. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/sql/parsing/test_ast.py +0 -0
  449. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/superset_test.py +0 -0
  450. {datajunction_server-0.0.1a49.dev0 → datajunction_server-0.0.1a49.dev2}/tests/transpilation_test.py +0 -0
  451. {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.dev0
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>
@@ -0,0 +1,4 @@
1
+ """
2
+ Version for Hatch
3
+ """
4
+ __version__ = "0.0.1a49.dev2"
@@ -260,7 +260,7 @@ async def get_data_stream_for_node( # pylint: disable=R0914, R0913
260
260
  query, query_request = await get_node_sql(
261
261
  node_name,
262
262
  dimensions,
263
- filters,
263
+ [filter_ for filter_ in filters if filter_],
264
264
  orderby,
265
265
  limit,
266
266
  session=session,
@@ -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[str])
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[str]:
43
+ ) -> List[NodeIndegreeOutput]:
43
44
  """
44
45
  List all available dimensions.
45
46
  """
46
- return await list_nodes(
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.Table],
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.extend(build_filters(node, node_ast, filters)) # type: ignore
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.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)
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
- affected_cubes = (
1542
- await get_nodes_with_dimension(
1543
- session,
1544
- dimension_node,
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 affected_cubes:
1550
- if cube.status != NodeStatus.INVALID: # pragma: no cover
1551
- cube.status = NodeStatus.INVALID
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
- node, # type: ignore
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
@@ -941,3 +941,12 @@ class NamespaceOutput(BaseModel):
941
941
 
942
942
  namespace: str
943
943
  num_nodes: int
944
+
945
+
946
+ class NodeIndegreeOutput(BaseModel):
947
+ """
948
+ Node indegree output
949
+ """
950
+
951
+ name: str
952
+ indegree: int
@@ -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
@@ -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 default_DOT_repair_orders.repair_order_id,
630
- default_DOT_repair_orders.municipality_id,
631
- default_DOT_repair_orders.hard_hat_id,
632
- default_DOT_repair_orders.dispatcher_id,
633
- default_DOT_repair_orders.order_date,
634
- default_DOT_repair_orders.dispatched_date,
635
- default_DOT_repair_orders.required_date,
636
- default_DOT_repair_order_details.discount,
637
- default_DOT_repair_order_details.price,
638
- default_DOT_repair_order_details.quantity,
639
- default_DOT_repair_order_details.repair_type_id,
640
- default_DOT_repair_order_details.price * default_DOT_repair_order_details.quantity AS total_repair_cost,
641
- default_DOT_repair_orders.dispatched_date - default_DOT_repair_orders.order_date AS time_to_dispatch,
642
- default_DOT_repair_orders.dispatched_date - default_DOT_repair_orders.required_date AS dispatch_delay
643
- FROM roads.repair_orders AS default_DOT_repair_orders JOIN roads.repair_order_details AS default_DOT_repair_order_details ON default_DOT_repair_orders.repair_order_id = default_DOT_repair_order_details.repair_order_id)
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 default_DOT_municipality.municipality_id AS municipality_id,
657
- default_DOT_municipality.local_region
658
- FROM roads.municipality AS default_DOT_municipality LEFT JOIN roads.municipality_municipality_type AS default_DOT_municipality_municipality_type ON default_DOT_municipality.municipality_id = default_DOT_municipality_municipality_type.municipality_id
659
- LEFT JOIN roads.municipality_type AS default_DOT_municipality_type ON default_DOT_municipality_municipality_type.municipality_type_id = default_DOT_municipality_type.municipality_type_desc)
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 default_DOT_municipality.municipality_id AS municipality_id,
691
- default_DOT_municipality.local_region
692
- FROM roads.municipality AS default_DOT_municipality LEFT JOIN roads.municipality_municipality_type AS default_DOT_municipality_municipality_type ON default_DOT_municipality.municipality_id = default_DOT_municipality_municipality_type.municipality_id
693
- LEFT JOIN roads.municipality_type AS default_DOT_municipality_type ON default_DOT_municipality_municipality_type.municipality_type_id = default_DOT_municipality_type.municipality_type_desc)
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
- assert str(parse(str(expected_query))) == str(parse(str(results["sql"])))
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 default_DOT_repair_orders.repair_order_id,
758
- default_DOT_repair_orders.municipality_id,
759
- default_DOT_repair_orders.hard_hat_id,
760
- default_DOT_repair_orders.dispatcher_id,
761
- default_DOT_repair_orders.order_date,
762
- default_DOT_repair_orders.dispatched_date,
763
- default_DOT_repair_orders.required_date,
764
- default_DOT_repair_order_details.discount,
765
- default_DOT_repair_order_details.price,
766
- default_DOT_repair_order_details.quantity,
767
- default_DOT_repair_order_details.repair_type_id,
768
- default_DOT_repair_order_details.price * default_DOT_repair_order_details.quantity AS total_repair_cost,
769
- default_DOT_repair_orders.dispatched_date - default_DOT_repair_orders.order_date AS time_to_dispatch,
770
- default_DOT_repair_orders.dispatched_date - default_DOT_repair_orders.required_date AS dispatch_delay
771
- FROM roads.repair_orders AS default_DOT_repair_orders JOIN roads.repair_order_details AS default_DOT_repair_order_details ON default_DOT_repair_orders.repair_order_id = default_DOT_repair_order_details.repair_order_id)
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 default_DOT_municipality.municipality_id AS municipality_id,
785
- default_DOT_municipality.local_region
786
- FROM roads.municipality AS default_DOT_municipality LEFT JOIN roads.municipality_municipality_type AS default_DOT_municipality_municipality_type ON default_DOT_municipality.municipality_id = default_DOT_municipality_municipality_type.municipality_id
787
- LEFT JOIN roads.municipality_type AS default_DOT_municipality_type ON default_DOT_municipality_municipality_type.municipality_type_id = default_DOT_municipality_type.municipality_type_desc)
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 default_DOT_municipality.municipality_id AS municipality_id,
818
- default_DOT_municipality.local_region
819
- FROM roads.municipality AS default_DOT_municipality LEFT JOIN roads.municipality_municipality_type AS default_DOT_municipality_municipality_type ON default_DOT_municipality.municipality_id = default_DOT_municipality_municipality_type.municipality_id
820
- LEFT JOIN roads.municipality_type AS default_DOT_municipality_type ON default_DOT_municipality_municipality_type.municipality_type_id = default_DOT_municipality_type.municipality_type_desc)
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 test_unlink_node_column_dimension(
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
- When a node column link to a dimension is removed, the cube should be invalidated
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"] == "invalid"
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
@@ -666,31 +666,7 @@ class TestDataForNode:
666
666
  ],
667
667
  "row_count": 0,
668
668
  "rows": [[25]],
669
- "sql": "SELECT count(default_DOT_repair_orders_fact.repair_order_id) "
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
 
@@ -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 len(data) > 5
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