datajunction-server 0.0.1a46.dev3__tar.gz → 0.0.1a47__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 (450) hide show
  1. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/PKG-INFO +2 -2
  2. datajunction_server-0.0.1a47/alembic/versions/2024_05_09_1420-9b1227ff17f4_update_backfill_spec.py +43 -0
  3. datajunction_server-0.0.1a47/datajunction_server/__about__.py +4 -0
  4. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/helpers.py +8 -2
  5. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/materializations.py +31 -13
  6. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/construction/build.py +1 -2
  7. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/backfill.py +3 -3
  8. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/materialization.py +44 -2
  9. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/partition.py +35 -0
  10. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/materializations.py +12 -2
  11. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/nodes.py +26 -12
  12. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/materialization/jobs/cube_materialization.py +28 -1
  13. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/materialization/jobs/materialization_job.py +53 -24
  14. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/materialization.py +1 -1
  15. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/node.py +1 -1
  16. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/partition.py +1 -1
  17. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/service_clients.py +3 -7
  18. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/pyproject.toml +3 -0
  19. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/cubes_test.py +1 -0
  20. datajunction_server-0.0.1a47/tests/api/files/materializations_test/druid_measures_cube.incremental.categorical.query.sql +50 -0
  21. datajunction_server-0.0.1a47/tests/api/files/materializations_test/druid_metrics_cube.incremental.categorical.query.sql +48 -0
  22. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.full.partition.config.json +1 -1
  23. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.full.partition.materializations.json +1 -1
  24. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.incremental.additional.query.sql +4 -2
  25. datajunction_server-0.0.1a47/tests/api/files/materializations_test/spark_sql.incremental.categorical.query.sql +11 -0
  26. datajunction_server-0.0.1a47/tests/api/files/materializations_test/spark_sql.incremental.lookback.query.sql +11 -0
  27. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/materializations_test.py +226 -25
  28. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/nodes_test.py +6 -4
  29. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/service_clients_test.py +58 -11
  30. datajunction_server-0.0.1a47/tests/sql/parsing/queries/__init__.py +0 -0
  31. datajunction_server-0.0.1a46.dev3/datajunction_server/__about__.py +0 -4
  32. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/.coveragerc +0 -0
  33. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/.env +0 -0
  34. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/.env.integration +0 -0
  35. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/.flake8 +0 -0
  36. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/.gitignore +0 -0
  37. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/.isort.cfg +0 -0
  38. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/.pre-commit-config.yaml +0 -0
  39. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/.pylintrc +0 -0
  40. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/Dockerfile +0 -0
  41. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/Makefile +0 -0
  42. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/README.md +0 -0
  43. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/README +0 -0
  44. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/env.py +0 -0
  45. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/script.py.mako +0 -0
  46. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/versions/2023_12_20_1829-724445d2b29d_initial_migration.py +0 -0
  47. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/versions/2024_01_08_2034-945d44abcd32_add_dimension_links.py +0 -0
  48. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/versions/2024_01_11_2032-c74b11566d82_add_column_order.py +0 -0
  49. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/versions/2024_01_18_2011-20f060b02772_switch_enum_values.py +0 -0
  50. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/versions/2024_01_23_0617-c9cef8864ecb_add_missing_table_attribute_to_source_.py +0 -0
  51. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/versions/2024_01_23_1655-a8e22109be24_availability_state_s_valid_through_ts_.py +0 -0
  52. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/versions/2024_02_22_0713-d61fb7e48cc3_cascade_deletes_to_dimension_links.py +0 -0
  53. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic/versions/2024_04_30_1556-de7ec1c82fe0_add_query_requests.py +0 -0
  54. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/alembic.ini +0 -0
  55. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/__init__.py +0 -0
  56. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/__init__.py +0 -0
  57. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/access/authentication/__init__.py +0 -0
  58. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/access/authentication/basic.py +0 -0
  59. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/access/authentication/github.py +0 -0
  60. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/access/authentication/google.py +0 -0
  61. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/access/authentication/whoami.py +0 -0
  62. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/attributes.py +0 -0
  63. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/catalogs.py +0 -0
  64. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/client.py +0 -0
  65. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/cubes.py +0 -0
  66. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/data.py +0 -0
  67. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/dimensions.py +0 -0
  68. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/djsql.py +0 -0
  69. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/engines.py +0 -0
  70. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/graphql/__init__.py +0 -0
  71. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/graphql/catalogs.py +0 -0
  72. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/graphql/engines.py +0 -0
  73. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/graphql/main.py +0 -0
  74. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/health.py +0 -0
  75. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/history.py +0 -0
  76. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/logging.conf +0 -0
  77. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/main.py +0 -0
  78. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/measures.py +0 -0
  79. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/metrics.py +0 -0
  80. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/namespaces.py +0 -0
  81. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/nodes.py +0 -0
  82. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/sql.py +0 -0
  83. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/api/tags.py +0 -0
  84. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/config.py +0 -0
  85. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/constants.py +0 -0
  86. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/construction/__init__.py +0 -0
  87. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/construction/dimensions.py +0 -0
  88. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/construction/dj_query.py +0 -0
  89. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/construction/exceptions.py +0 -0
  90. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/construction/utils.py +0 -0
  91. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/__init__.py +0 -0
  92. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/attributetype.py +0 -0
  93. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/availabilitystate.py +0 -0
  94. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/base.py +0 -0
  95. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/catalog.py +0 -0
  96. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/column.py +0 -0
  97. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/database.py +0 -0
  98. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/dimensionlink.py +0 -0
  99. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/engine.py +0 -0
  100. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/history.py +0 -0
  101. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/measure.py +0 -0
  102. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/metricmetadata.py +0 -0
  103. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/namespace.py +0 -0
  104. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/node.py +0 -0
  105. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/queryrequest.py +0 -0
  106. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/tag.py +0 -0
  107. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/database/user.py +0 -0
  108. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/enum.py +0 -0
  109. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/errors.py +0 -0
  110. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/__init__.py +0 -0
  111. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/access/__init__.py +0 -0
  112. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/access/authentication/__init__.py +0 -0
  113. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/access/authentication/basic.py +0 -0
  114. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/access/authentication/github.py +0 -0
  115. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/access/authentication/google.py +0 -0
  116. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/access/authentication/http.py +0 -0
  117. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/access/authentication/tokens.py +0 -0
  118. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/access/authorization.py +0 -0
  119. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/engines.py +0 -0
  120. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/namespaces.py +0 -0
  121. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/internal/validation.py +0 -0
  122. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/materialization/__init__.py +0 -0
  123. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/materialization/jobs/__init__.py +0 -0
  124. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/materialization/jobs/job_types.py +0 -0
  125. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/__init__.py +0 -0
  126. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/access.py +0 -0
  127. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/attribute.py +0 -0
  128. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/base.py +0 -0
  129. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/catalog.py +0 -0
  130. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/column.py +0 -0
  131. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/cube.py +0 -0
  132. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/database.py +0 -0
  133. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/dimensionlink.py +0 -0
  134. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/engine.py +0 -0
  135. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/history.py +0 -0
  136. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/measure.py +0 -0
  137. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/metric.py +0 -0
  138. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/node_type.py +0 -0
  139. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/query.py +0 -0
  140. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/table.py +0 -0
  141. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/tag.py +0 -0
  142. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/models/user.py +0 -0
  143. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/naming.py +0 -0
  144. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/__init__.py +0 -0
  145. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/dag.py +0 -0
  146. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/functions.py +0 -0
  147. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/__init__.py +0 -0
  148. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/ast.py +0 -0
  149. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/__init__.py +0 -0
  150. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/antlr4.py +0 -0
  151. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/exceptions.py +0 -0
  152. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/SqlBaseLexer.g4 +0 -0
  153. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/SqlBaseParser.g4 +0 -0
  154. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/__init__.py +0 -0
  155. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.interp +0 -0
  156. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.py +0 -0
  157. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.tokens +0 -0
  158. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.interp +0 -0
  159. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py +0 -0
  160. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens +0 -0
  161. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py +0 -0
  162. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py +0 -0
  163. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/sql/parsing/types.py +0 -0
  164. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/superset.py +0 -0
  165. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/transpilation.py +0 -0
  166. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/typing.py +0 -0
  167. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/datajunction_server/utils.py +0 -0
  168. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/pdm.lock +0 -0
  169. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/requirements/docker.txt +0 -0
  170. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/requirements/test.txt +0 -0
  171. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/scripts/docs-snippets.js +0 -0
  172. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/scripts/docs-snippets.sh +0 -0
  173. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/scripts/generate-openapi.py +0 -0
  174. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/__init__.py +0 -0
  175. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/__init__.py +0 -0
  176. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/attributes_test.py +0 -0
  177. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/catalog_test.py +0 -0
  178. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/client_test.py +0 -0
  179. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/data_test.py +0 -0
  180. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/dimension_links_test.py +0 -0
  181. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/dimensions_test.py +0 -0
  182. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/djql_test.py +0 -0
  183. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/engine_test.py +0 -0
  184. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_measures_cube.full.druid_spec.json +0 -0
  185. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_measures_cube.full.partition.druid_spec.json +0 -0
  186. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_measures_cube.full.partition.query.sql +0 -0
  187. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_measures_cube.full.query.sql +0 -0
  188. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_measures_cube.incremental.druid_spec.json +0 -0
  189. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_measures_cube.incremental.patched.query.sql +0 -0
  190. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_measures_cube.incremental.query.sql +0 -0
  191. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_metrics_cube.incremental.druid_spec.json +0 -0
  192. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/druid_metrics_cube.incremental.query.sql +0 -0
  193. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.full.config.json +0 -0
  194. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.full.materializations.json +0 -0
  195. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.full.partition.query.sql +0 -0
  196. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.full.query.sql +0 -0
  197. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.incremental.config.json +0 -0
  198. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/files/materializations_test/spark_sql.incremental.query.sql +0 -0
  199. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/graphql/__init__.py +0 -0
  200. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/graphql/catalog_test.py +0 -0
  201. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/graphql/engine_test.py +0 -0
  202. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/health_test.py +0 -0
  203. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/helpers_test.py +0 -0
  204. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/history_test.py +0 -0
  205. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/measures_test.py +0 -0
  206. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/metrics_test.py +0 -0
  207. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/namespaces_test.py +0 -0
  208. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/node_update_test.py +0 -0
  209. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/routers_test.py +0 -0
  210. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/sql_test.py +0 -0
  211. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/api/tags_test.py +0 -0
  212. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/conftest.py +0 -0
  213. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/construction/__init__.py +0 -0
  214. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/construction/build_test.py +0 -0
  215. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/construction/compile_test.py +0 -0
  216. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/construction/exceptions_test.py +0 -0
  217. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/construction/fixtures.py +0 -0
  218. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/construction/inference_test.py +0 -0
  219. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/construction/utils_test.py +0 -0
  220. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/default.duckdb +0 -0
  221. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/duckdb.sql +0 -0
  222. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/errors_test.py +0 -0
  223. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/examples.py +0 -0
  224. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/fixes_test.py +0 -0
  225. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/integration/__init__.py +0 -0
  226. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/integration/basic_test.py +0 -0
  227. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/internal/authentication/basic_test.py +0 -0
  228. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/internal/authentication/github_test.py +0 -0
  229. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/internal/authentication/http_test.py +0 -0
  230. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/internal/authentication/token_test.py +0 -0
  231. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/internal/authentication/whoami_test.py +0 -0
  232. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/migrations_test.py +0 -0
  233. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/models/__init__.py +0 -0
  234. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/models/catalog_test.py +0 -0
  235. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/models/hash_test.py +0 -0
  236. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/models/measure_test.py +0 -0
  237. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/models/node_test.py +0 -0
  238. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/models/query_test.py +0 -0
  239. /datajunction_server-0.0.1a46.dev3/tests/sql/__init__.py → /datajunction_server-0.0.1a47/tests/pytest.ini +0 -0
  240. {datajunction_server-0.0.1a46.dev3/tests/sql/parsing → datajunction_server-0.0.1a47/tests/sql}/__init__.py +0 -0
  241. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/dag_test.py +0 -0
  242. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/functions_test.py +0 -0
  243. {datajunction_server-0.0.1a46.dev3/tests/sql/parsing/backends → datajunction_server-0.0.1a47/tests/sql/parsing}/__init__.py +0 -0
  244. {datajunction_server-0.0.1a46.dev3/tests/sql/parsing/queries → datajunction_server-0.0.1a47/tests/sql/parsing/backends}/__init__.py +0 -0
  245. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/backends/antlr4_test.py +0 -0
  246. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/backends/types_test.py +0 -0
  247. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query1.sql +0 -0
  248. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query10.sql +0 -0
  249. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query11.sql +0 -0
  250. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query12.sql +0 -0
  251. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query13.sql +0 -0
  252. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query14.sql +0 -0
  253. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query15.sql +0 -0
  254. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query16.sql +0 -0
  255. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query17.sql +0 -0
  256. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query18.sql +0 -0
  257. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query19.sql +0 -0
  258. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query2.sql +0 -0
  259. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query20.sql +0 -0
  260. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query21.sql +0 -0
  261. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query22.sql +0 -0
  262. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query23.sql +0 -0
  263. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query24.sql +0 -0
  264. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query25.sql +0 -0
  265. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query26.sql +0 -0
  266. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query27.sql +0 -0
  267. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query28.sql +0 -0
  268. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query29.sql +0 -0
  269. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query3.sql +0 -0
  270. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query30.sql +0 -0
  271. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query31.sql +0 -0
  272. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query32.sql +0 -0
  273. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query33.sql +0 -0
  274. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query34.sql +0 -0
  275. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query35.sql +0 -0
  276. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query36.sql +0 -0
  277. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query37.sql +0 -0
  278. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query38.sql +0 -0
  279. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query39.sql +0 -0
  280. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query4.sql +0 -0
  281. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query40.sql +0 -0
  282. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query41.sql +0 -0
  283. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query42.sql +0 -0
  284. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query43.sql +0 -0
  285. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query44.sql +0 -0
  286. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query45.sql +0 -0
  287. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query46.sql +0 -0
  288. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query47.sql +0 -0
  289. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query48.sql +0 -0
  290. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query49.sql +0 -0
  291. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query5.sql +0 -0
  292. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query50.sql +0 -0
  293. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query51.sql +0 -0
  294. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query52.sql +0 -0
  295. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query53.sql +0 -0
  296. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query54.sql +0 -0
  297. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query55.sql +0 -0
  298. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query56.sql +0 -0
  299. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query57.sql +0 -0
  300. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query58.sql +0 -0
  301. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query59.sql +0 -0
  302. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query6.sql +0 -0
  303. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query60.sql +0 -0
  304. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query61.sql +0 -0
  305. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query62.sql +0 -0
  306. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query63.sql +0 -0
  307. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query64.sql +0 -0
  308. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query65.sql +0 -0
  309. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query66.sql +0 -0
  310. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query67.sql +0 -0
  311. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query68.sql +0 -0
  312. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query69.sql +0 -0
  313. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query7.sql +0 -0
  314. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query70.sql +0 -0
  315. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query71.sql +0 -0
  316. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query72.sql +0 -0
  317. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query73.sql +0 -0
  318. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query74.sql +0 -0
  319. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query75.sql +0 -0
  320. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query76.sql +0 -0
  321. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query77.sql +0 -0
  322. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query78.sql +0 -0
  323. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query79.sql +0 -0
  324. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query8.sql +0 -0
  325. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query80.sql +0 -0
  326. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query81.sql +0 -0
  327. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query82.sql +0 -0
  328. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query83.sql +0 -0
  329. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query84.sql +0 -0
  330. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query85.sql +0 -0
  331. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query86.sql +0 -0
  332. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query87.sql +0 -0
  333. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query88.sql +0 -0
  334. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query89.sql +0 -0
  335. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query9.sql +0 -0
  336. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query90.sql +0 -0
  337. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query91.sql +0 -0
  338. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query92.sql +0 -0
  339. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query93.sql +0 -0
  340. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query94.sql +0 -0
  341. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query95.sql +0 -0
  342. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query96.sql +0 -0
  343. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query97.sql +0 -0
  344. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query98.sql +0 -0
  345. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/ansi/query99.sql +0 -0
  346. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query1.sql +0 -0
  347. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query10.sql +0 -0
  348. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query11.sql +0 -0
  349. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query12.sql +0 -0
  350. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query13.sql +0 -0
  351. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query14.sql +0 -0
  352. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query15.sql +0 -0
  353. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query16.sql +0 -0
  354. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query17.sql +0 -0
  355. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query18.sql +0 -0
  356. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query19.sql +0 -0
  357. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query2.sql +0 -0
  358. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query20.sql +0 -0
  359. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query21.sql +0 -0
  360. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query22.sql +0 -0
  361. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query23.sql +0 -0
  362. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query24.sql +0 -0
  363. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query25.sql +0 -0
  364. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query26.sql +0 -0
  365. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query27.sql +0 -0
  366. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query28.sql +0 -0
  367. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query29.sql +0 -0
  368. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query3.sql +0 -0
  369. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query30.sql +0 -0
  370. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query31.sql +0 -0
  371. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query32.sql +0 -0
  372. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query33.sql +0 -0
  373. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query34.sql +0 -0
  374. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query35.sql +0 -0
  375. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query36.sql +0 -0
  376. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query37.sql +0 -0
  377. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query38.sql +0 -0
  378. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query39.sql +0 -0
  379. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query4.sql +0 -0
  380. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query40.sql +0 -0
  381. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query41.sql +0 -0
  382. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query42.sql +0 -0
  383. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query43.sql +0 -0
  384. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query44.sql +0 -0
  385. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query45.sql +0 -0
  386. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query46.sql +0 -0
  387. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query47.sql +0 -0
  388. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query48.sql +0 -0
  389. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query49.sql +0 -0
  390. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query5.sql +0 -0
  391. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query50.sql +0 -0
  392. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query51.sql +0 -0
  393. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query52.sql +0 -0
  394. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query53.sql +0 -0
  395. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query54.sql +0 -0
  396. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query55.sql +0 -0
  397. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query56.sql +0 -0
  398. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query57.sql +0 -0
  399. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query58.sql +0 -0
  400. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query59.sql +0 -0
  401. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query6.sql +0 -0
  402. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query60.sql +0 -0
  403. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query61.sql +0 -0
  404. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query62.sql +0 -0
  405. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query63.sql +0 -0
  406. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query64.sql +0 -0
  407. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query65.sql +0 -0
  408. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query66.sql +0 -0
  409. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query67.sql +0 -0
  410. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query68.sql +0 -0
  411. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query69.sql +0 -0
  412. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query7.sql +0 -0
  413. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query70.sql +0 -0
  414. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query71.sql +0 -0
  415. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query72.sql +0 -0
  416. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query73.sql +0 -0
  417. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query74.sql +0 -0
  418. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query75.sql +0 -0
  419. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query76.sql +0 -0
  420. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query77.sql +0 -0
  421. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query78.sql +0 -0
  422. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query79.sql +0 -0
  423. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query8.sql +0 -0
  424. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query80.sql +0 -0
  425. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query81.sql +0 -0
  426. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query82.sql +0 -0
  427. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query83.sql +0 -0
  428. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query84.sql +0 -0
  429. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query85.sql +0 -0
  430. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query86.sql +0 -0
  431. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query87.sql +0 -0
  432. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query88.sql +0 -0
  433. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query89.sql +0 -0
  434. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query9.sql +0 -0
  435. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query90.sql +0 -0
  436. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query91.sql +0 -0
  437. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query92.sql +0 -0
  438. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query93.sql +0 -0
  439. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query94.sql +0 -0
  440. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query95.sql +0 -0
  441. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query96.sql +0 -0
  442. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query97.sql +0 -0
  443. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query98.sql +0 -0
  444. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/sparksql/query99.sql +0 -0
  445. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/queries/tpcds/test_tpcds.py +0 -0
  446. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/parsing/test_ast.py +0 -0
  447. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/sql/utils.py +0 -0
  448. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/superset_test.py +0 -0
  449. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/transpilation_test.py +0 -0
  450. {datajunction_server-0.0.1a46.dev3 → datajunction_server-0.0.1a47}/tests/utils_test.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: datajunction-server
