datajunction-server 0.0.1a99.dev2__tar.gz → 0.0.1a100__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 (545) hide show
  1. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/PKG-INFO +2 -2
  2. datajunction_server-0.0.1a100/datajunction_server/__about__.py +5 -0
  3. datajunction_server-0.0.1a100/datajunction_server/alembic/versions/2025_05_08_0601-ee0eb65f743b_convert_dialect.py +38 -0
  4. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/queries/sql.py +1 -2
  5. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/sql.py +0 -2
  6. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/helpers.py +75 -3
  7. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/main.py +3 -11
  8. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/materializations.py +27 -25
  9. datajunction_server-0.0.1a100/datajunction_server/api/setup_logging.py +7 -0
  10. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/sql.py +4 -6
  11. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/config.py +2 -2
  12. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/construction/build_v2.py +2 -6
  13. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/construction/dimensions.py +1 -1
  14. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/engine.py +14 -5
  15. datajunction_server-0.0.1a100/datajunction_server/models/dialect.py +114 -0
  16. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/engine.py +1 -12
  17. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/metric.py +11 -22
  18. datajunction_server-0.0.1a100/datajunction_server/models/sql.py +55 -0
  19. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/dag.py +22 -24
  20. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/transpilation.py +42 -23
  21. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/dimension_links_test.py +42 -0
  22. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/helpers_test.py +1 -1
  23. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/materializations_test.py +167 -0
  24. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/nodes_test.py +1 -5
  25. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/conftest.py +55 -0
  26. datajunction_server-0.0.1a100/tests/models/dialect_test.py +135 -0
  27. datajunction_server-0.0.1a100/tests/transpilation_test.py +140 -0
  28. datajunction_server-0.0.1a99.dev2/datajunction_server/__about__.py +0 -5
  29. datajunction_server-0.0.1a99.dev2/datajunction_server/models/sql.py +0 -52
  30. datajunction_server-0.0.1a99.dev2/tests/transpilation_test.py +0 -88
  31. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/.coveragerc +0 -0
  32. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/.env +0 -0
  33. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/.env.integration +0 -0
  34. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/.flake8 +0 -0
  35. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/.gitignore +0 -0
  36. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/.isort.cfg +0 -0
  37. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/.pre-commit-config.yaml +0 -0
  38. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/Dockerfile +0 -0
  39. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/Makefile +0 -0
  40. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/README.md +0 -0
  41. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/__init__.py +0 -0
  42. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/README +0 -0
  43. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/env.py +0 -0
  44. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/script.py.mako +0 -0
  45. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2023_12_20_1829-724445d2b29d_initial_migration.py +0 -0
  46. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_01_08_2034-945d44abcd32_add_dimension_links.py +0 -0
  47. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_01_11_2032-c74b11566d82_add_column_order.py +0 -0
  48. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_01_18_2011-20f060b02772_switch_enum_values.py +0 -0
  49. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_01_23_0617-c9cef8864ecb_add_missing_table_attribute_to_source_.py +0 -0
  50. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_01_23_1655-a8e22109be24_availability_state_s_valid_through_ts_.py +0 -0
  51. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_02_22_0713-d61fb7e48cc3_cascade_deletes_to_dimension_links.py +0 -0
  52. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_04_30_1556-de7ec1c82fe0_add_query_requests.py +0 -0
  53. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_05_09_1420-9b1227ff17f4_update_backfill_spec.py +0 -0
  54. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_05_21_0012-57fc93ef6947_add_query_id_to_queryrequest.py +0 -0
  55. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_06_21_1301-640a814db2d8_add_collection_tables.py +0 -0
  56. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_07_12_0348-34171c92dd6d_set_user_username_to_be_unique.py +0 -0
  57. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_08_18_0036-f3c9b40deb6f_add_create_by_to_nodes_node_revisions_.py +0 -0
  58. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_10_24_0015-4d6ab789e456_add_a_map_of_links_to_availability_state.py +0 -0
  59. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2024_10_26_0340-70904373eab3_add_indexes_on_history_and_node_tables.py +0 -0
  60. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2025_01_19_1808-9650f9b728a2_add_query_ast_for_noderevision.py +0 -0
  61. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2025_01_24_0020-bec3296d7537_add_custom_metadata_field_to_nodes.py +0 -0
  62. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2025_02_11_1619-c3d5f327296c_notificationpreferences.py +0 -0
  63. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2025_03_14_1513-ae9eba981a2d_add_index_on_display_name.py +0 -0
  64. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2025_03_14_2304-135fa5833fed_added_column_description.py +0 -0
  65. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2025_04_05_2149-a2d7ea04cf79_add_formatting_metric_metadata.py +0 -0
  66. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic/versions/2025_04_24_1810-51547dcccb10_fix_unique_constraint.py +0 -0
  67. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/alembic.ini +0 -0
  68. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/__init__.py +0 -0
  69. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/access/authentication/__init__.py +0 -0
  70. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/access/authentication/basic.py +0 -0
  71. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/access/authentication/github.py +0 -0
  72. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/access/authentication/google.py +0 -0
  73. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/access/authentication/whoami.py +0 -0
  74. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/attributes.py +0 -0
  75. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/catalogs.py +0 -0
  76. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/client.py +0 -0
  77. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/collection.py +0 -0
  78. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/cubes.py +0 -0
  79. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/data.py +0 -0
  80. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/dimensions.py +0 -0
  81. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/djsql.py +0 -0
  82. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/engines.py +0 -0
  83. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/__init__.py +0 -0
  84. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/main.py +0 -0
  85. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/queries/__init__.py +0 -0
  86. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/queries/catalogs.py +0 -0
  87. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/queries/dag.py +0 -0
  88. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/queries/engines.py +0 -0
  89. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/queries/nodes.py +0 -0
  90. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/queries/tags.py +0 -0
  91. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/resolvers/__init__.py +0 -0
  92. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/resolvers/nodes.py +0 -0
  93. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/resolvers/tags.py +0 -0
  94. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/__init__.py +0 -0
  95. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/availabilitystate.py +0 -0
  96. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/catalog_engine.py +0 -0
  97. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/column.py +0 -0
  98. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/errors.py +0 -0
  99. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/materialization.py +0 -0
  100. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/metricmetadata.py +0 -0
  101. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/node.py +0 -0
  102. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/tag.py +0 -0
  103. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/scalars/user.py +0 -0
  104. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/graphql/utils.py +0 -0
  105. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/health.py +0 -0
  106. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/history.py +0 -0
  107. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/logging.conf +0 -0
  108. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/measures.py +0 -0
  109. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/metrics.py +0 -0
  110. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/namespaces.py +0 -0
  111. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/nodes.py +0 -0
  112. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/notifications.py +0 -0
  113. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/tags.py +0 -0
  114. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/api/users.py +0 -0
  115. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/constants.py +0 -0
  116. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/construction/__init__.py +0 -0
  117. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/construction/build.py +0 -0
  118. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/construction/dj_query.py +0 -0
  119. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/construction/exceptions.py +0 -0
  120. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/construction/utils.py +0 -0
  121. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/__init__.py +0 -0
  122. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/attributetype.py +0 -0
  123. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/availabilitystate.py +0 -0
  124. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/backfill.py +0 -0
  125. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/base.py +0 -0
  126. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/catalog.py +0 -0
  127. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/collection.py +0 -0
  128. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/column.py +0 -0
  129. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/database.py +0 -0
  130. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/dimensionlink.py +0 -0
  131. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/history.py +0 -0
  132. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/materialization.py +0 -0
  133. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/measure.py +0 -0
  134. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/metricmetadata.py +0 -0
  135. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/namespace.py +0 -0
  136. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/node.py +0 -0
  137. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/notification_preference.py +0 -0
  138. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/partition.py +0 -0
  139. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/queryrequest.py +0 -0
  140. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/tag.py +0 -0
  141. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/database/user.py +0 -0
  142. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/enum.py +0 -0
  143. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/errors.py +0 -0
  144. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/__init__.py +0 -0
  145. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/access/__init__.py +0 -0
  146. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/access/authentication/__init__.py +0 -0
  147. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/access/authentication/basic.py +0 -0
  148. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/access/authentication/github.py +0 -0
  149. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/access/authentication/google.py +0 -0
  150. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/access/authentication/http.py +0 -0
  151. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/access/authentication/tokens.py +0 -0
  152. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/access/authorization.py +0 -0
  153. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/caching/cachelib_cache.py +0 -0
  154. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/caching/interface.py +0 -0
  155. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/caching/noop_cache.py +0 -0
  156. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/client.py +0 -0
  157. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/cube_materializations.py +0 -0
  158. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/engines.py +0 -0
  159. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/history.py +0 -0
  160. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/materializations.py +0 -0
  161. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/namespaces.py +0 -0
  162. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/nodes.py +0 -0
  163. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/notifications.py +0 -0
  164. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/client_setup.j2 +0 -0
  165. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/create_cube.j2 +0 -0
  166. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/create_dimension.j2 +0 -0
  167. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/create_metric.j2 +0 -0
  168. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/create_transform.j2 +0 -0
  169. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/link_dimension.j2 +0 -0
  170. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/namespace_mapping.j2 +0 -0
  171. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/register_table.j2 +0 -0
  172. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/templates/set_column_attributes.j2 +0 -0
  173. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/internal/validation.py +0 -0
  174. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/materialization/__init__.py +0 -0
  175. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/materialization/jobs/__init__.py +0 -0
  176. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/materialization/jobs/cube_materialization.py +0 -0
  177. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/materialization/jobs/job_types.py +0 -0
  178. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/materialization/jobs/materialization_job.py +0 -0
  179. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/__init__.py +0 -0
  180. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/access.py +0 -0
  181. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/attribute.py +0 -0
  182. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/base.py +0 -0
  183. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/catalog.py +0 -0
  184. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/collection.py +0 -0
  185. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/column.py +0 -0
  186. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/cube.py +0 -0
  187. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/cube_materialization.py +0 -0
  188. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/database.py +0 -0
  189. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/dimensionlink.py +0 -0
  190. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/history.py +0 -0
  191. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/materialization.py +0 -0
  192. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/measure.py +0 -0
  193. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/node.py +0 -0
  194. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/node_type.py +0 -0
  195. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/notifications.py +0 -0
  196. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/partition.py +0 -0
  197. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/query.py +0 -0
  198. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/table.py +0 -0
  199. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/tag.py +0 -0
  200. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/models/user.py +0 -0
  201. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/naming.py +0 -0
  202. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/service_clients.py +0 -0
  203. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/__init__.py +0 -0
  204. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/decompose.py +0 -0
  205. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/functions.py +0 -0
  206. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/__init__.py +0 -0
  207. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/ast.py +0 -0
  208. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/__init__.py +0 -0
  209. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/antlr4.py +0 -0
  210. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/exceptions.py +0 -0
  211. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/SqlBaseLexer.g4 +0 -0
  212. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/SqlBaseParser.g4 +0 -0
  213. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/__init__.py +0 -0
  214. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.interp +0 -0
  215. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.py +0 -0
  216. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseLexer.tokens +0 -0
  217. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.interp +0 -0
  218. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py +0 -0
  219. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens +0 -0
  220. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py +0 -0
  221. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py +0 -0
  222. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/sql/parsing/types.py +0 -0
  223. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/superset.py +0 -0
  224. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/typing.py +0 -0
  225. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/datajunction_server/utils.py +0 -0
  226. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/init_data/seed.sql +0 -0
  227. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/pdm.lock +0 -0
  228. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/pyproject.toml +0 -0
  229. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/requirements/docker.txt +0 -0
  230. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/requirements/test.txt +0 -0
  231. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/scripts/docs-snippets.js +0 -0
  232. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/scripts/docs-snippets.sh +0 -0
  233. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/scripts/generate-openapi.py +0 -0
  234. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/__init__.py +0 -0
  235. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/__init__.py +0 -0
  236. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/access_test.py +0 -0
  237. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/attributes_test.py +0 -0
  238. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/catalog_test.py +0 -0
  239. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/client_test.py +0 -0
  240. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/collections_test.py +0 -0
  241. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/cubes_test.py +0 -0
  242. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/data_test.py +0 -0
  243. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/dimensions_access_test.py +0 -0
  244. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/dimensions_test.py +0 -0
  245. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/djql_test.py +0 -0
  246. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/engine_test.py +0 -0
  247. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/create_cube.repairs_cube.namespace.txt +0 -0
  248. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/create_cube.repairs_cube.txt +0 -0
  249. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/create_dimension.repair_order.namespace.txt +0 -0
  250. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/create_dimension.repair_order.txt +0 -0
  251. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/create_metric.num_repair_orders.namespace.txt +0 -0
  252. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/create_metric.num_repair_orders.txt +0 -0
  253. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/create_transform.regional_level_agg.namespace.txt +0 -0
  254. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/create_transform.regional_level_agg.txt +0 -0
  255. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/dimension_links.repair_orders.namespace.txt +0 -0
  256. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/dimension_links.repair_orders.txt +0 -0
  257. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/include_client_setup.txt +0 -0
  258. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/notebook.create_cube.txt +0 -0
  259. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/notebook.create_transform.txt +0 -0
  260. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/notebook.link_dimension.txt +0 -0
  261. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/notebook.set_attribute.txt +0 -0
  262. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/client_test/register_table.txt +0 -0
  263. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_measures_cube.full.druid_spec.json +0 -0
  264. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_measures_cube.full.partition.druid_spec.json +0 -0
  265. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_measures_cube.full.partition.query.sql +0 -0
  266. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_measures_cube.full.query.sql +0 -0
  267. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_measures_cube.incremental.categorical.query.sql +0 -0
  268. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_measures_cube.incremental.druid_spec.json +0 -0
  269. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_measures_cube.incremental.patched.query.sql +0 -0
  270. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_measures_cube.incremental.query.sql +0 -0
  271. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_metrics_cube.incremental.categorical.query.sql +0 -0
  272. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_metrics_cube.incremental.druid_spec.json +0 -0
  273. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/druid_metrics_cube.incremental.query.sql +0 -0
  274. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.full.config.json +0 -0
  275. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.full.materializations.json +0 -0
  276. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.full.partition.config.json +0 -0
  277. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.full.partition.materializations.json +0 -0
  278. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.full.partition.query.sql +0 -0
  279. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.full.query.sql +0 -0
  280. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.incremental.additional.query.sql +0 -0
  281. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.incremental.categorical.query.sql +0 -0
  282. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.incremental.config.json +0 -0
  283. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.incremental.lookback.query.sql +0 -0
  284. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/files/materializations_test/spark_sql.incremental.query.sql +0 -0
  285. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/graphql/__init__.py +0 -0
  286. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/graphql/catalog_test.py +0 -0
  287. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/graphql/common_dimensions_test.py +0 -0
  288. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/graphql/engine_test.py +0 -0
  289. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/graphql/find_nodes_test.py +0 -0
  290. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/graphql/measures_sql_test.py +0 -0
  291. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/graphql/tags_test.py +0 -0
  292. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/health_test.py +0 -0
  293. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/history_test.py +0 -0
  294. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/measures_test.py +0 -0
  295. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/metrics_test.py +0 -0
  296. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/namespaces_test.py +0 -0
  297. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/nodes_update_test.py +0 -0
  298. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/notifications_test.py +0 -0
  299. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/query_params_test.py +0 -0
  300. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/routers_test.py +0 -0
  301. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/sql_test.py +0 -0
  302. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/sql_v2_test.py +0 -0
  303. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/tags_test.py +0 -0
  304. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/api/users_test.py +0 -0
  305. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/construction/__init__.py +0 -0
  306. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/construction/build_test.py +0 -0
  307. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/construction/build_v2_test.py +0 -0
  308. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/construction/compile_test.py +0 -0
  309. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/construction/conftest.py +0 -0
  310. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/construction/exceptions_test.py +0 -0
  311. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/construction/inference_test.py +0 -0
  312. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/construction/utils_test.py +0 -0
  313. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/default.duckdb +0 -0
  314. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/duckdb.sql +0 -0
  315. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/errors_test.py +0 -0
  316. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/examples.py +0 -0
  317. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/integration/__init__.py +0 -0
  318. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/integration/basic_test.py +0 -0
  319. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/internal/authentication/basic_test.py +0 -0
  320. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/internal/authentication/github_test.py +0 -0
  321. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/internal/authentication/http_test.py +0 -0
  322. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/internal/authentication/token_test.py +0 -0
  323. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/internal/authentication/whoami_test.py +0 -0
  324. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/internal/caching/cachelib_cache_test.py +0 -0
  325. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/internal/caching/noop_cache_test.py +0 -0
  326. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/migrations_test.py +0 -0
  327. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/models/__init__.py +0 -0
  328. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/models/catalog_test.py +0 -0
  329. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/models/hash_test.py +0 -0
  330. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/models/measure_test.py +0 -0
  331. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/models/node_test.py +0 -0
  332. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/models/query_test.py +0 -0
  333. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/service_clients_test.py +0 -0
  334. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/__init__.py +0 -0
  335. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/dag_test.py +0 -0
  336. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/decompose_test.py +0 -0
  337. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/functions_test.py +0 -0
  338. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/__init__.py +0 -0
  339. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/backends/__init__.py +0 -0
  340. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/backends/antlr4_test.py +0 -0
  341. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/backends/types_test.py +0 -0
  342. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/__init__.py +0 -0
  343. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query1.sql +0 -0
  344. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query10.sql +0 -0
  345. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query11.sql +0 -0
  346. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query12.sql +0 -0
  347. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query13.sql +0 -0
  348. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query14.sql +0 -0
  349. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query15.sql +0 -0
  350. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query16.sql +0 -0
  351. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query17.sql +0 -0
  352. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query18.sql +0 -0
  353. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query19.sql +0 -0
  354. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query2.sql +0 -0
  355. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query20.sql +0 -0
  356. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query21.sql +0 -0
  357. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query22.sql +0 -0
  358. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query23.sql +0 -0
  359. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query24.sql +0 -0
  360. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query25.sql +0 -0
  361. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query26.sql +0 -0
  362. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query27.sql +0 -0
  363. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query28.sql +0 -0
  364. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query29.sql +0 -0
  365. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query3.sql +0 -0
  366. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query30.sql +0 -0
  367. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query31.sql +0 -0
  368. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query32.sql +0 -0
  369. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query33.sql +0 -0
  370. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query34.sql +0 -0
  371. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query35.sql +0 -0
  372. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query36.sql +0 -0
  373. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query37.sql +0 -0
  374. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query38.sql +0 -0
  375. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query39.sql +0 -0
  376. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query4.sql +0 -0
  377. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query40.sql +0 -0
  378. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query41.sql +0 -0
  379. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query42.sql +0 -0
  380. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query43.sql +0 -0
  381. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query44.sql +0 -0
  382. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query45.sql +0 -0
  383. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query46.sql +0 -0
  384. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query47.sql +0 -0
  385. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query48.sql +0 -0
  386. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query49.sql +0 -0
  387. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query5.sql +0 -0
  388. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query50.sql +0 -0
  389. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query51.sql +0 -0
  390. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query52.sql +0 -0
  391. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query53.sql +0 -0
  392. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query54.sql +0 -0
  393. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query55.sql +0 -0
  394. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query56.sql +0 -0
  395. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query57.sql +0 -0
  396. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query58.sql +0 -0
  397. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query59.sql +0 -0
  398. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query6.sql +0 -0
  399. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query60.sql +0 -0
  400. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query61.sql +0 -0
  401. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query62.sql +0 -0
  402. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query63.sql +0 -0
  403. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query64.sql +0 -0
  404. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query65.sql +0 -0
  405. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query66.sql +0 -0
  406. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query67.sql +0 -0
  407. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query68.sql +0 -0
  408. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query69.sql +0 -0
  409. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query7.sql +0 -0
  410. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query70.sql +0 -0
  411. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query71.sql +0 -0
  412. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query72.sql +0 -0
  413. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query73.sql +0 -0
  414. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query74.sql +0 -0
  415. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query75.sql +0 -0
  416. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query76.sql +0 -0
  417. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query77.sql +0 -0
  418. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query78.sql +0 -0
  419. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query79.sql +0 -0
  420. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query8.sql +0 -0
  421. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query80.sql +0 -0
  422. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query81.sql +0 -0
  423. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query82.sql +0 -0
  424. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query83.sql +0 -0
  425. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query84.sql +0 -0
  426. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query85.sql +0 -0
  427. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query86.sql +0 -0
  428. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query87.sql +0 -0
  429. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query88.sql +0 -0
  430. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query89.sql +0 -0
  431. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query9.sql +0 -0
  432. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query90.sql +0 -0
  433. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query91.sql +0 -0
  434. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query92.sql +0 -0
  435. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query93.sql +0 -0
  436. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query94.sql +0 -0
  437. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query95.sql +0 -0
  438. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query96.sql +0 -0
  439. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query97.sql +0 -0
  440. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query98.sql +0 -0
  441. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/ansi/query99.sql +0 -0
  442. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query1.sql +0 -0
  443. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query10.sql +0 -0
  444. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query11.sql +0 -0
  445. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query12.sql +0 -0
  446. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query13.sql +0 -0
  447. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query14.sql +0 -0
  448. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query15.sql +0 -0
  449. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query16.sql +0 -0
  450. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query17.sql +0 -0
  451. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query18.sql +0 -0
  452. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query19.sql +0 -0
  453. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query2.sql +0 -0
  454. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query20.sql +0 -0
  455. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query21.sql +0 -0
  456. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query22.sql +0 -0
  457. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query23.sql +0 -0
  458. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query24.sql +0 -0
  459. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query25.sql +0 -0
  460. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query26.sql +0 -0
  461. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query27.sql +0 -0
  462. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query28.sql +0 -0
  463. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query29.sql +0 -0
  464. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query3.sql +0 -0
  465. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query30.sql +0 -0
  466. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query31.sql +0 -0
  467. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query32.sql +0 -0
  468. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query33.sql +0 -0
  469. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query34.sql +0 -0
  470. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query35.sql +0 -0
  471. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query36.sql +0 -0
  472. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query37.sql +0 -0
  473. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query38.sql +0 -0
  474. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query39.sql +0 -0
  475. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query4.sql +0 -0
  476. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query40.sql +0 -0
  477. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query41.sql +0 -0
  478. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query42.sql +0 -0
  479. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query43.sql +0 -0
  480. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query44.sql +0 -0
  481. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query45.sql +0 -0
  482. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query46.sql +0 -0
  483. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query47.sql +0 -0
  484. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query48.sql +0 -0
  485. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query49.sql +0 -0
  486. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query5.sql +0 -0
  487. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query50.sql +0 -0
  488. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query51.sql +0 -0
  489. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query52.sql +0 -0
  490. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query53.sql +0 -0
  491. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query54.sql +0 -0
  492. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query55.sql +0 -0
  493. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query56.sql +0 -0
  494. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query57.sql +0 -0
  495. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query58.sql +0 -0
  496. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query59.sql +0 -0
  497. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query6.sql +0 -0
  498. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query60.sql +0 -0
  499. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query61.sql +0 -0
  500. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query62.sql +0 -0
  501. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query63.sql +0 -0
  502. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query64.sql +0 -0
  503. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query65.sql +0 -0
  504. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query66.sql +0 -0
  505. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query67.sql +0 -0
  506. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query68.sql +0 -0
  507. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query69.sql +0 -0
  508. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query7.sql +0 -0
  509. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query70.sql +0 -0
  510. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query71.sql +0 -0
  511. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query72.sql +0 -0
  512. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query73.sql +0 -0
  513. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query74.sql +0 -0
  514. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query75.sql +0 -0
  515. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query76.sql +0 -0
  516. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query77.sql +0 -0
  517. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query78.sql +0 -0
  518. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query79.sql +0 -0
  519. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query8.sql +0 -0
  520. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query80.sql +0 -0
  521. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query81.sql +0 -0
  522. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query82.sql +0 -0
  523. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query83.sql +0 -0
  524. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query84.sql +0 -0
  525. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query85.sql +0 -0
  526. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query86.sql +0 -0
  527. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query87.sql +0 -0
  528. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query88.sql +0 -0
  529. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query89.sql +0 -0
  530. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query9.sql +0 -0
  531. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query90.sql +0 -0
  532. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query91.sql +0 -0
  533. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query92.sql +0 -0
  534. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query93.sql +0 -0
  535. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query94.sql +0 -0
  536. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query95.sql +0 -0
  537. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query96.sql +0 -0
  538. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query97.sql +0 -0
  539. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query98.sql +0 -0
  540. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/sparksql/query99.sql +0 -0
  541. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/queries/tpcds/test_tpcds.py +0 -0
  542. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/parsing/test_ast.py +0 -0
  543. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/sql/utils.py +0 -0
  544. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/superset_test.py +0 -0
  545. {datajunction_server-0.0.1a99.dev2 → datajunction_server-0.0.1a100}/tests/utils_test.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: datajunction-server
