datajunction-server 0.0.1a55.dev0__tar.gz → 0.0.1a56.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 (484) hide show
  1. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/.coveragerc +1 -0
  2. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/PKG-INFO +1 -1
  3. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/env.py +2 -1
  4. datajunction_server-0.0.1a56.dev0/alembic/versions/2024_06_21_1301-640a814db2d8_add_collection_tables.py +56 -0
  5. datajunction_server-0.0.1a56.dev0/datajunction_server/__about__.py +4 -0
  6. datajunction_server-0.0.1a56.dev0/datajunction_server/api/collection.py +154 -0
  7. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/main.py +2 -0
  8. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/materializations.py +2 -1
  9. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/__init__.py +2 -2
  10. datajunction_server-0.0.1a56.dev0/datajunction_server/database/collection.py +79 -0
  11. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/column.py +9 -0
  12. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/database.py +4 -2
  13. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/materialization.py +1 -1
  14. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/client.py +53 -3
  15. datajunction_server-0.0.1a56.dev0/datajunction_server/internal/templates/client_setup.j2 +9 -0
  16. datajunction_server-0.0.1a56.dev0/datajunction_server/internal/templates/set_column_attributes.j2 +7 -0
  17. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/validation.py +2 -1
  18. datajunction_server-0.0.1a56.dev0/datajunction_server/models/collection.py +17 -0
  19. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/functions.py +1 -1
  20. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/ast.py +3 -1
  21. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/client_test.py +19 -3
  22. datajunction_server-0.0.1a56.dev0/tests/api/collections_test.py +206 -0
  23. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/dimensions_test.py +1 -0
  24. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/include_client_setup.txt +2 -1
  25. datajunction_server-0.0.1a56.dev0/tests/api/files/client_test/notebook.set_attribute.txt +6 -0
  26. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.druid_spec.json +1 -1
  27. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.categorical.query.sql +2 -1
  28. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.druid_spec.json +1 -1
  29. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_metrics_cube.incremental.query.sql +2 -1
  30. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.incremental.additional.query.sql +5 -5
  31. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.incremental.categorical.query.sql +1 -1
  32. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.incremental.lookback.query.sql +1 -1
  33. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.incremental.query.sql +1 -1
  34. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/materializations_test.py +184 -143
  35. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/measures_test.py +42 -40
  36. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/namespaces_test.py +3 -2
  37. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/nodes_test.py +2 -0
  38. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/examples.py +26 -0
  39. datajunction_server-0.0.1a55.dev0/datajunction_server/__about__.py +0 -4
  40. datajunction_server-0.0.1a55.dev0/datajunction_server/internal/templates/client_setup.j2 +0 -8
  41. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/.env +0 -0
  42. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/.env.integration +0 -0
  43. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/.flake8 +0 -0
  44. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/.gitignore +0 -0
  45. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/.isort.cfg +0 -0
  46. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/.pre-commit-config.yaml +0 -0
  47. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/.pylintrc +0 -0
  48. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/Dockerfile +0 -0
  49. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/Makefile +0 -0
  50. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/README.md +0 -0
  51. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/README +0 -0
  52. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/script.py.mako +0 -0
  53. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2023_12_20_1829-724445d2b29d_initial_migration.py +0 -0
  54. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_01_08_2034-945d44abcd32_add_dimension_links.py +0 -0
  55. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_01_11_2032-c74b11566d82_add_column_order.py +0 -0
  56. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_01_18_2011-20f060b02772_switch_enum_values.py +0 -0
  57. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_01_23_0617-c9cef8864ecb_add_missing_table_attribute_to_source_.py +0 -0
  58. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_01_23_1655-a8e22109be24_availability_state_s_valid_through_ts_.py +0 -0
  59. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_02_22_0713-d61fb7e48cc3_cascade_deletes_to_dimension_links.py +0 -0
  60. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_04_30_1556-de7ec1c82fe0_add_query_requests.py +0 -0
  61. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_05_09_1420-9b1227ff17f4_update_backfill_spec.py +0 -0
  62. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic/versions/2024_05_21_0012-57fc93ef6947_add_query_id_to_queryrequest.py +0 -0
  63. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/alembic.ini +0 -0
  64. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/__init__.py +0 -0
  65. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/__init__.py +0 -0
  66. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/access/authentication/__init__.py +0 -0
  67. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/access/authentication/basic.py +0 -0
  68. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/access/authentication/github.py +0 -0
  69. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/access/authentication/google.py +0 -0
  70. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/access/authentication/whoami.py +0 -0
  71. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/attributes.py +0 -0
  72. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/catalogs.py +0 -0
  73. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/client.py +0 -0
  74. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/cubes.py +0 -0
  75. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/data.py +0 -0
  76. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/dimensions.py +0 -0
  77. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/djsql.py +0 -0
  78. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/engines.py +0 -0
  79. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/graphql/__init__.py +0 -0
  80. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/graphql/catalogs.py +0 -0
  81. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/graphql/engines.py +0 -0
  82. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/graphql/main.py +0 -0
  83. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/health.py +0 -0
  84. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/helpers.py +0 -0
  85. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/history.py +0 -0
  86. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/logging.conf +0 -0
  87. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/measures.py +0 -0
  88. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/metrics.py +0 -0
  89. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/namespaces.py +0 -0
  90. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/nodes.py +0 -0
  91. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/sql.py +0 -0
  92. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/api/tags.py +0 -0
  93. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/config.py +0 -0
  94. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/constants.py +0 -0
  95. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/construction/__init__.py +0 -0
  96. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/construction/build.py +0 -0
  97. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/construction/dimensions.py +0 -0
  98. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/construction/dj_query.py +0 -0
  99. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/construction/exceptions.py +0 -0
  100. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/construction/utils.py +0 -0
  101. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/attributetype.py +0 -0
  102. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/availabilitystate.py +0 -0
  103. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/backfill.py +0 -0
  104. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/base.py +0 -0
  105. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/catalog.py +0 -0
  106. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/dimensionlink.py +0 -0
  107. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/engine.py +0 -0
  108. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/history.py +0 -0
  109. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/measure.py +0 -0
  110. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/metricmetadata.py +0 -0
  111. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/namespace.py +0 -0
  112. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/node.py +0 -0
  113. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/partition.py +0 -0
  114. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/queryrequest.py +0 -0
  115. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/tag.py +0 -0
  116. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/database/user.py +0 -0
  117. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/enum.py +0 -0
  118. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/errors.py +0 -0
  119. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/__init__.py +0 -0
  120. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/access/__init__.py +0 -0
  121. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/access/authentication/__init__.py +0 -0
  122. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/access/authentication/basic.py +0 -0
  123. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/access/authentication/github.py +0 -0
  124. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/access/authentication/google.py +0 -0
  125. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/access/authentication/http.py +0 -0
  126. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/access/authentication/tokens.py +0 -0
  127. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/access/authorization.py +0 -0
  128. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/engines.py +0 -0
  129. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/materializations.py +0 -0
  130. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/namespaces.py +0 -0
  131. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/nodes.py +0 -0
  132. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/templates/create_cube.j2 +0 -0
  133. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/templates/create_dimension.j2 +0 -0
  134. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/templates/create_metric.j2 +0 -0
  135. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/templates/create_transform.j2 +0 -0
  136. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/templates/link_dimension.j2 +0 -0
  137. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/templates/namespace_mapping.j2 +0 -0
  138. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/internal/templates/register_table.j2 +0 -0
  139. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/materialization/__init__.py +0 -0
  140. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/materialization/jobs/__init__.py +0 -0
  141. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/materialization/jobs/cube_materialization.py +0 -0
  142. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/materialization/jobs/job_types.py +0 -0
  143. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/materialization/jobs/materialization_job.py +0 -0
  144. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/__init__.py +0 -0
  145. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/access.py +0 -0
  146. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/attribute.py +0 -0
  147. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/base.py +0 -0
  148. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/catalog.py +0 -0
  149. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/column.py +0 -0
  150. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/cube.py +0 -0
  151. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/database.py +0 -0
  152. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/dimensionlink.py +0 -0
  153. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/engine.py +0 -0
  154. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/history.py +0 -0
  155. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/materialization.py +0 -0
  156. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/measure.py +0 -0
  157. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/metric.py +0 -0
  158. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/node.py +0 -0
  159. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/node_type.py +0 -0
  160. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/partition.py +0 -0
  161. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/query.py +0 -0
  162. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/table.py +0 -0
  163. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/tag.py +0 -0
  164. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/models/user.py +0 -0
  165. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/naming.py +0 -0
  166. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/service_clients.py +0 -0
  167. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/__init__.py +0 -0
  168. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/dag.py +0 -0
  169. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/__init__.py +0 -0
  170. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/__init__.py +0 -0
  171. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/antlr4.py +0 -0
  172. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/exceptions.py +0 -0
  173. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/SqlBaseLexer.g4 +0 -0
  174. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/SqlBaseParser.g4 +0 -0
  175. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/__init__.py +0 -0
  176. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.interp +0 -0
  177. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.py +0 -0
  178. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.tokens +0 -0
  179. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.interp +0 -0
  180. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py +0 -0
  181. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens +0 -0
  182. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py +0 -0
  183. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py +0 -0
  184. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/sql/parsing/types.py +0 -0
  185. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/superset.py +0 -0
  186. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/transpilation.py +0 -0
  187. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/typing.py +0 -0
  188. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/datajunction_server/utils.py +0 -0
  189. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/pdm.lock +0 -0
  190. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/pyproject.toml +0 -0
  191. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/requirements/docker.txt +0 -0
  192. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/requirements/test.txt +0 -0
  193. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/scripts/docs-snippets.js +0 -0
  194. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/scripts/docs-snippets.sh +0 -0
  195. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/scripts/generate-openapi.py +0 -0
  196. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/__init__.py +0 -0
  197. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/__init__.py +0 -0
  198. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/access_test.py +0 -0
  199. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/attributes_test.py +0 -0
  200. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/catalog_test.py +0 -0
  201. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/cubes_test.py +0 -0
  202. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/data_test.py +0 -0
  203. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/dimension_links_test.py +0 -0
  204. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/dimensions_access_test.py +0 -0
  205. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/djql_test.py +0 -0
  206. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/engine_test.py +0 -0
  207. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/create_cube.repairs_cube.namespace.txt +0 -0
  208. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/create_cube.repairs_cube.txt +0 -0
  209. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/create_dimension.repair_order.namespace.txt +0 -0
  210. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/create_dimension.repair_order.txt +0 -0
  211. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/create_metric.num_repair_orders.namespace.txt +0 -0
  212. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/create_metric.num_repair_orders.txt +0 -0
  213. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/create_transform.regional_level_agg.namespace.txt +0 -0
  214. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/create_transform.regional_level_agg.txt +0 -0
  215. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/dimension_links.repair_orders.namespace.txt +0 -0
  216. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/dimension_links.repair_orders.txt +0 -0
  217. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/notebook.create_cube.txt +0 -0
  218. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/notebook.create_transform.txt +0 -0
  219. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/notebook.link_dimension.txt +0 -0
  220. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/client_test/register_table.txt +0 -0
  221. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.druid_spec.json +0 -0
  222. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.partition.druid_spec.json +0 -0
  223. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.partition.query.sql +0 -0
  224. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_measures_cube.full.query.sql +0 -0
  225. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.categorical.query.sql +0 -0
  226. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.patched.query.sql +0 -0
  227. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/druid_measures_cube.incremental.query.sql +0 -0
  228. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.full.config.json +0 -0
  229. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.full.materializations.json +0 -0
  230. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.config.json +0 -0
  231. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.materializations.json +0 -0
  232. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.full.partition.query.sql +0 -0
  233. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.full.query.sql +0 -0
  234. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/files/materializations_test/spark_sql.incremental.config.json +0 -0
  235. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/graphql/__init__.py +0 -0
  236. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/graphql/catalog_test.py +0 -0
  237. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/graphql/engine_test.py +0 -0
  238. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/health_test.py +0 -0
  239. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/helpers_test.py +0 -0
  240. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/history_test.py +0 -0
  241. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/metrics_test.py +0 -0
  242. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/node_update_test.py +0 -0
  243. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/routers_test.py +0 -0
  244. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/sql_test.py +0 -0
  245. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/api/tags_test.py +0 -0
  246. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/conftest.py +0 -0
  247. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/construction/__init__.py +0 -0
  248. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/construction/build_test.py +0 -0
  249. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/construction/compile_test.py +0 -0
  250. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/construction/exceptions_test.py +0 -0
  251. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/construction/fixtures.py +0 -0
  252. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/construction/inference_test.py +0 -0
  253. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/construction/utils_test.py +0 -0
  254. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/default.duckdb +0 -0
  255. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/duckdb.sql +0 -0
  256. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/errors_test.py +0 -0
  257. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/integration/__init__.py +0 -0
  258. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/integration/basic_test.py +0 -0
  259. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/internal/authentication/basic_test.py +0 -0
  260. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/internal/authentication/github_test.py +0 -0
  261. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/internal/authentication/http_test.py +0 -0
  262. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/internal/authentication/token_test.py +0 -0
  263. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/internal/authentication/whoami_test.py +0 -0
  264. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/migrations_test.py +0 -0
  265. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/models/__init__.py +0 -0
  266. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/models/catalog_test.py +0 -0
  267. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/models/hash_test.py +0 -0
  268. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/models/measure_test.py +0 -0
  269. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/models/node_test.py +0 -0
  270. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/models/query_test.py +0 -0
  271. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/pytest.ini +0 -0
  272. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/service_clients_test.py +0 -0
  273. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/__init__.py +0 -0
  274. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/dag_test.py +0 -0
  275. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/functions_test.py +0 -0
  276. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/__init__.py +0 -0
  277. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/backends/__init__.py +0 -0
  278. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/backends/antlr4_test.py +0 -0
  279. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/backends/types_test.py +0 -0
  280. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/__init__.py +0 -0
  281. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query1.sql +0 -0
  282. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query10.sql +0 -0
  283. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query11.sql +0 -0
  284. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query12.sql +0 -0
  285. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query13.sql +0 -0
  286. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query14.sql +0 -0
  287. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query15.sql +0 -0
  288. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query16.sql +0 -0
  289. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query17.sql +0 -0
  290. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query18.sql +0 -0
  291. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query19.sql +0 -0
  292. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query2.sql +0 -0
  293. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query20.sql +0 -0
  294. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query21.sql +0 -0
  295. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query22.sql +0 -0
  296. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query23.sql +0 -0
  297. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query24.sql +0 -0
  298. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query25.sql +0 -0
  299. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query26.sql +0 -0
  300. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query27.sql +0 -0
  301. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query28.sql +0 -0
  302. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query29.sql +0 -0
  303. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query3.sql +0 -0
  304. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query30.sql +0 -0
  305. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query31.sql +0 -0
  306. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query32.sql +0 -0
  307. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query33.sql +0 -0
  308. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query34.sql +0 -0
  309. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query35.sql +0 -0
  310. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query36.sql +0 -0
  311. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query37.sql +0 -0
  312. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query38.sql +0 -0
  313. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query39.sql +0 -0
  314. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query4.sql +0 -0
  315. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query40.sql +0 -0
  316. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query41.sql +0 -0
  317. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query42.sql +0 -0
  318. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query43.sql +0 -0
  319. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query44.sql +0 -0
  320. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query45.sql +0 -0
  321. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query46.sql +0 -0
  322. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query47.sql +0 -0
  323. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query48.sql +0 -0
  324. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query49.sql +0 -0
  325. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query5.sql +0 -0
  326. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query50.sql +0 -0
  327. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query51.sql +0 -0
  328. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query52.sql +0 -0
  329. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query53.sql +0 -0
  330. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query54.sql +0 -0
  331. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query55.sql +0 -0
  332. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query56.sql +0 -0
  333. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query57.sql +0 -0
  334. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query58.sql +0 -0
  335. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query59.sql +0 -0
  336. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query6.sql +0 -0
  337. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query60.sql +0 -0
  338. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query61.sql +0 -0
  339. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query62.sql +0 -0
  340. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query63.sql +0 -0
  341. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query64.sql +0 -0
  342. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query65.sql +0 -0
  343. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query66.sql +0 -0
  344. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query67.sql +0 -0
  345. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query68.sql +0 -0
  346. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query69.sql +0 -0
  347. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query7.sql +0 -0
  348. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query70.sql +0 -0
  349. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query71.sql +0 -0
  350. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query72.sql +0 -0
  351. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query73.sql +0 -0
  352. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query74.sql +0 -0
  353. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query75.sql +0 -0
  354. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query76.sql +0 -0
  355. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query77.sql +0 -0
  356. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query78.sql +0 -0
  357. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query79.sql +0 -0
  358. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query8.sql +0 -0
  359. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query80.sql +0 -0
  360. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query81.sql +0 -0
  361. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query82.sql +0 -0
  362. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query83.sql +0 -0
  363. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query84.sql +0 -0
  364. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query85.sql +0 -0
  365. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query86.sql +0 -0
  366. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query87.sql +0 -0
  367. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query88.sql +0 -0
  368. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query89.sql +0 -0
  369. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query9.sql +0 -0
  370. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query90.sql +0 -0
  371. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query91.sql +0 -0
  372. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query92.sql +0 -0
  373. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query93.sql +0 -0
  374. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query94.sql +0 -0
  375. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query95.sql +0 -0
  376. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query96.sql +0 -0
  377. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query97.sql +0 -0
  378. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query98.sql +0 -0
  379. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/ansi/query99.sql +0 -0
  380. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query1.sql +0 -0
  381. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query10.sql +0 -0
  382. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query11.sql +0 -0
  383. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query12.sql +0 -0
  384. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query13.sql +0 -0
  385. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query14.sql +0 -0
  386. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query15.sql +0 -0
  387. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query16.sql +0 -0
  388. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query17.sql +0 -0
  389. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query18.sql +0 -0
  390. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query19.sql +0 -0
  391. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query2.sql +0 -0
  392. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query20.sql +0 -0
  393. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query21.sql +0 -0
  394. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query22.sql +0 -0
  395. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query23.sql +0 -0
  396. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query24.sql +0 -0
  397. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query25.sql +0 -0
  398. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query26.sql +0 -0
  399. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query27.sql +0 -0
  400. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query28.sql +0 -0
  401. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query29.sql +0 -0
  402. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query3.sql +0 -0
  403. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query30.sql +0 -0
  404. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query31.sql +0 -0
  405. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query32.sql +0 -0
  406. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query33.sql +0 -0
  407. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query34.sql +0 -0
  408. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query35.sql +0 -0
  409. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query36.sql +0 -0
  410. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query37.sql +0 -0
  411. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query38.sql +0 -0
  412. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query39.sql +0 -0
  413. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query4.sql +0 -0
  414. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query40.sql +0 -0
  415. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query41.sql +0 -0
  416. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query42.sql +0 -0
  417. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query43.sql +0 -0
  418. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query44.sql +0 -0
  419. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query45.sql +0 -0
  420. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query46.sql +0 -0
  421. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query47.sql +0 -0
  422. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query48.sql +0 -0
  423. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query49.sql +0 -0
  424. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query5.sql +0 -0
  425. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query50.sql +0 -0
  426. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query51.sql +0 -0
  427. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query52.sql +0 -0
  428. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query53.sql +0 -0
  429. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query54.sql +0 -0
  430. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query55.sql +0 -0
  431. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query56.sql +0 -0
  432. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query57.sql +0 -0
  433. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query58.sql +0 -0
  434. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query59.sql +0 -0
  435. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query6.sql +0 -0
  436. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query60.sql +0 -0
  437. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query61.sql +0 -0
  438. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query62.sql +0 -0
  439. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query63.sql +0 -0
  440. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query64.sql +0 -0
  441. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query65.sql +0 -0
  442. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query66.sql +0 -0
  443. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query67.sql +0 -0
  444. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query68.sql +0 -0
  445. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query69.sql +0 -0
  446. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query7.sql +0 -0
  447. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query70.sql +0 -0
  448. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query71.sql +0 -0
  449. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query72.sql +0 -0
  450. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query73.sql +0 -0
  451. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query74.sql +0 -0
  452. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query75.sql +0 -0
  453. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query76.sql +0 -0
  454. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query77.sql +0 -0
  455. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query78.sql +0 -0
  456. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query79.sql +0 -0
  457. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query8.sql +0 -0
  458. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query80.sql +0 -0
  459. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query81.sql +0 -0
  460. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query82.sql +0 -0
  461. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query83.sql +0 -0
  462. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query84.sql +0 -0
  463. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query85.sql +0 -0
  464. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query86.sql +0 -0
  465. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query87.sql +0 -0
  466. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query88.sql +0 -0
  467. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query89.sql +0 -0
  468. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query9.sql +0 -0
  469. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query90.sql +0 -0
  470. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query91.sql +0 -0
  471. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query92.sql +0 -0
  472. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query93.sql +0 -0
  473. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query94.sql +0 -0
  474. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query95.sql +0 -0
  475. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query96.sql +0 -0
  476. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query97.sql +0 -0
  477. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query98.sql +0 -0
  478. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/sparksql/query99.sql +0 -0
  479. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/queries/tpcds/test_tpcds.py +0 -0
  480. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/parsing/test_ast.py +0 -0
  481. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/sql/utils.py +0 -0
  482. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/superset_test.py +0 -0
  483. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/transpilation_test.py +0 -0
  484. {datajunction_server-0.0.1a55.dev0 → datajunction_server-0.0.1a56.dev0}/tests/utils_test.py +0 -0