3
- Version: 0.0.1a46.dev3
3
+ Version: 0.0.1a47
4
4
  Summary: DataJunction server library for running to a DataJunction server
5
5
  Project-URL: repository, https://github.com/DataJunction/dj
6
6
  Author-email: DataJunction Authors <yian.shang@gmail.com>
@@ -0,0 +1,43 @@
1
+ """Update backfill spec
2
+
3
+ Revision ID: 9b1227ff17f4
4
+ Revises: de7ec1c82fe0
5
+ Create Date: 2024-05-09 14:20:26.707322+00:00
6
+
7
+ """
8
+ # pylint: disable=no-member, invalid-name, missing-function-docstring, unused-import, no-name-in-module
9
+
10
+ import sqlalchemy as sa
11
+ from sqlalchemy.dialects import postgresql
12
+
13
+ from alembic import op
14
+
15
+ # revision identifiers, used by Alembic.
16
+ revision = "9b1227ff17f4"
17
+ down_revision = "de7ec1c82fe0"
18
+ branch_labels = None
19
+ depends_on = None
20
+
21
+
22
+ def upgrade():
23
+ with op.batch_alter_table("backfill", schema=None) as batch_op:
24
+ batch_op.alter_column(
25
+ "spec",
26
+ existing_type=postgresql.JSON(astext_type=sa.Text()),
27
+ nullable=False,
28
+ )
29
+
30
+ # Update the backfill `spec` column to be a JSON list of partitions
31
+ op.execute("UPDATE backfill SET spec = jsonb_build_array(spec)")
32
+
33
+
34
+ def downgrade():
35
+ with op.batch_alter_table("backfill", schema=None) as batch_op:
36
+ batch_op.alter_column(
37
+ "spec",
38
+ existing_type=postgresql.JSON(astext_type=sa.Text()),
39
+ nullable=True,
40
+ )
41
+
42
+ # This will cause data loss
43
+ op.execute("UPDATE backfill SET spec = spec->0")
@@ -0,0 +1,4 @@
1
+ """
2
+ Version for Hatch
3
+ """
4
+ __version__ = "0.0.1a47"
@@ -371,7 +371,9 @@ async def validate_cube( # pylint: disable=too-many-locals
371
371
  metric_names,
372
372
  options=[
373
373
  joinedload(Node.current).options(
374
- selectinload(NodeRevision.columns),
374
+ selectinload(NodeRevision.columns).options(
375
+ selectinload(Column.node_revisions),
376
+ ),
375
377
  joinedload(NodeRevision.catalog),
376
378
  selectinload(NodeRevision.parents),
377
379
  ),
@@ -726,7 +728,11 @@ async def build_sql_for_multiple_metrics( # pylint: disable=too-many-arguments,
726
728
  upstream_tables=[
727
729
  f"{leading_metric_node.current.catalog.name}.{tbl.identifier()}" # type: ignore
728
730
  for tbl in query_ast.find_all(ast.Table)
729
- if tbl.dj_node and tbl.dj_node.type == NodeType.SOURCE
731
+ # If a table has a corresponding node, then we can use it as dependency.
732
+ # It must be either a Source node or some type of Materialized node.
733
+ # Even if there is no availability state for it right now, this qery may be built
734
+ # for future execution, so we don't need to check for availability state here.
735
+ if tbl.dj_node
730
736
  ],
731
737
  ),
732
738
  engine,
@@ -36,6 +36,7 @@ from datajunction_server.models.materialization import (
36
36
  )
37
37
  from datajunction_server.models.node_type import NodeType
38
38
  from datajunction_server.models.partition import PartitionBackfill
39
+ from datajunction_server.naming import amenable_name
39
40
  from datajunction_server.service_clients import QueryServiceClient
40
41
  from datajunction_server.typing import UTCDatetime
41
42
  from datajunction_server.utils import (
@@ -105,7 +106,7 @@ async def upsert_materialization( # pylint: disable=too-many-locals
105
106
 
106
107
  if data.strategy == MaterializationStrategy.INCREMENTAL_TIME:
107
108
  if not node.current.temporal_partition_columns(): # type: ignore
108
- raise DJException( # pragma: no cover
109
+ raise DJException(
109
110
  http_status_code=HTTPStatus.BAD_REQUEST,
110
111
  message="Cannot create materialization with strategy "
111
112
  f"`{data.strategy}` without specifying a time partition column!",
@@ -148,6 +149,13 @@ async def upsert_materialization( # pylint: disable=too-many-locals
148
149
  current_revision.version, # type: ignore
149
150
  new_materialization.name, # type: ignore
150
151
  )
152
+ # refresh existing materialization job
153
+ await schedule_materialization_jobs(
154
+ session,
155
+ node_revision_id=current_revision.id,
156
+ materialization_names=[new_materialization.name],
157
+ query_service_client=query_service_client,
158
+ )
151
159
  return JSONResponse(
152
160
  status_code=HTTPStatus.CREATED,
153
161
  content={
@@ -201,9 +209,11 @@ async def upsert_materialization( # pylint: disable=too-many-locals
201
209
  )
202
210
  await session.commit()
203
211
 
204
- materialization_response = schedule_materialization_jobs(
205
- [new_materialization],
206
- query_service_client,
212
+ materialization_response = await schedule_materialization_jobs(
213
+ session,
214
+ node_revision_id=current_revision.id,
215
+ materialization_names=[new_materialization.name],
216
+ query_service_client=query_service_client,
207
217
  )
208
218
  return JSONResponse(
209
219
  status_code=200,
@@ -319,7 +329,7 @@ async def deactivate_node_materializations(
319
329
  async def run_materialization_backfill( # pylint: disable=too-many-locals
320
330
  node_name: str,
321
331
  materialization_name: str,
322
- backfill_spec: PartitionBackfill,
332
+ backfill_partitions: List[PartitionBackfill],
323
333
  *,
324
334
  session: AsyncSession = Depends(get_session),
325
335
  query_service_client: QueryServiceClient = Depends(get_query_service_client),
@@ -359,11 +369,17 @@ async def run_materialization_backfill( # pylint: disable=too-many-locals
359
369
  temporal_partitions = {
360
370
  col.name: col for col in node_revision.temporal_partition_columns()
361
371
  }
362
- if backfill_spec.column_name not in temporal_partitions:
363
- raise DJDoesNotExistException( # pragma: no cover
364
- f"Partition with name {backfill_spec.column_name} does not exist on node",
365
- )
366
-
372
+ categorical_partitions = {
373
+ col.name: col for col in node_revision.categorical_partition_columns()
374
+ }
375
+ for backfill_spec in backfill_partitions:
376
+ if backfill_spec.column_name not in set(temporal_partitions).union(
377
+ set(categorical_partitions),
378
+ ):
379
+ raise DJDoesNotExistException( # pragma: no cover
380
+ f"Partition with name {backfill_spec.column_name} does not exist on node",
381
+ )
382
+ backfill_spec.column_name = amenable_name(backfill_spec.column_name)
367
383
  materialization_jobs = {
368
384
  cls.__name__: cls for cls in MaterializationJob.__subclasses__()
369
385
  }
@@ -375,12 +391,12 @@ async def run_materialization_backfill( # pylint: disable=too-many-locals
375
391
 
376
392
  materialization_output = clazz().run_backfill( # type: ignore
377
393
  materialization,
378
- backfill_spec,
394
+ backfill_partitions,
379
395
  query_service_client,
380
396
  )
381
397
  backfill = Backfill(
382
398
  materialization=materialization,
383
- spec=backfill_spec.dict(),
399
+ spec=[backfill_partition.dict() for backfill_partition in backfill_partitions],
384
400
  urls=materialization_output.urls,
385
401
  )
386
402
  materialization.backfills.append(backfill)
@@ -391,7 +407,9 @@ async def run_materialization_backfill( # pylint: disable=too-many-locals
391
407
  activity_type=ActivityType.CREATE,
392
408
  details={
393
409
  "materialization": materialization_name,
394
- "partition": backfill_spec.dict(),
410
+ "partition": [
411
+ backfill_partition.dict() for backfill_partition in backfill_partitions
412
+ ],
395
413
  },
396
414
  user=current_user.username if current_user else None,
397
415
  )
@@ -1,5 +1,4 @@
1
- # pylint: disable=too-many-arguments,too-many-locals,too-many-nested-blocks,too-many-branches,R0401
2
- # pylint: disable=too-many-lines,protected-access
1
+ # pylint: disable=too-many-arguments,too-many-locals,too-many-nested-blocks,too-many-branches,R0401,too-many-lines,protected-access,line-too-long
3
2
  """Functions for building DJ node queries"""
4
3
  import collections
5
4
  import logging
@@ -24,7 +24,7 @@ class Backfill(Base): # type: ignore # pylint: disable=too-few-public-methods
24
24
  primary_key=True,
25
25
  )
26
26
 
27
- # The column reference that this partition is defined on
27
+ # The column reference that this backfill is defined on
28
28
  materialization_id: Mapped[int] = mapped_column(
29
29
  ForeignKey(
30
30
  "materialization.id",
@@ -37,9 +37,9 @@ class Backfill(Base): # type: ignore # pylint: disable=too-few-public-methods
37
37
  )
38
38
 
39
39
  # Backfilled values and range
40
- spec: Mapped[Optional[PartitionBackfill]] = mapped_column(
40
+ spec: Mapped[List[PartitionBackfill]] = mapped_column(
41
41
  JSON,
42
- default={},
42
+ default=[],
43
43
  )
44
44
 
45
45
  urls: Mapped[Optional[List[str]]] = mapped_column(
@@ -2,9 +2,20 @@
2
2
  from typing import TYPE_CHECKING, List, Optional, Union
3
3
 
4
4
  import sqlalchemy as sa
5
- from sqlalchemy import JSON, DateTime, Enum, ForeignKey, String, UniqueConstraint
6
- from sqlalchemy.orm import Mapped, mapped_column, relationship
5
+ from sqlalchemy import (
6
+ JSON,
7
+ DateTime,
8
+ Enum,
9
+ ForeignKey,
10
+ String,
11
+ UniqueConstraint,
12
+ and_,
13
+ select,
14
+ )
15
+ from sqlalchemy.ext.asyncio import AsyncSession
16
+ from sqlalchemy.orm import Mapped, joinedload, mapped_column, relationship
7
17
 
18
+ from datajunction_server.database import Column
8
19
  from datajunction_server.database.backfill import Backfill
9
20
  from datajunction_server.database.base import Base
10
21
  from datajunction_server.models.materialization import (
@@ -84,3 +95,34 @@ class Materialization(Base): # pylint: disable=too-few-public-methods
84
95
  cascade="all, delete",
85
96
  lazy="selectin",
86
97
  )
98
+
99
+ @classmethod
100
+ async def get_by_names(
101
+ cls,
102
+ session: AsyncSession,
103
+ node_revision_id: int,
104
+ materialization_names: List[str],
105
+ ) -> List["Materialization"]:
106
+ """
107
+ Get materializations by name and node revision id.
108
+ """
109
+ from datajunction_server.database.node import ( # pylint: disable=import-outside-toplevel
110
+ NodeRevision,
111
+ )
112
+
113
+ statement = (
114
+ select(cls)
115
+ .where(
116
+ and_(
117
+ cls.name.in_(materialization_names),
118
+ cls.node_revision_id == node_revision_id,
119
+ ),
120
+ )
121
+ .options(
122
+ joinedload(cls.node_revision).options(
123
+ joinedload(NodeRevision.columns).joinedload(Column.partition),
124
+ ),
125
+ )
126
+ )
127
+ result = await session.execute(statement)
128
+ return result.unique().scalars().all()
@@ -1,4 +1,5 @@
1
1
  """Partition database schema."""
2
+ import re
2
3
  from typing import Optional
3
4
 
4
5
  from sqlalchemy import BigInteger, Enum, ForeignKey, Integer
@@ -7,6 +8,8 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship
7
8
  from datajunction_server.database.base import Base
8
9
  from datajunction_server.database.column import Column
9
10
  from datajunction_server.models.partition import Granularity, PartitionType
11
+ from datajunction_server.naming import amenable_name
12
+ from datajunction_server.sql.functions import Function, function_registry
10
13
  from datajunction_server.sql.parsing.types import TimestampType
11
14
 
12
15
 
@@ -94,3 +97,35 @@ class Partition(Base): # type: ignore # pylint: disable=too-few-public-methods
94
97
  data_type=self.column.type, # pylint: disable=no-member
95
98
  )
96
99
  return None # pragma: no cover
100
+
101
+ def categorical_expression(self):
102
+ """
103
+ Expression for the categorical partition
104
+ """
105
+ from datajunction_server.sql.parsing import ( # pylint: disable=import-outside-toplevel
106
+ ast,
107
+ )
108
+
109
+ # Register a DJ function (inherits the `datajunction_server.sql.functions.Function` class)
110
+ # that has the partition column name as the function name. This will be substituted at
111
+ # runtime with the partition column name
112
+ amenable_partition_name = amenable_name(self.column.name)
113
+ clazz = type(
114
+ amenable_partition_name,
115
+ (Function,),
116
+ {
117
+ "is_runtime": True,
118
+ "substitute": staticmethod(lambda: f"${{{amenable_partition_name}}}"),
119
+ },
120
+ )
121
+ snake_cased = re.sub(r"(?<!^)(?=[A-Z])", "_", clazz.__name__)
122
+ function_registry[clazz.__name__.upper()] = clazz
123
+ function_registry[snake_cased.upper()] = clazz
124
+
125
+ return ast.Cast(
126
+ expression=ast.Function(
127
+ name=ast.Name(amenable_partition_name),
128
+ args=[],
129
+ ),
130
+ data_type=self.column.type,
131
+ )
@@ -233,6 +233,7 @@ async def create_new_materialization(
233
233
  upsert,
234
234
  )
235
235
 
236
+ categorical_partitions = current_revision.categorical_partition_columns()
236
237
  if current_revision.type == NodeType.CUBE:
237
238
  if not temporal_partition and not timestamp_columns:
238
239
  raise DJInvalidInputException(
@@ -249,6 +250,8 @@ async def create_new_materialization(
249
250
  materialization_name = (
250
251
  f"{upsert.job.name.lower()}__{upsert.strategy.name.lower()}"
251
252
  + (f"__{temporal_partition[0].name}" if temporal_partition else "")
253
+ + ("__" if categorical_partitions else "")
254
+ + ("__".join([partition.name for partition in categorical_partitions]))
252
255
  )
253
256
  return Materialization(
254
257
  name=materialization_name,
@@ -260,13 +263,20 @@ async def create_new_materialization(
260
263
  )
261
264
 
262
265
 
263
- def schedule_materialization_jobs(
264
- materializations: List[Materialization],
266
+ async def schedule_materialization_jobs(
267
+ session: AsyncSession,
268
+ node_revision_id: int,
269
+ materialization_names: List[str],
265
270
  query_service_client: QueryServiceClient,
266
271
  ) -> Dict[str, MaterializationInfo]:
267
272
  """
268
273
  Schedule recurring materialization jobs
269
274
  """
275
+ materializations = await Materialization.get_by_names(
276
+ session,
277
+ node_revision_id,
278
+ materialization_names,
279
+ )
270
280
  materialization_jobs = {
271
281
  cls.__name__: cls for cls in MaterializationJob.__subclasses__()
272
282
  }
@@ -641,7 +641,11 @@ async def update_node_with_query(
641
641
  )
642
642
  background_tasks.add_task(
643
643
  schedule_materialization_jobs,
644
- materializations=node.current.materializations, # type: ignore
644
+ session=session,
645
+ node_revision_id=node.current.id, # type: ignore
646
+ materialization_names=[
647
+ mat.name for mat in node.current.materializations # type: ignore
648
+ ],
645
649
  query_service_client=query_service_client,
646
650
  )
647
651
  session.add(new_revision)
@@ -803,21 +807,31 @@ async def update_cube_node( # pylint: disable=too-many-locals
803
807
  user=current_user.username if current_user else None,
804
808
  ),
805
809
  )
806
- if background_tasks:
807
- background_tasks.add_task(
808
- schedule_materialization_jobs,
809
- materializations=new_cube_revision.materializations,
810
- query_service_client=query_service_client,
811
- )
812
- else:
813
- schedule_materialization_jobs( # pragma: no cover
814
- materializations=new_cube_revision.materializations,
815
- query_service_client=query_service_client,
816
- )
817
810
  session.add(new_cube_revision)
818
811
  session.add(new_cube_revision.node)
819
812
  await session.commit()
820
813
 
814
+ await session.refresh(new_cube_revision, ["materializations"])
815
+ if background_tasks:
816
+ background_tasks.add_task( # pragma: no cover
817
+ schedule_materialization_jobs,
818
+ session=session,
819
+ node_revision_id=new_cube_revision.id,
820
+ materialization_names=[
821
+ mat.name for mat in new_cube_revision.materializations
822
+ ],
823
+ query_service_client=query_service_client,
824
+ )
825
+ else:
826
+ await schedule_materialization_jobs( # pragma: no cover
827
+ session=session,
828
+ node_revision_id=new_cube_revision.id,
829
+ materialization_names=[
830
+ mat.name for mat in new_cube_revision.materializations
831
+ ],
832
+ query_service_client=query_service_client,
833
+ )
834
+
821
835
  await session.refresh(new_cube_revision)
822
836
  await session.refresh(new_cube_revision.node)
823
837
  await session.refresh(new_cube_revision.node.current)
@@ -130,6 +130,7 @@ def build_materialization_query(
130
130
  ),
131
131
  ctes=cube_materialization_query_ast.ctes,
132
132
  )
133
+
133
134
  if materialization.strategy == MaterializationStrategy.INCREMENTAL_TIME:
134
135
  temporal_partitions = node_revision.temporal_partition_columns()
135
136
  temporal_partition_col = [
@@ -137,13 +138,38 @@ def build_materialization_query(
137
138
  for col in cube_materialization_query_ast.select.projection
138
139
  if col.alias_or_name.name == amenable_name(temporal_partitions[0].name) # type: ignore
139
140
  ]
140
- final_query.select.where = ast.BinaryOp(
141
+ temporal_op = ast.BinaryOp(
141
142
  left=ast.Column(
142
143
  name=ast.Name(temporal_partition_col[0].alias_or_name.name), # type: ignore
143
144
  ),
144
145
  right=temporal_partitions[0].partition.temporal_expression(),
145
146
  op=ast.BinaryOpKind.Eq,
146
147
  )
148
+
149
+ categorical_partitions = node_revision.categorical_partition_columns()
150
+ print("categorical_partitions", categorical_partitions)
151
+ if categorical_partitions:
152
+ categorical_partition_col = [
153
+ col
154
+ for col in cube_materialization_query_ast.select.projection
155
+ if col.alias_or_name.name # type: ignore
156
+ == amenable_name(categorical_partitions[0].name) # type: ignore
157
+ ]
158
+ categorical_op = ast.BinaryOp(
159
+ left=ast.Column(
160
+ name=ast.Name(categorical_partition_col[0].alias_or_name.name), # type: ignore
161
+ ),
162
+ right=categorical_partitions[0].partition.categorical_expression(),
163
+ op=ast.BinaryOpKind.Eq,
164
+ )
165
+ final_query.select.where = ast.BinaryOp(
166
+ left=temporal_op,
167
+ right=categorical_op,
168
+ op=ast.BinaryOpKind.And,
169
+ )
170
+ else:
171
+ final_query.select.where = temporal_op
172
+
147
173
  combiner_cte = ast.Query(select=cube_materialization_query_ast.select).set_alias(
148
174
  ast.Name("combiner_query"),
149
175
  )
@@ -155,4 +181,5 @@ def build_materialization_query(
155
181
  final_query.select.from_ = ast.From(
156
182
  relations=[ast.Relation(primary=ast.Table(name=ast.Name("combiner_query")))],
157
183
  )
184
+ print("final_queryfinal_query", final_query)
158
185
  return final_query
@@ -2,7 +2,7 @@
2
2
  Available materialization jobs.
3
3
  """
4
4
  import abc
5
- from typing import Optional
5
+ from typing import List, Optional
6
6
 
7
7
  from datajunction_server.database.materialization import Materialization
8
8
  from datajunction_server.models.engine import Dialect
@@ -13,6 +13,7 @@ from datajunction_server.models.materialization import (
13
13
  MaterializationStrategy,
14
14
  )
15
15
  from datajunction_server.models.partition import PartitionBackfill
16
+ from datajunction_server.naming import amenable_name
16
17
  from datajunction_server.service_clients import QueryServiceClient
17
18
  from datajunction_server.sql.parsing import ast
18
19
  from datajunction_server.sql.parsing.backends.antlr4 import parse
@@ -34,7 +35,7 @@ class MaterializationJob(abc.ABC): # pylint: disable=too-few-public-methods
34
35
  def run_backfill(
35
36
  self,
36
37
  materialization: Materialization,
37
- backfill: PartitionBackfill,
38
+ partitions: List[PartitionBackfill],
38
39
  query_service_client: QueryServiceClient,
39
40
  ) -> MaterializationInfo:
40
41
  """
@@ -43,7 +44,7 @@ class MaterializationJob(abc.ABC): # pylint: disable=too-few-public-methods
43
44
  return query_service_client.run_backfill(
44
45
  materialization.node_revision.name,
45
46
  materialization.name, # type: ignore
46
- backfill,
47
+ partitions,
47
48
  )
48
49
 
49
50
  @abc.abstractmethod
@@ -93,6 +94,29 @@ class SparkSqlMaterializationJob( # pylint: disable=too-few-public-methods # pr
93
94
  for col in query_ast.select.projection
94
95
  if col.alias_or_name.name.endswith(temporal_partitions[0].name) # type: ignore
95
96
  ]
97
+ temporal_op = (
98
+ ast.BinaryOp(
99
+ left=ast.Column(
100
+ name=ast.Name(
101
+ temporal_partition_col[0].alias_or_name.name, # type: ignore
102
+ ),
103
+ ),
104
+ right=temporal_partitions[0].partition.temporal_expression(),
105
+ op=ast.BinaryOpKind.Eq,
106
+ )
107
+ if not generic_config.lookback_window
108
+ else ast.Between(
109
+ expr=ast.Column(
110
+ name=ast.Name(
111
+ temporal_partition_col[0].alias_or_name.name, # type: ignore
112
+ ),
113
+ ),
114
+ low=temporal_partitions[0].partition.temporal_expression(
115
+ interval=generic_config.lookback_window,
116
+ ),
117
+ high=temporal_partitions[0].partition.temporal_expression(),
118
+ )
119
+ )
96
120
  final_query = ast.Query(
97
121
  select=ast.Select(
98
122
  projection=[
@@ -100,31 +124,36 @@ class SparkSqlMaterializationJob( # pylint: disable=too-few-public-methods # pr
100
124
  for col in query_ast.select.projection
101
125
  ],
102
126
  from_=query_ast.select.from_,
103
- where=ast.BinaryOp(
104
- left=ast.Column(
105
- name=ast.Name(
106
- temporal_partition_col[0].alias_or_name.name, # type: ignore
107
- ),
108
- ),
109
- right=temporal_partitions[0].partition.temporal_expression(),
110
- op=ast.BinaryOpKind.Eq,
111
- )
112
- if not generic_config.lookback_window
113
- else ast.Between(
114
- expr=ast.Column(
115
- name=ast.Name(
116
- temporal_partition_col[0].alias_or_name.name, # type: ignore
117
- ),
118
- ),
119
- low=temporal_partitions[0].partition.temporal_expression(
120
- interval=generic_config.lookback_window,
121
- ),
122
- high=temporal_partitions[0].partition.temporal_expression(),
123
- ),
127
+ where=temporal_op,
124
128
  ),
125
129
  ctes=query_ast.ctes,
126
130
  )
127
131
 
132
+ categorical_partitions = (
133
+ materialization.node_revision.categorical_partition_columns()
134
+ )
135
+ if categorical_partitions:
136
+ categorical_partition_col = [
137
+ col
138
+ for col in final_query.select.projection
139
+ if col.alias_or_name.name # type: ignore
140
+ == amenable_name(categorical_partitions[0].name) # type: ignore
141
+ ]
142
+ categorical_op = ast.BinaryOp(
143
+ left=ast.Column(
144
+ name=ast.Name(
145
+ categorical_partition_col[0].alias_or_name.name, # type: ignore
146
+ ),
147
+ ),
148
+ right=categorical_partitions[0].partition.categorical_expression(),
149
+ op=ast.BinaryOpKind.Eq,
150
+ )
151
+ final_query.select.where = ast.BinaryOp(
152
+ left=temporal_op,
153
+ right=categorical_op,
154
+ op=ast.BinaryOpKind.And,
155
+ )
156
+
128
157
  result = query_service_client.materialize(
129
158
  GenericMaterializationInput(
130
159
  name=materialization.name, # type: ignore
@@ -208,7 +208,7 @@ class GenericMaterializationConfig(GenericMaterializationConfigInput):
208
208
  type_=PartitionType.CATEGORICAL,
209
209
  )
210
210
  for col in self.columns # type: ignore
211
- if col.column in user_defined_categorical_columns
211
+ if col.semantic_entity in user_defined_categorical_columns
212
212
  ]
213
213
 
214
214
 
@@ -124,7 +124,7 @@ class NodeRevisionBase(BaseModel):
124
124
  name: str
125
125
  display_name: Optional[str]
126
126
  type: NodeType
127
- description: str = ""
127
+ description: Optional[str] = ""
128
128
  query: Optional[str] = None
129
129
  mode: NodeMode = NodeMode.PUBLISHED
130
130
 
@@ -99,7 +99,7 @@ class BackfillOutput(BaseModel):
99
99
  Output model for backfills
100
100
  """
101
101
 
102
- spec: Optional[PartitionBackfill]
102
+ spec: Optional[List[PartitionBackfill]]
103
103
  urls: Optional[List[str]]
104
104
 
105
105
  class Config: # pylint: disable=missing-class-docstring, too-few-public-methods
@@ -192,11 +192,7 @@ class QueryServiceClient: # pylint: disable=too-few-public-methods
192
192
  Deactivates the specified node materialization
193
193
  """
194
194
  response = self.requests_session.delete(
195
- "/materialization/",
196
- params={
197
- "node_name": node_name,
198
- "materialization_name": materialization_name,
199
- },
195
+ f"/materialization/{node_name}/{materialization_name}/",
200
196
  )
201
197
  if response.status_code not in (200, 201): # pragma: no cover
202
198
  return MaterializationInfo(urls=[], output_tables=[])
@@ -224,12 +220,12 @@ class QueryServiceClient: # pylint: disable=too-few-public-methods
224
220
  self,
225
221
  node_name: str,
226
222
  materialization_name: str,
227
- backfill: PartitionBackfill,
223
+ partitions: List[PartitionBackfill],
228
224
  ) -> MaterializationInfo:
229
225
  """Kicks off a backfill with the given backfill spec"""
230
226
  response = self.requests_session.post(
231
227
  f"/materialization/run/{node_name}/{materialization_name}/",
232
- json=backfill.dict(),
228
+ json=[partition.dict() for partition in partitions],
233
229
  timeout=20,
234
230
  )
235
231
  if response.status_code not in (200, 201):
@@ -124,3 +124,6 @@ profile = 'black'
124
124
 
125
125
  [tool.pytest.ini_options]
126
126
  asyncio_mode = "auto"
127
+ testpaths = [
128
+ "tests",
129
+ ]