pytrilogy 0.3.332__tar.gz → 0.3.333__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 (408) hide show
  1. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/PKG-INFO +1 -1
  2. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/__init__.py +1 -1
  3. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/base.py +7 -2
  4. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/bigquery.py +46 -0
  5. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/common.py +8 -2
  6. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/duckdb.py +2 -0
  7. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/mysql.py +4 -1
  8. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/Cargo.lock +1 -1
  9. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/Cargo.toml +1 -1
  10. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/.scripts/__init__.py +0 -0
  11. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/.scripts/build_backend.py +0 -0
  12. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/.scripts/sync_version.py +0 -0
  13. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/LICENSE.md +0 -0
  14. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/README.md +0 -0
  15. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/pyproject.toml +0 -0
  16. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/README.md +0 -0
  17. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/__init__.py +0 -0
  18. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/constants.py +0 -0
  19. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/conversation.py +0 -0
  20. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/enums.py +0 -0
  21. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/execute.py +0 -0
  22. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/models.py +0 -0
  23. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/prompts.py +0 -0
  24. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/__init__.py +0 -0
  25. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/anthropic.py +0 -0
  26. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/base.py +0 -0
  27. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/deepseek.py +0 -0
  28. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/google.py +0 -0
  29. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/openai.py +0 -0
  30. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/openrouter.py +0 -0
  31. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/utils.py +0 -0
  32. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/syntax_examples.py +0 -0
  33. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/authoring/README.md +0 -0
  34. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/authoring/__init__.py +0 -0
  35. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/constants.py +0 -0
  36. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/README.md +0 -0
  37. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/__init__.py +0 -0
  38. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/constants.py +0 -0
  39. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/domain_graph.py +0 -0
  40. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/domain_validation.py +0 -0
  41. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/enums.py +0 -0
  42. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/env_processor.py +0 -0
  43. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/environment_helpers.py +0 -0
  44. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/ergonomics.py +0 -0
  45. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/exceptions.py +0 -0
  46. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/fingerprint.py +0 -0
  47. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/functions.py +0 -0
  48. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/graph.py +0 -0
  49. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/graph_models.py +0 -0
  50. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/having_normalization.py +0 -0
  51. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/internal.py +0 -0
  52. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/__init__.py +0 -0
  53. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/author.py +0 -0
  54. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/build.py +0 -0
  55. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/build_environment.py +0 -0
  56. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/core.py +0 -0
  57. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/datasource.py +0 -0
  58. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/environment.py +0 -0
  59. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/execute.py +0 -0
  60. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimization.py +0 -0
  61. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/__init__.py +0 -0
  62. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/base_optimization.py +0 -0
  63. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/collapse_single_parent.py +0 -0
  64. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/filtered_aggregate.py +0 -0
  65. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/filtered_count_join.py +0 -0
  66. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/full_join_lowering.py +0 -0
  67. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/hide_unused_concept.py +0 -0
  68. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/inline_datasource.py +0 -0
  69. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/join_hoist.py +0 -0
  70. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/join_upgrade.py +0 -0
  71. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/keyless_full_join.py +0 -0
  72. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/merge_irrelevant_group_by.py +0 -0
  73. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/null_safe_join.py +0 -0
  74. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/order_inner_joins.py +0 -0
  75. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/predicate_pushdown.py +0 -0
  76. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/semi_join_pushdown.py +0 -0
  77. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/strip_redundant_not_null.py +0 -0
  78. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/union_dim_pushdown.py +0 -0
  79. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/utils.py +0 -0
  80. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/value_set_join_upgrade.py +0 -0
  81. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/README.md +0 -0
  82. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/VIRTUAL_UNNEST.md +0 -0
  83. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/__init__.py +0 -0
  84. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/aggregate_rollup.py +0 -0
  85. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/concept_strategies_v4.py +0 -0
  86. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/condition_utility.py +0 -0
  87. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/constants.py +0 -0
  88. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/discovery_utility.py +0 -0
  89. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/discovery_validation.py +0 -0
  90. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/grain_utility.py +0 -0
  91. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/join_resolution.py +0 -0
  92. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/model_ambiguity.py +0 -0
  93. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/__init__.py +0 -0
  94. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/common.py +0 -0
  95. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/presence_probe.py +0 -0
  96. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
  97. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/condition_routing.py +0 -0
  98. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +0 -0
  99. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/datasource_nodes.py +0 -0
  100. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/source_scoring.py +0 -0
  101. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_merge_node.py +0 -0
  102. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_node.py +0 -0
  103. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/README.md +0 -0
  104. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/__init__.py +0 -0
  105. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/base_node.py +0 -0
  106. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/filter_node.py +0 -0
  107. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/group_node.py +0 -0
  108. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/merge_node.py +0 -0
  109. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/recursive_node.py +0 -0
  110. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/select_node_v2.py +0 -0
  111. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/subselect_node.py +0 -0
  112. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/union_node.py +0 -0
  113. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/unnest_node.py +0 -0
  114. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/window_node.py +0 -0
  115. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/rowset_islanding.py +0 -0
  116. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/utility.py +0 -0
  117. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/__init__.py +0 -0
  118. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/concept_graph.py +0 -0
  119. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/condition_injection.py +0 -0
  120. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/condition_placement.py +0 -0
  121. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/constants.py +0 -0
  122. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/edges.py +0 -0
  123. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/functional_dependency.py +0 -0
  124. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/group_behaviors.py +0 -0
  125. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/group_graph.py +0 -0
  126. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/group_rules.py +0 -0
  127. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/history.py +0 -0
  128. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/models.py +0 -0
  129. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_build.py +0 -0
  130. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_coalescing.py +0 -0
  131. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_model.py +0 -0
  132. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_obligations.py +0 -0
  133. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_search.py +0 -0
  134. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_topology.py +0 -0
  135. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/projection.py +0 -0
  136. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/source_planning.py +0 -0
  137. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/staged_where.py +0 -0
  138. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/strategy_builder.py +0 -0
  139. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/__init__.py +0 -0
  140. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/aggregate.py +0 -0
  141. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/basic.py +0 -0
  142. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/common.py +0 -0
  143. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/condition_sources.py +0 -0
  144. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/constant.py +0 -0
  145. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/dispatch.py +0 -0
  146. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/filter.py +0 -0
  147. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/group_to.py +0 -0
  148. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/multiselect.py +0 -0
  149. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/nested_select.py +0 -0
  150. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/recursive.py +0 -0
  151. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/root.py +0 -0
  152. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/rowset.py +0 -0
  153. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/subselect.py +0 -0
  154. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/union.py +0 -0
  155. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/union_select.py +0 -0
  156. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/unnest.py +0 -0
  157. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/window.py +0 -0
  158. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/query_processor.py +0 -0
  159. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/scope_diagnostics.py +0 -0
  160. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/README.md +0 -0
  161. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/__init__.py +0 -0
  162. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/author.py +0 -0
  163. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/build.py +0 -0
  164. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/common.py +0 -0
  165. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/execute.py +0 -0
  166. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/table_processor.py +0 -0
  167. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/utility.py +0 -0
  168. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/README.md +0 -0
  169. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/__init__.py +0 -0
  170. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/common.py +0 -0
  171. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/concept.py +0 -0
  172. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/datasource.py +0 -0
  173. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/environment.py +0 -0
  174. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/fix.py +0 -0
  175. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/rows.py +0 -0
  176. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/where_scope_normalization.py +0 -0
  177. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/__init__.py +0 -0
  178. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/bigquery_engine.py +0 -0
  179. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/bigquery_persist.py +0 -0
  180. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/bigquery_staging.py +0 -0
  181. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/cancel.py +0 -0
  182. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/clickhouse.py +0 -0
  183. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/clickhouse_chdb.py +0 -0
  184. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/config.py +0 -0
  185. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/dataframe.py +0 -0
  186. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/duckdb_uv.py +0 -0
  187. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/enums.py +0 -0
  188. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/metadata.py +0 -0
  189. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/mock.py +0 -0
  190. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/postgres.py +0 -0
  191. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/presto.py +0 -0
  192. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/python_source.py +0 -0
  193. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/results.py +0 -0
  194. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/snowflake.py +0 -0
  195. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/source_pushdown.py +0 -0
  196. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/sql_server.py +0 -0
  197. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/sqlite.py +0 -0
  198. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/engine.py +0 -0
  199. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/__init__.py +0 -0
  200. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/config.py +0 -0
  201. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/envs.py +0 -0
  202. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/model_fingerprint.py +0 -0
  203. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/report.py +0 -0
  204. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/AGENTS.md +0 -0
  205. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/CLAUDE.md +0 -0
  206. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/__init__.py +0 -0
  207. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/cache.py +0 -0
  208. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/exceptions.py +0 -0
  209. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/isolation.py +0 -0
  210. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/partitions.py +0 -0
  211. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/persistence.py +0 -0
  212. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/phases.py +0 -0
  213. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/snapshot.py +0 -0
  214. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/state_store.py +0 -0
  215. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/watermarks.py +0 -0
  216. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/executor.py +0 -0
  217. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/hooks/__init__.py +0 -0
  218. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/hooks/base_hook.py +0 -0
  219. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/hooks/graph_hook.py +0 -0
  220. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/hooks/query_debugger.py +0 -0
  221. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/__init__.py +0 -0
  222. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/adapters.py +0 -0
  223. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/arrow.py +0 -0
  224. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/click_support.py +0 -0
  225. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/contract.py +0 -0
  226. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/describe.py +0 -0
  227. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/errors.py +0 -0
  228. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/runner.py +0 -0
  229. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/sinks.py +0 -0
  230. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/metadata/__init__.py +0 -0
  231. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parser.py +0 -0
  232. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/README.md +0 -0
  233. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/__init__.py +0 -0
  234. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/common.py +0 -0
  235. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/config.py +0 -0
  236. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/exceptions.py +0 -0
  237. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/helpers.py +0 -0
  238. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/parse_engine_v2.py +0 -0
  239. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/pretty.py +0 -0
  240. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/render.py +0 -0
  241. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/trilogy.lark +0 -0
  242. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/README.md +0 -0
  243. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/__init__.py +0 -0
  244. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/concept_factory.py +0 -0
  245. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/concept_syntax.py +0 -0
  246. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/errors.py +0 -0
  247. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/function_syntax.py +0 -0
  248. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/hydration.py +0 -0
  249. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/import_service.py +0 -0
  250. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/lark_backend.py +0 -0
  251. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/model.py +0 -0
  252. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/pest_backend.py +0 -0
  253. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rowset_semantics.py +0 -0
  254. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/__init__.py +0 -0
  255. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/chart_rules.py +0 -0
  256. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/concept_rules.py +0 -0
  257. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/conditional_rules.py +0 -0
  258. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/datasource_rules.py +0 -0
  259. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/expression_rules.py +0 -0
  260. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/function_definition_rules.py +0 -0
  261. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/function_rules.py +0 -0
  262. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/import_rules.py +0 -0
  263. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/merge_rules.py +0 -0
  264. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/multiselect_rules.py +0 -0
  265. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/operational_rules.py +0 -0
  266. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/order_rules.py +0 -0
  267. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/persist_rules.py +0 -0
  268. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/rawsql_rules.py +0 -0
  269. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/rowset_rules.py +0 -0
  270. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/select_rules.py +0 -0
  271. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/select_statement_rules.py +0 -0
  272. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/statement_rules.py +0 -0
  273. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/subselect_rules.py +0 -0
  274. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/token_rules.py +0 -0
  275. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/tvf_rules.py +0 -0
  276. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/type_rules.py +0 -0
  277. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules_context.py +0 -0
  278. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/select_finalize.py +0 -0
  279. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/semantic_scope.py +0 -0
  280. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/semantic_state.py +0 -0
  281. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/statement_planner.py +0 -0
  282. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/statement_plans.py +0 -0
  283. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/symbols.py +0 -0
  284. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/syntax.py +0 -0
  285. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/py.typed +0 -0
  286. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/render.py +0 -0
  287. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/__init__.py +0 -0
  288. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/altair_renderer.py +0 -0
  289. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/base.py +0 -0
  290. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/chart_theme.py +0 -0
  291. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/rich_types.py +0 -0
  292. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/terminal_renderer.py +0 -0
  293. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/theme.py +0 -0
  294. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/__init__.py +0 -0
  295. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/backends/__init__.py +0 -0
  296. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/backends/base.py +0 -0
  297. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/backends/html.py +0 -0
  298. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/backends/png.py +0 -0
  299. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/charts.py +0 -0
  300. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/document.py +0 -0
  301. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/runner.py +0 -0
  302. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/tables.py +0 -0
  303. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/AGENTS.md +0 -0
  304. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/CLAUDE.md +0 -0
  305. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/README.md +0 -0
  306. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/__init__.py +0 -0
  307. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent.py +0 -0
  308. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info.py +0 -0
  309. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info_docs/__init__.py +0 -0
  310. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info_docs/cli.py +0 -0
  311. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info_docs/content.py +0 -0
  312. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info_docs/directory.py +0 -0
  313. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_sessions.py +0 -0
  314. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_sql_tools.py +0 -0
  315. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_tools.py +0 -0
  316. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/click_utils.py +0 -0
  317. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/cloud.py +0 -0
  318. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/cloud_models.py +0 -0
  319. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/common.py +0 -0
  320. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/database.py +0 -0
  321. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/README.md +0 -0
  322. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/build.sh +0 -0
  323. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/examples/basic_usage.rs +0 -0
  324. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/directory_resolver.rs +0 -0
  325. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/graph.rs +0 -0
  326. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/lib.rs +0 -0
  327. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/main.rs +0 -0
  328. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/network_search.rs +0 -0
  329. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/parser.rs +0 -0
  330. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/python_bindings.rs +0 -0
  331. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/resolver.rs +0 -0
  332. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/trilogy.pest +0 -0
  333. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/trilogy_parser.rs +0 -0
  334. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/base.preql +0 -0
  335. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/cli_integration.rs +0 -0
  336. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/customer.preql +0 -0
  337. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/main.preql +0 -0
  338. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/orders.preql +0 -0
  339. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/public_api.rs +0 -0
  340. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/test_data/base.preql +0 -0
  341. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/test_data/consumer.preql +0 -0
  342. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency.py +0 -0
  343. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display.py +0 -0
  344. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_core.py +0 -0
  345. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_execution.py +0 -0
  346. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_ingest.py +0 -0
  347. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_init.py +0 -0
  348. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_models.py +0 -0
  349. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_parallel.py +0 -0
  350. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_refresh.py +0 -0
  351. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_validation.py +0 -0
  352. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/env_commands.py +0 -0
  353. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/environment.py +0 -0
  354. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/explore.py +0 -0
  355. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/explore_seen.py +0 -0
  356. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file.py +0 -0
  357. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file_helpers/__init__.py +0 -0
  358. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file_helpers/backends.py +0 -0
  359. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file_helpers/preql_description.py +0 -0
  360. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file_helpers/preql_validation.py +0 -0
  361. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/fmt.py +0 -0
  362. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest.py +0 -0
  363. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/__init__.py +0 -0
  364. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/fk_inference.py +0 -0
  365. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/foreign_keys.py +0 -0
  366. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/formatting.py +0 -0
  367. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/introspection.py +0 -0
  368. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/typing.py +0 -0
  369. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/init.py +0 -0
  370. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/parallel_execution.py +0 -0
  371. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/plan.py +0 -0
  372. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/project_config.py +0 -0
  373. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/public.py +0 -0
  374. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/refresh.py +0 -0
  375. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/render.py +0 -0
  376. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/run.py +0 -0
  377. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve.py +0 -0
  378. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/__init__.py +0 -0
  379. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/connection_spec.py +0 -0
  380. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/file_discovery.py +0 -0
  381. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/index_generation.py +0 -0
  382. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/jobs.py +0 -0
  383. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/models.py +0 -0
  384. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/state_cache.py +0 -0
  385. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/state_computation.py +0 -0
  386. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/studio_bundle.py +0 -0
  387. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/single_execution.py +0 -0
  388. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/source.py +0 -0
  389. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/source_identity.py +0 -0
  390. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/state.py +0 -0
  391. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/testing.py +0 -0
  392. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/trilogy.py +0 -0
  393. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/validate_agent.py +0 -0
  394. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/staging.py +0 -0
  395. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/__init__.py +0 -0
  396. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/chart.preql +0 -0
  397. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/color.preql +0 -0
  398. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/currency.preql +0 -0
  399. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/date.preql +0 -0
  400. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/display.preql +0 -0
  401. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/geography.preql +0 -0
  402. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/metric.preql +0 -0
  403. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/money.preql +0 -0
  404. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/net.preql +0 -0
  405. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/ranking.preql +0 -0
  406. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/report.preql +0 -0
  407. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/semantic.preql +0 -0
  408. {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/utility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytrilogy
3
- Version: 0.3.332
3
+ Version: 0.3.333
4
4
  Classifier: Programming Language :: Python
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Programming Language :: Python :: 3.9
@@ -7,7 +7,7 @@ if TYPE_CHECKING:
7
7
  from trilogy.executor import Executor
8
8
  from trilogy.parser import parse
9
9
 
10
- __version__ = "0.3.332"
10
+ __version__ = "0.3.333"
11
11
 
12
12
  __all__ = [
13
13
  "CONFIG",
@@ -38,6 +38,7 @@ from trilogy.core.enums import (
38
38
  FunctionClass,
39
39
  FunctionType,
40
40
  GroupMode,
41
+ JoinType,
41
42
  Modifier,
42
43
  Ordering,
43
44
  PersistMode,
@@ -191,8 +192,12 @@ def nullable_from_str(value: object) -> bool:
191
192
  return str(value).strip().upper() != "NO"
192
193
 
193
194
 
194
- def null_wrapper(lval: str, rval: str, modifiers: list[Modifier]) -> str:
195
-
195
+ def null_wrapper(
196
+ lval: str, rval: str, modifiers: list[Modifier], jointype: JoinType | None = None
197
+ ) -> str:
198
+ # ``jointype`` is the join this key belongs to. The base expansion is legal
199
+ # under every join type and ignores it; dialects that restrict what a FULL
200
+ # OUTER JOIN's ON clause may contain (BigQuery) key off it.
196
201
  if Modifier.NULLABLE in modifiers:
197
202
  return f"({lval} = {rval} or ({lval} is null and {rval} is null))"
198
203
  return f"{lval} = {rval}"
@@ -1,3 +1,4 @@
1
+ import re
1
2
  from collections.abc import Callable, Iterable
2
3
  from typing import TYPE_CHECKING, ClassVar
3
4
 
@@ -7,6 +8,8 @@ from trilogy.constants import logger
7
8
  from trilogy.core.enums import (
8
9
  AddressType,
9
10
  FunctionType,
11
+ JoinType,
12
+ Modifier,
10
13
  UnnestMode,
11
14
  )
12
15
  from trilogy.core.models.core import (
@@ -22,6 +25,7 @@ from trilogy.dialect.base import (
22
25
  TableColumn,
23
26
  safe_quote,
24
27
  )
28
+ from trilogy.dialect.base import null_wrapper as base_null_wrapper
25
29
  from trilogy.dialect.bigquery_engine import BigQueryConnection
26
30
  from trilogy.dialect.bigquery_staging import BigQueryPythonStaging
27
31
 
@@ -57,6 +61,47 @@ def render_geo_transform(args: list[str]) -> str:
57
61
  return f"{args[0]}"
58
62
 
59
63
 
64
+ # A bare column reference, quoted the way every join key this module renders is
65
+ # (`alias`.`column`, or a bare `column` when the key is the rendering branch's
66
+ # own). Anything else -- a COALESCE over several sources, a CAST, a function --
67
+ # is an expression as far as BigQuery's join planner is concerned.
68
+ FIELD_REFERENCE = re.compile(r"`[^`]+`(?:\.`[^`]+`)*")
69
+
70
+
71
+ def null_wrapper(
72
+ lval: str, rval: str, modifiers: list[Modifier], jointype: JoinType | None = None
73
+ ) -> str:
74
+ """Null-safe join key, in a shape BigQuery's FULL join planner accepts.
75
+
76
+ A FULL OUTER JOIN's ON clause must contain "an equality of fields from both
77
+ sides of the join". A top-level ``X = Y`` satisfies that whatever X and Y
78
+ are, but the base dialect's null-safe expansion
79
+ ``(l = r or (l is null and r is null))`` is an OR, and BigQuery only reads
80
+ an OR back as a join key while *both* operands are plain fields -- an
81
+ expression on either side is rejected, as is ``IS NOT DISTINCT FROM``. The
82
+ expression case is the ordinary one: a key merged across several
83
+ row-preserving sources renders as ``coalesce(a.x, b.x, c.x) = d.x``.
84
+
85
+ ``TO_JSON_STRING`` on both sides restores a top-level equality and is
86
+ null-safe for free (NULL encodes as bare ``null``, the string 'null' as
87
+ ``"null"``). It costs a computed hash-join key, so field-keyed joins keep
88
+ the cheaper expansion. Encoded FLOAT64s compare textually, so NaN matches
89
+ itself and ``-0.0`` stops matching ``0.0``; a float join key is
90
+ pathological, and the alternative is a query that does not run.
91
+
92
+ Only FULL is restricted, and only the OR form -- everything else falls
93
+ through to the base wrapper. Details, and the planner fixes that would make
94
+ this dead code, in ``docs/handoff_bigquery_full_join_merged_keys.md``.
95
+ """
96
+ if (
97
+ jointype is JoinType.FULL
98
+ and Modifier.NULLABLE in modifiers
99
+ and not (FIELD_REFERENCE.fullmatch(lval) and FIELD_REFERENCE.fullmatch(rval))
100
+ ):
101
+ return f"TO_JSON_STRING({lval}) = TO_JSON_STRING({rval})"
102
+ return base_null_wrapper(lval, rval, modifiers, jointype)
103
+
104
+
60
105
  FUNCTION_MAP = {
61
106
  FunctionType.COUNT: lambda x, types: f"count({x[0]})",
62
107
  FunctionType.SUM: lambda x, types: f"sum({x[0]})",
@@ -213,6 +258,7 @@ class BigqueryDialect(BaseDialect):
213
258
  **FUNCTION_GRAIN_MATCH_MAP,
214
259
  }
215
260
  QUOTE_CHARACTER = "`"
261
+ NULL_WRAPPER = staticmethod(null_wrapper)
216
262
  SQL_TEMPLATE = BQ_SQL_TEMPLATE
217
263
  CREATE_TABLE_SQL_TEMPLATE = BQ_CREATE_TABLE_SQL_TEMPLATE
218
264
  UNNEST_MODE = UnnestMode.CROSS_JOIN_UNNEST
@@ -20,6 +20,10 @@ from trilogy.core.models.execute import (
20
20
  _datasource_column_for_concept,
21
21
  )
22
22
 
23
+ # Renders one join key. The join type is passed because dialects may restrict
24
+ # what a given join's ON clause can contain (BigQuery, FULL joins).
25
+ NullWrapper = Callable[[str, str, list[Modifier], JoinType], str]
26
+
23
27
 
24
28
  def render_unnest(
25
29
  unnest_mode: UnnestMode,
@@ -259,7 +263,7 @@ def _build_joinkeys(
259
263
  quote_character: str,
260
264
  render_expr_func: Callable,
261
265
  use_map: dict[str, set[str]],
262
- null_wrapper: Callable[[str, str, list[Modifier]], str],
266
+ null_wrapper: NullWrapper,
263
267
  ) -> list[str]:
264
268
  if not join.joinkey_pairs:
265
269
  return ["1=1"]
@@ -298,6 +302,7 @@ def _build_joinkeys(
298
302
  for pair in pairs
299
303
  for modifier in _collect_modifiers(pair, join)
300
304
  ],
305
+ join.jointype,
301
306
  )
302
307
  )
303
308
  continue
@@ -324,6 +329,7 @@ def _build_joinkeys(
324
329
  unique_renders[0],
325
330
  right_render,
326
331
  _collect_modifiers(sub_pairs[0], join),
332
+ join.jointype,
327
333
  )
328
334
  )
329
335
  return result or ["1=1"]
@@ -344,7 +350,7 @@ def render_join(
344
350
  ],
345
351
  cte: CTE,
346
352
  use_map: dict[str, set[str]],
347
- null_wrapper: Callable[[str, str, list[Modifier]], str],
353
+ null_wrapper: NullWrapper,
348
354
  unnest_mode: UnnestMode = UnnestMode.CROSS_APPLY,
349
355
  ) -> str | None:
350
356
  if isinstance(join, InstantiatedUnnestJoin):
@@ -22,6 +22,7 @@ from trilogy.core.enums import (
22
22
  AddressType,
23
23
  FunctionType,
24
24
  GroupMode,
25
+ JoinType,
25
26
  Modifier,
26
27
  UnnestMode,
27
28
  )
@@ -37,6 +38,7 @@ def null_wrapper(
37
38
  lval: str,
38
39
  rval: str,
39
40
  modifiers: list[Modifier],
41
+ jointype: JoinType | None = None,
40
42
  ) -> str:
41
43
 
42
44
  if Modifier.NULLABLE in modifiers:
@@ -8,6 +8,7 @@ from trilogy.core.enums import (
8
8
  CreateMode,
9
9
  DatePart,
10
10
  FunctionType,
11
+ JoinType,
11
12
  Modifier,
12
13
  Ordering,
13
14
  )
@@ -73,7 +74,9 @@ def render_ordering(rendered: str, order: Ordering) -> str:
73
74
  return f"{rendered} {direction}"
74
75
 
75
76
 
76
- def null_safe_join_key(lval: str, rval: str, modifiers: list[Modifier]) -> str:
77
+ def null_safe_join_key(
78
+ lval: str, rval: str, modifiers: list[Modifier], jointype: JoinType | None = None
79
+ ) -> str:
77
80
  # `<=>` is MySQL's null-safe equality. The base dialect's OR-expansion is
78
81
  # equivalent but never index-assisted, and every lowered FULL join emits one
79
82
  # of these per key.
@@ -535,7 +535,7 @@ dependencies = [
535
535
 
536
536
  [[package]]
537
537
  name = "trilogy-parser"
538
- version = "0.3.332"
538
+ version = "0.3.333"
539
539
  dependencies = [
540
540
  "clap",
541
541
  "pathdiff",
@@ -4,7 +4,7 @@ name = "trilogy-parser"
4
4
  # crates.io releases ride the same stream (see pythonpublish.yml), so a
5
5
  # published crate version always corresponds to the pytrilogy release
6
6
  # whose grammar it carries.
7
- version = "0.3.332"
7
+ version = "0.3.333"
8
8
  edition = "2021"
9
9
  description = "Parser and import/datasource dependency resolver for the Trilogy language"
10
10
  license = "MIT"
File without changes
File without changes
File without changes