datajunction-server 0.0.1a85__tar.gz → 0.0.1a85.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/PKG-INFO +2 -2
  2. datajunction_server-0.0.1a85.dev0/datajunction_server/__about__.py +4 -0
  3. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/cubes.py +100 -0
  4. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/data.py +4 -0
  5. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/metricmetadata.py +7 -3
  6. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/helpers.py +2 -0
  7. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/materializations.py +37 -6
  8. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/build.py +2 -1
  9. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/build_v2.py +10 -1
  10. datajunction_server-0.0.1a85.dev0/datajunction_server/internal/cube_materializations.py +271 -0
  11. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/materializations.py +27 -7
  12. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/jobs/cube_materialization.py +49 -0
  13. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/jobs/materialization_job.py +2 -0
  14. datajunction_server-0.0.1a85.dev0/datajunction_server/models/cube_materialization.py +424 -0
  15. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/materialization.py +11 -0
  16. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/metric.py +2 -1
  17. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/node_type.py +12 -0
  18. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/sql.py +4 -12
  19. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/service_clients.py +116 -4
  20. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/decompose.py +5 -47
  21. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/utils.py +3 -1
  22. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/cubes_test.py +973 -0
  23. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/materializations_test.py +325 -1
  24. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/nodes_test.py +1 -1
  25. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/conftest.py +58 -5
  26. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/service_clients_test.py +88 -3
  27. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/decompose_test.py +2 -2
  28. datajunction_server-0.0.1a85/datajunction_server/__about__.py +0 -4
  29. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.coveragerc +0 -0
  30. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.env +0 -0
  31. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.env.integration +0 -0
  32. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.flake8 +0 -0
  33. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.gitignore +0 -0
  34. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.isort.cfg +0 -0
  35. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/.pre-commit-config.yaml +0 -0
  36. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/Dockerfile +0 -0
  37. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/Makefile +0 -0
  38. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/README.md +0 -0
  39. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/__init__.py +0 -0
  40. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/README +0 -0
  41. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/env.py +0 -0
  42. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/script.py.mako +0 -0
  43. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2023_12_20_1829-724445d2b29d_initial_migration.py +0 -0
  44. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_08_2034-945d44abcd32_add_dimension_links.py +0 -0
  45. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_11_2032-c74b11566d82_add_column_order.py +0 -0
  46. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_18_2011-20f060b02772_switch_enum_values.py +0 -0
  47. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_23_0617-c9cef8864ecb_add_missing_table_attribute_to_source_.py +0 -0
  48. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_01_23_1655-a8e22109be24_availability_state_s_valid_through_ts_.py +0 -0
  49. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_02_22_0713-d61fb7e48cc3_cascade_deletes_to_dimension_links.py +0 -0
  50. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_04_30_1556-de7ec1c82fe0_add_query_requests.py +0 -0
  51. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_05_09_1420-9b1227ff17f4_update_backfill_spec.py +0 -0
  52. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_05_21_0012-57fc93ef6947_add_query_id_to_queryrequest.py +0 -0
  53. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_06_21_1301-640a814db2d8_add_collection_tables.py +0 -0
  54. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_07_12_0348-34171c92dd6d_set_user_username_to_be_unique.py +0 -0
  55. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_08_18_0036-f3c9b40deb6f_add_create_by_to_nodes_node_revisions_.py +0 -0
  56. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_10_24_0015-4d6ab789e456_add_a_map_of_links_to_availability_state.py +0 -0
  57. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2024_10_26_0340-70904373eab3_add_indexes_on_history_and_node_tables.py +0 -0
  58. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2025_01_19_1808-9650f9b728a2_add_query_ast_for_noderevision.py +0 -0
  59. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic/versions/2025_01_24_0020-bec3296d7537_add_custom_metadata_field_to_nodes.py +0 -0
  60. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/alembic.ini +0 -0
  61. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/__init__.py +0 -0
  62. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/__init__.py +0 -0
  63. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/basic.py +0 -0
  64. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/github.py +0 -0
  65. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/google.py +0 -0
  66. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/access/authentication/whoami.py +0 -0
  67. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/attributes.py +0 -0
  68. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/catalogs.py +0 -0
  69. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/client.py +0 -0
  70. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/collection.py +0 -0
  71. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/dimensions.py +0 -0
  72. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/djsql.py +0 -0
  73. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/engines.py +0 -0
  74. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/__init__.py +0 -0
  75. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/main.py +0 -0
  76. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/__init__.py +0 -0
  77. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/catalogs.py +0 -0
  78. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/dag.py +0 -0
  79. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/engines.py +0 -0
  80. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/nodes.py +0 -0
  81. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/sql.py +0 -0
  82. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/queries/tags.py +0 -0
  83. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/resolvers/__init__.py +0 -0
  84. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/resolvers/nodes.py +0 -0
  85. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/resolvers/tags.py +0 -0
  86. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/__init__.py +0 -0
  87. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/availabilitystate.py +0 -0
  88. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/catalog_engine.py +0 -0
  89. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/column.py +0 -0
  90. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/errors.py +0 -0
  91. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/materialization.py +0 -0
  92. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/node.py +0 -0
  93. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/sql.py +0 -0
  94. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/tag.py +0 -0
  95. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/scalars/user.py +0 -0
  96. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/graphql/utils.py +0 -0
  97. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/health.py +0 -0
  98. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/history.py +0 -0
  99. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/logging.conf +0 -0
  100. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/main.py +0 -0
  101. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/measures.py +0 -0
  102. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/metrics.py +0 -0
  103. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/namespaces.py +0 -0
  104. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/nodes.py +0 -0
  105. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/notification.py +0 -0
  106. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/sql.py +0 -0
  107. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/tags.py +0 -0
  108. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/api/users.py +0 -0
  109. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/config.py +0 -0
  110. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/constants.py +0 -0
  111. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/__init__.py +0 -0
  112. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/dimensions.py +0 -0
  113. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/dj_query.py +0 -0
  114. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/exceptions.py +0 -0
  115. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/construction/utils.py +0 -0
  116. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/__init__.py +0 -0
  117. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/attributetype.py +0 -0
  118. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/availabilitystate.py +0 -0
  119. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/backfill.py +0 -0
  120. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/base.py +0 -0
  121. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/catalog.py +0 -0
  122. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/collection.py +0 -0
  123. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/column.py +0 -0
  124. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/database.py +0 -0
  125. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/dimensionlink.py +0 -0
  126. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/engine.py +0 -0
  127. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/history.py +0 -0
  128. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/materialization.py +0 -0
  129. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/measure.py +0 -0
  130. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/metricmetadata.py +0 -0
  131. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/namespace.py +0 -0
  132. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/node.py +0 -0
  133. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/partition.py +0 -0
  134. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/queryrequest.py +0 -0
  135. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/tag.py +0 -0
  136. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/database/user.py +0 -0
  137. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/enum.py +0 -0
  138. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/errors.py +0 -0
  139. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/__init__.py +0 -0
  140. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/__init__.py +0 -0
  141. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/__init__.py +0 -0
  142. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/basic.py +0 -0
  143. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/github.py +0 -0
  144. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/google.py +0 -0
  145. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/http.py +0 -0
  146. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authentication/tokens.py +0 -0
  147. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/access/authorization.py +0 -0
  148. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/client.py +0 -0
  149. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/engines.py +0 -0
  150. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/namespaces.py +0 -0
  151. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/nodes.py +0 -0
  152. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/client_setup.j2 +0 -0
  153. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/create_cube.j2 +0 -0
  154. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/create_dimension.j2 +0 -0
  155. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/create_metric.j2 +0 -0
  156. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/create_transform.j2 +0 -0
  157. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/link_dimension.j2 +0 -0
  158. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/namespace_mapping.j2 +0 -0
  159. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/register_table.j2 +0 -0
  160. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/templates/set_column_attributes.j2 +0 -0
  161. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/internal/validation.py +0 -0
  162. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/__init__.py +0 -0
  163. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/jobs/__init__.py +0 -0
  164. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/materialization/jobs/job_types.py +0 -0
  165. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/__init__.py +0 -0
  166. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/access.py +0 -0
  167. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/attribute.py +0 -0
  168. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/base.py +0 -0
  169. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/catalog.py +0 -0
  170. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/collection.py +0 -0
  171. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/column.py +0 -0
  172. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/cube.py +0 -0
  173. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/database.py +0 -0
  174. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/dimensionlink.py +0 -0
  175. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/engine.py +0 -0
  176. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/history.py +0 -0
  177. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/measure.py +0 -0
  178. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/node.py +0 -0
  179. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/partition.py +0 -0
  180. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/query.py +0 -0
  181. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/table.py +0 -0
  182. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/tag.py +0 -0
  183. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/models/user.py +0 -0
  184. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/naming.py +0 -0
  185. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/__init__.py +0 -0
  186. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/dag.py +0 -0
  187. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/functions.py +0 -0
  188. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/__init__.py +0 -0
  189. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/ast.py +0 -0
  190. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/__init__.py +0 -0
  191. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/antlr4.py +0 -0
  192. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/exceptions.py +0 -0
  193. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/SqlBaseLexer.g4 +0 -0
  194. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/SqlBaseParser.g4 +0 -0
  195. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/__init__.py +0 -0
  196. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.interp +0 -0
  197. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.py +0 -0
  198. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.tokens +0 -0
  199. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.interp +0 -0
  200. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py +0 -0
  201. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens +0 -0
  202. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py +0 -0
  203. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py +0 -0
  204. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/sql/parsing/types.py +0 -0
  205. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/superset.py +0 -0
  206. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/transpilation.py +0 -0
  207. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/datajunction_server/typing.py +0 -0
  208. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/init_data/seed.sql +0 -0
  209. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/pdm.lock +0 -0
  210. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/pyproject.toml +0 -0
  211. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/requirements/docker.txt +0 -0
  212. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/requirements/test.txt +0 -0
  213. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/scripts/docs-snippets.js +0 -0
  214. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/scripts/docs-snippets.sh +0 -0
  215. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/scripts/generate-openapi.py +0 -0
  216. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/__init__.py +0 -0
  217. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/__init__.py +0 -0
  218. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/access_test.py +0 -0
  219. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/attributes_test.py +0 -0
  220. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/catalog_test.py +0 -0
  221. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/client_test.py +0 -0
  222. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/collections_test.py +0 -0
  223. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/data_test.py +0 -0
  224. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/dimension_links_test.py +0 -0
  225. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/dimensions_access_test.py +0 -0
  226. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/dimensions_test.py +0 -0
  227. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/djql_test.py +0 -0
  228. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/engine_test.py +0 -0
  229. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_cube.repairs_cube.namespace.txt +0 -0
  230. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_cube.repairs_cube.txt +0 -0
  231. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_dimension.repair_order.namespace.txt +0 -0
  232. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_dimension.repair_order.txt +0 -0
  233. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_metric.num_repair_orders.namespace.txt +0 -0
  234. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_metric.num_repair_orders.txt +0 -0
  235. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_transform.regional_level_agg.namespace.txt +0 -0
  236. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/create_transform.regional_level_agg.txt +0 -0
  237. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/dimension_links.repair_orders.namespace.txt +0 -0
  238. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/dimension_links.repair_orders.txt +0 -0
  239. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/include_client_setup.txt +0 -0
  240. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/notebook.create_cube.txt +0 -0
  241. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/notebook.create_transform.txt +0 -0
  242. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/notebook.link_dimension.txt +0 -0
  243. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/notebook.set_attribute.txt +0 -0
  244. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/client_test/register_table.txt +0 -0
  245. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.druid_spec.json +0 -0
  246. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.partition.druid_spec.json +0 -0
  247. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.partition.query.sql +0 -0
  248. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.query.sql +0 -0
  249. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.categorical.query.sql +0 -0
  250. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.druid_spec.json +0 -0
  251. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.patched.query.sql +0 -0
  252. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.query.sql +0 -0
  253. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.categorical.query.sql +0 -0
  254. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.druid_spec.json +0 -0
  255. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.query.sql +0 -0
  256. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.config.json +0 -0
  257. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.materializations.json +0 -0
  258. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.config.json +0 -0
  259. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.materializations.json +0 -0
  260. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.query.sql +0 -0
  261. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.full.query.sql +0 -0
  262. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.additional.query.sql +0 -0
  263. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.categorical.query.sql +0 -0
  264. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.config.json +0 -0
  265. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.lookback.query.sql +0 -0
  266. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/files/materializations_test/spark_sql.incremental.query.sql +0 -0
  267. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/__init__.py +0 -0
  268. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/catalog_test.py +0 -0
  269. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/common_dimensions_test.py +0 -0
  270. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/engine_test.py +0 -0
  271. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/find_nodes_test.py +0 -0
  272. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/measures_sql_test.py +0 -0
  273. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/graphql/tags_test.py +0 -0
  274. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/health_test.py +0 -0
  275. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/helpers_test.py +0 -0
  276. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/history_test.py +0 -0
  277. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/measures_test.py +0 -0
  278. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/metrics_test.py +0 -0
  279. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/namespaces_test.py +0 -0
  280. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/nodes_update_test.py +0 -0
  281. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/notification_test.py +0 -0
  282. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/routers_test.py +0 -0
  283. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/sql_test.py +0 -0
  284. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/sql_v2_test.py +0 -0
  285. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/tags_test.py +0 -0
  286. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/api/users_test.py +0 -0
  287. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/__init__.py +0 -0
  288. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/build_test.py +0 -0
  289. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/build_v2_test.py +0 -0
  290. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/compile_test.py +0 -0
  291. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/exceptions_test.py +0 -0
  292. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/fixtures.py +0 -0
  293. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/inference_test.py +0 -0
  294. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/construction/utils_test.py +0 -0
  295. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/default.duckdb +0 -0
  296. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/duckdb.sql +0 -0
  297. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/errors_test.py +0 -0
  298. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/examples.py +0 -0
  299. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/integration/__init__.py +0 -0
  300. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/integration/basic_test.py +0 -0
  301. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/basic_test.py +0 -0
  302. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/github_test.py +0 -0
  303. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/http_test.py +0 -0
  304. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/token_test.py +0 -0
  305. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/internal/authentication/whoami_test.py +0 -0
  306. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/migrations_test.py +0 -0
  307. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/__init__.py +0 -0
  308. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/catalog_test.py +0 -0
  309. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/hash_test.py +0 -0
  310. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/measure_test.py +0 -0
  311. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/node_test.py +0 -0
  312. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/models/query_test.py +0 -0
  313. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/__init__.py +0 -0
  314. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/dag_test.py +0 -0
  315. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/functions_test.py +0 -0
  316. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/__init__.py +0 -0
  317. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/backends/__init__.py +0 -0
  318. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/backends/antlr4_test.py +0 -0
  319. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/backends/types_test.py +0 -0
  320. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/__init__.py +0 -0
  321. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query1.sql +0 -0
  322. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query10.sql +0 -0
  323. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query11.sql +0 -0
  324. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query12.sql +0 -0
  325. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query13.sql +0 -0
  326. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query14.sql +0 -0
  327. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query15.sql +0 -0
  328. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query16.sql +0 -0
  329. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query17.sql +0 -0
  330. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query18.sql +0 -0
  331. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query19.sql +0 -0
  332. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query2.sql +0 -0
  333. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query20.sql +0 -0
  334. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query21.sql +0 -0
  335. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query22.sql +0 -0
  336. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query23.sql +0 -0
  337. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query24.sql +0 -0
  338. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query25.sql +0 -0
  339. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query26.sql +0 -0
  340. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query27.sql +0 -0
  341. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query28.sql +0 -0
  342. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query29.sql +0 -0
  343. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query3.sql +0 -0
  344. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query30.sql +0 -0
  345. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query31.sql +0 -0
  346. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query32.sql +0 -0
  347. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query33.sql +0 -0
  348. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query34.sql +0 -0
  349. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query35.sql +0 -0
  350. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query36.sql +0 -0
  351. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query37.sql +0 -0
  352. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query38.sql +0 -0
  353. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query39.sql +0 -0
  354. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query4.sql +0 -0
  355. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query40.sql +0 -0
  356. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query41.sql +0 -0
  357. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query42.sql +0 -0
  358. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query43.sql +0 -0
  359. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query44.sql +0 -0
  360. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query45.sql +0 -0
  361. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query46.sql +0 -0
  362. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query47.sql +0 -0
  363. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query48.sql +0 -0
  364. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query49.sql +0 -0
  365. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query5.sql +0 -0
  366. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query50.sql +0 -0
  367. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query51.sql +0 -0
  368. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query52.sql +0 -0
  369. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query53.sql +0 -0
  370. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query54.sql +0 -0
  371. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query55.sql +0 -0
  372. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query56.sql +0 -0
  373. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query57.sql +0 -0
  374. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query58.sql +0 -0
  375. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query59.sql +0 -0
  376. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query6.sql +0 -0
  377. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query60.sql +0 -0
  378. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query61.sql +0 -0
  379. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query62.sql +0 -0
  380. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query63.sql +0 -0
  381. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query64.sql +0 -0
  382. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query65.sql +0 -0
  383. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query66.sql +0 -0
  384. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query67.sql +0 -0
  385. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query68.sql +0 -0
  386. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query69.sql +0 -0
  387. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query7.sql +0 -0
  388. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query70.sql +0 -0
  389. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query71.sql +0 -0
  390. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query72.sql +0 -0
  391. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query73.sql +0 -0
  392. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query74.sql +0 -0
  393. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query75.sql +0 -0
  394. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query76.sql +0 -0
  395. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query77.sql +0 -0
  396. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query78.sql +0 -0
  397. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query79.sql +0 -0
  398. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query8.sql +0 -0
  399. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query80.sql +0 -0
  400. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query81.sql +0 -0
  401. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query82.sql +0 -0
  402. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query83.sql +0 -0
  403. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query84.sql +0 -0
  404. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query85.sql +0 -0
  405. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query86.sql +0 -0
  406. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query87.sql +0 -0
  407. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query88.sql +0 -0
  408. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query89.sql +0 -0
  409. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query9.sql +0 -0
  410. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query90.sql +0 -0
  411. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query91.sql +0 -0
  412. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query92.sql +0 -0
  413. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query93.sql +0 -0
  414. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query94.sql +0 -0
  415. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query95.sql +0 -0
  416. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query96.sql +0 -0
  417. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query97.sql +0 -0
  418. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query98.sql +0 -0
  419. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/ansi/query99.sql +0 -0
  420. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query1.sql +0 -0
  421. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query10.sql +0 -0
  422. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query11.sql +0 -0
  423. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query12.sql +0 -0
  424. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query13.sql +0 -0
  425. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query14.sql +0 -0
  426. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query15.sql +0 -0
  427. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query16.sql +0 -0
  428. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query17.sql +0 -0
  429. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query18.sql +0 -0
  430. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query19.sql +0 -0
  431. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query2.sql +0 -0
  432. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query20.sql +0 -0
  433. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query21.sql +0 -0
  434. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query22.sql +0 -0
  435. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query23.sql +0 -0
  436. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query24.sql +0 -0
  437. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query25.sql +0 -0
  438. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query26.sql +0 -0
  439. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query27.sql +0 -0
  440. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query28.sql +0 -0
  441. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query29.sql +0 -0
  442. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query3.sql +0 -0
  443. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query30.sql +0 -0
  444. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query31.sql +0 -0
  445. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query32.sql +0 -0
  446. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query33.sql +0 -0
  447. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query34.sql +0 -0
  448. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query35.sql +0 -0
  449. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query36.sql +0 -0
  450. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query37.sql +0 -0
  451. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query38.sql +0 -0
  452. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query39.sql +0 -0
  453. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query4.sql +0 -0
  454. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query40.sql +0 -0
  455. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query41.sql +0 -0
  456. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query42.sql +0 -0
  457. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query43.sql +0 -0
  458. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query44.sql +0 -0
  459. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query45.sql +0 -0
  460. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query46.sql +0 -0
  461. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query47.sql +0 -0
  462. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query48.sql +0 -0
  463. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query49.sql +0 -0
  464. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query5.sql +0 -0
  465. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query50.sql +0 -0
  466. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query51.sql +0 -0
  467. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query52.sql +0 -0
  468. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query53.sql +0 -0
  469. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query54.sql +0 -0
  470. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query55.sql +0 -0
  471. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query56.sql +0 -0
  472. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query57.sql +0 -0
  473. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query58.sql +0 -0
  474. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query59.sql +0 -0
  475. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query6.sql +0 -0
  476. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query60.sql +0 -0
  477. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query61.sql +0 -0
  478. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query62.sql +0 -0
  479. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query63.sql +0 -0
  480. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query64.sql +0 -0
  481. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query65.sql +0 -0
  482. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query66.sql +0 -0
  483. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query67.sql +0 -0
  484. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query68.sql +0 -0
  485. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query69.sql +0 -0
  486. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query7.sql +0 -0
  487. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query70.sql +0 -0
  488. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query71.sql +0 -0
  489. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query72.sql +0 -0
  490. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query73.sql +0 -0
  491. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query74.sql +0 -0
  492. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query75.sql +0 -0
  493. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query76.sql +0 -0
  494. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query77.sql +0 -0
  495. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query78.sql +0 -0
  496. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query79.sql +0 -0
  497. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query8.sql +0 -0
  498. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query80.sql +0 -0
  499. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query81.sql +0 -0
  500. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query82.sql +0 -0
  501. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query83.sql +0 -0
  502. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query84.sql +0 -0
  503. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query85.sql +0 -0
  504. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query86.sql +0 -0
  505. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query87.sql +0 -0
  506. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query88.sql +0 -0
  507. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query89.sql +0 -0
  508. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query9.sql +0 -0
  509. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query90.sql +0 -0
  510. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query91.sql +0 -0
  511. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query92.sql +0 -0
  512. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query93.sql +0 -0
  513. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query94.sql +0 -0
  514. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query95.sql +0 -0
  515. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query96.sql +0 -0
  516. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query97.sql +0 -0
  517. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query98.sql +0 -0
  518. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query99.sql +0 -0
  519. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/queries/tpcds/test_tpcds.py +0 -0
  520. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/parsing/test_ast.py +0 -0
  521. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/sql/utils.py +0 -0
  522. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/superset_test.py +0 -0
  523. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/transpilation_test.py +0 -0
  524. {datajunction_server-0.0.1a85 → datajunction_server-0.0.1a85.dev0}/tests/utils_test.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.3