@@ -16,6 +16,7 @@ source =
16
16
  */site-packages/
17
17
 
18
18
  [report]
19
+ show_missing = True
19
20
  # Regexes for lines to exclude from consideration
20
21
  exclude_lines =
21
22
  # Have to re-enable the standard pragma
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datajunction-server
3
- Version: 0.0.1a55.dev0
3
+ Version: 0.0.1a56.dev0
4
4
  Summary: DataJunction server library for running to a DataJunction server
5
5
  Project-URL: repository, https://github.com/DataJunction/dj
6
6
  Author-email: DataJunction Authors <yian.shang@gmail.com>
@@ -11,7 +11,7 @@ from alembic import context
11
11
  from datajunction_server.database import (
12
12
  AttributeType,
13
13
  Catalog,
14
- Column,
14
+ Collection,
15
15
  ColumnAttribute,
16
16
  Database,
17
17
  DimensionLink,
@@ -27,6 +27,7 @@ from datajunction_server.database import (
27
27
  User,
28
28
  )
29
29
  from datajunction_server.database.base import Base
30
+ from datajunction_server.database.column import Column
30
31
  from datajunction_server.utils import get_settings
31
32
 
32
33
  settings = get_settings()
@@ -0,0 +1,56 @@
1
+ """Add collection tables
2
+
3
+ Revision ID: 640a814db2d8
4
+ Revises: 57fc93ef6947
5
+ Create Date: 2024-06-21 13:01:48.141719+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
+
12
+ from alembic import op
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision = "640a814db2d8"
16
+ down_revision = "57fc93ef6947"
17
+ branch_labels = None
18
+ depends_on = None
19
+
20
+
21
+ def upgrade():
22
+ op.create_table(
23
+ "collection",
24
+ sa.Column("id", sa.Integer(), nullable=False),
25
+ sa.Column("name", sa.String(), nullable=True),
26
+ sa.Column("description", sa.String(), nullable=True),
27
+ sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
28
+ sa.Column("deactivated_at", sa.DateTime(timezone=True), nullable=True),
29
+ sa.PrimaryKeyConstraint("id"),
30
+ sa.UniqueConstraint("name"),
31
+ )
32
+ op.create_table(
33
+ "collectionnodes",
34
+ sa.Column("collection_id", sa.Integer(), nullable=False),
35
+ sa.Column(
36
+ "node_id",
37
+ sa.BigInteger().with_variant(sa.Integer(), "sqlite"),
38
+ nullable=False,
39
+ ),
40
+ sa.ForeignKeyConstraint(
41
+ ["collection_id"],
42
+ ["collection.id"],
43
+ name="fk_collectionnodes_collection_id_collection",
44
+ ),
45
+ sa.ForeignKeyConstraint(
46
+ ["node_id"],
47
+ ["node.id"],
48
+ name="fk_collectionnodes_node_id_node",
49
+ ),
50
+ sa.PrimaryKeyConstraint("collection_id", "node_id"),
51
+ )
52
+
53
+
54
+ def downgrade():
55
+ op.drop_table("collectionnodes")
56
+ op.drop_table("collection")
@@ -0,0 +1,4 @@
1
+ """
2
+ Version for Hatch
3
+ """
4
+ __version__ = "0.0.1a56.dev0"
@@ -0,0 +1,154 @@
1
+ """
2
+ Collection related APIs.
3
+ """
4
+ import logging
5
+ from http import HTTPStatus
6
+ from typing import List
7
+
8
+ from fastapi import Depends, HTTPException, Response
9
+ from sqlalchemy import select
10
+ from sqlalchemy.ext.asyncio import AsyncSession
11
+ from sqlalchemy.sql.operators import is_
12
+
13
+ from datajunction_server.database.collection import Collection
14
+ from datajunction_server.database.node import Node
15
+ from datajunction_server.errors import DJException
16
+ from datajunction_server.internal.access.authentication.http import SecureAPIRouter
17
+ from datajunction_server.models.collection import CollectionInfo
18
+ from datajunction_server.utils import get_session, get_settings
19
+
20
+ _logger = logging.getLogger(__name__)
21
+ settings = get_settings()
22
+ router = SecureAPIRouter(tags=["collections"])
23
+
24
+
25
+ @router.post(
26
+ "/collections/",
27
+ response_model=CollectionInfo,
28
+ status_code=HTTPStatus.CREATED,
29
+ )
30
+ async def create_a_collection(
31
+ data: CollectionInfo,
32
+ *,
33
+ session: AsyncSession = Depends(get_session),
34
+ ) -> CollectionInfo:
35
+ """
36
+ Create a Collection
37
+ """
38
+ try:
39
+ await Collection.get_by_name(session, data.name, raise_if_not_exists=True)
40
+ except DJException:
41
+ pass
42
+ else:
43
+ raise HTTPException(
44
+ status_code=HTTPStatus.CONFLICT,
45
+ detail=f"Collection already exists: `{data.name}`",
46
+ )
47
+
48
+ collection = Collection(
49
+ name=data.name,
50
+ description=data.description,
51
+ )
52
+ session.add(collection)
53
+ await session.commit()
54
+ await session.refresh(collection)
55
+
56
+ return CollectionInfo.from_orm(collection)
57
+
58
+
59
+ @router.delete("/collections/{name}", status_code=HTTPStatus.NO_CONTENT)
60
+ async def delete_a_collection(
61
+ name: str,
62
+ *,
63
+ session: AsyncSession = Depends(get_session),
64
+ ):
65
+ """
66
+ Delete a collection
67
+ """
68
+ collection = await Collection.get_by_name(session, name)
69
+ await session.delete(collection)
70
+ await session.commit()
71
+ return Response(status_code=HTTPStatus.NO_CONTENT)
72
+
73
+
74
+ @router.get("/collections/")
75
+ async def list_collections(
76
+ *,
77
+ session: AsyncSession = Depends(get_session),
78
+ ) -> List[CollectionInfo]:
79
+ """
80
+ List all collections
81
+ """
82
+ collections = await session.execute(
83
+ select(Collection).where(is_(Collection.deactivated_at, None)),
84
+ )
85
+ return collections.scalars().all()
86
+
87
+
88
+ @router.get("/collections/{name}")
89
+ async def get_collection(
90
+ name: str,
91
+ *,
92
+ session: AsyncSession = Depends(get_session),
93
+ ):
94
+ """
95
+ Get a collection and its nodes
96
+ """
97
+ collection = await Collection.get_by_name(
98
+ session,
99
+ name=name,
100
+ raise_if_not_exists=True,
101
+ )
102
+ return collection
103
+
104
+
105
+ @router.post(
106
+ "/collections/{name}/nodes/",
107
+ status_code=HTTPStatus.NO_CONTENT,
108
+ name="Add Nodes to a Collection",
109
+ )
110
+ async def add_nodes_to_collection(
111
+ name: str,
112
+ data: List[str],
113
+ *,
114
+ session: AsyncSession = Depends(get_session),
115
+ ):
116
+ """
117
+ Add one or more nodes to a collection
118
+ """
119
+ collection = await Collection.get_by_name(session, name, raise_if_not_exists=True)
120
+ nodes = await Node.get_by_names(session=session, names=data)
121
+ if not nodes:
122
+ raise HTTPException(
123
+ status_code=HTTPStatus.NOT_FOUND,
124
+ detail=f"Cannot add nodes to collection, no nodes found: `{data}`",
125
+ )
126
+ collection.nodes.extend(nodes) # type: ignore
127
+ session.add(collection)
128
+ await session.commit()
129
+ await session.refresh(collection)
130
+ return Response(status_code=HTTPStatus.NO_CONTENT)
131
+
132
+
133
+ @router.post(
134
+ "/collections/{name}/remove/",
135
+ status_code=HTTPStatus.NO_CONTENT,
136
+ name="Delete Nodes from a Collection",
137
+ )
138
+ async def delete_nodes_from_collection(
139
+ name: str,
140
+ data: List[str],
141
+ *,
142
+ session: AsyncSession = Depends(get_session),
143
+ ):
144
+ """
145
+ Delete one or more nodes from a collection
146
+ """
147
+ collection = await Collection.get_by_name(session, name)
148
+ nodes = await Node.get_by_names(session=session, names=data)
149
+ for node in nodes:
150
+ if node in collection.nodes: # type: ignore
151
+ collection.nodes.remove(node) # type: ignore
152
+ await session.commit()
153
+ await session.refresh(collection)
154
+ return Response(status_code=HTTPStatus.NO_CONTENT)
@@ -27,6 +27,7 @@ from datajunction_server.api import (
27
27
  attributes,
28
28
  catalogs,
29
29
  client,
30
+ collection,
30
31
  cubes,
31
32
  data,
32
33
  dimensions,
@@ -89,6 +90,7 @@ app.add_middleware(
89
90
  )
90
91
 
91
92
  app.include_router(catalogs.router)
93
+ app.include_router(collection.router)
92
94
  app.include_router(engines.router)
93
95
  app.include_router(metrics.router)
94
96
  app.include_router(djsql.router)
@@ -12,8 +12,9 @@ from fastapi.responses import JSONResponse
12
12
  from sqlalchemy.ext.asyncio import AsyncSession
13
13
  from sqlalchemy.orm import joinedload, selectinload
14
14
 
15
- from datajunction_server.database import Column, ColumnAttribute, Node, NodeRevision
15
+ from datajunction_server.database import Node, NodeRevision
16
16
  from datajunction_server.database.backfill import Backfill
17
+ from datajunction_server.database.column import Column, ColumnAttribute
17
18
  from datajunction_server.database.history import ActivityType, EntityType, History
18
19
  from datajunction_server.database.user import User
19
20
  from datajunction_server.errors import DJDoesNotExistException, DJException
@@ -3,7 +3,7 @@ __all__ = [
3
3
  "AttributeType",
4
4
  "ColumnAttribute",
5
5
  "Catalog",
6
- "Column",
6
+ "Collection",
7
7
  "Database",
8
8
  "DimensionLink",
9
9
  "Engine",
@@ -21,7 +21,7 @@ __all__ = [
21
21
 
22
22
  from datajunction_server.database.attributetype import AttributeType, ColumnAttribute
23
23
  from datajunction_server.database.catalog import Catalog
24
- from datajunction_server.database.column import Column
24
+ from datajunction_server.database.collection import Collection
25
25
  from datajunction_server.database.database import Database, Table
26
26
  from datajunction_server.database.dimensionlink import DimensionLink
27
27
  from datajunction_server.database.engine import Engine
@@ -0,0 +1,79 @@
1
+ """Collection database schema."""
2
+ from datetime import datetime, timezone
3
+ from functools import partial
4
+ from typing import List, Optional
5
+
6
+ from sqlalchemy import DateTime, ForeignKey, String, select
7
+ from sqlalchemy.ext.asyncio import AsyncSession
8
+ from sqlalchemy.orm import Mapped, mapped_column, relationship
9
+
10
+ from datajunction_server.database.base import Base
11
+ from datajunction_server.database.node import Node
12
+ from datajunction_server.errors import DJDoesNotExistException
13
+ from datajunction_server.typing import UTCDatetime
14
+
15
+
16
+ class Collection(Base): # pylint: disable=too-few-public-methods
17
+ """
18
+ A collection of nodes
19
+ """
20
+
21
+ __tablename__ = "collection"
22
+
23
+ id: Mapped[int] = mapped_column(primary_key=True)
24
+ name: Mapped[Optional[str]] = mapped_column(String, default=None, unique=True)
25
+ description: Mapped[Optional[str]] = mapped_column(String, default=None)
26
+ nodes: Mapped[List[Node]] = relationship(
27
+ secondary="collectionnodes",
28
+ primaryjoin="Collection.id==CollectionNodes.collection_id",
29
+ secondaryjoin="Node.id==CollectionNodes.node_id",
30
+ lazy="selectin",
31
+ )
32
+ created_at: Mapped[UTCDatetime] = mapped_column(
33
+ DateTime(timezone=True),
34
+ insert_default=partial(datetime.now, timezone.utc),
35
+ )
36
+ deactivated_at: Mapped[UTCDatetime] = mapped_column(
37
+ DateTime(timezone=True),
38
+ nullable=True,
39
+ default=None,
40
+ )
41
+
42
+ def __hash__(self) -> int:
43
+ return hash(self.id) # pragma: no cover
44
+
45
+ @classmethod
46
+ async def get_by_name(
47
+ cls,
48
+ session: AsyncSession,
49
+ name: str,
50
+ raise_if_not_exists: bool = False,
51
+ ) -> Optional["Collection"]:
52
+ """
53
+ Get a collection by name
54
+ """
55
+ statement = select(Collection).where(Collection.name == name)
56
+ collection = (await session.execute(statement)).scalar()
57
+ if not collection and raise_if_not_exists:
58
+ raise DJDoesNotExistException(
59
+ message=f"Collection with name `{name}` does not exist.",
60
+ http_status_code=404,
61
+ )
62
+ return collection
63
+
64
+
65
+ class CollectionNodes(Base): # type: ignore # pylint: disable=too-few-public-methods
66
+ """
67
+ Join table for collections and nodes.
68
+ """
69
+
70
+ __tablename__ = "collectionnodes"
71
+
72
+ collection_id: Mapped[int] = mapped_column(
73
+ ForeignKey("collection.id", name="fk_collectionnodes_collection_id_collection"),
74
+ primary_key=True,
75
+ )
76
+ node_id: Mapped[int] = mapped_column(
77
+ ForeignKey("node.id", name="fk_collectionnodes_node_id_node"),
78
+ primary_key=True,
79
+ )
@@ -116,6 +116,15 @@ class Column(Base): # type: ignore
116
116
  for attr in self.attributes # pylint: disable=not-an-iterable
117
117
  )
118
118
 
119
+ def has_attributes_besides(self, attribute_name: str) -> bool:
120
+ """
121
+ Whether the column has any attribute besides the one specified.
122
+ """
123
+ return any(
124
+ attr.attribute_type.name != attribute_name
125
+ for attr in self.attributes # pylint: disable=not-an-iterable
126
+ )
127
+
119
128
  def __hash__(self) -> int:
120
129
  return hash(self.id)
121
130
 
@@ -1,7 +1,7 @@
1
1
  """Database schema"""
2
2
  from datetime import datetime, timezone
3
3
  from functools import partial
4
- from typing import Dict, List, Optional, Tuple
4
+ from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
5
5
  from uuid import UUID, uuid4
6
6
 
7
7
  from sqlalchemy import JSON, BigInteger, DateTime, ForeignKey, Integer, String
@@ -9,9 +9,11 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship
9
9
  from sqlalchemy_utils import UUIDType
10
10
 
11
11
  from datajunction_server.database.base import Base
12
- from datajunction_server.database.column import Column
13
12
  from datajunction_server.typing import UTCDatetime
14
13
 
14
+ if TYPE_CHECKING:
15
+ from datajunction_server.database.column import Column
16
+
15
17
 
16
18
  class Database(Base): # pylint: disable=too-few-public-methods
17
19
  """
@@ -15,9 +15,9 @@ from sqlalchemy import (
15
15
  from sqlalchemy.ext.asyncio import AsyncSession
16
16
  from sqlalchemy.orm import Mapped, joinedload, mapped_column, relationship
17
17
 
18
- from datajunction_server.database import Column
19
18
  from datajunction_server.database.backfill import Backfill
20
19
  from datajunction_server.database.base import Base
20
+ from datajunction_server.database.column import Column
21
21
  from datajunction_server.models.materialization import (
22
22
  DruidMeasuresCubeConfig,
23
23
  GenericMaterializationConfig,
@@ -9,7 +9,8 @@ from sqlalchemy.ext.asyncio import AsyncSession
9
9
  from sqlalchemy.orm import joinedload, selectinload
10
10
 
11
11
  from datajunction_server.construction.utils import to_namespaced_name
12
- from datajunction_server.database import Column, DimensionLink, Node, NodeRevision
12
+ from datajunction_server.database import DimensionLink, Node, NodeRevision
13
+ from datajunction_server.database.column import Column
13
14
  from datajunction_server.models.node_type import NodeType
14
15
  from datajunction_server.sql.dag import topological_sort
15
16
  from datajunction_server.sql.parsing import ast
@@ -81,6 +82,43 @@ def python_client_code_for_linking_complex_dimension(
81
82
  )
82
83
 
83
84
 
85
+ async def python_client_code_for_setting_column_attributes(
86
+ session: AsyncSession,
87
+ node_name: str,
88
+ ):
89
+ """
90
+ Returns the python client code to set column attributes.
91
+ """
92
+ node_short_name = node_name.split(SEPARATOR)[-1]
93
+ node = await Node.get_by_name(
94
+ session,
95
+ node_name,
96
+ options=[
97
+ joinedload(Node.current).options(
98
+ selectinload(NodeRevision.columns).options(
99
+ selectinload(Column.attributes),
100
+ ),
101
+ ),
102
+ ],
103
+ )
104
+
105
+ template = jinja_env.get_template("set_column_attributes.j2")
106
+ snippets = [
107
+ template.render(
108
+ node_short_name=node_short_name,
109
+ column_name=col.name,
110
+ attributes=[
111
+ attr.attribute_type
112
+ for attr in col.attributes
113
+ if attr.attribute_type.name != "primary_key"
114
+ ],
115
+ )
116
+ for col in node.current.columns # type: ignore
117
+ if col.has_attributes_besides("primary_key")
118
+ ]
119
+ return "\n\n".join(snippets)
120
+
121
+
84
122
  async def python_client_create_node(
85
123
  session: AsyncSession,
86
124
  node_name: str,
@@ -227,7 +265,7 @@ async def export_nodes_notebook_cells(session: AsyncSession, nodes: List[Node]):
227
265
  A node export means the following:
228
266
  - Client code to create the node and set the right tags
229
267
  - Client code to link all dimensions set on the node
230
- - TODO: Client code to set all column attributes on the node
268
+ - Client code to set all column attributes on the node
231
269
  """
232
270
  cells = []
233
271
  cells.append(
@@ -248,7 +286,6 @@ async def export_nodes_notebook_cells(session: AsyncSession, nodes: List[Node]):
248
286
  namespace = SEPARATOR.join(node.name.split(SEPARATOR)[:-1])
249
287
  cells.append(
250
288
  new_code_cell(
251
- # for cubes: NAMESPACE_MAPPING['{SEPARATOR.join(metric.split(SEPARATOR)[:-1])}']
252
289
  await python_client_create_node(
253
290
  session,
254
291
  node.name,
@@ -275,4 +312,17 @@ async def export_nodes_notebook_cells(session: AsyncSession, nodes: List[Node]):
275
312
  ],
276
313
  )
277
314
  cells.append(new_code_cell(link_dimensions))
315
+
316
+ # Add cell for setting column attributes if needed
317
+ if any(
318
+ col.has_attributes_besides("primary_key") for col in node.current.columns
319
+ ):
320
+ cells.append(
321
+ new_code_cell(
322
+ await python_client_code_for_setting_column_attributes(
323
+ session,
324
+ node.name,
325
+ ),
326
+ ),
327
+ )
278
328
  return cells
@@ -0,0 +1,9 @@
1
+ from datajunction import (
2
+ DJBuilder, Source, Dimension, Transform, Metric,
3
+ Namespace, MetricUnit, MetricDirection, ColumnAttribute,
4
+ )
5
+
6
+ DJ_URL = "{{ request_url }}"
7
+
8
+ dj = DJBuilder(DJ_URL)
9
+ dj.basic_login("dj", "dj")
@@ -0,0 +1,7 @@
1
+ {{ node_short_name }}.set_column_attributes(
2
+ "{{ column_name }}",
3
+ [{%- for attribute in attributes %}
4
+ ColumnAttribute(namespace="{{ attribute.namespace }}", name="{{ attribute.name }}"),
5
+ {%- endfor %}{% if attributes %}
6
+ {% else %}{% endif %}],
7
+ )
@@ -6,7 +6,8 @@ from sqlalchemy.exc import MissingGreenlet
6
6
  from sqlalchemy.ext.asyncio import AsyncSession
7
7
 
8
8
  from datajunction_server.api.helpers import find_bound_dimensions
9
- from datajunction_server.database import Column, Node, NodeRevision
9
+ from datajunction_server.database import Node, NodeRevision
10
+ from datajunction_server.database.column import Column
10
11
  from datajunction_server.errors import DJError, DJException, ErrorCode
11
12
  from datajunction_server.models.base import labelize
12
13
  from datajunction_server.models.node import NodeRevisionBase, NodeStatus
@@ -0,0 +1,17 @@
1
+ """
2
+ Models for collections
3
+ """
4
+
5
+ from pydantic.main import BaseModel
6
+
7
+
8
+ class CollectionInfo(BaseModel):
9
+ """
10
+ Class for a collection information
11
+ """
12
+
13
+ name: str
14
+ description: str
15
+
16
+ class Config: # pylint: disable=missing-class-docstring, too-few-public-methods
17
+ orm_mode = True
@@ -4438,7 +4438,7 @@ class Unnest(TableFunction):
4438
4438
  It will generate a new row for each element in the specified column.
4439
4439
  """
4440
4440
 
4441
- dialects = [Dialect.SPARK, Dialect.DRUID]
4441
+ dialects = [Dialect.TRINO, Dialect.DRUID]
4442
4442
 
4443
4443
 
4444
4444
  @Unnest.register
@@ -2279,7 +2279,9 @@ class FunctionTable(FunctionTableExpression):
2279
2279
  if self.column_list
2280
2280
  else ""
2281
2281
  )
2282
- column_list_str = f"({cols})" if len(self.column_list) > 1 else str(cols)
2282
+ column_list_str = (
2283
+ f"{cols}" if self.name.name.upper() != "UNNEST" else f"({cols})"
2284
+ )
2283
2285
  args_str = f"({', '.join(str(col) for col in self.args)})" if self.args else ""
2284
2286
  return f"{self.name}{args_str}{alias}{as_}{column_list_str}"
2285
2287
 
@@ -229,6 +229,15 @@ async def test_export_namespace_as_notebook(
229
229
  """
230
230
  Verify exporting all nodes in a namespace as a notebook.
231
231
  """
232
+ response = await module__client_with_roads.post(
233
+ "/nodes/default.repair_order_details/columns/repair_type_id/attributes/",
234
+ json=[
235
+ {
236
+ "namespace": "system",
237
+ "name": "dimension",
238
+ },
239
+ ],
240
+ )
232
241
  response = await module__client_with_roads.get(
233
242
  "/datajunction-clients/python/notebook?namespace=default",
234
243
  )
@@ -236,7 +245,7 @@ async def test_export_namespace_as_notebook(
236
245
  response.headers["content-disposition"] == 'attachment; filename="export.ipynb"'
237
246
  )
238
247
  notebook = response.json()
239
- assert len(notebook["cells"]) == 51
248
+ assert len(notebook["cells"]) >= 50
240
249
  # Intro cell
241
250
  assert notebook["cells"][0]["cell_type"] == "markdown"
242
251
  assert (
@@ -282,6 +291,13 @@ NAMESPACE_MAPPING = {
282
291
  "notebook.link_dimension.txt",
283
292
  ).strip()
284
293
  )
294
+ # Check column attributes
295
+ assert (
296
+ notebook["cells"][7]["source"]
297
+ == load_expected_file(
298
+ "notebook.set_attribute.txt",
299
+ ).strip()
300
+ )
285
301
 
286
302
 
287
303
  @pytest.mark.asyncio
@@ -344,7 +360,7 @@ async def test_export_cube_as_notebook(
344
360
  "&include_sources=true&include_dimensions=true",
345
361
  )
346
362
  notebook = response.json()
347
- assert len(notebook["cells"]) == 20
363
+ assert len(notebook["cells"]) == 21
348
364
  assert (
349
365
  notebook["cells"][2]["source"]
350
366
  == """### Upserting Nodes:
@@ -358,7 +374,7 @@ async def test_export_cube_as_notebook(
358
374
  * default.roads_cube"""
359
375
  )
360
376
  assert (
361
- trim_trailing_whitespace(notebook["cells"][19]["source"])
377
+ trim_trailing_whitespace(notebook["cells"][20]["source"])
362
378
  == load_expected_file(
363
379
  "notebook.create_cube.txt",
364
380
  ).strip()