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.
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/PKG-INFO +1 -1
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/__init__.py +1 -1
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/base.py +7 -2
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/bigquery.py +46 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/common.py +8 -2
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/duckdb.py +2 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/mysql.py +4 -1
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/Cargo.lock +1 -1
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/Cargo.toml +1 -1
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/.scripts/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/.scripts/build_backend.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/.scripts/sync_version.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/LICENSE.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/pyproject.toml +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/constants.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/conversation.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/enums.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/execute.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/models.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/prompts.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/anthropic.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/base.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/deepseek.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/google.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/openai.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/openrouter.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/providers/utils.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/ai/syntax_examples.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/authoring/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/authoring/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/constants.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/constants.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/domain_graph.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/domain_validation.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/enums.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/env_processor.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/environment_helpers.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/ergonomics.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/exceptions.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/fingerprint.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/functions.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/graph.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/graph_models.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/having_normalization.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/internal.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/author.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/build.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/build_environment.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/core.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/datasource.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/environment.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/models/execute.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimization.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/base_optimization.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/collapse_single_parent.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/filtered_aggregate.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/filtered_count_join.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/full_join_lowering.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/hide_unused_concept.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/inline_datasource.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/join_hoist.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/join_upgrade.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/keyless_full_join.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/merge_irrelevant_group_by.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/null_safe_join.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/order_inner_joins.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/predicate_pushdown.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/semi_join_pushdown.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/strip_redundant_not_null.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/union_dim_pushdown.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/utils.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/value_set_join_upgrade.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/VIRTUAL_UNNEST.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/aggregate_rollup.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/concept_strategies_v4.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/condition_utility.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/constants.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/discovery_utility.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/discovery_validation.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/grain_utility.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/join_resolution.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/model_ambiguity.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/common.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/presence_probe.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/condition_routing.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/datasource_nodes.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_helpers/source_scoring.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_merge_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/base_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/filter_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/group_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/merge_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/recursive_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/select_node_v2.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/subselect_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/union_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/unnest_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/nodes/window_node.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/rowset_islanding.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/utility.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/concept_graph.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/condition_injection.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/condition_placement.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/constants.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/edges.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/functional_dependency.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/group_behaviors.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/group_graph.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/group_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/history.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/models.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_build.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_coalescing.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_model.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_obligations.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_search.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_topology.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/projection.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/source_planning.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/staged_where.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/strategy_builder.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/aggregate.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/basic.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/common.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/condition_sources.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/constant.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/dispatch.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/filter.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/group_to.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/multiselect.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/nested_select.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/recursive.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/root.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/rowset.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/subselect.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/union.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/union_select.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/unnest.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/window.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/query_processor.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/scope_diagnostics.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/author.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/build.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/common.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/statements/execute.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/table_processor.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/utility.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/common.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/concept.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/datasource.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/environment.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/fix.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/validation/rows.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/where_scope_normalization.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/bigquery_engine.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/bigquery_persist.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/bigquery_staging.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/cancel.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/clickhouse.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/clickhouse_chdb.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/config.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/dataframe.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/duckdb_uv.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/enums.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/metadata.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/mock.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/postgres.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/presto.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/python_source.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/results.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/snowflake.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/source_pushdown.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/sql_server.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/dialect/sqlite.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/engine.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/config.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/envs.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/model_fingerprint.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/report.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/AGENTS.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/CLAUDE.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/cache.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/exceptions.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/isolation.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/partitions.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/persistence.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/phases.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/snapshot.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/state_store.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/execution/state/watermarks.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/executor.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/hooks/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/hooks/base_hook.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/hooks/graph_hook.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/hooks/query_debugger.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/adapters.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/arrow.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/click_support.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/contract.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/describe.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/errors.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/runner.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/io/sinks.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/metadata/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parser.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/common.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/config.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/exceptions.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/helpers.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/parse_engine_v2.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/pretty.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/render.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/trilogy.lark +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/concept_factory.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/concept_syntax.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/errors.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/function_syntax.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/hydration.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/import_service.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/lark_backend.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/model.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/pest_backend.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rowset_semantics.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/chart_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/concept_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/conditional_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/datasource_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/expression_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/function_definition_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/function_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/import_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/merge_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/multiselect_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/operational_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/order_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/persist_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/rawsql_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/rowset_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/select_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/select_statement_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/statement_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/subselect_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/token_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/tvf_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules/type_rules.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/rules_context.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/select_finalize.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/semantic_scope.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/semantic_state.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/statement_planner.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/statement_plans.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/symbols.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/parsing/v2/syntax.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/py.typed +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/render.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/altair_renderer.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/base.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/chart_theme.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/rich_types.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/terminal_renderer.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/rendering/theme.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/backends/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/backends/base.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/backends/html.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/backends/png.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/charts.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/document.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/runner.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/report/tables.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/AGENTS.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/CLAUDE.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info_docs/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info_docs/cli.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info_docs/content.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_info_docs/directory.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_sessions.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_sql_tools.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/agent_tools.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/click_utils.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/cloud.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/cloud_models.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/common.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/database.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/README.md +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/build.sh +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/examples/basic_usage.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/directory_resolver.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/graph.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/lib.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/main.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/network_search.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/parser.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/python_bindings.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/resolver.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/trilogy.pest +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/src/trilogy_parser.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/base.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/cli_integration.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/customer.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/main.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/orders.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/public_api.rs +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/test_data/base.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency/tests/test_data/consumer.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/dependency.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_core.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_execution.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_ingest.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_init.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_models.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_parallel.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_refresh.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/display_validation.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/env_commands.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/environment.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/explore.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/explore_seen.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file_helpers/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file_helpers/backends.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file_helpers/preql_description.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/file_helpers/preql_validation.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/fmt.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/fk_inference.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/foreign_keys.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/formatting.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/introspection.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/ingest_helpers/typing.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/init.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/parallel_execution.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/plan.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/project_config.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/public.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/refresh.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/render.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/run.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/connection_spec.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/file_discovery.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/index_generation.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/jobs.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/models.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/state_cache.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/state_computation.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/serve_helpers/studio_bundle.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/single_execution.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/source.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/source_identity.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/state.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/testing.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/trilogy.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/scripts/validate_agent.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/staging.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/__init__.py +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/chart.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/color.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/currency.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/date.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/display.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/geography.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/metric.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/money.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/net.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/ranking.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/report.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/std/semantic.preql +0 -0
- {pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/utility.py +0 -0
|
@@ -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(
|
|
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:
|
|
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:
|
|
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(
|
|
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.
|
|
@@ -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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/collapse_single_parent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/merge_irrelevant_group_by.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/strip_redundant_not_null.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/optimizations/value_set_join_upgrade.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/presence_probe.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_merge_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/node_generators/select_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/condition_injection.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/condition_placement.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/functional_dependency.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/group_behaviors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_coalescing.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_obligations.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/network_topology.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/source_planning.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_helper/strategy_builder.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/__init__.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/aggregate.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/common.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/constant.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/dispatch.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/filter.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/group_to.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/multiselect.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/nested_select.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/recursive.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/rowset.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/subselect.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/union_select.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/unnest.py
RENAMED
|
File without changes
|
{pytrilogy-0.3.332 → pytrilogy-0.3.333}/trilogy/core/processing/v4_node_generators/window.py
RENAMED
|
File without changes
|
|
File without changes
|