2
2
  Name: datajunction-server
3
- Version: 0.0.1a85
3
+ Version: 0.0.1a85.dev0
4
4
  Summary: DataJunction server library for running to a DataJunction server
5
5
  Project-URL: Homepage, https://datajunction.io
6
6
  Project-URL: Repository, https://github.com/DataJunction/dj
@@ -0,0 +1,4 @@
1
+ """
2
+ Version for Hatch
3
+ """
4
+ __version__ = "0.0.1a85.dev0"
@@ -12,8 +12,10 @@ from datajunction_server.api.helpers import get_catalog_by_name
12
12
  from datajunction_server.construction.dimensions import build_dimensions_from_cube_query
13
13
  from datajunction_server.database.node import Node
14
14
  from datajunction_server.database.user import User
15
+ from datajunction_server.errors import DJInvalidInputException
15
16
  from datajunction_server.internal.access.authentication.http import SecureAPIRouter
16
17
  from datajunction_server.internal.access.authorization import validate_access
18
+ from datajunction_server.internal.materializations import build_cube_materialization
17
19
  from datajunction_server.internal.nodes import get_cube_revision_metadata
18
20
  from datajunction_server.models import access
19
21
  from datajunction_server.models.cube import (
@@ -21,6 +23,15 @@ from datajunction_server.models.cube import (
21
23
  DimensionValue,
22
24
  DimensionValues,
23
25
  )
26
+ from datajunction_server.models.cube_materialization import (
27
+ DruidCubeMaterializationInput,
28
+ UpsertCubeMaterialization,
29
+ )
30
+ from datajunction_server.models.materialization import (
31
+ Granularity,
32
+ MaterializationJobTypeEnum,
33
+ MaterializationStrategy,
34
+ )
24
35
  from datajunction_server.models.metric import TranslatedSQL
25
36
  from datajunction_server.models.query import QueryCreate
26
37
  from datajunction_server.naming import from_amenable_name
@@ -47,6 +58,95 @@ async def get_cube(
47
58
  return await get_cube_revision_metadata(session, name)
48
59
 
49
60
 
61
+ @router.get("/cubes/{name}/materialization", name="Cube Materialization Config")
62
+ async def cube_materialization_info(
63
+ name: str,
64
+ session: AsyncSession = Depends(get_session),
65
+ ) -> DruidCubeMaterializationInput:
66
+ """
67
+ The standard cube materialization config. DJ makes sensible materialization choices
68
+ where possible.
69
+
70
+ Requirements:
71
+ - The cube must have a temporal partition column specified.
72
+ - The job strategy will always be "incremental time".
73
+
74
+ Outputs:
75
+ "measures_materializations":
76
+ We group the metrics by parent node. Then we try to pre-aggregate each parent node as
77
+ much as possible to prepare for metric queries on the cube's dimensions.
78
+ "combiners":
79
+ We combine each set of measures materializations on their shared grain. Note that we don't
80
+ support materializing cubes with measures materializations that don't share the same grain.
81
+ However, we keep `combiners` as a list in the eventual future where we support that.
82
+ "metrics":
83
+ We include a list of metrics, their required measures, and the derived expression (e.g., the
84
+ expression used by the metric that makes use of the pre-aggregated measures)
85
+
86
+ Once we create a scheduled materialization workflow, we freeze the metadata for that particular
87
+ materialized dataset. This allows us to reconstruct metrics SQL from the dataset when needed.
88
+ To request metrics from the materialized cube, use the metrics' measures metadata.
89
+ """
90
+ node = await Node.get_cube_by_name(session, name)
91
+ temporal_partitions = node.current.temporal_partition_columns() # type: ignore
92
+ if len(temporal_partitions) != 1:
93
+ raise DJInvalidInputException(
94
+ "The cube must have a single temporal partition column set "
95
+ "in order for it to be materialized.",
96
+ )
97
+ temporal_partition = temporal_partitions[0] if temporal_partitions else None
98
+ granularity_lookback_defaults = {
99
+ Granularity.MINUTE: "1 MINUTE",
100
+ Granularity.HOUR: "1 HOUR",
101
+ Granularity.DAY: "1 DAY",
102
+ Granularity.WEEK: "1 WEEK",
103
+ Granularity.MONTH: "1 MONTH",
104
+ Granularity.QUARTER: "1 QUARTER",
105
+ Granularity.YEAR: "1 YEAR",
106
+ }
107
+ granularity_cron_defaults = {
108
+ Granularity.MINUTE: "* * * * *", # Runs every minute
109
+ Granularity.HOUR: "0 * * * *", # Runs at the start of every hour
110
+ Granularity.DAY: "0 0 * * *", # Runs at midnight every day
111
+ Granularity.WEEK: "0 0 * * 0", # Runs at midnight on Sundays
112
+ Granularity.MONTH: "0 0 1 * *", # Runs at midnight on the first of every month
113
+ Granularity.QUARTER: "0 0 1 */3 *", # Runs at midnight on the first day of each quarter
114
+ Granularity.YEAR: "0 0 1 1 *", # Runs at midnight on January 1st every year
115
+ }
116
+ upsert = UpsertCubeMaterialization(
117
+ job=MaterializationJobTypeEnum.DRUID_CUBE,
118
+ strategy=(
119
+ MaterializationStrategy.INCREMENTAL_TIME
120
+ if temporal_partition
121
+ else MaterializationStrategy.FULL
122
+ ),
123
+ lookback_window=granularity_lookback_defaults.get(
124
+ temporal_partition.partition.granularity,
125
+ granularity_lookback_defaults[Granularity.DAY],
126
+ ),
127
+ schedule=granularity_cron_defaults.get(
128
+ temporal_partition.partition.granularity,
129
+ granularity_cron_defaults[Granularity.DAY],
130
+ ),
131
+ )
132
+ cube_config = await build_cube_materialization(
133
+ session,
134
+ node.current, # type: ignore
135
+ upsert,
136
+ )
137
+ return DruidCubeMaterializationInput(
138
+ name="",
139
+ cube=cube_config.cube,
140
+ dimensions=cube_config.dimensions,
141
+ metrics=cube_config.metrics,
142
+ strategy=upsert.strategy,
143
+ schedule=upsert.schedule,
144
+ job=upsert.job.name,
145
+ measures_materializations=cube_config.measures_materializations,
146
+ combiners=cube_config.combiners,
147
+ )
148
+
149
+
50
150
  @router.get("/cubes/{name}/dimensions/sql", name="Dimensions SQL for Cube")
51
151
  async def get_cube_dimension_sql(
52
152
  name: str,
@@ -2,6 +2,7 @@
2
2
  """
3
3
  Data related APIs.
4
4
  """
5
+ import logging
5
6
  from typing import Callable, Dict, List, Optional
6
7
 
7
8
  from fastapi import BackgroundTasks, Depends, Query, Request
@@ -42,6 +43,8 @@ from datajunction_server.utils import (
42
43
  get_settings,
43
44
  )
44
45
 
46
+ _logger = logging.getLogger(__name__)
47
+
45
48
  settings = get_settings()
46
49
  router = SecureAPIRouter(tags=["data"])
47
50
 
@@ -61,6 +64,7 @@ async def add_availability_state(
61
64
  """
62
65
  Add an availability state to a node.
63
66
  """
67
+ _logger.info("Storing availability for node=%s", node_name)
64
68
 
65
69
  node = await Node.get_by_name(
66
70
  session,
@@ -4,10 +4,14 @@ from typing import Optional
4
4
 
5
5
  import strawberry
6
6
 
7
+ from datajunction_server.models.cube_materialization import (
8
+ Aggregability as Aggregability_,
9
+ )
10
+ from datajunction_server.models.cube_materialization import (
11
+ AggregationRule as AggregationRule_,
12
+ )
13
+ from datajunction_server.models.cube_materialization import Measure as Measure_
7
14
  from datajunction_server.models.node import MetricDirection as MetricDirection_
8
- from datajunction_server.sql.decompose import Aggregability as Aggregability_
9
- from datajunction_server.sql.decompose import AggregationRule as AggregationRule_
10
- from datajunction_server.sql.decompose import Measure as Measure_
11
15
 
12
16
  MetricDirection = strawberry.enum(MetricDirection_)
13
17
  Aggregability = strawberry.enum(Aggregability_)
@@ -366,6 +366,8 @@ async def validate_cube( # pylint: disable=too-many-locals
366
366
 
367
367
  # Verify that the provided metrics are metric nodes
368
368
  metrics: List[Column] = [metric.current.columns[0] for metric in metric_nodes]
369
+ for metric in metrics:
370
+ await session.refresh(metric, ["node_revisions"])
369
371
  if not metrics:
370
372
  raise DJInvalidInputException(
371
373
  message=("At least one metric is required"),
@@ -27,6 +27,7 @@ from datajunction_server.internal.materializations import (
27
27
  from datajunction_server.materialization.jobs import MaterializationJob
28
28
  from datajunction_server.models import access
29
29
  from datajunction_server.models.base import labelize
30
+ from datajunction_server.models.cube_materialization import UpsertCubeMaterialization
30
31
  from datajunction_server.models.materialization import (
31
32
  MaterializationConfigInfoUnified,
32
33
  MaterializationConfigOutput,
@@ -80,7 +81,7 @@ def materialization_jobs_info() -> JSONResponse:
80
81
  )
81
82
  async def upsert_materialization( # pylint: disable=too-many-locals
82
83
  node_name: str,
83
- data: UpsertMaterialization,
84
+ data: UpsertMaterialization | UpsertCubeMaterialization,
84
85
  *,
85
86
  session: AsyncSession = Depends(get_session),
86
87
  request: Request,
@@ -95,7 +96,7 @@ async def upsert_materialization( # pylint: disable=too-many-locals
95
96
  for the materialization config, it will always update that named config.
96
97
  """
97
98
  request_headers = dict(request.headers)
98
- node = await Node.get_by_name(session, node_name)
99
+ node = await Node.get_by_name(session, node_name, raise_if_not_exists=True)
99
100
  if node.type == NodeType.SOURCE: # type: ignore
100
101
  raise DJInvalidInputException(
101
102
  http_status_code=HTTPStatus.BAD_REQUEST,
@@ -103,6 +104,11 @@ async def upsert_materialization( # pylint: disable=too-many-locals
103
104
  )
104
105
  if node.type == NodeType.CUBE: # type: ignore
105
106
  node = await Node.get_cube_by_name(session, node_name)
107
+ _logger.info(
108
+ "Upserting materialization for node=%s version=%s",
109
+ node.name, # type: ignore
110
+ node.current_version, # type: ignore
111
+ )
106
112
 
107
113
  current_revision = node.current # type: ignore
108
114
  old_materializations = {mat.name: mat for mat in current_revision.materializations}
@@ -131,6 +137,11 @@ async def upsert_materialization( # pylint: disable=too-many-locals
131
137
  existing_materialization
132
138
  and existing_materialization.config == new_materialization.config
133
139
  ):
140
+ _logger.info(
141
+ "Existing materialization found for node=%s version=%s",
142
+ node.name, # type: ignore
143
+ node.current_version, # type: ignore
144
+ )
134
145
  new_materialization.node_revision = None # type: ignore
135
146
  # if the materialization was deactivated before, restore it
136
147
  if existing_materialization.deactivated_at is not None:
@@ -151,15 +162,20 @@ async def upsert_materialization( # pylint: disable=too-many-locals
151
162
  existing_materialization_info = query_service_client.get_materialization_info(
152
163
  node_name,
153
164
  current_revision.version, # type: ignore
165
+ current_revision.type,
154
166
  new_materialization.name, # type: ignore
155
167
  request_headers=request_headers,
156
168
  )
157
- # refresh existing materialization job
169
+ _logger.info(
170
+ "Refresh materialization workflows for node=%s version=%s",
171
+ node.name, # type: ignore
172
+ node.current_version, # type: ignore
173
+ )
158
174
  await schedule_materialization_jobs(
159
175
  session,
160
176
  node_revision_id=current_revision.id,
161
177
  materialization_names=[new_materialization.name],
162
- query_service_client=query_service_client,
178
+ query_service_client=get_query_service_client(request), # type: ignore
163
179
  request_headers=request_headers,
164
180
  )
165
181
  return JSONResponse(
@@ -178,12 +194,22 @@ async def upsert_materialization( # pylint: disable=too-many-locals
178
194
  )
179
195
  # If changes are detected, update the existing or save the new materialization
180
196
  if existing_materialization:
197
+ _logger.info(
198
+ "Updating existing materialization for node=%s version=%s",
199
+ node.name, # type: ignore
200
+ node.current_version, # type: ignore
201
+ )
181
202
  existing_materialization.config = new_materialization.config
182
203
  existing_materialization.schedule = new_materialization.schedule
183
204
  new_materialization.node_revision = None # type: ignore
184
205
  new_materialization = existing_materialization
185
206
  new_materialization.deactivated_at = None
186
207
  else:
208
+ _logger.info(
209
+ "Adding new materialization for node=%s version=%s",
210
+ node.name, # type: ignore
211
+ node.current_version, # type: ignore
212
+ )
187
213
  unchanged_existing_materializations = [
188
214
  config
189
215
  for config in current_revision.materializations
@@ -215,12 +241,16 @@ async def upsert_materialization( # pylint: disable=too-many-locals
215
241
  ),
216
242
  )
217
243
  await session.commit()
218
-
244
+ _logger.info(
245
+ "Scheduling materialization workflows for node=%s version=%s",
246
+ node.name, # type: ignore
247
+ node.current_version, # type: ignore
248
+ )
219
249
  materialization_response = await schedule_materialization_jobs(
220
250
  session,
221
251
  node_revision_id=current_revision.id,
222
252
  materialization_names=[new_materialization.name],
223
- query_service_client=query_service_client,
253
+ query_service_client=get_query_service_client(request), # type: ignore
224
254
  request_headers=request_headers,
225
255
  )
226
256
  return JSONResponse(
@@ -260,6 +290,7 @@ async def list_node_materializations(
260
290
  info = query_service_client.get_materialization_info(
261
291
  node_name,
262
292
  node.current.version, # type: ignore
293
+ node.type, # type: ignore
263
294
  materialization.name, # type: ignore
264
295
  request_headers=request_headers,
265
296
  )
@@ -14,12 +14,13 @@ from datajunction_server.database.node import Node, NodeRevision
14
14
  from datajunction_server.errors import DJError, DJInvalidInputException, ErrorCode
15
15
  from datajunction_server.internal.engines import get_engine
16
16
  from datajunction_server.models import access
17
+ from datajunction_server.models.cube_materialization import Measure
17
18
  from datajunction_server.models.engine import Dialect
18
19
  from datajunction_server.models.materialization import GenericCubeConfig
19
20
  from datajunction_server.models.node import BuildCriteria
20
21
  from datajunction_server.naming import LOOKUP_CHARS, amenable_name, from_amenable_name
21
22
  from datajunction_server.sql.dag import get_shared_dimensions
22
- from datajunction_server.sql.decompose import Measure, MeasureExtractor
23
+ from datajunction_server.sql.decompose import MeasureExtractor
23
24
  from datajunction_server.sql.parsing.backends.antlr4 import ast, parse
24
25
  from datajunction_server.sql.parsing.types import ColumnType
25
26
  from datajunction_server.utils import SEPARATOR
@@ -23,12 +23,12 @@ from datajunction_server.errors import (
23
23
  from datajunction_server.internal.engines import get_engine
24
24
  from datajunction_server.models import access
25
25
  from datajunction_server.models.column import SemanticType
26
+ from datajunction_server.models.cube_materialization import Aggregability, Measure
26
27
  from datajunction_server.models.engine import Dialect
27
28
  from datajunction_server.models.node import BuildCriteria
28
29
  from datajunction_server.models.node_type import NodeType
29
30
  from datajunction_server.models.sql import GeneratedSQL
30
31
  from datajunction_server.naming import amenable_name, from_amenable_name
31
- from datajunction_server.sql.decompose import Aggregability, Measure
32
32
  from datajunction_server.sql.parsing.ast import CompileContext
33
33
  from datajunction_server.sql.parsing.backends.antlr4 import ast, cached_parse, parse
34
34
  from datajunction_server.utils import SEPARATOR, refresh_if_needed
@@ -262,6 +262,15 @@ async def get_measures_query( # pylint: disable=too-many-locals
262
262
  else [pk_col.name for pk_col in parent_node.current.primary_key()]
263
263
  ),
264
264
  errors=query_builder.errors,
265
+ metrics={
266
+ metric.name: (
267
+ metrics2measures[metric.name][0],
268
+ str(metrics2measures[metric.name][1]).replace("\n", "")
269
+ if preaggregate
270
+ else metric.query,
271
+ )
272
+ for metric in children
273
+ },
265
274
  ),
266
275
  )
267
276
  return measures_queries
@@ -0,0 +1,271 @@
1
+ """Helper functions related to cube materializations."""
2
+ import itertools
3
+
4
+ from sqlalchemy.ext.asyncio import AsyncSession
5
+
6
+ from datajunction_server.construction.build_v2 import get_measures_query
7
+ from datajunction_server.database.node import Column, NodeRevision
8
+ from datajunction_server.errors import DJInvalidInputException
9
+ from datajunction_server.models.column import SemanticType
10
+ from datajunction_server.models.cube_materialization import (
11
+ CombineMaterialization,
12
+ CubeMetric,
13
+ DruidCubeConfig,
14
+ MeasureKey,
15
+ MeasuresMaterialization,
16
+ UpsertCubeMaterialization,
17
+ )
18
+ from datajunction_server.models.node_type import NodeNameVersion
19
+ from datajunction_server.models.partition import Granularity
20
+ from datajunction_server.sql.parsing import ast
21
+
22
+
23
+ def generate_partition_filter_sql(
24
+ temporal_partition: Column,
25
+ lookback_window: str,
26
+ ) -> str:
27
+ """
28
+ Generate filter SQL on partitions
29
+ """
30
+ logical_ts = "CAST(DJ_LOGICAL_TIMESTAMP() AS TIMESTAMP)"
31
+
32
+ def _partition_sql(timestamp_expression, column_type):
33
+ return f"CAST(DATE_FORMAT({timestamp_expression}, 'yyyyMMdd') AS {column_type})"
34
+
35
+ partition_sql = _partition_sql(logical_ts, str(temporal_partition.type))
36
+ if temporal_partition.partition.granularity == Granularity.DAY and (
37
+ lookback_window == "1 DAY" or not lookback_window
38
+ ):
39
+ return f"{temporal_partition.name} = {partition_sql}"
40
+ lookback_timestamp = (
41
+ f"{logical_ts} - INTERVAL {lookback_window}" # pragma: no cover
42
+ )
43
+ partition_start = _partition_sql( # pragma: no cover
44
+ lookback_timestamp,
45
+ str(temporal_partition.type),
46
+ )
47
+ return ( # pragma: no cover
48
+ f"{temporal_partition.name} BETWEEN {partition_start} AND {partition_sql}"
49
+ )
50
+
51
+
52
+ def combine_measures_on_shared_grain(
53
+ measures_materializations: list[MeasuresMaterialization],
54
+ query_grain: list[str],
55
+ ) -> ast.Query:
56
+ """
57
+ Generate a query that combines measures datasets on their shared grain.
58
+ An example:
59
+ SELECT
60
+ COALESCE(measureA.grain1, measureB.grain1) grain1,
61
+ COALESCE(measureA.grain2, measureB.grain2) grain2,
62
+ measureA.one,
63
+ measureA.two,
64
+ measureB.three,
65
+ measureB.four
66
+ FROM measureA
67
+ JOIN measureB ON
68
+ measureA.grain1 = measureB.grain1 AND
69
+ measureA.grain2 = measureB.grain2
70
+ """
71
+ measures_tables = {
72
+ mat.output_table_name: mat.table_ast() for mat in measures_materializations
73
+ }
74
+ initial_mat = measures_materializations[0]
75
+
76
+ # Coalesce grain fields
77
+ grain_fields = [
78
+ ast.Function(
79
+ name=ast.Name("COALESCE"),
80
+ args=[
81
+ ast.Column(
82
+ name=ast.Name(grain),
83
+ _table=measures_tables.get(mat.output_table_name),
84
+ )
85
+ for mat in measures_materializations
86
+ ],
87
+ ).set_alias(alias=ast.Name(grain))
88
+ for grain in query_grain
89
+ ]
90
+ measures_fields = [
91
+ ast.Column(
92
+ name=ast.Name(measure.name),
93
+ _table=measures_tables.get(mat.output_table_name),
94
+ semantic_type=SemanticType.MEASURE,
95
+ )
96
+ for mat in measures_materializations
97
+ for measure in mat.measures
98
+ ]
99
+ from_relation = ast.Relation(
100
+ primary=measures_tables.get(initial_mat.output_table_name), # type: ignore
101
+ extensions=[
102
+ ast.Join(
103
+ join_type="FULL OUTER",
104
+ right=ast.Table(name=ast.Name(measures_tables[mat.output_table_name])),
105
+ criteria=ast.JoinCriteria(
106
+ on=_combine_measures_join_criteria(
107
+ measures_tables[initial_mat.output_table_name],
108
+ measures_tables[mat.output_table_name],
109
+ query_grain,
110
+ ),
111
+ ),
112
+ )
113
+ for mat in measures_materializations[1:]
114
+ ],
115
+ )
116
+ return ast.Query(
117
+ select=ast.Select(
118
+ projection=grain_fields + measures_fields, # type: ignore
119
+ from_=ast.From(relations=[from_relation]),
120
+ ),
121
+ )
122
+
123
+
124
+ def _combine_measures_join_criteria(left_table, right_table, query_grain):
125
+ """
126
+ Generate the join condition across tables for shared grains.
127
+ """
128
+ return ast.BinaryOp.And(
129
+ *[
130
+ ast.BinaryOp.Eq(
131
+ ast.Column(name=ast.Name(grain), _table=left_table),
132
+ ast.Column(name=ast.Name(grain), _table=right_table),
133
+ )
134
+ for grain in query_grain
135
+ ]
136
+ )
137
+
138
+
139
+ async def build_cube_materialization( # pylint: disable=used-before-assignment,too-many-locals
140
+ session: AsyncSession,
141
+ current_revision: NodeRevision,
142
+ upsert_input: UpsertCubeMaterialization,
143
+ ) -> DruidCubeConfig:
144
+ """
145
+ Build the full config needed for a Druid cube materialization
146
+ """
147
+ temporal_partitions = current_revision.temporal_partition_columns()
148
+ temporal_partition = temporal_partitions[0]
149
+ measures_queries = await get_measures_query(
150
+ session=session,
151
+ metrics=current_revision.cube_node_metrics,
152
+ dimensions=current_revision.cube_node_dimensions,
153
+ filters=[
154
+ generate_partition_filter_sql(
155
+ temporal_partition,
156
+ upsert_input.lookback_window, # type: ignore
157
+ ),
158
+ ],
159
+ include_all_columns=False,
160
+ use_materialized=True,
161
+ preagg_requested=True,
162
+ )
163
+ query_grains = {
164
+ k: [q.node.name for q in queries]
165
+ for k, queries in itertools.groupby(
166
+ measures_queries,
167
+ lambda query: tuple(query.grain), # type: ignore
168
+ )
169
+ }
170
+ if len(query_grains) > 1:
171
+ raise DJInvalidInputException( # pragma: no cover
172
+ "DJ cannot manage materializations for cubes that have underlying "
173
+ "measures queries at different grains: "
174
+ + " vs ".join(
175
+ f"{', '.join(query_nodes)} at [{', '.join(grain)}]"
176
+ for grain, query_nodes in query_grains.items()
177
+ ),
178
+ )
179
+ measures_materializations = [
180
+ MeasuresMaterialization.from_measures_query(measures_query, temporal_partition)
181
+ for measures_query in measures_queries
182
+ ]
183
+
184
+ # Combine the queries on the shared query grain
185
+ query_grain = next(iter(query_grains))
186
+ if len(measures_materializations) == 1:
187
+ measures_materialization = measures_materializations[0]
188
+ combiners = [
189
+ CombineMaterialization(
190
+ node=measures_materialization.node,
191
+ output_table_name=measures_materialization.output_table_name,
192
+ columns=measures_materialization.columns,
193
+ grain=measures_materialization.grain,
194
+ measures=measures_materialization.measures,
195
+ dimensions=measures_materialization.dimensions,
196
+ timestamp_column=measures_materialization.timestamp_column,
197
+ timestamp_format=measures_materialization.timestamp_format,
198
+ granularity=measures_materialization.granularity,
199
+ upstream_tables=[measures_materialization.output_table_name],
200
+ ),
201
+ ]
202
+ if len(measures_materializations) > 1:
203
+ measures_materialization = measures_materializations[0]
204
+ combiner_query = combine_measures_on_shared_grain(
205
+ measures_materializations,
206
+ query_grain, # type: ignore
207
+ )
208
+ columns_metadata_lookup = {
209
+ col.name: col
210
+ for mat in measures_materializations
211
+ for col in mat.columns
212
+ if col.name in combiner_query.select.column_mapping
213
+ }
214
+ measures_lookup = {
215
+ measure.name: measure
216
+ for mat in measures_materializations
217
+ for measure in mat.measures
218
+ }
219
+ combiners = [
220
+ CombineMaterialization(
221
+ node=current_revision,
222
+ query=str(combiner_query),
223
+ columns=[
224
+ columns_metadata_lookup.get(col.alias_or_name.name) # type: ignore
225
+ for col in combiner_query.select.projection
226
+ ],
227
+ grain=query_grain,
228
+ measures=[
229
+ measures_lookup.get(col.alias_or_name.name) # type: ignore
230
+ for col in combiner_query.select.projection
231
+ if col.semantic_type == SemanticType.MEASURE # type: ignore
232
+ ],
233
+ dimensions=query_grain,
234
+ timestamp_column=measures_materialization.timestamp_column,
235
+ timestamp_format=measures_materialization.timestamp_format,
236
+ granularity=measures_materialization.granularity,
237
+ ),
238
+ ]
239
+
240
+ metrics_mapping = {
241
+ metric: (measures_query.node, measures)
242
+ for measures_query in measures_queries
243
+ for metric, measures in measures_query.metrics.items() # type: ignore
244
+ }
245
+ config = DruidCubeConfig(
246
+ cube=NodeNameVersion(
247
+ name=current_revision.name,
248
+ version=current_revision.version,
249
+ ),
250
+ metrics=[
251
+ CubeMetric(
252
+ metric=NodeNameVersion(
253
+ name=metric.name,
254
+ version=metric.current_version,
255
+ ),
256
+ required_measures=[
257
+ MeasureKey(
258
+ node=metrics_mapping.get(metric.name)[0], # type: ignore
259
+ measure_name=measure.name,
260
+ )
261
+ for measure in metrics_mapping.get(metric.name)[1][0] # type: ignore
262
+ ],
263
+ derived_expression=metrics_mapping.get(metric.name)[1][1], # type: ignore
264
+ )
265
+ for metric in current_revision.cube_metrics()
266
+ ],
267
+ dimensions=current_revision.cube_node_dimensions,
268
+ measures_materializations=measures_materializations,
269
+ combiners=combiners, # pylint: disable=possibly-used-before-assignment
270
+ )
271
+ return config