3
- Version: 0.0.1a99.dev2
3
+ Version: 0.0.1a100
4
4
  Summary: DataJunction server library for running to a DataJunction server
5
5
  Project-URL: Homepage, https://datajunction.io
6
6
  Project-URL: Repository, https://github.com/DataJunction/dj
@@ -0,0 +1,5 @@
1
+ """
2
+ Version for Hatch
3
+ """
4
+
5
+ __version__ = "0.0.1a100"
@@ -0,0 +1,38 @@
1
+ """
2
+ Convert dialect
3
+
4
+ Revision ID: ee0eb65f743b
5
+ Revises: 51547dcccb10
6
+ Create Date: 2025-05-08 06:01:38.039079+00:00
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 alembic import op
12
+ from sqlalchemy.dialects import postgresql
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision = "ee0eb65f743b"
16
+ down_revision = "51547dcccb10"
17
+ branch_labels = None
18
+ depends_on = None
19
+
20
+
21
+ def upgrade():
22
+ with op.batch_alter_table("engine", schema=None) as batch_op:
23
+ batch_op.alter_column(
24
+ "dialect",
25
+ existing_type=postgresql.ENUM("SPARK", "TRINO", "DRUID", name="dialect"),
26
+ type_=sa.String(),
27
+ existing_nullable=True,
28
+ )
29
+
30
+
31
+ def downgrade():
32
+ with op.batch_alter_table("engine", schema=None) as batch_op:
33
+ batch_op.alter_column(
34
+ "dialect",
35
+ existing_type=sa.String(),
36
+ type_=postgresql.ENUM("SPARK", "TRINO", "DRUID", name="dialect"),
37
+ existing_nullable=True,
38
+ )
@@ -84,7 +84,7 @@ async def measures_sql(
84
84
  """
85
85
  Get measures SQL for a set of metrics with dimensions and filters
86
86
  """
87
- session, settings = info.context["session"], info.context["settings"]
87
+ session = info.context["session"]
88
88
  queries = await get_measures_query(
89
89
  session=session,
90
90
  metrics=list(OrderedDict.fromkeys(cube.metrics)), # type: ignore
@@ -94,7 +94,6 @@ async def measures_sql(
94
94
  engine_name=engine.name if engine else None,
95
95
  engine_version=engine.version if engine else None,
96
96
  include_all_columns=include_all_columns,
97
- sql_transpilation_library=settings.sql_transpilation_library,
98
97
  use_materialized=use_materialized,
99
98
  preagg_requested=preaggregate,
100
99
  )
@@ -72,7 +72,6 @@ class GeneratedSQL:
72
72
 
73
73
  node: Node
74
74
  sql: str
75
- sql_transpilation_library: str | None = None
76
75
  columns: list[ColumnMetadata]
77
76
  dialect: Dialect # type: ignore
78
77
  upstream_tables: list[str]
@@ -91,7 +90,6 @@ class GeneratedSQL:
91
90
  name=obj.node.name,
92
91
  ),
93
92
  sql=obj.sql,
94
- sql_transpilation_library=obj.sql_transpilation_library,
95
93
  columns=[
96
94
  ColumnMetadata( # type: ignore
97
95
  name=col.name,
@@ -56,6 +56,11 @@ from datajunction_server.models.history import status_change_history
56
56
  from datajunction_server.models.metric import TranslatedSQL
57
57
  from datajunction_server.models.node import NodeStatus
58
58
  from datajunction_server.models.node_type import NodeType
59
+ from datajunction_server.models.materialization import (
60
+ MaterializationConfigInfoUnified,
61
+ MaterializationStrategy,
62
+ MaterializationConfigOutput,
63
+ )
59
64
  from datajunction_server.models.query import ColumnMetadata, QueryWithResults
60
65
  from datajunction_server.naming import LOOKUP_CHARS
61
66
  from datajunction_server.service_clients import QueryServiceClient
@@ -717,7 +722,7 @@ async def build_sql_for_multiple_metrics(
717
722
  ]
718
723
  engine = materialized_cube_catalog.engines[0]
719
724
  return (
720
- TranslatedSQL(
725
+ TranslatedSQL.create(
721
726
  sql=str(query_ast),
722
727
  columns=query_metric_columns + query_dimension_columns,
723
728
  dialect=materialized_cube_catalog.engines[0].dialect,
@@ -745,7 +750,7 @@ async def build_sql_for_multiple_metrics(
745
750
  for tbl in upstream_tables:
746
751
  await refresh_if_needed(session, tbl.dj_node, ["availability"])
747
752
  return (
748
- TranslatedSQL(
753
+ TranslatedSQL.create(
749
754
  sql=str(query_ast),
750
755
  columns=columns,
751
756
  dialect=engine.dialect if engine else None,
@@ -875,7 +880,7 @@ async def build_sql_for_dj_query( # pragma: no cover
875
880
  ]
876
881
 
877
882
  return ( # pragma: no cover
878
- TranslatedSQL(
883
+ TranslatedSQL.create(
879
884
  sql=str(query_ast),
880
885
  columns=columns,
881
886
  dialect=engine.dialect if engine else None,
@@ -940,3 +945,70 @@ async def get_save_history(notify: Callable = Depends(get_notifier)) -> Callable
940
945
  await save_history(event, session, notify)
941
946
 
942
947
  return save_history_with_notify
948
+
949
+
950
+ def get_materialization_info(
951
+ query_service_client: QueryServiceClient,
952
+ node: Node,
953
+ include_all_revisions: bool,
954
+ show_inactive: bool,
955
+ request_headers: Optional[Dict[str, str]] = None,
956
+ ):
957
+ """Get materializations for a node
958
+
959
+ If include_all_revisions=true this pulls materializations for each node revision and
960
+ combines them into a single list. Otherwise it just pulls materializations for the
961
+ current node revision.
962
+
963
+ If show_inactive=true this also returns materializations with a deactivated_at timestamp
964
+ """
965
+ return (
966
+ [
967
+ materialization
968
+ for node_revision in node.revisions # type: ignore
969
+ for materialization in get_node_revision_materialization(
970
+ query_service_client=query_service_client,
971
+ node_revision=node_revision,
972
+ show_inactive=show_inactive,
973
+ request_headers=request_headers,
974
+ )
975
+ ]
976
+ if include_all_revisions
977
+ else get_node_revision_materialization(
978
+ query_service_client=query_service_client,
979
+ node_revision=node.current, # type: ignore
980
+ show_inactive=show_inactive,
981
+ request_headers=request_headers,
982
+ )
983
+ )
984
+
985
+
986
+ def get_node_revision_materialization(
987
+ query_service_client: QueryServiceClient,
988
+ node_revision: NodeRevision,
989
+ show_inactive: bool,
990
+ request_headers: Optional[Dict[str, str]] = None,
991
+ ) -> list[MaterializationConfigInfoUnified]:
992
+ """Merge in materialization info from the query service for a node revision"""
993
+ materializations = []
994
+ for materialization in node_revision.materializations:
995
+ if not materialization.deactivated_at or show_inactive:
996
+ info = query_service_client.get_materialization_info(
997
+ node_revision.name,
998
+ node_revision.version,
999
+ node_revision.type,
1000
+ materialization.name,
1001
+ request_headers=request_headers,
1002
+ )
1003
+ if materialization.strategy != MaterializationStrategy.INCREMENTAL_TIME:
1004
+ info.urls = [info.urls[0]]
1005
+ materialization_config_output = MaterializationConfigOutput.from_orm(
1006
+ materialization,
1007
+ )
1008
+ materializations.append(
1009
+ MaterializationConfigInfoUnified(
1010
+ **materialization_config_output.dict(),
1011
+ **info.dict(),
1012
+ ),
1013
+ )
1014
+ return materializations
@@ -2,14 +2,10 @@
2
2
  Main DJ server app.
3
3
  """
4
4
 
5
- # All the models need to be imported here so that SQLModel can define their
6
- # relationships at runtime without causing circular imports.
7
- # See https://sqlmodel.tiangolo.com/tutorial/code-structure/#make-circular-imports-work.
8
-
9
5
  import logging
6
+ from datajunction_server.api import setup_logging # noqa
7
+
10
8
  from http import HTTPStatus
11
- from logging import config
12
- from os import path
13
9
  from typing import TYPE_CHECKING
14
10
 
15
11
  from fastapi import Depends, FastAPI, Request
@@ -41,6 +37,7 @@ from datajunction_server.api import (
41
37
  tags,
42
38
  users,
43
39
  )
40
+
44
41
  from datajunction_server.api.access.authentication import basic, whoami
45
42
  from datajunction_server.api.attributes import default_attribute_types
46
43
  from datajunction_server.api.catalogs import default_catalog
@@ -55,11 +52,6 @@ if TYPE_CHECKING: # pragma: no cover
55
52
  _logger = logging.getLogger(__name__)
56
53
  settings = get_settings()
57
54
 
58
- config.fileConfig(
59
- path.join(path.dirname(path.abspath(__file__)), "logging.conf"),
60
- disable_existing_loggers=False,
61
- )
62
-
63
55
  dependencies = [Depends(default_attribute_types), Depends(default_catalog)]
64
56
 
65
57
  app = FastAPI(
@@ -12,7 +12,7 @@ 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.api.helpers import get_save_history
15
+ from datajunction_server.api.helpers import get_save_history, get_materialization_info
16
16
  from datajunction_server.database import Node, NodeRevision
17
17
  from datajunction_server.database.backfill import Backfill
18
18
  from datajunction_server.database.column import Column, ColumnAttribute
@@ -32,7 +32,6 @@ from datajunction_server.models.base import labelize
32
32
  from datajunction_server.models.cube_materialization import UpsertCubeMaterialization
33
33
  from datajunction_server.models.materialization import (
34
34
  MaterializationConfigInfoUnified,
35
- MaterializationConfigOutput,
36
35
  MaterializationInfo,
37
36
  MaterializationJobTypeEnum,
38
37
  MaterializationStrategy,
@@ -277,7 +276,8 @@ async def upsert_materialization(
277
276
  )
278
277
  async def list_node_materializations(
279
278
  node_name: str,
280
- show_deleted: bool = False,
279
+ show_inactive: bool = False,
280
+ include_all_revisions: bool = False,
281
281
  *,
282
282
  session: AsyncSession = Depends(get_session),
283
283
  request: Request,
@@ -286,30 +286,32 @@ async def list_node_materializations(
286
286
  """
287
287
  Show all materializations configured for the node, with any associated metadata
288
288
  like urls from the materialization service, if available.
289
+
290
+ show_inactive: bool - Show materializations that have a deactivated_at timestamp set
291
+ include_all_revisions: bool - Show materializations for all revisions of the node
289
292
  """
290
293
  request_headers = dict(request.headers)
291
- node = await Node.get_by_name(session, node_name)
292
- materializations = []
293
- for materialization in node.current.materializations: # type: ignore
294
- if not materialization.deactivated_at or show_deleted: # pragma: no cover
295
- info = query_service_client.get_materialization_info(
296
- node_name,
297
- node.current.version, # type: ignore
298
- node.type, # type: ignore
299
- materialization.name, # type: ignore
300
- request_headers=request_headers,
301
- )
302
- if materialization.strategy != MaterializationStrategy.INCREMENTAL_TIME:
303
- info.urls = [info.urls[0]]
304
- materialization_config_output = MaterializationConfigOutput.from_orm(
305
- materialization,
306
- )
307
- materialization = MaterializationConfigInfoUnified(
308
- **materialization_config_output.dict(),
309
- **info.dict(),
310
- )
311
- materializations.append(materialization)
312
- return materializations
294
+
295
+ # If materializations from all revisions are requested,
296
+ # this includes the joined load to pull all node revisions
297
+ node = await Node.get_by_name(
298
+ session,
299
+ node_name,
300
+ options=[
301
+ joinedload(Node.revisions).options(*NodeRevision.default_load_options()),
302
+ ]
303
+ if include_all_revisions
304
+ else [],
305
+ raise_if_not_exists=True,
306
+ )
307
+
308
+ return get_materialization_info(
309
+ query_service_client=query_service_client,
310
+ node=node, # type: ignore
311
+ include_all_revisions=include_all_revisions,
312
+ show_inactive=show_inactive,
313
+ request_headers=request_headers,
314
+ )
313
315
 
314
316
 
315
317
  @router.delete(
@@ -0,0 +1,7 @@
1
+ from logging import config
2
+ from os import path
3
+
4
+ config.fileConfig(
5
+ path.join(path.dirname(path.abspath(__file__)), "logging.conf"),
6
+ disable_existing_loggers=False,
7
+ )
@@ -94,7 +94,7 @@ async def get_measures_sql_for_cube_v2(
94
94
  )
95
95
 
96
96
  metrics = list(OrderedDict.fromkeys(metrics))
97
- measures_query = await get_measures_query(
97
+ return await get_measures_query(
98
98
  session=session,
99
99
  metrics=metrics,
100
100
  dimensions=dimensions,
@@ -105,12 +105,10 @@ async def get_measures_sql_for_cube_v2(
105
105
  current_user=current_user,
106
106
  validate_access=validate_access,
107
107
  include_all_columns=include_all_columns,
108
- sql_transpilation_library=settings.sql_transpilation_library,
109
108
  use_materialized=use_materialized,
110
109
  preagg_requested=preaggregate,
111
110
  query_parameters=json.loads(query_params),
112
111
  )
113
- return measures_query
114
112
 
115
113
 
116
114
  async def build_and_save_node_sql(
@@ -297,7 +295,7 @@ async def get_node_sql(
297
295
  query_parameters=query_parameters,
298
296
  )
299
297
  return (
300
- TranslatedSQL(
298
+ TranslatedSQL.create(
301
299
  sql=query_request.query,
302
300
  columns=query_request.columns,
303
301
  dialect=engine.dialect if engine else None,
@@ -319,7 +317,7 @@ async def get_node_sql(
319
317
  query_parameters=query_parameters,
320
318
  )
321
319
  return (
322
- TranslatedSQL(
320
+ TranslatedSQL.create(
323
321
  sql=query_request.query,
324
322
  columns=query_request.columns,
325
323
  dialect=engine.dialect if engine else None,
@@ -452,7 +450,7 @@ async def get_sql_for_metrics(
452
450
  if engine_name
453
451
  else None
454
452
  )
455
- return TranslatedSQL( # pragma: no cover
453
+ return TranslatedSQL.create( # pragma: no cover
456
454
  sql=query_request.query,
457
455
  columns=query_request.columns,
458
456
  dialect=engine.dialect if engine else None,
@@ -66,8 +66,8 @@ class Settings(BaseSettings): # pragma: no cover
66
66
  # DJ UI host, used for OAuth redirection
67
67
  frontend_host: Optional[str] = "http://localhost:3000"
68
68
 
69
- # Library to use when transpiling SQL to other dialects
70
- sql_transpilation_library: Optional[str] = None
69
+ # Enabled transpilation plugin names
70
+ transpilation_plugins: List[str] = ["default", "sqlglot"]
71
71
 
72
72
  # 128 bit DJ secret, used to encrypt passwords and JSON web tokens
73
73
  secret: str = "a-fake-secretkey"
@@ -101,7 +101,6 @@ async def get_measures_query(
101
101
  current_user: Optional[User] = None,
102
102
  validate_access: access.ValidateAccessFn = None,
103
103
  include_all_columns: bool = False,
104
- sql_transpilation_library: Optional[str] = None,
105
104
  use_materialized: bool = True,
106
105
  preagg_requested: bool = False,
107
106
  query_parameters: dict[str, Any] = None,
@@ -126,9 +125,7 @@ async def get_measures_query(
126
125
  )
127
126
 
128
127
  engine = (
129
- await get_engine(session, engine_name, engine_version)
130
- if engine_name and engine_version
131
- else None
128
+ await get_engine(session, engine_name, engine_version) if engine_name else None # type: ignore
132
129
  )
133
130
  build_criteria = BuildCriteria(
134
131
  dialect=engine.dialect if engine and engine.dialect else Dialect.SPARK,
@@ -245,9 +242,8 @@ async def get_measures_query(
245
242
  for col in final_query.select.projection
246
243
  ]
247
244
  measures_queries.append(
248
- GeneratedSQL(
245
+ GeneratedSQL.create(
249
246
  node=parent_node.current,
250
- sql_transpilation_library=sql_transpilation_library,
251
247
  sql=str(final_query),
252
248
  columns=columns_metadata,
253
249
  dialect=build_criteria.dialect,
@@ -114,7 +114,7 @@ async def build_dimensions_from_cube_query(
114
114
  amenable_name(elem.node_revision().name + SEPARATOR + elem.name): elem.type # type: ignore
115
115
  for elem in cube.cube_elements
116
116
  }
117
- return TranslatedSQL(
117
+ return TranslatedSQL.create(
118
118
  sql=str(query_ast),
119
119
  columns=[
120
120
  ColumnMetadata(
@@ -3,11 +3,22 @@
3
3
  from typing import Optional
4
4
 
5
5
  import sqlalchemy as sa
6
- from sqlalchemy import Enum
7
6
  from sqlalchemy.orm import Mapped, mapped_column
8
7
 
9
8
  from datajunction_server.database.base import Base
10
- from datajunction_server.models.engine import Dialect
9
+ from datajunction_server.models.dialect import Dialect
10
+
11
+
12
+ class DialectType(sa.TypeDecorator):
13
+ impl = sa.String
14
+
15
+ def process_bind_param(self, value, dialect):
16
+ if isinstance(value, Dialect):
17
+ return value.name
18
+ return value
19
+
20
+ def process_result_value(self, value, dialect):
21
+ return Dialect(value) if value else None
11
22
 
12
23
 
13
24
  class Engine(Base):
@@ -24,6 +35,4 @@ class Engine(Base):
24
35
  name: Mapped[str]
25
36
  version: Mapped[str]
26
37
  uri: Mapped[Optional[str]]
27
- dialect: Mapped[Optional[Dialect]] = mapped_column(
28
- Enum(Dialect),
29
- )
38
+ dialect: Mapped[Optional[Dialect]] = mapped_column(DialectType())
@@ -0,0 +1,114 @@
1
+ import logging
2
+ from datajunction_server.enum import StrEnum
3
+ from datajunction_server.utils import get_settings
4
+ from typing import TYPE_CHECKING
5
+
6
+ if TYPE_CHECKING:
7
+ from datajunction_server.transpilation import SQLTranspilationPlugin
8
+
9
+
10
+ logger = logging.getLogger(__name__)
11
+ settings = get_settings()
12
+
13
+
14
+ class Dialect(StrEnum):
15
+ """
16
+ SQL dialect
17
+ """
18
+
19
+ SPARK = "spark"
20
+ TRINO = "trino"
21
+ DRUID = "druid"
22
+
23
+ @classmethod
24
+ def _missing_(cls, value: object) -> "Dialect":
25
+ """
26
+ Create a Dialect enum member from a string, but only if it corresponds to a
27
+ registered transpilation plugin in the plugin registry. If it has a corresponding
28
+ plugin, a dynamic enum member is created for the dialect. If not, a ValueError is
29
+ raised to prevent the use of unsupported dialects.
30
+ """
31
+ if isinstance(value, str):
32
+ key = value.lower()
33
+ if key in DialectRegistry._registry:
34
+ new_member = str.__new__(cls, key)
35
+ new_member._name_ = key.upper()
36
+ new_member._value_ = key
37
+ return new_member
38
+ raise ValueError(
39
+ f"Dialect '{value}' does not have a registered SQL transpilation plugin that "
40
+ "supports it. Please configure a plugin on the server to use this dialect.",
41
+ )
42
+ raise TypeError(f"{value!r} is not a valid string for {cls.__name__}")
43
+
44
+
45
+ class DialectRegistry:
46
+ """
47
+ Registry for SQL dialect plugins.
48
+ """
49
+
50
+ _registry: dict[str, type["SQLTranspilationPlugin"]] = {}
51
+
52
+ @classmethod
53
+ def register(cls, dialect_name: str, plugin: type["SQLTranspilationPlugin"]):
54
+ """
55
+ Registers a new dialect plugin.
56
+ """
57
+ logger.info(
58
+ "Registering plugin %s for dialect %s",
59
+ plugin.__name__,
60
+ dialect_name,
61
+ )
62
+ cls._registry[dialect_name.lower()] = plugin
63
+
64
+ @classmethod
65
+ def get_plugin(cls, dialect_name: str) -> type["SQLTranspilationPlugin"] | None:
66
+ """
67
+ Retrieves the plugin class for a given dialect name.
68
+ """
69
+ return cls._registry.get(dialect_name.lower())
70
+
71
+ @classmethod
72
+ def list(cls) -> list[str]:
73
+ """
74
+ A list of supported dialects.
75
+ """
76
+ return list(cls._registry.keys())
77
+
78
+
79
+ def register_dialect_plugin(name: str, plugin_cls: type["SQLTranspilationPlugin"]):
80
+ """
81
+ Registers a plugin for the given dialect. Skips registration if the plugin is not
82
+ configured in the settings.
83
+ """
84
+ if plugin_cls.package_name not in settings.transpilation_plugins:
85
+ logger.warning(
86
+ "Skipping plugin registration for '%s' (%s) (not in configured transpilation plugins: %s)",
87
+ name,
88
+ plugin_cls.package_name,
89
+ settings.transpilation_plugins,
90
+ )
91
+ return
92
+
93
+ DialectRegistry.register(name, plugin_cls)
94
+
95
+
96
+ def dialect_plugin(name: str):
97
+ """
98
+ Decorator to register a dialect plugin. This decorator should be used on a class that
99
+ inherits from SQLTranspilationPlugin.
100
+
101
+ Example usage:
102
+
103
+ @dialect_plugin("my_dialect")
104
+ class MyDialectPlugin(SQLTranspilationPlugin):
105
+ def transpile_sql(self, query: str, input_dialect: str = None, output_dialect: str = None):
106
+ # Custom transpilation logic here
107
+ return query
108
+ """
109
+
110
+ def wrapper(cls):
111
+ register_dialect_plugin(name, cls)
112
+ return cls
113
+
114
+ return wrapper
@@ -5,18 +5,7 @@ Models for columns.
5
5
  from typing import Optional
6
6
 
7
7
  from pydantic.main import BaseModel
8
-
9
- from datajunction_server.enum import StrEnum
10
-
11
-
12
- class Dialect(StrEnum):
13
- """
14
- SQL dialect
15
- """
16
-
17
- SPARK = "spark"
18
- TRINO = "trino"
19
- DRUID = "druid"
8
+ from datajunction_server.models.dialect import Dialect
20
9
 
21
10
 
22
11
  class EngineInfo(BaseModel):
@@ -4,7 +4,6 @@ Models for metrics.
4
4
 
5
5
  from typing import List, Optional
6
6
 
7
- from pydantic.class_validators import root_validator
8
7
  from pydantic.main import BaseModel
9
8
 
10
9
  from datajunction_server.database.node import Node
@@ -15,11 +14,11 @@ from datajunction_server.models.node import (
15
14
  MetricMetadataOutput,
16
15
  )
17
16
  from datajunction_server.models.query import ColumnMetadata
17
+ from datajunction_server.models.sql import TranspiledSQL
18
18
  from datajunction_server.sql.decompose import MeasureExtractor
19
19
  from datajunction_server.sql.parsing.backends.antlr4 import ast, parse
20
- from datajunction_server.transpilation import get_transpilation_plugin
20
+ from datajunction_server.transpilation import transpile_sql
21
21
  from datajunction_server.typing import UTCDatetime
22
- from datajunction_server.utils import get_settings
23
22
 
24
23
 
25
24
  class Metric(BaseModel):
@@ -85,7 +84,7 @@ class Metric(BaseModel):
85
84
  )
86
85
 
87
86
 
88
- class TranslatedSQL(BaseModel):
87
+ class TranslatedSQL(TranspiledSQL):
89
88
  """
90
89
  Class for SQL generated from a given metric.
91
90
  """
@@ -97,21 +96,11 @@ class TranslatedSQL(BaseModel):
97
96
  dialect: Optional[Dialect] = None
98
97
  upstream_tables: Optional[List[str]] = None
99
98
 
100
- @root_validator(pre=False)
101
- def transpile_sql(
102
- cls,
103
- values,
104
- ) -> "TranslatedSQL":
105
- """
106
- Transpiles SQL to the specified dialect with the configured transpilation plugin.
107
- If no plugin is configured, it will just return the original generated query.
108
- """
109
- settings = get_settings()
110
- if settings.sql_transpilation_library: # pragma: no cover
111
- plugin = get_transpilation_plugin(settings.sql_transpilation_library)
112
- values["sql"] = plugin.transpile_sql(
113
- values["sql"],
114
- input_dialect=Dialect.SPARK,
115
- output_dialect=values["dialect"],
116
- )
117
- return values
99
+ @classmethod
100
+ def create(cls, *, dialect: Dialect | None = None, **kwargs):
101
+ sql = transpile_sql(kwargs["sql"], dialect)
102
+ return cls(
103
+ sql=sql,
104
+ dialect=dialect,
105
+ **{k: v for k, v in kwargs.items() if k not in {"sql", "dialect"}},
106
+ )