diff --git a/demos/notebooks/4_tpch.ipynb b/demos/notebooks/4_tpch.ipynb index bc08f1602..76d4f5ef2 100644 --- a/demos/notebooks/4_tpch.ipynb +++ b/demos/notebooks/4_tpch.ipynb @@ -1678,7 +1678,7 @@ " .CALCULATE(global_avg_balance=AVG(selected_customers.WHERE(account_balance > 0.0).account_balance))\n", " .customers\n", " .CALCULATE(cntry_code=phone[:2])\n", - " .WHERE(is_selected_code & (account_balance > global_avg_balance) & (COUNT(orders) == 0))\n", + " .WHERE(is_selected_code & (account_balance > global_avg_balance) & HASNOT(orders))\n", " .PARTITION(\n", " name=\"countries\",\n", " by=cntry_code,\n", @@ -1695,7 +1695,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "pydough", "language": "python", "name": "python3" }, diff --git a/pydough/conversion/hybrid_syncretizer.py b/pydough/conversion/hybrid_syncretizer.py index 0460b07e0..92966e107 100644 --- a/pydough/conversion/hybrid_syncretizer.py +++ b/pydough/conversion/hybrid_syncretizer.py @@ -224,7 +224,7 @@ def add_extension_semi_anti_count_filter( HybridFilter( tree.pipeline[-1], HybridFunctionExpr( - pydop.GRT if is_semi else pydop.EQU, + pydop.NEQ if is_semi else pydop.EQU, [agg_ref, literal_zero], BooleanType(), ), diff --git a/pydough/conversion/hybrid_tree.py b/pydough/conversion/hybrid_tree.py index 93201e0ac..266587e91 100644 --- a/pydough/conversion/hybrid_tree.py +++ b/pydough/conversion/hybrid_tree.py @@ -324,7 +324,7 @@ def insert_count_filter(self, child_idx: int, is_semi: bool) -> None: condition: HybridExpr if is_semi: condition = HybridFunctionExpr( - pydop.GRT, + pydop.NEQ, [result_ref, HybridLiteralExpr(Literal(0, NumericType()))], BooleanType(), ) @@ -588,6 +588,16 @@ def add_child( self ) + # Augment the reverse cardinality if the parent does not always exist. + if not reverse_cardinality.filters: + if len(self.pipeline) == 1 and isinstance( + self.pipeline[0], HybridPartition + ): + if self.parent is not None and not self.parent.always_exists(): + reverse_cardinality = reverse_cardinality.add_filter() + elif not self.always_exists(): + reverse_cardinality = reverse_cardinality.add_filter() + # Create and insert the new child connection. new_child_idx = len(self.children) connection: HybridConnection = HybridConnection( @@ -601,10 +611,6 @@ def add_child( ) self._children.append(connection) - # Augment the reverse cardinality if the parent does not always exist. - if (not reverse_cardinality.filters) and (not self.always_exists()): - connection.reverse_cardinality = reverse_cardinality.add_filter() - # If an operation prevents the child's presence from directly # filtering the current level, update its connection type to be either # SINGULAR or AGGREGATION, then insert a similar COUNT(*)/PRESENT diff --git a/pydough/conversion/join_aggregate_transpose.py b/pydough/conversion/join_aggregate_transpose.py new file mode 100644 index 000000000..35713192d --- /dev/null +++ b/pydough/conversion/join_aggregate_transpose.py @@ -0,0 +1,419 @@ +""" +Logical plan transformation to pull aggregates above joins when possible for +optimization purposes. +""" + +__all__ = ["pull_aggregates_above_joins"] + + +from collections.abc import Iterable + +import pydough.pydough_operators as pydop +from pydough.relational import ( + Aggregate, + CallExpression, + ColumnReference, + ColumnReferenceFinder, + Join, + JoinCardinality, + JoinType, + LiteralExpression, + Project, + RelationalExpression, + RelationalNode, + RelationalRoot, + RelationalShuttle, +) +from pydough.relational.rel_util import ( + add_input_name, + apply_substitution, + extract_equijoin_keys, +) +from pydough.types import BooleanType, NumericType + + +class JoinAggregateTransposeShuttle(RelationalShuttle): + """ + Relational shuttle Transposes joins and aggregates in the relational + algebra, moving the currently aggregate underneath the join to be above + the join instead for performance gains. + """ + + left_join_case_ops = { + pydop.COUNT, + pydop.MIN, + pydop.MAX, + pydop.SUM, + pydop.ANYTHING, + pydop.MEDIAN, + pydop.QUANTILE, + pydop.SAMPLE_VAR, + pydop.SAMPLE_STD, + pydop.POPULATION_VAR, + pydop.POPULATION_STD, + } + """ + The set of aggregation operators that are safe transpose under a LEFT JOIN + when the aggregate is on the right side of the join. + """ + + def __init__(self): + self.finder: ColumnReferenceFinder = ColumnReferenceFinder() + + def reset(self): + self.finder.reset() + + def visit_join(self, node: Join) -> RelationalNode: + result: RelationalNode | None = None + + # Attempt the transpose where the left input is an Aggregate. If it + # succeeded, use that as the result and recursively transform its + # inputs. + if isinstance(node.inputs[0], Aggregate): + result = self.join_aggregate_transpose(node, node.inputs[0], True) + if result is not None: + return result.accept_shuttle(self) + + # If the attempt failed, then attempt the transpose where the right + # input is an Aggregate. If this attempt succeeded, use that as the + # result and recursively transform its inputs. + if isinstance(node.inputs[1], Aggregate): + result = self.join_aggregate_transpose(node, node.inputs[1], False) + if result is not None: + return result.accept_shuttle(self) + + # If this attempt failed, fall back to the regular implementation. + return super().visit_join(node) + + def generate_name(self, base: str, used_names: Iterable[str]) -> str: + """ + Generates a new name for a column based on the base name and the existing + columns in the join. This is used to ensure that the new column names are + unique and do not conflict with existing names. + """ + if base not in used_names: + return base + i: int = 0 + while True: + name: str = f"{base}_{i}" + if name not in used_names: + return name + i += 1 + + def join_aggregate_transpose( + self, join: Join, aggregate: Aggregate, is_left_agg: bool + ) -> RelationalNode | None: + """ + Transposes a Join above an Aggregate into an Aggregate above a Join, + when possible and it would be better for performance to use the join + first to filter some of the rows before aggregating. + + Args: + `join`: the Join node above the Aggregate. + `aggregate`: the Aggregate node that is the left input to the Join. + `is_left_agg`: whether the Aggregate is the left input to the Join + (True) or the right input (False). + + Returns: + The new RelationalNode tree with the Join and Aggregate transposed, + or None if the transpose is not possible. + """ + join_name: str + agg_name: str + + # The cardinality with regards to the input being considered must be + # singular (unless the aggregations allow plural), and must be + # filtering (since the point of joining before aggregation is to reduce + # the number of rows to aggregate). + cardinality: JoinCardinality = ( + join.cardinality if is_left_agg else join.reverse_cardinality + ) + + left_join_case: bool = ( + join.join_type == JoinType.LEFT + and not is_left_agg + and all( + agg.op in JoinAggregateTransposeShuttle.left_join_case_ops + for agg in aggregate.aggregations.values() + ) + ) + + # Verify the cardinality meets the specified criteria, and that the join + # type is INNER/SEMI (since LEFT would not be filtering), where SEMI is + # only allowed if the aggregation is on the left. + if not ( + ( + (join.join_type == JoinType.INNER) + or (join.join_type == JoinType.SEMI and is_left_agg) + or left_join_case + ) + and cardinality.filters + and cardinality.singular + ): + return None + + # The alias of the input to the join that corresponds to the + # aggregate. + desired_alias: str | None = ( + join.default_input_aliases[0] + if is_left_agg + else join.default_input_aliases[1] + ) + + # Find all of the columns used in the join condition that come from the + # aggregate side of the join, and the other side as well. + self.finder.reset() + join.condition.accept(self.finder) + agg_condition_columns: set[ColumnReference] = { + col + for col in self.finder.get_column_references() + if col.input_name == desired_alias + } + + # Verify ALL of the condition columns from that side of the join are + # in the aggregate keys. + if len(agg_condition_columns) == 0 or any( + col.name not in aggregate.keys for col in agg_condition_columns + ): + return None + + # Extract the join key references from both sides of the join in the + # order they appear in the join condition. + agg_key_refs: list[ColumnReference] + non_agg_key_refs: list[ColumnReference] + agg_key_refs, non_agg_key_refs = extract_equijoin_keys(join) + if not is_left_agg: + agg_key_refs, non_agg_key_refs = non_agg_key_refs, agg_key_refs + + # Obtain the input aliases for both sides of the join, identified with + # which one belongs to the aggregate versus the other input. + agg_alias: str | None = ( + join.default_input_aliases[0] + if is_left_agg + else join.default_input_aliases[1] + ) + non_agg_alias: str | None = ( + join.default_input_aliases[1] + if is_left_agg + else join.default_input_aliases[0] + ) + + # Now that the transpose is deemed possible, if in the left join + # scenario, transform any `COUNT(*)` calls into `COUNT(col)`, where + # `col` is one of the aggregation keys. If this is not possible, then + # abort. Also abort if any of the aggregation keys are not used as + # equi-join keys. + sentinel_column: RelationalExpression | None = None + existing_sentinel: str | None = None + if left_join_case and any( + agg.op == pydop.COUNT and len(agg.inputs) == 0 + for agg in aggregate.aggregations.values() + ): + if (len(agg_key_refs) == 0) or (len(agg_key_refs) < len(aggregate.keys)): + return None + key_expr: RelationalExpression = aggregate.keys[agg_key_refs[0].name] + new_call: CallExpression = CallExpression( + pydop.COUNT, + NumericType(), + [key_expr], + ) + for agg_name, agg in aggregate.aggregations.items(): + if agg.op == pydop.COUNT and len(agg.inputs) == 0: + existing_sentinel = agg_name + aggregate.aggregations[agg_name] = new_call + + # Similarly, insert a COUNT(*) expression as a sentinel column to use + # to know when there was no matching row from the aggregate side. + if left_join_case and any( + agg.op == pydop.COUNT for agg in aggregate.aggregations.values() + ): + sentinel_join_name: str | None = None + if existing_sentinel is not None: + # If there is an existing sentinel column from before, use it. + for col_name, col_expr in join.columns.items(): + if ( + isinstance(col_expr, ColumnReference) + and col_expr.name == existing_sentinel + ): + sentinel_join_name = col_name + break + else: + # Otherwise, create a new COUNT(*) column for that purpose. + agg_name = self.generate_name("n_rows", aggregate.columns) + aggregate.columns[agg_name] = aggregate.aggregations[agg_name] = ( + CallExpression( + pydop.COUNT, + NumericType(), + [], + ) + ) + join_name = self.generate_name("n_rows", join.columns) + join.columns[join_name] = ColumnReference( + agg_name, NumericType(), agg_alias + ) + sentinel_join_name = join_name + assert sentinel_join_name is not None + sentinel_column = ColumnReference(sentinel_join_name, NumericType()) + + # Identify the new cardinality of the join if the aggregate is no longer + # happening before the join. + new_cardinality: JoinCardinality = join.cardinality + new_reverse_cardinality: JoinCardinality = join.reverse_cardinality + if is_left_agg: + new_reverse_cardinality = new_reverse_cardinality.add_plural() + else: + new_cardinality = new_cardinality.add_plural() + + # Build up the new columns for the join and aggregate, as well as a + # substitution mapping to remap references from the old join to the new + # join and aggregate, and another to remap references used by the join + # condition. The columns for the new aggregate will start out with the + # same keys and aggregations as the old one, since the columns from the + # aggregate's input will be passed through the join without any + # renaming, then all of the other columns from the non-aggregate side of + # the join will be added as ANYTHING aggregations to the new aggregate + # so that they can be referenced in the final projection. + new_join_columns: dict[str, RelationalExpression] = {} + new_aggregate_keys: dict[str, RelationalExpression] = dict(aggregate.keys) + new_aggregate_aggs: dict[str, CallExpression] = dict(aggregate.aggregations) + new_agg_names: set[str] = set(aggregate.columns) + join_sub: dict[RelationalExpression, RelationalExpression] = {} + join_cond_sub: dict[RelationalExpression, RelationalExpression] = {} + for key_name, key_expr in aggregate.keys.items(): + join_cond_sub[ColumnReference(key_name, key_expr.data_type, agg_alias)] = ( + add_input_name(key_expr, agg_alias) + ) + + # Extract the node that is the input to the aggregate, as well as the + # other input to the join, as these shall be the two inputs to the new + # join. + agg_input: RelationalNode = aggregate.inputs[0] + non_agg_input: RelationalNode = ( + join.inputs[1] if is_left_agg else join.inputs[0] + ) + new_join_inputs: list[RelationalNode] = ( + [agg_input, non_agg_input] if is_left_agg else [non_agg_input, agg_input] + ) + + # Start by placing all of the columns from the aggregate node's input + # into the join's columns so that the aggregate keys/aggregations can + # refer to them with the same names, without any renaming caused by + # conflicts. + for col_name, col_expr in agg_input.columns.items(): + join_name = self.generate_name(col_name, new_join_columns) + new_join_columns[join_name] = add_input_name(col_expr, agg_alias) + + # Add substitution remappings for the aggregate's output columns so that + # they are correctly renamed as regular references in the final + # projection, which will use terms from the original join's output but + # with this substitution applied to them. + for col_name, col_expr in aggregate.columns.items(): + join_sub[ColumnReference(col_name, col_expr.data_type, agg_alias)] = ( + ColumnReference(col_name, col_expr.data_type) + ) + + # Iterate through all of the columns from the non-aggregate side of + # the join, adding them as ANYTHING aggregations to the new aggregate + # so that they can be referenced in the final projection, while also + # adding them as regular columns to the new join. + for col_name, col_expr in non_agg_input.columns.items(): + join_name = self.generate_name(col_name, new_join_columns) + new_join_columns[join_name] = ColumnReference( + col_name, col_expr.data_type, non_agg_alias + ) + agg_name = self.generate_name(col_name, new_agg_names) + new_aggregate_aggs[agg_name] = CallExpression( + pydop.ANYTHING, + col_expr.data_type, + [ColumnReference(join_name, col_expr.data_type)], + ) + new_agg_names.add(agg_name) + join_sub[ColumnReference(col_name, col_expr.data_type, non_agg_alias)] = ( + ColumnReference(agg_name, col_expr.data_type) + ) + + # For each join key from the non-aggregate side, alter its substitution + # to map it to the corresponding key from the aggregate side. + for agg_key, non_agg_key in zip(agg_key_refs, non_agg_key_refs): + # If in the left join situation, also switch the aggregation key + # to point to the equivalent value from the non-aggregate side of + # the left join. + if left_join_case: + lhs_join_key_ref = join_sub[non_agg_key] + assert isinstance(lhs_join_key_ref, ColumnReference) + lhs_join_key_agg: CallExpression = new_aggregate_aggs[ + lhs_join_key_ref.name + ] + assert lhs_join_key_agg.op == pydop.ANYTHING + new_aggregate_keys[agg_key.name] = lhs_join_key_agg.inputs[0] + join_sub[non_agg_key] = join_sub[agg_key] + + # In the left join case, transform any COUNT(col) or COUNT(*) col to + # NULL if the sentinel column is zero, indicating no matching row. + if left_join_case and sentinel_column is not None: + sentinel_cmp: RelationalExpression = CallExpression( + pydop.NEQ, + BooleanType(), + [sentinel_column, LiteralExpression(0, NumericType())], + ) + + # A function to transform `X` -> `KEEP_IF(X, sentinel_column != 0)`` + def sentinel_fn(expr: RelationalExpression) -> RelationalExpression: + return CallExpression( + pydop.KEEP_IF, expr.data_type, [expr, sentinel_cmp] + ) + + for col_name, col_expr in aggregate.aggregations.items(): + if col_expr.op == pydop.COUNT: + agg_ref_expr: ColumnReference = ColumnReference( + col_name, col_expr.data_type, agg_alias + ) + join_sub[agg_ref_expr] = sentinel_fn(join_sub[agg_ref_expr]) + + # Create the columns of the final projection which will occur after + # the aggregate to rename columns as needed. This is done by finding + # all of the columns from the original join's output, and applying + # the join substitution to them so that they refer to the correct + # columns from the new aggregate. + new_project_columns: dict[str, RelationalExpression] = {} + for col_name, col_expr in join.columns.items(): + new_project_columns[col_name] = apply_substitution(col_expr, join_sub, {}) + + # Build the new Join by joining the aggregate's input with the other + # side of the join, using the remapped join condition, and the new + # columns and cardinalities. + new_join: Join = Join( + new_join_inputs, + apply_substitution(join.condition, join_cond_sub, {}), + join.join_type, + new_join_columns, + new_cardinality, + new_reverse_cardinality, + join.correl_name, + ) + + # Build the new Aggregate node on top of the new Join, using the + # remapped keys and additional aggregations. + new_aggregate: Aggregate = Aggregate( + new_join, new_aggregate_keys, new_aggregate_aggs + ) + + # Build the new Project node on top of the new Aggregate, using the + # remapped columns. + new_project: Project = Project(new_aggregate, new_project_columns) + return new_project + + +def pull_aggregates_above_joins(node: RelationalRoot) -> RelationalNode: + """ + Runs the logical plan transformation to pull aggregates above joins when + possible for optimization purposes. + + Args: + `node`: The root relational node to transform. + + Returns: + The transformed relational tree. + """ + shuttle: JoinAggregateTransposeShuttle = JoinAggregateTransposeShuttle() + return node.accept_shuttle(shuttle) diff --git a/pydough/conversion/relational_converter.py b/pydough/conversion/relational_converter.py index 61fb70501..9ae462eaa 100644 --- a/pydough/conversion/relational_converter.py +++ b/pydough/conversion/relational_converter.py @@ -87,6 +87,7 @@ ) from .hybrid_translator import HybridTranslator from .hybrid_tree import HybridTree +from .join_aggregate_transpose import pull_aggregates_above_joins from .masking_shuttles import MaskLiteralComparisonShuttle from .merge_projects import merge_projects from .projection_pullup import pullup_projections @@ -1627,7 +1628,10 @@ def optimize_relational_tree( # A: projection pullup # B: expression simplification # C: filter pushdown - # D: column pruning + # D: join-aggregate transpose + # E: projection pullup again + # F: redundant aggregation removal + # G: column pruning # This is done because pullup will create more opportunities for expression # simplification, which will allow more filters to be pushed further down, # and the combination of those together will create more opportunities for @@ -1637,6 +1641,9 @@ def optimize_relational_tree( root = confirm_root(pullup_projections(root)) simplify_expressions(root, session, additional_shuttles) root = confirm_root(push_filters(root, session)) + root = confirm_root(pull_aggregates_above_joins(root)) + root = confirm_root(pullup_projections(root)) + root = remove_redundant_aggs(root) root = pruner.prune_unused_columns(root) # Re-run projection merging, without pushing into joins. This will allow diff --git a/pydough/conversion/relational_simplification.py b/pydough/conversion/relational_simplification.py index 44e7c1a22..de58406be 100644 --- a/pydough/conversion/relational_simplification.py +++ b/pydough/conversion/relational_simplification.py @@ -1178,11 +1178,15 @@ def simplify_function_call( case pydop.EQU | pydop.NEQ | pydop.GEQ | pydop.GRT | pydop.LET | pydop.LEQ: match (expr.inputs[0], expr.op, expr.inputs[1]): # x > y is True if x is positive and y is a literal that is - # zero or negative. The same goes for x >= y. - case (_, pydop.GRT, LiteralExpression()) | ( - _, - pydop.GEQ, - LiteralExpression(), + # zero or negative. The same goes for x != y and x >= y. + case ( + (_, pydop.GRT, LiteralExpression()) + | (_, pydop.NEQ, LiteralExpression()) + | ( + _, + pydop.GEQ, + LiteralExpression(), + ) ) if ( isinstance(expr.inputs[1].value, (int, float, bool)) and expr.inputs[1].value <= 0 @@ -1207,6 +1211,19 @@ def simplify_function_call( not_null=True, not_negative=True, positive=True ) + # x != y is True if x is non-negative and y is a literal + # that is negative + case (_, pydop.NEQ, LiteralExpression()) if ( + isinstance(expr.inputs[1].value, (int, float, bool)) + and expr.inputs[1].value < 0 + and arg_predicates[0].not_null + and arg_predicates[0].not_negative + ): + output_expr = LiteralExpression(True, expr.data_type) + output_predicates |= PredicateSet( + not_null=True, not_negative=True, positive=True + ) + # The rest of the case of x CMP y can be constant folded if # both x and y are literals. case (LiteralExpression(), _, LiteralExpression()): diff --git a/pydough/relational/relational_nodes/join.py b/pydough/relational/relational_nodes/join.py index acba1ce33..c1565c3f8 100644 --- a/pydough/relational/relational_nodes/join.py +++ b/pydough/relational/relational_nodes/join.py @@ -90,6 +90,23 @@ def remove_filter(self) -> "JoinCardinality": else: return self + def add_plural(self) -> "JoinCardinality": + """ + Returns a new JoinCardinality referring to the current value but with + plural cardinality added. + """ + if self in (JoinCardinality.SINGULAR_FILTER, JoinCardinality.UNKNOWN_FILTER): + return JoinCardinality.PLURAL_FILTER + elif self in (JoinCardinality.SINGULAR_ACCESS, JoinCardinality.UNKNOWN_ACCESS): + return JoinCardinality.PLURAL_ACCESS + elif self in ( + JoinCardinality.SINGULAR_UNKNOWN, + JoinCardinality.UNKNOWN_UNKNOWN, + ): + return JoinCardinality.PLURAL_UNKNOWN + else: + return self + @property def accesses(self) -> bool: """ diff --git a/pydough/sqlglot/override_merge_subqueries.py b/pydough/sqlglot/override_merge_subqueries.py index 22d6fea4b..842f74f86 100644 --- a/pydough/sqlglot/override_merge_subqueries.py +++ b/pydough/sqlglot/override_merge_subqueries.py @@ -214,7 +214,11 @@ def _mergeable( """ # PYDOUGH CHANGE: avoid merging CTEs when it would break a left join. - if isinstance(from_or_join, exp.Join) and from_or_join.side not in ("INNER", ""): + if ( + isinstance(from_or_join, exp.Join) + and from_or_join.side not in ("INNER", "") + and len(inner_scope.expression.args.get("joins", [])) > 0 + ): return False # PYDOUGH CHANGE: avoid merging CTEs when the inner scope has a window diff --git a/pydough/sqlglot/override_simplify.py b/pydough/sqlglot/override_simplify.py index c1b695a17..ff5eb3998 100644 --- a/pydough/sqlglot/override_simplify.py +++ b/pydough/sqlglot/override_simplify.py @@ -26,6 +26,7 @@ extract_date, extract_type, flatten, + is_null, logger, propagate_constants, remove_complements, @@ -124,6 +125,12 @@ def _simplify(expression, root=True): node = simplify_concat(node) node = simplify_conditionals(node) + # PyDough Change: new pre-order transformations + node = rewrite_case_to_nullif(node) + node = rewrite_coalesce_nullif(node) + node = rewrite_sum_nullif(node) + node = rewrite_coalesce_count(node) + if constant_propagation: node = propagate_constants(node, root) @@ -143,6 +150,9 @@ def _simplify(expression, root=True): node = sort_comparison(node) node = simplify_startswith(node) + # PyDough Change: new post-order transformations + node = rewrite_nullif_coalesce(node) + if root: expression.replace(node) return node @@ -225,3 +235,153 @@ def simplify_datetrunc(expression: exp.Expression, dialect: Dialect) -> exp.Expr ) return expression + + +def rewrite_case_to_nullif(expr: exp.Expression) -> exp.Expression: + """ + Rewrite expressions like `CASE WHEN x != y THEN x ELSE NULL END` to + `NULLIF(x, y)` + + Args: + `expr`: The expression to rewrite. + + Returns: + The rewritten expression. + """ + if not isinstance(expr, exp.Case): + return expr + + if ( + not (expr.args.get("this") is None and is_null(expr.args.get("default", None))) + and len(expr.args.get("ifs", [])) == 1 + ): + return expr + + if_expr = expr.args["ifs"][0] + condition = if_expr.args.get("this") + result = if_expr.args.get("true") + + if not isinstance(condition, exp.NEQ): + return expr + + lhs = condition.args.get("this") + rhs = condition.args.get("expression") + + if lhs == result: + return exp.Nullif(this=lhs, expression=rhs, copy=False) + + if rhs == result: + return exp.Nullif(this=rhs, expression=lhs, copy=False) + + return expr + + +def rewrite_coalesce_nullif(expr: exp.Expression) -> exp.Expression: + """ + Rewrite expressions like `COALESCE(NULLIF(x, y), z)` to + `CASE WHEN x = y THEN z ELSE x END`, or if `y` and `z` are the same then + just to `COALESCE(x, z)`. + + Args: + `expr`: The expression to rewrite. + + Returns: + The rewritten expression. + """ + if not isinstance(expr, exp.Coalesce): + return expr + + if len(expr.expressions) != 1 or expr.args.get("is_nvl"): + return expr + + first = expr.this + second = expr.expressions[0] + + if not isinstance(first, exp.Nullif): + return expr + + lhs: exp.Expression = first.args.get("this") + rhs: exp.Expression = first.args.get("expression") + + if rhs == second: + return exp.Coalesce(this=lhs, expressions=[second], copy=False) + + return exp.Case( + whens=[ + exp.When( + this=exp.EQ(this=lhs, expression=rhs, copy=False), + true=second, + copy=False, + ) + ], + default=lhs, + copy=False, + ) + + +def rewrite_sum_nullif(expr: exp.Expression) -> exp.Expression: + """ + Rewrite `SUM(NULLIF(x, 0))` to `SUM(x)`. + + Args: + `expr`: The expression to rewrite. + + Returns: + The rewritten expression. + """ + if not isinstance(expr, exp.Sum): + return expr + + arg = expr.this + if not isinstance(arg, exp.Nullif): + return expr + + lhs: exp.Expression = arg.args.get("this") + rhs: exp.Expression = arg.args.get("expression") + + if isinstance(rhs, exp.Literal) and rhs.is_number and float(rhs.this) == 0: + return exp.Sum(this=lhs, copy=False) + + return expr + + +def rewrite_coalesce_count(expr: exp.Expression) -> exp.Expression: + """ + Rewrite `COALESCE(COUNT(x), 0)` to `COUNT(x)`, and does the same for + `COALESCE(COUNT_IF(x), 0)`. + + Args: + `expr`: The expression to rewrite. + + Returns: + The rewritten expression. + """ + if not isinstance(expr, exp.Coalesce): + return expr + + return expr.this if isinstance(expr.this, (exp.Count, exp.CountIf)) else expr + + +def rewrite_nullif_coalesce(expr: exp.Expression) -> exp.Expression: + """ + Rewrite `NULLIF(COALESCE(x, y), y)` to `NULLIF(x, y)`. + + Args: + `expr`: The expression to rewrite. + + Returns: + The rewritten expression. + """ + if not isinstance(expr, exp.Nullif): + return expr + + lhs: exp.Expression = expr.args.get("this") + rhs: exp.Expression = expr.args.get("expression") + + if not isinstance(lhs, exp.Coalesce) or len(lhs.expressions) != 1: + return expr + + if lhs.expressions[0] == rhs: + return exp.Nullif(this=lhs.args.get("this"), expression=rhs, copy=False) + else: + return expr diff --git a/tests/test_metadata/defog_graphs.json b/tests/test_metadata/defog_graphs.json index ef5476294..9dcbcf916 100644 --- a/tests/test_metadata/defog_graphs.json +++ b/tests/test_metadata/defog_graphs.json @@ -7,7 +7,7 @@ "name": "customers", "type": "simple table", "table path": "main.sbCustomer", - "unique properties": ["_id"], + "unique properties": ["_id", "name", "email", "address1"], "properties": [ { "name": "_id", @@ -620,7 +620,7 @@ "name": "salespeople", "type": "simple table", "table path": "main.salespersons", - "unique properties": ["_id", "email"], + "unique properties": ["_id", "email", "phone", ["first_name", "last_name"]], "properties": [ { "name": "_id", @@ -698,7 +698,7 @@ "name": "customers", "type": "simple table", "table path": "main.customers", - "unique properties": ["_id", "email"], + "unique properties": ["_id", "email", "phone", "address", ["first_name", "last_name"]], "properties": [ { "name": "_id", @@ -1013,7 +1013,7 @@ "name": "inventory_snapshots", "type": "simple table", "table path": "main.inventory_snapshots", - "unique properties": ["_id"], + "unique properties": ["_id", ["car_id", "snapshot_date"]], "properties": [ { "name": "_id", @@ -1201,7 +1201,7 @@ "name": "doctors", "type": "simple table", "table path": "main.doctors", - "unique properties": ["doc_id"], + "unique properties": ["doc_id", "first_name", "last_name", "board_certification_number"], "properties": [ { "name": "doc_id", @@ -1300,7 +1300,7 @@ "name": "patients", "type": "simple table", "table path": "main.patients", - "unique properties": ["patient_id", "email", "phone"], + "unique properties": ["patient_id", "email", "phone", "first_name"], "properties": [ { "name": "patient_id", @@ -1374,7 +1374,7 @@ { "name": "street_address", "type": "table column", - "column name": "addr_city", + "column name": "addr_street", "data type": "string", "description": "The street address of the patient's home, including street name and number", "sample values": ["987 Birch Dr", "753 Walnut Ave", "951 Spruce Blvd"], @@ -1451,7 +1451,7 @@ "name": "drugs", "type": "simple table", "table path": "main.drugs", - "unique properties": ["drug_id", "national_drug_code"], + "unique properties": ["drug_id", "national_drug_code", "drug_name"], "properties": [ { "name": "drug_id", @@ -1559,7 +1559,7 @@ "name": "diagnoses", "type": "simple table", "table path": "main.diagnoses", - "unique properties": ["_id", "code", "name"], + "unique properties": ["_id", "code", "name", "description"], "properties": [ { "name": "_id", @@ -1702,7 +1702,7 @@ "name": "outcomes", "type": "simple table", "table path": "main.outcomes", - "unique properties": ["outcome_id"], + "unique properties": ["outcome_id", ["treatment_id", "assessment_date"]], "properties": [ { "name": "outcome_id", @@ -1953,7 +1953,7 @@ "name": "adverse_events", "type": "simple table", "table path": "main.adverse_events", - "unique properties": ["_id"], + "unique properties": ["_id", "treatment_id"], "properties": [ { "name": "_id", diff --git a/tests/test_pipeline_common_prefix.py b/tests/test_pipeline_common_prefix.py index 3796d6b44..a7bcf62c6 100644 --- a/tests/test_pipeline_common_prefix.py +++ b/tests/test_pipeline_common_prefix.py @@ -623,12 +623,13 @@ { "name": [ f"Customer#{i:09}" - for i in (138841, 36091, 54952, 103768, 46081) + for i in (6434, 45280, 60493, 87616, 132775) ], - "n_orders": [21, 20, 19, 19, 17], + "n_orders": [2, 2, 2, 2, 2], } ), "common_prefix_y", + order_sensitive=True, ), id="common_prefix_y", ), diff --git a/tests/test_plan_refsols/avg_order_diff_per_customer.txt b/tests/test_plan_refsols/avg_order_diff_per_customer.txt index e6a8403ae..52e73ac8d 100644 --- a/tests/test_plan_refsols/avg_order_diff_per_customer.txt +++ b/tests/test_plan_refsols/avg_order_diff_per_customer.txt @@ -1,10 +1,10 @@ -ROOT(columns=[('name', c_name), ('avg_diff', avg_day_diff)], orderings=[(avg_day_diff):desc_last], limit=5:numeric) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'avg_day_diff': t1.avg_day_diff, 'c_name': t0.c_name}) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey, 'c_name': t0.c_name}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_name': c_name, 'c_nationkey': c_nationkey}) - FILTER(condition=n_name == 'JAPAN':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'avg_day_diff': AVG(day_diff)}) - PROJECT(columns={'day_diff': DATEDIFF('days':string, PREV(args=[o_orderdate], partition=[o_custkey], order=[(o_orderdate):asc_last]), o_orderdate), 'o_custkey': o_custkey}) +ROOT(columns=[('name', anything_c_name), ('avg_diff', avg_day_diff)], orderings=[(avg_day_diff):desc_last], limit=5:numeric) + AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'anything_c_name': ANYTHING(c_name), 'avg_day_diff': AVG(day_diff)}) + PROJECT(columns={'c_name': c_name, 'day_diff': DATEDIFF('days':string, PREV(args=[o_orderdate], partition=[o_custkey], order=[(o_orderdate):asc_last]), o_orderdate), 'o_custkey': o_custkey}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'o_custkey': t1.o_custkey, 'o_orderdate': t1.o_orderdate}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey, 'c_name': t0.c_name}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_name': c_name, 'c_nationkey': c_nationkey}) + FILTER(condition=n_name == 'JAPAN':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) FILTER(condition=o_orderpriority == '1-URGENT':string, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderpriority': o_orderpriority}) diff --git a/tests/test_plan_refsols/bad_child_reuse_1.txt b/tests/test_plan_refsols/bad_child_reuse_1.txt index 48954aace..8a5eb5c7d 100644 --- a/tests/test_plan_refsols/bad_child_reuse_1.txt +++ b/tests/test_plan_refsols/bad_child_reuse_1.txt @@ -1,5 +1,5 @@ ROOT(columns=[('cust_key', c_custkey), ('n_orders', n_rows)], orderings=[(c_acctbal):desc_last]) - FILTER(condition=n_rows > 0:numeric, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_rows': n_rows}) + FILTER(condition=n_rows != 0:numeric, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_rows': n_rows}) LIMIT(limit=10:numeric, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_rows': n_rows}, orderings=[(c_acctbal):desc_last]) JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_acctbal': t0.c_acctbal, 'c_custkey': t0.c_custkey, 'n_rows': t1.n_rows}) SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey}) diff --git a/tests/test_plan_refsols/bad_child_reuse_2.txt b/tests/test_plan_refsols/bad_child_reuse_2.txt index 133351928..cc52f1bfb 100644 --- a/tests/test_plan_refsols/bad_child_reuse_2.txt +++ b/tests/test_plan_refsols/bad_child_reuse_2.txt @@ -1,5 +1,5 @@ ROOT(columns=[('cust_key', c_custkey), ('n_orders', n_rows), ('n_cust', n_cust)], orderings=[(c_acctbal):desc_last], limit=10:numeric) - FILTER(condition=n_rows > 0:numeric, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_cust': n_cust, 'n_rows': n_rows}) + FILTER(condition=n_rows != 0:numeric, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_cust': n_cust, 'n_rows': n_rows}) PROJECT(columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_cust': RELSIZE(args=[], partition=[c_nationkey], order=[]), 'n_rows': n_rows}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_acctbal': t0.c_acctbal, 'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) diff --git a/tests/test_plan_refsols/bad_child_reuse_3.txt b/tests/test_plan_refsols/bad_child_reuse_3.txt index 133351928..cc52f1bfb 100644 --- a/tests/test_plan_refsols/bad_child_reuse_3.txt +++ b/tests/test_plan_refsols/bad_child_reuse_3.txt @@ -1,5 +1,5 @@ ROOT(columns=[('cust_key', c_custkey), ('n_orders', n_rows), ('n_cust', n_cust)], orderings=[(c_acctbal):desc_last], limit=10:numeric) - FILTER(condition=n_rows > 0:numeric, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_cust': n_cust, 'n_rows': n_rows}) + FILTER(condition=n_rows != 0:numeric, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_cust': n_cust, 'n_rows': n_rows}) PROJECT(columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_cust': RELSIZE(args=[], partition=[c_nationkey], order=[]), 'n_rows': n_rows}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_acctbal': t0.c_acctbal, 'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) diff --git a/tests/test_plan_refsols/bad_child_reuse_4.txt b/tests/test_plan_refsols/bad_child_reuse_4.txt index ce2a967a8..d9b891dea 100644 --- a/tests/test_plan_refsols/bad_child_reuse_4.txt +++ b/tests/test_plan_refsols/bad_child_reuse_4.txt @@ -1,5 +1,5 @@ ROOT(columns=[('cust_key', c_custkey), ('n_orders', n_rows)], orderings=[(c_acctbal):desc_last], limit=10:numeric) - FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) < RELAVG(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[c_nationkey], order=[]) & n_rows > 0:numeric, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_rows': n_rows}) + FILTER(condition=n_rows != 0:numeric & DEFAULT_TO(n_rows, 0:numeric) < RELAVG(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[c_nationkey], order=[]), columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'n_rows': n_rows}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_acctbal': t0.c_acctbal, 'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) diff --git a/tests/test_plan_refsols/common_prefix_ad.txt b/tests/test_plan_refsols/common_prefix_ad.txt index 33cb44ec2..022d52ee5 100644 --- a/tests/test_plan_refsols/common_prefix_ad.txt +++ b/tests/test_plan_refsols/common_prefix_ad.txt @@ -1,15 +1,15 @@ -ROOT(columns=[('supplier_name', s_name), ('part_name', p_name), ('part_qty', ps_availqty), ('qty_shipped', DEFAULT_TO(sum_l_quantity, 0:numeric))], orderings=[(s_name):asc_first]) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'p_name': t1.p_name, 'ps_availqty': t1.ps_availqty, 's_name': t0.s_name, 'sum_l_quantity': t1.sum_l_quantity}) - JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'s_name': t0.s_name, 's_suppkey': t0.s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - FILTER(condition=n_name == 'JAPAN':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - JOIN(condition=t0.ps_partkey == t1.l_partkey & t0.ps_suppkey == t1.l_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'p_name': t0.p_name, 'ps_availqty': t0.ps_availqty, 'ps_suppkey': t0.ps_suppkey, 'sum_l_quantity': t1.sum_l_quantity}) - FILTER(condition=RANKING(args=[], partition=[ps_suppkey], order=[(ps_availqty):desc_first, (p_name):asc_last], allow_ties=False) == 1:numeric, columns={'p_name': p_name, 'ps_availqty': ps_availqty, 'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) - JOIN(condition=t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'p_name': t1.p_name, 'ps_availqty': t0.ps_availqty, 'ps_partkey': t0.ps_partkey, 'ps_suppkey': t0.ps_suppkey}) - SCAN(table=tpch.PARTSUPP, columns={'ps_availqty': ps_availqty, 'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) - FILTER(condition=p_container == 'WRAP CASE':string, columns={'p_name': p_name, 'p_partkey': p_partkey}) - SCAN(table=tpch.PART, columns={'p_container': p_container, 'p_name': p_name, 'p_partkey': p_partkey}) - AGGREGATE(keys={'l_partkey': l_partkey, 'l_suppkey': l_suppkey}, aggregations={'sum_l_quantity': SUM(l_quantity)}) +ROOT(columns=[('supplier_name', anything_s_name), ('part_name', anything_p_name), ('part_qty', anything_ps_availqty), ('qty_shipped', DEFAULT_TO(sum_l_quantity, 0:numeric))], orderings=[(anything_s_name):asc_first]) + AGGREGATE(keys={'l_partkey': l_partkey, 'l_suppkey': l_suppkey}, aggregations={'anything_p_name': ANYTHING(p_name), 'anything_ps_availqty': ANYTHING(ps_availqty), 'anything_s_name': ANYTHING(s_name), 'sum_l_quantity': SUM(l_quantity)}) + JOIN(condition=t0.s_suppkey == t1.l_suppkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'l_suppkey': t1.l_suppkey, 'p_name': t1.p_name, 'ps_availqty': t1.ps_availqty, 's_name': t0.s_name}) + JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'s_name': t0.s_name, 's_suppkey': t0.s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) + FILTER(condition=n_name == 'JAPAN':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) + JOIN(condition=t0.ps_partkey == t1.l_partkey & t0.ps_suppkey == t1.l_suppkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'l_suppkey': t1.l_suppkey, 'p_name': t0.p_name, 'ps_availqty': t0.ps_availqty}) + FILTER(condition=RANKING(args=[], partition=[ps_suppkey], order=[(ps_availqty):desc_first, (p_name):asc_last], allow_ties=False) == 1:numeric, columns={'p_name': p_name, 'ps_availqty': ps_availqty, 'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) + JOIN(condition=t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'p_name': t1.p_name, 'ps_availqty': t0.ps_availqty, 'ps_partkey': t0.ps_partkey, 'ps_suppkey': t0.ps_suppkey}) + SCAN(table=tpch.PARTSUPP, columns={'ps_availqty': ps_availqty, 'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) + FILTER(condition=p_container == 'WRAP CASE':string, columns={'p_name': p_name, 'p_partkey': p_partkey}) + SCAN(table=tpch.PART, columns={'p_container': p_container, 'p_name': p_name, 'p_partkey': p_partkey}) FILTER(condition=DAY(l_shipdate) < 4:numeric & MONTH(l_shipdate) == 2:numeric & YEAR(l_shipdate) == 1995:numeric, columns={'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_suppkey': l_suppkey}) SCAN(table=tpch.LINEITEM, columns={'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipdate': l_shipdate, 'l_suppkey': l_suppkey}) diff --git a/tests/test_plan_refsols/common_prefix_ae.txt b/tests/test_plan_refsols/common_prefix_ae.txt index a81f03615..2cc3fd84c 100644 --- a/tests/test_plan_refsols/common_prefix_ae.txt +++ b/tests/test_plan_refsols/common_prefix_ae.txt @@ -1,10 +1,10 @@ -ROOT(columns=[('nation_name', n_name), ('n_customers', n_rows), ('customer_name', max_c_name)], orderings=[(n_name):asc_first]) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'max_c_name': t1.max_c_name, 'n_name': t0.n_name, 'n_rows': t1.n_rows}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'ASIA':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'max_c_name': MAX(c_name), 'n_rows': COUNT()}) +ROOT(columns=[('nation_name', anything_n_name), ('n_customers', n_rows), ('customer_name', max_c_name)], orderings=[(anything_n_name):asc_first]) + AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'max_c_name': MAX(c_name), 'n_rows': COUNT()}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t1.c_name, 'c_nationkey': t1.c_nationkey, 'n_name': t0.n_name}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'ASIA':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_name': t1.c_name, 'c_nationkey': t0.c_nationkey}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) JOIN(condition=t0.o_custkey == t1.c_custkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'c_name': t1.c_name, 'o_custkey': t0.o_custkey}) diff --git a/tests/test_plan_refsols/common_prefix_af.txt b/tests/test_plan_refsols/common_prefix_af.txt index 2ab722973..68ddbeb70 100644 --- a/tests/test_plan_refsols/common_prefix_af.txt +++ b/tests/test_plan_refsols/common_prefix_af.txt @@ -4,7 +4,7 @@ ROOT(columns=[('nation_name', n_name), ('n_customers', n_rows), ('customer_name' SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) FILTER(condition=r_name == 'ASIA':string, columns={'r_regionkey': r_regionkey}) SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=sum_n_rows > 0:numeric, columns={'c_nationkey': c_nationkey, 'max_c_name': max_c_name, 'n_rows': n_rows}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'c_nationkey': c_nationkey, 'max_c_name': max_c_name, 'n_rows': n_rows}) AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'max_c_name': MAX(c_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_name': t1.c_name, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) diff --git a/tests/test_plan_refsols/common_prefix_ag.txt b/tests/test_plan_refsols/common_prefix_ag.txt index e1f56b3de..06810301d 100644 --- a/tests/test_plan_refsols/common_prefix_ag.txt +++ b/tests/test_plan_refsols/common_prefix_ag.txt @@ -1,43 +1,44 @@ -ROOT(columns=[('nation_name', anything_n_name), ('n_machine_cust', n_rows), ('n_machine_high_orders', sum_n_rows), ('n_machine_high_domestic_lines', sum_sum_n_rows), ('total_machine_high_domestic_revenue', ROUND(DEFAULT_TO(sum_sum_sum_revenue, 0:numeric), 2:numeric))], orderings=[(anything_n_name):asc_first]) - FILTER(condition=sum_n_rows > 0:numeric & sum_sum_n_rows > 0:numeric, columns={'anything_n_name': anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_n_rows': sum_sum_n_rows, 'sum_sum_sum_revenue': sum_sum_sum_revenue}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_sum_n_rows': SUM(sum_n_rows), 'sum_sum_sum_revenue': SUM(sum_sum_revenue)}) - JOIN(condition=t0.n_nationkey == t1.n_nationkey & t0.c_custkey == t1.c_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows, 'sum_sum_revenue': t1.sum_sum_revenue}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_sum_revenue': SUM(sum_revenue)}) - JOIN(condition=t0.c_custkey == t1.c_custkey & t0.n_nationkey == t1.n_nationkey & t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_revenue': t1.sum_revenue}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) - AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'o_orderkey': o_orderkey}, aggregations={'n_rows': COUNT(), 'sum_revenue': SUM(l_extendedprice * 1:numeric - l_discount - l_quantity * ps_supplycost)}) - JOIN(condition=t0.l_partkey == t1.ps_partkey & t0.l_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_quantity': t0.l_quantity, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey, 'ps_supplycost': t1.ps_supplycost}) - JOIN(condition=t0.l_suppkey == t1.s_suppkey & t1.n_name == t0.n_name, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity, 'l_suppkey': t0.l_suppkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'l_suppkey': t1.l_suppkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) - FILTER(condition=l_shipmode == 'TRUCK':string, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_suppkey': l_suppkey}) - SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipmode': l_shipmode, 'l_suppkey': l_suppkey}) - JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t1.n_name, 's_suppkey': t0.s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey, 'ps_supplycost': ps_supplycost}) +ROOT(columns=[('nation_name', anything_anything_n_name), ('n_machine_cust', n_rows), ('n_machine_high_orders', sum_n_rows), ('n_machine_high_domestic_lines', sum_sum_n_rows), ('total_machine_high_domestic_revenue', ROUND(DEFAULT_TO(sum_sum_sum_revenue, 0:numeric), 2:numeric))], orderings=[(anything_anything_n_name):asc_first]) + FILTER(condition=sum_n_rows != 0:numeric & sum_sum_n_rows != 0:numeric, columns={'anything_anything_n_name': anything_anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_n_rows': sum_sum_n_rows, 'sum_sum_sum_revenue': sum_sum_sum_revenue}) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_anything_n_name': ANYTHING(anything_n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_c_custkey, count_c_custkey != 0:numeric)), 'sum_sum_n_rows': SUM(sum_n_rows), 'sum_sum_sum_revenue': SUM(sum_sum_revenue)}) + AGGREGATE(keys={'c_custkey': c_custkey_0, 'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'count_c_custkey': COUNT(c_custkey), 'sum_n_rows': SUM(n_rows), 'sum_sum_revenue': SUM(sum_revenue)}) + JOIN(condition=t0.n_nationkey == t1.n_nationkey & t0.c_custkey == t1.c_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'c_custkey_0': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_revenue': t1.sum_revenue}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + PROJECT(columns={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'n_rows': KEEP_IF(count_o_orderkey, count_o_orderkey != 0:numeric), 'sum_revenue': sum_revenue}) + AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'o_orderkey': o_orderkey_0}, aggregations={'count_o_orderkey': COUNT(o_orderkey), 'sum_revenue': SUM(l_extendedprice * 1:numeric - l_discount - l_quantity * ps_supplycost)}) + JOIN(condition=t0.c_custkey == t1.c_custkey & t0.n_nationkey == t1.n_nationkey & t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_quantity': t1.l_quantity, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey, 'o_orderkey_0': t0.o_orderkey, 'ps_supplycost': t1.ps_supplycost}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) + JOIN(condition=t0.l_partkey == t1.ps_partkey & t0.l_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_quantity': t0.l_quantity, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey, 'ps_supplycost': t1.ps_supplycost}) + JOIN(condition=t0.l_suppkey == t1.s_suppkey & t1.n_name == t0.n_name, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity, 'l_suppkey': t0.l_suppkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'l_suppkey': t1.l_suppkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) + FILTER(condition=l_shipmode == 'TRUCK':string, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_suppkey': l_suppkey}) + SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipmode': l_shipmode, 'l_suppkey': l_suppkey}) + JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t1.n_name, 's_suppkey': t0.s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_nationkey': s_nationkey, 's_suppkey': s_suppkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) + SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey, 'ps_supplycost': ps_supplycost}) diff --git a/tests/test_plan_refsols/common_prefix_ah.txt b/tests/test_plan_refsols/common_prefix_ah.txt index f8ece17be..266aea028 100644 --- a/tests/test_plan_refsols/common_prefix_ah.txt +++ b/tests/test_plan_refsols/common_prefix_ah.txt @@ -1,18 +1,18 @@ -ROOT(columns=[('nation_name', anything_n_name), ('n_machine_high_orders', n_rows), ('n_machine_high_domestic_lines', sum_n_rows), ('total_machine_high_domestic_revenue', ROUND(DEFAULT_TO(sum_sum_revenue, 0:numeric), 2:numeric))], orderings=[(anything_n_name):asc_first]) - FILTER(condition=sum_n_rows > 0:numeric, columns={'anything_n_name': anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_revenue': sum_sum_revenue}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_sum_revenue': SUM(sum_revenue)}) - JOIN(condition=t0.c_custkey == t1.c_custkey & t0.n_nationkey == t1.n_nationkey & t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_revenue': t1.sum_revenue}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) - AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'o_orderkey': o_orderkey}, aggregations={'n_rows': COUNT(), 'sum_revenue': SUM(l_extendedprice * 1:numeric - l_discount - l_quantity * ps_supplycost)}) +ROOT(columns=[('nation_name', anything_anything_n_name), ('n_machine_high_orders', n_rows), ('n_machine_high_domestic_lines', sum_n_rows), ('total_machine_high_domestic_revenue', ROUND(DEFAULT_TO(sum_sum_revenue, 0:numeric), 2:numeric))], orderings=[(anything_anything_n_name):asc_first]) + FILTER(condition=sum_n_rows != 0:numeric, columns={'anything_anything_n_name': anything_anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_revenue': sum_sum_revenue}) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_anything_n_name': ANYTHING(anything_n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_o_orderkey, count_o_orderkey != 0:numeric)), 'sum_sum_revenue': SUM(sum_revenue)}) + AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'o_orderkey': o_orderkey_0}, aggregations={'anything_n_name': ANYTHING(n_name), 'count_o_orderkey': COUNT(o_orderkey), 'sum_revenue': SUM(l_extendedprice * 1:numeric - l_discount - l_quantity * ps_supplycost)}) + JOIN(condition=t0.c_custkey == t1.c_custkey & t0.n_nationkey == t1.n_nationkey & t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_quantity': t1.l_quantity, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey, 'o_orderkey_0': t0.o_orderkey, 'ps_supplycost': t1.ps_supplycost}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) JOIN(condition=t0.l_partkey == t1.ps_partkey & t0.l_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_quantity': t0.l_quantity, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey, 'ps_supplycost': t1.ps_supplycost}) JOIN(condition=t0.l_suppkey == t1.s_suppkey & t1.n_name == t0.n_name, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity, 'l_suppkey': t0.l_suppkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'l_suppkey': t1.l_suppkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) diff --git a/tests/test_plan_refsols/common_prefix_ai.txt b/tests/test_plan_refsols/common_prefix_ai.txt index 3a5ab9fc1..9ba0f521a 100644 --- a/tests/test_plan_refsols/common_prefix_ai.txt +++ b/tests/test_plan_refsols/common_prefix_ai.txt @@ -1,15 +1,15 @@ -ROOT(columns=[('nation_name', anything_n_name), ('n_machine_cust', n_rows), ('n_machine_high_domestic_lines', sum_n_rows), ('total_machine_high_domestic_revenue', ROUND(DEFAULT_TO(sum_sum_revenue, 0:numeric), 2:numeric))], orderings=[(anything_n_name):asc_first]) - FILTER(condition=sum_n_rows > 0:numeric, columns={'anything_n_name': anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_revenue': sum_sum_revenue}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_sum_revenue': SUM(sum_revenue)}) - JOIN(condition=t0.n_nationkey == t1.n_nationkey & t0.c_custkey == t1.c_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_revenue': t1.sum_revenue}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey}, aggregations={'n_rows': COUNT(), 'sum_revenue': SUM(l_extendedprice * 1:numeric - l_discount - l_quantity * ps_supplycost)}) +ROOT(columns=[('nation_name', anything_anything_n_name), ('n_machine_cust', n_rows), ('n_machine_high_domestic_lines', sum_n_rows), ('total_machine_high_domestic_revenue', ROUND(DEFAULT_TO(sum_sum_revenue, 0:numeric), 2:numeric))], orderings=[(anything_anything_n_name):asc_first]) + FILTER(condition=sum_n_rows != 0:numeric, columns={'anything_anything_n_name': anything_anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_revenue': sum_sum_revenue}) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_anything_n_name': ANYTHING(anything_n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_c_custkey, count_c_custkey != 0:numeric)), 'sum_sum_revenue': SUM(sum_revenue)}) + AGGREGATE(keys={'c_custkey': c_custkey_0, 'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'count_c_custkey': COUNT(c_custkey), 'sum_revenue': SUM(l_extendedprice * 1:numeric - l_discount - l_quantity * ps_supplycost)}) + JOIN(condition=t0.n_nationkey == t1.n_nationkey & t0.c_custkey == t1.c_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'c_custkey_0': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_quantity': t1.l_quantity, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'ps_supplycost': t1.ps_supplycost}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) JOIN(condition=t0.l_partkey == t1.ps_partkey & t0.l_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_quantity': t0.l_quantity, 'n_nationkey': t0.n_nationkey, 'ps_supplycost': t1.ps_supplycost}) JOIN(condition=t0.l_suppkey == t1.s_suppkey & t1.n_name == t0.n_name, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity, 'l_suppkey': t0.l_suppkey, 'n_nationkey': t0.n_nationkey}) JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'l_suppkey': t1.l_suppkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) diff --git a/tests/test_plan_refsols/common_prefix_aj.txt b/tests/test_plan_refsols/common_prefix_aj.txt index f5d093868..c2046982c 100644 --- a/tests/test_plan_refsols/common_prefix_aj.txt +++ b/tests/test_plan_refsols/common_prefix_aj.txt @@ -1,43 +1,44 @@ -ROOT(columns=[('nation_name', anything_n_name), ('n_machine_cust', n_rows), ('n_machine_high_orders', sum_n_rows), ('total_machine_high_domestic_revenue', ROUND(DEFAULT_TO(sum_sum_sum_revenue, 0:numeric), 2:numeric))], orderings=[(anything_n_name):asc_first]) - FILTER(condition=sum_n_rows > 0:numeric & sum_sum_n_rows > 0:numeric, columns={'anything_n_name': anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_sum_revenue': sum_sum_sum_revenue}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_sum_n_rows': SUM(sum_n_rows), 'sum_sum_sum_revenue': SUM(sum_sum_revenue)}) - JOIN(condition=t0.n_nationkey == t1.n_nationkey & t0.c_custkey == t1.c_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows, 'sum_sum_revenue': t1.sum_sum_revenue}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_sum_revenue': SUM(sum_revenue)}) - JOIN(condition=t0.c_custkey == t1.c_custkey & t0.n_nationkey == t1.n_nationkey & t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_revenue': t1.sum_revenue}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) - AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'o_orderkey': o_orderkey}, aggregations={'n_rows': COUNT(), 'sum_revenue': SUM(l_extendedprice * 1:numeric - l_discount - l_quantity * ps_supplycost)}) - JOIN(condition=t0.l_partkey == t1.ps_partkey & t0.l_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_quantity': t0.l_quantity, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey, 'ps_supplycost': t1.ps_supplycost}) - JOIN(condition=t0.l_suppkey == t1.s_suppkey & t1.n_name == t0.n_name, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity, 'l_suppkey': t0.l_suppkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'l_suppkey': t1.l_suppkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) - FILTER(condition=l_shipmode == 'TRUCK':string, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_suppkey': l_suppkey}) - SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipmode': l_shipmode, 'l_suppkey': l_suppkey}) - JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t1.n_name, 's_suppkey': t0.s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey, 'ps_supplycost': ps_supplycost}) +ROOT(columns=[('nation_name', anything_anything_n_name), ('n_machine_cust', n_rows), ('n_machine_high_orders', sum_n_rows), ('total_machine_high_domestic_revenue', ROUND(DEFAULT_TO(sum_sum_sum_revenue, 0:numeric), 2:numeric))], orderings=[(anything_anything_n_name):asc_first]) + FILTER(condition=sum_n_rows != 0:numeric & sum_sum_n_rows != 0:numeric, columns={'anything_anything_n_name': anything_anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_sum_revenue': sum_sum_sum_revenue}) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_anything_n_name': ANYTHING(anything_n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_c_custkey, count_c_custkey != 0:numeric)), 'sum_sum_n_rows': SUM(sum_n_rows), 'sum_sum_sum_revenue': SUM(sum_sum_revenue)}) + AGGREGATE(keys={'c_custkey': c_custkey_0, 'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'count_c_custkey': COUNT(c_custkey), 'sum_n_rows': SUM(n_rows), 'sum_sum_revenue': SUM(sum_revenue)}) + JOIN(condition=t0.n_nationkey == t1.n_nationkey & t0.c_custkey == t1.c_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'c_custkey_0': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_revenue': t1.sum_revenue}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + PROJECT(columns={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'n_rows': KEEP_IF(count_o_orderkey, count_o_orderkey != 0:numeric), 'sum_revenue': sum_revenue}) + AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'o_orderkey': o_orderkey_0}, aggregations={'count_o_orderkey': COUNT(o_orderkey), 'sum_revenue': SUM(l_extendedprice * 1:numeric - l_discount - l_quantity * ps_supplycost)}) + JOIN(condition=t0.c_custkey == t1.c_custkey & t0.n_nationkey == t1.n_nationkey & t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_quantity': t1.l_quantity, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey, 'o_orderkey_0': t0.o_orderkey, 'ps_supplycost': t1.ps_supplycost}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) + JOIN(condition=t0.l_partkey == t1.ps_partkey & t0.l_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_quantity': t0.l_quantity, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey, 'ps_supplycost': t1.ps_supplycost}) + JOIN(condition=t0.l_suppkey == t1.s_suppkey & t1.n_name == t0.n_name, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t0.l_discount, 'l_extendedprice': t0.l_extendedprice, 'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity, 'l_suppkey': t0.l_suppkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'l_suppkey': t1.l_suppkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) + FILTER(condition=l_shipmode == 'TRUCK':string, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_suppkey': l_suppkey}) + SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipmode': l_shipmode, 'l_suppkey': l_suppkey}) + JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t1.n_name, 's_suppkey': t0.s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_nationkey': s_nationkey, 's_suppkey': s_suppkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) + SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey, 'ps_supplycost': ps_supplycost}) diff --git a/tests/test_plan_refsols/common_prefix_ak.txt b/tests/test_plan_refsols/common_prefix_ak.txt index 3b9d79163..024eece8f 100644 --- a/tests/test_plan_refsols/common_prefix_ak.txt +++ b/tests/test_plan_refsols/common_prefix_ak.txt @@ -1,41 +1,42 @@ -ROOT(columns=[('nation_name', anything_n_name), ('n_machine_cust', n_rows), ('n_machine_high_orders', sum_n_rows), ('n_machine_high_domestic_lines', sum_sum_n_rows)], orderings=[(anything_n_name):asc_first]) - FILTER(condition=sum_n_rows > 0:numeric & sum_sum_n_rows > 0:numeric, columns={'anything_n_name': anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_n_rows': sum_sum_n_rows}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_sum_n_rows': SUM(sum_n_rows)}) - JOIN(condition=t0.n_nationkey == t1.n_nationkey & t0.c_custkey == t1.c_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.c_custkey == t1.c_custkey & t0.n_nationkey == t1.n_nationkey & t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) - AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'o_orderkey': o_orderkey}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.l_suppkey == t1.s_suppkey & t1.n_name == t0.n_name, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_suppkey': t1.l_suppkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) - FILTER(condition=l_shipmode == 'TRUCK':string, columns={'l_orderkey': l_orderkey, 'l_suppkey': l_suppkey}) - SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_shipmode': l_shipmode, 'l_suppkey': l_suppkey}) - JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t1.n_name, 's_suppkey': t0.s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) +ROOT(columns=[('nation_name', anything_anything_n_name), ('n_machine_cust', n_rows), ('n_machine_high_orders', sum_n_rows), ('n_machine_high_domestic_lines', sum_sum_n_rows)], orderings=[(anything_anything_n_name):asc_first]) + FILTER(condition=sum_n_rows != 0:numeric & sum_sum_n_rows != 0:numeric, columns={'anything_anything_n_name': anything_anything_n_name, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows, 'sum_sum_n_rows': sum_sum_n_rows}) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_anything_n_name': ANYTHING(anything_n_name), 'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_c_custkey, count_c_custkey != 0:numeric)), 'sum_sum_n_rows': SUM(sum_n_rows)}) + AGGREGATE(keys={'c_custkey': c_custkey_0, 'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'count_c_custkey': COUNT(c_custkey), 'sum_n_rows': SUM(n_rows)}) + JOIN(condition=t0.n_nationkey == t1.n_nationkey & t0.c_custkey == t1.c_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'c_custkey_0': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + PROJECT(columns={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'n_rows': KEEP_IF(count_o_orderkey, count_o_orderkey != 0:numeric)}) + AGGREGATE(keys={'c_custkey': c_custkey, 'n_nationkey': n_nationkey, 'o_orderkey': o_orderkey_0}, aggregations={'count_o_orderkey': COUNT(o_orderkey)}) + JOIN(condition=t0.c_custkey == t1.c_custkey & t0.n_nationkey == t1.n_nationkey & t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey, 'o_orderkey_0': t0.o_orderkey}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) + JOIN(condition=t0.l_suppkey == t1.s_suppkey & t1.n_name == t0.n_name, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'l_suppkey': t1.l_suppkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t0.o_orderkey}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_orderkey': t1.o_orderkey}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t1.c_custkey, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'EUROPE':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=c_mktsegment == 'MACHINERY':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '2-HIGH':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) + FILTER(condition=l_shipmode == 'TRUCK':string, columns={'l_orderkey': l_orderkey, 'l_suppkey': l_suppkey}) + SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_shipmode': l_shipmode, 'l_suppkey': l_suppkey}) + JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t1.n_name, 's_suppkey': t0.s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_nationkey': s_nationkey, 's_suppkey': s_suppkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) diff --git a/tests/test_plan_refsols/common_prefix_al.txt b/tests/test_plan_refsols/common_prefix_al.txt index fda9b3df0..13a125136 100644 --- a/tests/test_plan_refsols/common_prefix_al.txt +++ b/tests/test_plan_refsols/common_prefix_al.txt @@ -1,22 +1,22 @@ -ROOT(columns=[('cust_key', c_custkey), ('n_orders', DEFAULT_TO(n_rows_1, 0:numeric)), ('n_no_tax_discount', n_rows)], orderings=[(c_custkey):asc_first]) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_rows': t0.n_rows, 'n_rows_1': t0.n_rows_1}) - LIMIT(limit=10:numeric, columns={'c_custkey': c_custkey, 'n_rows': n_rows, 'n_rows_1': n_rows_1}, orderings=[(c_custkey):asc_first]) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_rows': t1.n_rows, 'n_rows_1': t0.n_rows}) - FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) > RELAVG(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[c_nationkey], order=[]), columns={'c_custkey': c_custkey, 'n_rows': n_rows}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'o_custkey': t0.o_custkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey}) - SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_tax': l_tax}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={}) +ROOT(columns=[('cust_key', o_custkey), ('n_orders', DEFAULT_TO(anything_anything_n_rows, 0:numeric)), ('n_no_tax_discount', anything_n_rows)], orderings=[(o_custkey):asc_first]) + AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'anything_anything_n_rows': ANYTHING(anything_n_rows), 'anything_n_rows': ANYTHING(n_rows)}) + JOIN(condition=t0.o_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_n_rows': t0.anything_n_rows, 'n_rows': t0.n_rows, 'o_custkey': t1.o_custkey}) + LIMIT(limit=10:numeric, columns={'anything_n_rows': anything_n_rows, 'n_rows': n_rows, 'o_custkey': o_custkey}, orderings=[(o_custkey):asc_first]) + AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'anything_n_rows': ANYTHING(n_rows), 'n_rows': COUNT()}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t0.n_rows, 'o_custkey': t1.o_custkey}) + FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) > RELAVG(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[c_nationkey], order=[]), columns={'c_custkey': c_custkey, 'n_rows': n_rows}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'o_custkey': t0.o_custkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric & ISIN(l_partkey, [53360, 123069, 132776, 62217, 67393, 87784, 148252, 176947, 196620, 103099, 169275]:array[unknown]), columns={'l_orderkey': l_orderkey}) + SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_tax': l_tax}) JOIN(condition=t0.l_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'o_custkey': t0.o_custkey}) JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_partkey': t1.l_partkey, 'o_custkey': t0.o_custkey}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey}) + FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric & ISIN(l_partkey, [53360, 123069, 132776, 62217, 67393, 87784, 148252, 176947, 196620, 103099, 169275]:array[unknown]), columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey}) SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_tax': l_tax}) FILTER(condition=p_size < 15:numeric, columns={'p_partkey': p_partkey}) SCAN(table=tpch.PART, columns={'p_partkey': p_partkey, 'p_size': p_size}) diff --git a/tests/test_plan_refsols/common_prefix_am.txt b/tests/test_plan_refsols/common_prefix_am.txt index 6af0ed73b..b7a89f156 100644 --- a/tests/test_plan_refsols/common_prefix_am.txt +++ b/tests/test_plan_refsols/common_prefix_am.txt @@ -6,7 +6,7 @@ ROOT(columns=[('cust_key', c_custkey), ('n_orders', DEFAULT_TO(n_rows_1, 0:numer SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey}) - FILTER(condition=sum_n_rows > 0:numeric, columns={'n_rows': n_rows, 'o_custkey': o_custkey}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'n_rows': n_rows, 'o_custkey': o_custkey}) AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) JOIN(condition=t0.l_partkey == t1.p_partkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'n_rows': t1.n_rows, 'o_custkey': t0.o_custkey}) JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_partkey': t1.l_partkey, 'o_custkey': t0.o_custkey}) diff --git a/tests/test_plan_refsols/common_prefix_an.txt b/tests/test_plan_refsols/common_prefix_an.txt index 98beec996..e4dcc0ca1 100644 --- a/tests/test_plan_refsols/common_prefix_an.txt +++ b/tests/test_plan_refsols/common_prefix_an.txt @@ -1,20 +1,21 @@ -ROOT(columns=[('cust_key', c_custkey), ('n_orders', DEFAULT_TO(n_rows, 0:numeric)), ('n_no_tax_discount', agg_1)], orderings=[(c_custkey):asc_first]) - FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) > RELAVG(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[c_nationkey], order=[]) & DEFAULT_TO(sum_n_rows, 0:numeric) > 0:numeric & sum_n_rows > 0:numeric, columns={'agg_1': agg_1, 'c_custkey': c_custkey, 'n_rows': n_rows}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'agg_1': t0.n_rows, 'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows}) - LIMIT(limit=50:numeric, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey, 'n_rows': n_rows}, orderings=[(c_custkey):asc_first]) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'o_custkey': t0.o_custkey}) +ROOT(columns=[('cust_key', c_custkey), ('n_orders', DEFAULT_TO(KEEP_IF(count_anything_o_custkey, count_anything_o_custkey != 0:numeric), 0:numeric)), ('n_no_tax_discount', anything_n_rows_0)], orderings=[(c_custkey):asc_first]) + FILTER(condition=DEFAULT_TO(sum_n_rows, 0:numeric) != 0:numeric & sum_n_rows != 0:numeric & DEFAULT_TO(KEEP_IF(count_anything_o_custkey, count_anything_o_custkey != 0:numeric), 0:numeric) > RELAVG(args=[DEFAULT_TO(KEEP_IF(count_anything_o_custkey, count_anything_o_custkey != 0:numeric), 0:numeric)], partition=[anything_c_nationkey], order=[]), columns={'anything_n_rows_0': anything_n_rows_0, 'c_custkey': c_custkey, 'count_anything_o_custkey': count_anything_o_custkey}) + AGGREGATE(keys={'c_custkey': c_custkey}, aggregations={'anything_c_nationkey': ANYTHING(c_nationkey), 'anything_n_rows_0': ANYTHING(n_rows_0), 'count_anything_o_custkey': COUNT(anything_o_custkey), 'sum_n_rows': SUM(n_rows)}) + JOIN(condition=t0.c_custkey == t1.anything_o_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_o_custkey': t1.anything_o_custkey, 'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows, 'n_rows_0': t0.n_rows}) + LIMIT(limit=50:numeric, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey, 'n_rows': n_rows}, orderings=[(c_custkey):asc_first]) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'o_custkey': t0.o_custkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey}) + SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_tax': l_tax}) + PROJECT(columns={'anything_o_custkey': anything_o_custkey, 'n_rows': KEEP_IF(count_l_orderkey, count_l_orderkey != 0:numeric)}) + AGGREGATE(keys={'l_orderkey': o_orderkey}, aggregations={'anything_o_custkey': ANYTHING(o_custkey), 'count_l_orderkey': COUNT(l_orderkey)}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_orderkey': t1.l_orderkey, 'o_custkey': t0.o_custkey, 'o_orderkey': t0.o_orderkey}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey}) - SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_tax': l_tax}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'o_custkey': t0.o_custkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.l_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_orderkey': t0.l_orderkey}) - FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey}) - SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_tax': l_tax}) - FILTER(condition=p_size < 15:numeric, columns={'p_partkey': p_partkey}) - SCAN(table=tpch.PART, columns={'p_partkey': p_partkey, 'p_size': p_size}) + JOIN(condition=t0.l_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_orderkey': t0.l_orderkey}) + FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey}) + SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_tax': l_tax}) + FILTER(condition=p_size < 15:numeric, columns={'p_partkey': p_partkey}) + SCAN(table=tpch.PART, columns={'p_partkey': p_partkey, 'p_size': p_size}) diff --git a/tests/test_plan_refsols/common_prefix_ao.txt b/tests/test_plan_refsols/common_prefix_ao.txt index e5965da48..d8f0bcb8c 100644 --- a/tests/test_plan_refsols/common_prefix_ao.txt +++ b/tests/test_plan_refsols/common_prefix_ao.txt @@ -1,25 +1,25 @@ -ROOT(columns=[('cust_key', c_custkey), ('n_orders', DEFAULT_TO(agg_1, 0:numeric)), ('n_no_tax_discount', n_rows), ('n_part_purchases', sum_n_rows)], orderings=[(c_custkey):asc_first], limit=5:numeric) - FILTER(condition=DEFAULT_TO(agg_1, 0:numeric) > RELAVG(args=[DEFAULT_TO(agg_1, 0:numeric)], partition=[], order=[]) & n_rows > 0:numeric, columns={'agg_1': agg_1, 'c_custkey': c_custkey, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'agg_1': t0.n_rows, 'c_custkey': t0.c_custkey, 'n_rows': t1.n_rows, 'sum_n_rows': t0.sum_n_rows}) - LIMIT(limit=20:numeric, columns={'c_custkey': c_custkey, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows}, orderings=[(c_custkey):asc_first]) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows}) - LIMIT(limit=35:numeric, columns={'c_custkey': c_custkey}, orderings=[(c_custkey):asc_first]) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey}) - FILTER(condition=c_mktsegment == 'BUILDING':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) - FILTER(condition=n_name == 'FRANCE':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - FILTER(condition=sum_n_rows > 0:numeric, columns={'n_rows': n_rows, 'o_custkey': o_custkey, 'sum_n_rows': sum_n_rows}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'o_custkey': t0.o_custkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.l_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_orderkey': t0.l_orderkey}) - FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey}) - SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_tax': l_tax}) - FILTER(condition=p_size < 5:numeric, columns={'p_partkey': p_partkey}) - SCAN(table=tpch.PART, columns={'p_partkey': p_partkey, 'p_size': p_size}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) +ROOT(columns=[('cust_key', c_custkey), ('n_orders', DEFAULT_TO(anything_n_rows, 0:numeric)), ('n_no_tax_discount', KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric)), ('n_part_purchases', anything_sum_n_rows)], orderings=[(c_custkey):asc_first], limit=5:numeric) + FILTER(condition=KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric) != 0:numeric & DEFAULT_TO(anything_n_rows, 0:numeric) > RELAVG(args=[DEFAULT_TO(anything_n_rows, 0:numeric)], partition=[], order=[]), columns={'anything_n_rows': anything_n_rows, 'anything_sum_n_rows': anything_sum_n_rows, 'c_custkey': c_custkey, 'count_o_custkey': count_o_custkey}) + AGGREGATE(keys={'c_custkey': c_custkey}, aggregations={'anything_n_rows': ANYTHING(n_rows), 'anything_sum_n_rows': ANYTHING(sum_n_rows), 'count_o_custkey': COUNT(o_custkey)}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_rows': t0.n_rows, 'o_custkey': t1.o_custkey, 'sum_n_rows': t0.sum_n_rows}) + LIMIT(limit=20:numeric, columns={'c_custkey': c_custkey, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows}, orderings=[(c_custkey):asc_first]) + JOIN(condition=t0.c_custkey == t1.anything_o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows}) + LIMIT(limit=35:numeric, columns={'c_custkey': c_custkey}, orderings=[(c_custkey):asc_first]) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey}) + FILTER(condition=c_mktsegment == 'BUILDING':string, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_nationkey': c_nationkey}) + FILTER(condition=n_name == 'FRANCE':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'anything_o_custkey': anything_o_custkey, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows}) + AGGREGATE(keys={'anything_o_custkey': anything_o_custkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_l_orderkey, count_l_orderkey != 0:numeric))}) + AGGREGATE(keys={'l_orderkey': o_orderkey}, aggregations={'anything_o_custkey': ANYTHING(o_custkey), 'count_l_orderkey': COUNT(l_orderkey)}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_orderkey': t1.l_orderkey, 'o_custkey': t0.o_custkey, 'o_orderkey': t0.o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + JOIN(condition=t0.l_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_orderkey': t0.l_orderkey}) + FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey}) + SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_tax': l_tax}) + FILTER(condition=p_size < 5:numeric, columns={'p_partkey': p_partkey}) + SCAN(table=tpch.PART, columns={'p_partkey': p_partkey, 'p_size': p_size}) JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'o_custkey': t0.o_custkey}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) FILTER(condition=l_discount == 0:numeric & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey}) diff --git a/tests/test_plan_refsols/common_prefix_i.txt b/tests/test_plan_refsols/common_prefix_i.txt index 273489ad8..f72b7a314 100644 --- a/tests/test_plan_refsols/common_prefix_i.txt +++ b/tests/test_plan_refsols/common_prefix_i.txt @@ -1,7 +1,7 @@ ROOT(columns=[('name', n_name), ('n_customers', n_rows), ('n_selected_orders', sum_n_rows)], orderings=[(n_rows):desc_last, (n_name):asc_first], limit=5:numeric) JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'n_name': t0.n_name, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows}) SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - FILTER(condition=sum_n_rows > 0:numeric, columns={'c_nationkey': c_nationkey, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'c_nationkey': c_nationkey, 'n_rows': n_rows, 'sum_n_rows': sum_n_rows}) AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_nationkey': t0.c_nationkey, 'n_rows': t1.n_rows}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) diff --git a/tests/test_plan_refsols/common_prefix_n.txt b/tests/test_plan_refsols/common_prefix_n.txt index 653b6db49..0ac7dc610 100644 --- a/tests/test_plan_refsols/common_prefix_n.txt +++ b/tests/test_plan_refsols/common_prefix_n.txt @@ -1,10 +1,10 @@ -ROOT(columns=[('key', o_orderkey), ('order_date', o_orderdate), ('n_elements', DEFAULT_TO(n_rows, 0:numeric)), ('total_retail_price', DEFAULT_TO(sum_p_retailprice, 0:numeric)), ('n_unique_supplier_nations', DEFAULT_TO(ndistinct_n_name, 0:numeric)), ('max_supplier_balance', max_s_acctbal), ('n_small_parts', DEFAULT_TO(sum_n_rows, 0:numeric))], orderings=[(o_orderdate):desc_last, (o_orderkey):asc_first], limit=5:numeric) - FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) > DEFAULT_TO(ndistinct_n_name, 0:numeric), columns={'max_s_acctbal': max_s_acctbal, 'n_rows': n_rows, 'ndistinct_n_name': ndistinct_n_name, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'sum_n_rows': sum_n_rows, 'sum_p_retailprice': sum_p_retailprice}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'max_s_acctbal': t0.max_s_acctbal, 'n_rows': t0.n_rows, 'ndistinct_n_name': t1.ndistinct_n_name, 'o_orderdate': t0.o_orderdate, 'o_orderkey': t0.o_orderkey, 'sum_n_rows': t0.sum_n_rows, 'sum_p_retailprice': t0.sum_p_retailprice}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'max_s_acctbal': t1.max_s_acctbal, 'n_rows': t1.n_rows, 'o_orderdate': t0.o_orderdate, 'o_orderkey': t0.o_orderkey, 'sum_n_rows': t1.sum_n_rows, 'sum_p_retailprice': t1.sum_p_retailprice}) - FILTER(condition=YEAR(o_orderdate) == 1996:numeric & ISIN(MONTH(o_orderdate), [10, 11, 12]:array[numeric]), columns={'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'max_s_acctbal': MAX(s_acctbal), 'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_p_retailprice': SUM(p_retailprice)}) +ROOT(columns=[('key', l_orderkey), ('order_date', anything_o_orderdate), ('n_elements', DEFAULT_TO(n_rows, 0:numeric)), ('total_retail_price', DEFAULT_TO(sum_p_retailprice, 0:numeric)), ('n_unique_supplier_nations', DEFAULT_TO(ndistinct_n_name, 0:numeric)), ('max_supplier_balance', max_s_acctbal), ('n_small_parts', DEFAULT_TO(sum_n_rows, 0:numeric))], orderings=[(anything_o_orderdate):desc_last, (l_orderkey):asc_first], limit=5:numeric) + FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) > DEFAULT_TO(ndistinct_n_name, 0:numeric), columns={'anything_o_orderdate': anything_o_orderdate, 'l_orderkey': l_orderkey, 'max_s_acctbal': max_s_acctbal, 'n_rows': n_rows, 'ndistinct_n_name': ndistinct_n_name, 'sum_n_rows': sum_n_rows, 'sum_p_retailprice': sum_p_retailprice}) + JOIN(condition=t0.l_orderkey == t1.l_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_o_orderdate': t0.anything_o_orderdate, 'l_orderkey': t0.l_orderkey, 'max_s_acctbal': t0.max_s_acctbal, 'n_rows': t0.n_rows, 'ndistinct_n_name': t1.ndistinct_n_name, 'sum_n_rows': t0.sum_n_rows, 'sum_p_retailprice': t0.sum_p_retailprice}) + AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'anything_o_orderdate': ANYTHING(o_orderdate), 'max_s_acctbal': MAX(s_acctbal), 'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows), 'sum_p_retailprice': SUM(p_retailprice)}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_orderkey': t1.l_orderkey, 'n_rows': t1.n_rows, 'o_orderdate': t0.o_orderdate, 'p_retailprice': t1.p_retailprice, 's_acctbal': t1.s_acctbal}) + FILTER(condition=YEAR(o_orderdate) == 1996:numeric & ISIN(MONTH(o_orderdate), [10, 11, 12]:array[numeric]), columns={'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) JOIN(condition=t0.l_partkey == t1.p_partkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_orderkey': t0.l_orderkey, 'n_rows': t1.n_rows, 'p_retailprice': t0.p_retailprice, 's_acctbal': t0.s_acctbal}) JOIN(condition=t0.l_suppkey == t1.s_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'l_orderkey': t0.l_orderkey, 'l_partkey': t0.l_partkey, 'p_retailprice': t0.p_retailprice, 's_acctbal': t1.s_acctbal}) JOIN(condition=t0.l_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'l_orderkey': t0.l_orderkey, 'l_partkey': t0.l_partkey, 'l_suppkey': t0.l_suppkey, 'p_retailprice': t1.p_retailprice}) diff --git a/tests/test_plan_refsols/common_prefix_o.txt b/tests/test_plan_refsols/common_prefix_o.txt index 1c257b121..fe0307f7b 100644 --- a/tests/test_plan_refsols/common_prefix_o.txt +++ b/tests/test_plan_refsols/common_prefix_o.txt @@ -4,7 +4,7 @@ ROOT(columns=[('key', o_orderkey), ('order_date', o_orderdate), ('n_elements', D JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'max_s_acctbal': t1.max_s_acctbal, 'o_orderdate': t0.o_orderdate, 'o_orderkey': t0.o_orderkey, 'sum_sum_n_rows': t1.sum_sum_n_rows, 'sum_sum_p_retailprice': t1.sum_sum_p_retailprice, 'sum_sum_sum_n_rows': t1.sum_sum_sum_n_rows}) FILTER(condition=YEAR(o_orderdate) == 1996:numeric & ISIN(MONTH(o_orderdate), [10, 11, 12]:array[numeric]), columns={'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) SCAN(table=tpch.ORDERS, columns={'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) - FILTER(condition=sum_sum_sum_n_rows > 0:numeric, columns={'l_orderkey': l_orderkey, 'max_s_acctbal': max_s_acctbal, 'sum_sum_n_rows': sum_sum_n_rows, 'sum_sum_p_retailprice': sum_sum_p_retailprice, 'sum_sum_sum_n_rows': sum_sum_sum_n_rows}) + FILTER(condition=sum_sum_sum_n_rows != 0:numeric, columns={'l_orderkey': l_orderkey, 'max_s_acctbal': max_s_acctbal, 'sum_sum_n_rows': sum_sum_n_rows, 'sum_sum_p_retailprice': sum_sum_p_retailprice, 'sum_sum_sum_n_rows': sum_sum_sum_n_rows}) AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'max_s_acctbal': MAX(s_acctbal), 'sum_sum_n_rows': SUM(sum_n_rows), 'sum_sum_p_retailprice': SUM(sum_p_retailprice), 'sum_sum_sum_n_rows': SUM(sum_sum_n_rows)}) JOIN(condition=t0.l_suppkey == t1.s_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'l_orderkey': t0.l_orderkey, 's_acctbal': t1.s_acctbal, 'sum_n_rows': t0.sum_n_rows, 'sum_p_retailprice': t0.sum_p_retailprice, 'sum_sum_n_rows': t0.sum_sum_n_rows}) AGGREGATE(keys={'l_orderkey': l_orderkey, 'l_suppkey': l_suppkey}, aggregations={'sum_n_rows': SUM(n_rows), 'sum_p_retailprice': SUM(p_retailprice), 'sum_sum_n_rows': SUM(sum_n_rows)}) diff --git a/tests/test_plan_refsols/common_prefix_r.txt b/tests/test_plan_refsols/common_prefix_r.txt index 2f9ad6dc7..1adea801e 100644 --- a/tests/test_plan_refsols/common_prefix_r.txt +++ b/tests/test_plan_refsols/common_prefix_r.txt @@ -1,7 +1,7 @@ ROOT(columns=[('name', c_name), ('part_name', max_anything_p_name), ('line_price', max_anything_l_extendedprice), ('total_spent', DEFAULT_TO(sum_o_totalprice, 0:numeric))], orderings=[(DEFAULT_TO(sum_o_totalprice, 0:numeric)):desc_last, (c_name):asc_first], limit=5:numeric) JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_name': t0.c_name, 'max_anything_l_extendedprice': t1.max_anything_l_extendedprice, 'max_anything_p_name': t1.max_anything_p_name, 'sum_o_totalprice': t1.sum_o_totalprice}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_name': c_name}) - FILTER(condition=sum_n_rows > 0:numeric, columns={'max_anything_l_extendedprice': max_anything_l_extendedprice, 'max_anything_p_name': max_anything_p_name, 'o_custkey': o_custkey, 'sum_o_totalprice': sum_o_totalprice}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'max_anything_l_extendedprice': max_anything_l_extendedprice, 'max_anything_p_name': max_anything_p_name, 'o_custkey': o_custkey, 'sum_o_totalprice': sum_o_totalprice}) AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'max_anything_l_extendedprice': MAX(anything_l_extendedprice), 'max_anything_p_name': MAX(anything_p_name), 'sum_n_rows': SUM(n_rows), 'sum_o_totalprice': SUM(o_totalprice)}) JOIN(condition=t0.o_orderkey == t1.o_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'anything_l_extendedprice': t1.anything_l_extendedprice, 'anything_p_name': t1.anything_p_name, 'n_rows': t1.n_rows, 'o_custkey': t0.o_custkey, 'o_totalprice': t0.o_totalprice}) FILTER(condition=YEAR(o_orderdate) == 1998:numeric & o_orderpriority == '1-URGENT':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey, 'o_totalprice': o_totalprice}) diff --git a/tests/test_plan_refsols/common_prefix_t.txt b/tests/test_plan_refsols/common_prefix_t.txt index 1b9a18e15..e9c28a52e 100644 --- a/tests/test_plan_refsols/common_prefix_t.txt +++ b/tests/test_plan_refsols/common_prefix_t.txt @@ -1,12 +1,12 @@ -ROOT(columns=[('name', c_name), ('total_qty', DEFAULT_TO(sum_sum_l_quantity, 0:numeric))], orderings=[(DEFAULT_TO(sum_sum_l_quantity, 0:numeric)):desc_last, (c_name):asc_first], limit=5:numeric) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'sum_sum_l_quantity': t1.sum_sum_l_quantity}) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'c_name': t0.c_name}) - FILTER(condition=c_mktsegment == 'BUILDING':string, columns={'c_custkey': c_custkey, 'c_name': c_name, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_name': c_name, 'c_nationkey': c_nationkey}) - FILTER(condition=n_name == 'INDIA':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'sum_sum_l_quantity': SUM(sum_l_quantity)}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'o_custkey': t0.o_custkey, 'sum_l_quantity': t1.sum_l_quantity}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'sum_l_quantity': SUM(l_quantity)}) +ROOT(columns=[('name', anything_c_name), ('total_qty', DEFAULT_TO(sum_sum_l_quantity, 0:numeric))], orderings=[(DEFAULT_TO(sum_sum_l_quantity, 0:numeric)):desc_last, (anything_c_name):asc_first], limit=5:numeric) + AGGREGATE(keys={'anything_o_custkey': anything_o_custkey}, aggregations={'anything_c_name': ANYTHING(c_name), 'sum_sum_l_quantity': SUM(sum_l_quantity)}) + JOIN(condition=t0.c_custkey == t1.anything_o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_o_custkey': t1.anything_o_custkey, 'c_name': t0.c_name, 'sum_l_quantity': t1.sum_l_quantity}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'c_name': t0.c_name}) + FILTER(condition=c_mktsegment == 'BUILDING':string, columns={'c_custkey': c_custkey, 'c_name': c_name, 'c_nationkey': c_nationkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_name': c_name, 'c_nationkey': c_nationkey}) + FILTER(condition=n_name == 'INDIA':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) + AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'anything_o_custkey': ANYTHING(o_custkey), 'sum_l_quantity': SUM(l_quantity)}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'l_orderkey': t1.l_orderkey, 'l_quantity': t1.l_quantity, 'o_custkey': t0.o_custkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_quantity': l_quantity}) diff --git a/tests/test_plan_refsols/common_prefix_u.txt b/tests/test_plan_refsols/common_prefix_u.txt index 5129a5674..f4fc2e1e8 100644 --- a/tests/test_plan_refsols/common_prefix_u.txt +++ b/tests/test_plan_refsols/common_prefix_u.txt @@ -1,14 +1,14 @@ ROOT(columns=[('name', c_name), ('total_qty', DEFAULT_TO(sum_sum_l_quantity, 0:numeric))], orderings=[(DEFAULT_TO(sum_sum_l_quantity, 0:numeric)):desc_last, (c_name):asc_first], limit=5:numeric) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'sum_sum_l_quantity': t1.sum_sum_l_quantity}) + JOIN(condition=t0.c_custkey == t1.anything_o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'sum_sum_l_quantity': t1.sum_sum_l_quantity}) JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'c_name': t0.c_name}) FILTER(condition=c_mktsegment == 'BUILDING':string, columns={'c_custkey': c_custkey, 'c_name': c_name, 'c_nationkey': c_nationkey}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_name': c_name, 'c_nationkey': c_nationkey}) FILTER(condition=n_name == 'INDIA':string, columns={'n_nationkey': n_nationkey}) SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - FILTER(condition=sum_n_rows > 0:numeric, columns={'o_custkey': o_custkey, 'sum_sum_l_quantity': sum_sum_l_quantity}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'sum_n_rows': SUM(n_rows), 'sum_sum_l_quantity': SUM(sum_l_quantity)}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'o_custkey': t0.o_custkey, 'sum_l_quantity': t1.sum_l_quantity}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'n_rows': COUNT(), 'sum_l_quantity': SUM(l_quantity)}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'anything_o_custkey': anything_o_custkey, 'sum_sum_l_quantity': sum_sum_l_quantity}) + AGGREGATE(keys={'anything_o_custkey': anything_o_custkey}, aggregations={'sum_n_rows': SUM(KEEP_IF(count_l_orderkey, count_l_orderkey != 0:numeric)), 'sum_sum_l_quantity': SUM(sum_l_quantity)}) + AGGREGATE(keys={'l_orderkey': o_orderkey}, aggregations={'anything_o_custkey': ANYTHING(o_custkey), 'count_l_orderkey': COUNT(l_orderkey), 'sum_l_quantity': SUM(l_quantity)}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_orderkey': t1.l_orderkey, 'l_quantity': t1.l_quantity, 'o_custkey': t0.o_custkey, 'o_orderkey': t0.o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) FILTER(condition=l_shipmode == 'RAIL':string & l_tax == 0:numeric, columns={'l_orderkey': l_orderkey, 'l_quantity': l_quantity}) SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_quantity': l_quantity, 'l_shipmode': l_shipmode, 'l_tax': l_tax}) diff --git a/tests/test_plan_refsols/common_prefix_v.txt b/tests/test_plan_refsols/common_prefix_v.txt index 72dfc31e5..1d607394a 100644 --- a/tests/test_plan_refsols/common_prefix_v.txt +++ b/tests/test_plan_refsols/common_prefix_v.txt @@ -1,5 +1,5 @@ ROOT(columns=[('name', c_name), ('region_name', r_name)], orderings=[(c_name):asc_first], limit=5:numeric) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'c_name': t0.c_name, 'r_name': t1.r_name}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_name': t0.c_name, 'r_name': t1.r_name}) SCAN(table=tpch.CUSTOMER, columns={'c_name': c_name, 'c_nationkey': c_nationkey}) JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'n_nationkey': t0.n_nationkey, 'r_name': t1.r_name}) FILTER(condition=SLICE(n_name, None:unknown, 1:numeric, None:unknown) == 'A':string, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) diff --git a/tests/test_plan_refsols/common_prefix_x.txt b/tests/test_plan_refsols/common_prefix_x.txt index e1afb10cf..bd980d6e2 100644 --- a/tests/test_plan_refsols/common_prefix_x.txt +++ b/tests/test_plan_refsols/common_prefix_x.txt @@ -1,10 +1,10 @@ ROOT(columns=[('name', c_name), ('n_orders', n_rows)], orderings=[(n_rows):desc_last, (c_name):asc_first], limit=5:numeric) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'n_rows': t1.n_rows}) + JOIN(condition=t0.c_custkey == t1.anything_o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'n_rows': t1.n_rows}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_name': c_name}) - FILTER(condition=sum_n_rows > 0:numeric, columns={'n_rows': n_rows, 'o_custkey': o_custkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'o_custkey': t0.o_custkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'n_rows': COUNT()}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'anything_o_custkey': anything_o_custkey, 'n_rows': n_rows}) + AGGREGATE(keys={'anything_o_custkey': anything_o_custkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_l_orderkey, count_l_orderkey != 0:numeric))}) + AGGREGATE(keys={'l_orderkey': o_orderkey}, aggregations={'anything_o_custkey': ANYTHING(o_custkey), 'count_l_orderkey': COUNT(l_orderkey)}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_orderkey': t1.l_orderkey, 'o_custkey': t0.o_custkey, 'o_orderkey': t0.o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) FILTER(condition=l_tax == 0:numeric, columns={'l_orderkey': l_orderkey}) SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_tax': l_tax}) diff --git a/tests/test_plan_refsols/common_prefix_y.txt b/tests/test_plan_refsols/common_prefix_y.txt index a5ae2d504..440747c1c 100644 --- a/tests/test_plan_refsols/common_prefix_y.txt +++ b/tests/test_plan_refsols/common_prefix_y.txt @@ -1,10 +1,12 @@ -ROOT(columns=[('name', c_name), ('n_orders', DEFAULT_TO(n_rows, 0:numeric))], orderings=[(DEFAULT_TO(n_rows, 0:numeric)):desc_last, (c_name):asc_first], limit=5:numeric) - FILTER(condition=DEFAULT_TO(sum_n_rows, 0:numeric) == 0:numeric, columns={'c_name': c_name, 'n_rows': n_rows}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_name': c_name}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'o_custkey': t0.o_custkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'n_rows': COUNT()}) - FILTER(condition=l_tax == 0:numeric, columns={'l_orderkey': l_orderkey}) - SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_tax': l_tax}) +ROOT(columns=[('name', anything_c_name), ('n_orders', DEFAULT_TO(KEEP_IF(count_anything_o_custkey, count_anything_o_custkey != 0:numeric), 0:numeric))], orderings=[(DEFAULT_TO(KEEP_IF(count_anything_o_custkey, count_anything_o_custkey != 0:numeric), 0:numeric)):desc_last, (anything_c_name):asc_first], limit=5:numeric) + FILTER(condition=DEFAULT_TO(sum_n_rows, 0:numeric) == 0:numeric, columns={'anything_c_name': anything_c_name, 'count_anything_o_custkey': count_anything_o_custkey}) + AGGREGATE(keys={'o_custkey': c_custkey}, aggregations={'anything_c_name': ANYTHING(c_name), 'count_anything_o_custkey': COUNT(anything_o_custkey), 'sum_n_rows': SUM(n_rows)}) + JOIN(condition=t0.c_custkey == t1.anything_o_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_o_custkey': t1.anything_o_custkey, 'c_custkey': t0.c_custkey, 'c_name': t0.c_name, 'n_rows': t1.n_rows}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_name': c_name}) + PROJECT(columns={'anything_o_custkey': anything_o_custkey, 'n_rows': KEEP_IF(count_l_orderkey, count_l_orderkey != 0:numeric)}) + AGGREGATE(keys={'l_orderkey': o_orderkey}, aggregations={'anything_o_custkey': ANYTHING(o_custkey), 'count_l_orderkey': COUNT(l_orderkey)}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_orderkey': t1.l_orderkey, 'o_custkey': t0.o_custkey, 'o_orderkey': t0.o_orderkey}) + FILTER(condition=o_clerk == 'Clerk#000000001':string, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_clerk': o_clerk, 'o_custkey': o_custkey, 'o_orderkey': o_orderkey}) + FILTER(condition=l_tax == 0:numeric, columns={'l_orderkey': l_orderkey}) + SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_tax': l_tax}) diff --git a/tests/test_plan_refsols/correl_13.txt b/tests/test_plan_refsols/correl_13.txt index 1bb720dea..bbc2f4c36 100644 --- a/tests/test_plan_refsols/correl_13.txt +++ b/tests/test_plan_refsols/correl_13.txt @@ -1,10 +1,9 @@ -ROOT(columns=[('n', n_rows)], orderings=[]) - AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={}) +ROOT(columns=[('n', ndistinct_ps_suppkey)], orderings=[]) + AGGREGATE(keys={}, aggregations={'ndistinct_ps_suppkey': NDISTINCT(ps_suppkey)}) + JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'ps_suppkey': t1.ps_suppkey}) FILTER(condition=s_nationkey <= 3:numeric, columns={'s_suppkey': s_suppkey}) SCAN(table=tpch.SUPPLIER, columns={'s_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - AGGREGATE(keys={'ps_suppkey': ps_suppkey}, aggregations={}) - JOIN(condition=t1.p_retailprice < t0.ps_supplycost * 1.5:numeric & t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'ps_suppkey': t0.ps_suppkey}) - SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey, 'ps_supplycost': ps_supplycost}) - FILTER(condition=STARTSWITH(p_container, 'SM':string), columns={'p_partkey': p_partkey, 'p_retailprice': p_retailprice}) - SCAN(table=tpch.PART, columns={'p_container': p_container, 'p_partkey': p_partkey, 'p_retailprice': p_retailprice}) + JOIN(condition=t1.p_retailprice < t0.ps_supplycost * 1.5:numeric & t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'ps_suppkey': t0.ps_suppkey}) + SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey, 'ps_supplycost': ps_supplycost}) + FILTER(condition=STARTSWITH(p_container, 'SM':string), columns={'p_partkey': p_partkey, 'p_retailprice': p_retailprice}) + SCAN(table=tpch.PART, columns={'p_container': p_container, 'p_partkey': p_partkey, 'p_retailprice': p_retailprice}) diff --git a/tests/test_plan_refsols/correl_14.txt b/tests/test_plan_refsols/correl_14.txt index 1ad331485..9fe75904a 100644 --- a/tests/test_plan_refsols/correl_14.txt +++ b/tests/test_plan_refsols/correl_14.txt @@ -1,11 +1,11 @@ -ROOT(columns=[('n', ndistinct_s_suppkey)], orderings=[]) - AGGREGATE(keys={}, aggregations={'ndistinct_s_suppkey': NDISTINCT(s_suppkey)}) - JOIN(condition=t1.p_retailprice < t0.ps_supplycost * 1.5:numeric & t1.p_retailprice < t0.avg_p_retailprice & t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'s_suppkey': t0.s_suppkey}) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'avg_p_retailprice': t0.avg_p_retailprice, 'ps_partkey': t1.ps_partkey, 'ps_supplycost': t1.ps_supplycost, 's_suppkey': t0.s_suppkey}) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'avg_p_retailprice': t1.avg_p_retailprice, 's_suppkey': t0.s_suppkey}) - FILTER(condition=s_acctbal < 1000:numeric & s_nationkey == 19:numeric, columns={'s_suppkey': s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - AGGREGATE(keys={'ps_suppkey': ps_suppkey}, aggregations={'avg_p_retailprice': AVG(p_retailprice)}) +ROOT(columns=[('n', ndistinct_ps_suppkey)], orderings=[]) + AGGREGATE(keys={}, aggregations={'ndistinct_ps_suppkey': NDISTINCT(ps_suppkey)}) + JOIN(condition=t1.p_retailprice < t0.ps_supplycost * 1.5:numeric & t1.p_retailprice < t0.avg_p_retailprice & t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'ps_suppkey': t0.ps_suppkey}) + JOIN(condition=t0.ps_suppkey == t1.ps_suppkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'avg_p_retailprice': t0.avg_p_retailprice, 'ps_partkey': t1.ps_partkey, 'ps_suppkey': t0.ps_suppkey, 'ps_supplycost': t1.ps_supplycost}) + AGGREGATE(keys={'ps_suppkey': ps_suppkey}, aggregations={'avg_p_retailprice': AVG(p_retailprice)}) + JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'p_retailprice': t1.p_retailprice, 'ps_suppkey': t1.ps_suppkey}) + FILTER(condition=s_acctbal < 1000:numeric & s_nationkey == 19:numeric, columns={'s_suppkey': s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) JOIN(condition=t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'p_retailprice': t1.p_retailprice, 'ps_suppkey': t0.ps_suppkey}) SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) SCAN(table=tpch.PART, columns={'p_partkey': p_partkey, 'p_retailprice': p_retailprice}) diff --git a/tests/test_plan_refsols/correl_15.txt b/tests/test_plan_refsols/correl_15.txt index 7ee7d9d0f..2f8b7cb03 100644 --- a/tests/test_plan_refsols/correl_15.txt +++ b/tests/test_plan_refsols/correl_15.txt @@ -1,14 +1,14 @@ -ROOT(columns=[('n', ndistinct_s_suppkey)], orderings=[]) - AGGREGATE(keys={}, aggregations={'ndistinct_s_suppkey': NDISTINCT(s_suppkey)}) - JOIN(condition=t1.p_retailprice < t0.avg_p_retailprice * 0.85:numeric & t1.p_retailprice < t0.ps_supplycost * 1.5:numeric & t1.p_retailprice < t0.supplier_avg_price & t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'s_suppkey': t0.s_suppkey}) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'avg_p_retailprice': t0.avg_p_retailprice, 'ps_partkey': t1.ps_partkey, 'ps_supplycost': t1.ps_supplycost, 's_suppkey': t0.s_suppkey, 'supplier_avg_price': t0.supplier_avg_price}) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'avg_p_retailprice': t0.avg_p_retailprice, 's_suppkey': t0.s_suppkey, 'supplier_avg_price': t1.avg_p_retailprice}) - JOIN(condition=True:bool, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_p_retailprice': t0.avg_p_retailprice, 's_suppkey': t1.s_suppkey}) - AGGREGATE(keys={}, aggregations={'avg_p_retailprice': AVG(p_retailprice)}) - SCAN(table=tpch.PART, columns={'p_retailprice': p_retailprice}) - FILTER(condition=s_acctbal < 1000:numeric & s_nationkey == 19:numeric, columns={'s_suppkey': s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - AGGREGATE(keys={'ps_suppkey': ps_suppkey}, aggregations={'avg_p_retailprice': AVG(p_retailprice)}) +ROOT(columns=[('n', ndistinct_ps_suppkey)], orderings=[]) + AGGREGATE(keys={}, aggregations={'ndistinct_ps_suppkey': NDISTINCT(ps_suppkey)}) + JOIN(condition=t1.p_retailprice < t0.anything_avg_p_retailprice * 0.85:numeric & t1.p_retailprice < t0.ps_supplycost * 1.5:numeric & t1.p_retailprice < t0.supplier_avg_price & t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'ps_suppkey': t0.ps_suppkey}) + JOIN(condition=t0.ps_suppkey == t1.ps_suppkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_avg_p_retailprice': t0.anything_avg_p_retailprice, 'ps_partkey': t1.ps_partkey, 'ps_suppkey': t0.ps_suppkey, 'ps_supplycost': t1.ps_supplycost, 'supplier_avg_price': t0.supplier_avg_price}) + AGGREGATE(keys={'ps_suppkey': ps_suppkey}, aggregations={'anything_avg_p_retailprice': ANYTHING(avg_p_retailprice), 'supplier_avg_price': AVG(p_retailprice)}) + JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'avg_p_retailprice': t0.avg_p_retailprice, 'p_retailprice': t1.p_retailprice, 'ps_suppkey': t1.ps_suppkey}) + JOIN(condition=True:bool, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_p_retailprice': t0.avg_p_retailprice, 's_suppkey': t1.s_suppkey}) + AGGREGATE(keys={}, aggregations={'avg_p_retailprice': AVG(p_retailprice)}) + SCAN(table=tpch.PART, columns={'p_retailprice': p_retailprice}) + FILTER(condition=s_acctbal < 1000:numeric & s_nationkey == 19:numeric, columns={'s_suppkey': s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) JOIN(condition=t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'p_retailprice': t1.p_retailprice, 'ps_suppkey': t0.ps_suppkey}) SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) SCAN(table=tpch.PART, columns={'p_partkey': p_partkey, 'p_retailprice': p_retailprice}) diff --git a/tests/test_plan_refsols/correl_29.txt b/tests/test_plan_refsols/correl_29.txt index 84faa88d0..72f58693b 100644 --- a/tests/test_plan_refsols/correl_29.txt +++ b/tests/test_plan_refsols/correl_29.txt @@ -1,17 +1,17 @@ -ROOT(columns=[('region_key', anything_n_regionkey), ('nation_name', anything_n_name), ('n_above_avg_customers', n_rows), ('n_above_avg_suppliers', agg_3_14), ('min_cust_acctbal', min_c_acctbal), ('max_cust_acctbal', max_c_acctbal)], orderings=[(anything_n_regionkey):asc_first, (anything_n_name):asc_first]) - JOIN(condition=t0.n_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'agg_3_14': t1.n_rows, 'anything_n_name': t0.anything_n_name, 'anything_n_regionkey': t0.anything_n_regionkey, 'max_c_acctbal': t0.max_c_acctbal, 'min_c_acctbal': t0.min_c_acctbal, 'n_rows': t0.n_rows}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'anything_n_name': t0.anything_n_name, 'anything_n_regionkey': t0.anything_n_regionkey, 'max_c_acctbal': t1.max_c_acctbal, 'min_c_acctbal': t1.min_c_acctbal, 'n_nationkey': t0.n_nationkey, 'n_rows': t0.n_rows}) - FILTER(condition=ISIN(anything_n_regionkey, [1, 3]:array[unknown]), columns={'anything_n_name': anything_n_name, 'anything_n_regionkey': anything_n_regionkey, 'n_nationkey': n_nationkey, 'n_rows': n_rows}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'anything_n_regionkey': ANYTHING(n_regionkey), 'n_rows': COUNT()}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey & t1.c_acctbal > t0.avg_c_acctbal, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_regionkey': t0.n_regionkey}) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_c_acctbal': t1.avg_c_acctbal, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_regionkey': t0.n_regionkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'avg_c_acctbal': AVG(c_acctbal)}) +ROOT(columns=[('region_key', anything_anything_anything_n_regionkey), ('nation_name', anything_anything_anything_n_name), ('n_above_avg_customers', anything_anything_n_rows), ('n_above_avg_suppliers', agg_3_14), ('min_cust_acctbal', anything_min_c_acctbal), ('max_cust_acctbal', anything_max_c_acctbal)], orderings=[(anything_anything_anything_n_regionkey):asc_first, (anything_anything_anything_n_name):asc_first]) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'agg_3_14': COUNT(), 'anything_anything_anything_n_name': ANYTHING(anything_anything_n_name), 'anything_anything_anything_n_regionkey': ANYTHING(anything_anything_n_regionkey), 'anything_anything_n_rows': ANYTHING(anything_n_rows), 'anything_max_c_acctbal': ANYTHING(max_c_acctbal), 'anything_min_c_acctbal': ANYTHING(min_c_acctbal)}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_anything_n_name': t0.anything_anything_n_name, 'anything_anything_n_regionkey': t0.anything_anything_n_regionkey, 'anything_n_rows': t0.anything_n_rows, 'max_c_acctbal': t0.max_c_acctbal, 'min_c_acctbal': t0.min_c_acctbal, 'n_nationkey': t1.n_nationkey}) + AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'anything_anything_n_name': ANYTHING(anything_n_name), 'anything_anything_n_regionkey': ANYTHING(anything_n_regionkey), 'anything_n_rows': ANYTHING(n_rows), 'max_c_acctbal': MAX(c_acctbal), 'min_c_acctbal': MIN(c_acctbal)}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'anything_n_name': t0.anything_n_name, 'anything_n_regionkey': t0.anything_n_regionkey, 'c_acctbal': t1.c_acctbal, 'c_nationkey': t1.c_nationkey, 'n_rows': t0.n_rows}) + FILTER(condition=ISIN(anything_n_regionkey, [1, 3]:array[unknown]), columns={'anything_n_name': anything_n_name, 'anything_n_regionkey': anything_n_regionkey, 'n_nationkey': n_nationkey, 'n_rows': n_rows}) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'anything_n_regionkey': ANYTHING(n_regionkey), 'n_rows': COUNT()}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey & t1.c_acctbal > t0.avg_c_acctbal, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_regionkey': t0.n_regionkey}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_c_acctbal': t1.avg_c_acctbal, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_regionkey': t0.n_regionkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'avg_c_acctbal': AVG(c_acctbal)}) + SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_nationkey': c_nationkey}) SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_nationkey': c_nationkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'max_c_acctbal': MAX(c_acctbal), 'min_c_acctbal': MIN(c_acctbal)}) - SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'n_rows': COUNT()}) + SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_nationkey': c_nationkey}) JOIN(condition=t0.n_nationkey == t1.s_nationkey & t1.s_acctbal > t0.avg_s_acctbal, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_nationkey': t0.n_nationkey}) JOIN(condition=t0.n_nationkey == t1.s_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_s_acctbal': t1.avg_s_acctbal, 'n_nationkey': t0.n_nationkey}) SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey}) diff --git a/tests/test_plan_refsols/correl_30.txt b/tests/test_plan_refsols/correl_30.txt index 0912d4959..a9718cf64 100644 --- a/tests/test_plan_refsols/correl_30.txt +++ b/tests/test_plan_refsols/correl_30.txt @@ -1,6 +1,6 @@ -ROOT(columns=[('region_name', anything_lower_r_name), ('nation_name', anything_n_name), ('n_above_avg_customers', n_rows), ('n_above_avg_suppliers', n_above_avg_suppliers)], orderings=[(anything_lower_r_name):asc_first, (anything_n_name):asc_first]) - JOIN(condition=t0.n_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'anything_lower_r_name': t0.anything_lower_r_name, 'anything_n_name': t0.anything_n_name, 'n_above_avg_suppliers': t1.n_rows, 'n_rows': t0.n_rows}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_lower_r_name': ANYTHING(LOWER(r_name)), 'anything_n_name': ANYTHING(n_name), 'n_rows': COUNT()}) +ROOT(columns=[('region_name', anything_lower_r_name), ('nation_name', anything_n_name), ('n_above_avg_customers', n_rows), ('n_above_avg_suppliers', anything_n_rows)], orderings=[(anything_lower_r_name):asc_first, (anything_n_name):asc_first]) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'anything_lower_r_name': ANYTHING(LOWER(r_name)), 'anything_n_name': ANYTHING(n_name), 'anything_n_rows': ANYTHING(n_rows), 'n_rows': COUNT()}) + JOIN(condition=t0.n_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_rows': t1.n_rows, 'r_name': t0.r_name}) JOIN(condition=t0.n_nationkey == t1.c_nationkey & t1.c_acctbal > t0.avg_c_acctbal, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'r_name': t0.r_name}) JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'avg_c_acctbal': t0.avg_c_acctbal, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'r_name': t1.r_name}) JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_c_acctbal': t1.avg_c_acctbal, 'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'n_regionkey': t0.n_regionkey}) @@ -10,13 +10,13 @@ ROOT(columns=[('region_name', anything_lower_r_name), ('nation_name', anything_n FILTER(condition=NOT(ISIN(r_name, ['MIDDLE EAST', 'AFRICA', 'ASIA']:array[unknown])), columns={'r_name': r_name, 'r_regionkey': r_regionkey}) SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_nationkey': c_nationkey}) - AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.n_nationkey == t1.s_nationkey & t1.s_acctbal > t0.avg_s_acctbal, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'avg_s_acctbal': t0.avg_s_acctbal, 'n_nationkey': t0.n_nationkey}) - JOIN(condition=t0.n_nationkey == t1.s_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_s_acctbal': t1.avg_s_acctbal, 'n_nationkey': t0.n_nationkey, 'n_regionkey': t0.n_regionkey}) - SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - AGGREGATE(keys={'s_nationkey': s_nationkey}, aggregations={'avg_s_acctbal': AVG(s_acctbal)}) - SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey}) - FILTER(condition=NOT(ISIN(r_name, ['MIDDLE EAST', 'AFRICA', 'ASIA']:array[unknown])), columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey}) + AGGREGATE(keys={'n_nationkey': n_nationkey}, aggregations={'n_rows': COUNT()}) + JOIN(condition=t0.n_nationkey == t1.s_nationkey & t1.s_acctbal > t0.avg_s_acctbal, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'avg_s_acctbal': t0.avg_s_acctbal, 'n_nationkey': t0.n_nationkey}) + JOIN(condition=t0.n_nationkey == t1.s_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_s_acctbal': t1.avg_s_acctbal, 'n_nationkey': t0.n_nationkey, 'n_regionkey': t0.n_regionkey}) + SCAN(table=tpch.NATION, columns={'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + AGGREGATE(keys={'s_nationkey': s_nationkey}, aggregations={'avg_s_acctbal': AVG(s_acctbal)}) + SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey}) + FILTER(condition=NOT(ISIN(r_name, ['MIDDLE EAST', 'AFRICA', 'ASIA']:array[unknown])), columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey}) diff --git a/tests/test_plan_refsols/correl_35.txt b/tests/test_plan_refsols/correl_35.txt index 34dcbfaf6..4aaab2b34 100644 --- a/tests/test_plan_refsols/correl_35.txt +++ b/tests/test_plan_refsols/correl_35.txt @@ -10,7 +10,7 @@ ROOT(columns=[('n', n_rows)], orderings=[]) SCAN(table=tpch.SUPPLIER, columns={'s_nationkey': s_nationkey, 's_suppkey': s_suppkey}) FILTER(condition=YEAR(o_orderdate) == 1998:numeric, columns={'o_custkey': o_custkey, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey, 'o_orderpriority': o_orderpriority}) - FILTER(condition=sum_n_rows > 0:numeric, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey, 'o_orderpriority': o_orderpriority, 'p_type': p_type}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey, 'o_orderpriority': o_orderpriority, 'p_type': p_type}) AGGREGATE(keys={'c_custkey': c_custkey, 'c_nationkey': c_nationkey, 'o_orderpriority': o_orderpriority, 'p_type': p_type}, aggregations={'sum_n_rows': SUM(n_rows)}) JOIN(condition=t0.l_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'c_custkey': t0.c_custkey, 'c_nationkey': t0.c_nationkey, 'n_rows': t0.n_rows, 'o_orderpriority': t0.o_orderpriority, 'p_type': t1.p_type}) AGGREGATE(keys={'c_custkey': c_custkey, 'c_nationkey': c_nationkey, 'l_partkey': l_partkey, 'o_orderpriority': o_orderpriority}, aggregations={'n_rows': COUNT()}) diff --git a/tests/test_plan_refsols/correl_6.txt b/tests/test_plan_refsols/correl_6.txt index 3b711b4d7..a1be82d8f 100644 --- a/tests/test_plan_refsols/correl_6.txt +++ b/tests/test_plan_refsols/correl_6.txt @@ -1,5 +1,5 @@ -ROOT(columns=[('name', r_name), ('n_prefix_nations', n_rows)], orderings=[]) - JOIN(condition=SLICE(t0.r_name, None:unknown, 1:numeric, None:unknown) == t1.expr_1 & t0.r_regionkey == t1.n_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'r_name': t0.r_name}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - AGGREGATE(keys={'expr_1': SLICE(n_name, None:unknown, 1:numeric, None:unknown), 'n_regionkey': n_regionkey}, aggregations={'n_rows': COUNT()}) +ROOT(columns=[('name', anything_r_name), ('n_prefix_nations', n_rows)], orderings=[]) + AGGREGATE(keys={'expr_1': SLICE(n_name, None:unknown, 1:numeric, None:unknown), 'n_regionkey': n_regionkey}, aggregations={'anything_r_name': ANYTHING(r_name), 'n_rows': COUNT()}) + JOIN(condition=SLICE(t0.r_name, None:unknown, 1:numeric, None:unknown) == SLICE(t1.n_name, None:unknown, 1:numeric, None:unknown) & t0.r_regionkey == t1.n_regionkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t1.n_name, 'n_regionkey': t1.n_regionkey, 'r_name': t0.r_name}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_regionkey': n_regionkey}) diff --git a/tests/test_plan_refsols/cryptbank_agg_03.txt b/tests/test_plan_refsols/cryptbank_agg_03.txt deleted file mode 100644 index 712ab943b..000000000 --- a/tests/test_plan_refsols/cryptbank_agg_03.txt +++ /dev/null @@ -1,5 +0,0 @@ -ROOT(columns=[('account_type', a_type), ('balance', a_balance), ('name', JOIN_STRINGS(' ':string, c_fname, c_lname))], orderings=[]) - FILTER(condition=RANKING(args=[], partition=[a_type], order=[(a_balance):desc_first], allow_ties=False) == 1:numeric, columns={'a_balance': a_balance, 'a_type': a_type, 'c_fname': c_fname, 'c_lname': c_lname}) - JOIN(condition=t0.a_custkey == t1.c_key, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'a_balance': t0.a_balance, 'a_type': t0.a_type, 'c_fname': t1.c_fname, 'c_lname': t1.c_lname}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_balance': a_balance, 'a_custkey': a_custkey, 'a_type': a_type}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) diff --git a/tests/test_plan_refsols/cryptbank_agg_05.txt b/tests/test_plan_refsols/cryptbank_agg_05.txt deleted file mode 100644 index 1e255160c..000000000 --- a/tests/test_plan_refsols/cryptbank_agg_05.txt +++ /dev/null @@ -1,6 +0,0 @@ -ROOT(columns=[('avg_secs', ROUND(avg_expr, 2:numeric))], orderings=[]) - AGGREGATE(keys={}, aggregations={'avg_expr': AVG(DATEDIFF('seconds':string, a_open_ts, min_t_ts))}) - JOIN(condition=t0.a_key == t1.t_sourceaccount, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'a_open_ts': t0.a_open_ts, 'min_t_ts': t1.min_t_ts}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_key': a_key, 'a_open_ts': a_open_ts}) - AGGREGATE(keys={'t_sourceaccount': t_sourceaccount}, aggregations={'min_t_ts': MIN(t_ts)}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_sourceaccount': t_sourceaccount, 't_ts': t_ts}) diff --git a/tests/test_plan_refsols/cryptbank_analysis_01.txt b/tests/test_plan_refsols/cryptbank_analysis_01.txt deleted file mode 100644 index 4a670a541..000000000 --- a/tests/test_plan_refsols/cryptbank_analysis_01.txt +++ /dev/null @@ -1,13 +0,0 @@ -ROOT(columns=[('key', c_key), ('name', JOIN_STRINGS(' ':string, c_fname, c_lname)), ('first_sends', DEFAULT_TO(sum_t_amount, 0:numeric))], orderings=[(DEFAULT_TO(sum_t_amount, 0:numeric)):desc_last, (c_key):asc_first], limit=3:numeric) - JOIN(condition=t0.c_key == t1.a_custkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'c_fname': t0.c_fname, 'c_key': t0.c_key, 'c_lname': t0.c_lname, 'sum_t_amount': t1.sum_t_amount}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - AGGREGATE(keys={'a_custkey': a_custkey}, aggregations={'sum_t_amount': SUM(t_amount)}) - FILTER(condition=RANKING(args=[], partition=[t_sourceaccount], order=[(t_ts):asc_last], allow_ties=False) == 1:numeric, columns={'a_custkey': a_custkey, 't_amount': t_amount}) - JOIN(condition=t0.t_destaccount == t1.a_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_custkey': t0.a_custkey, 't_amount': t0.t_amount, 't_sourceaccount': t0.t_sourceaccount, 't_ts': t0.t_ts}) - JOIN(condition=t0.a_key == t1.t_sourceaccount, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'a_custkey': t0.a_custkey, 't_amount': t1.t_amount, 't_destaccount': t1.t_destaccount, 't_sourceaccount': t1.t_sourceaccount, 't_ts': t1.t_ts}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_amount': t_amount, 't_destaccount': t_destaccount, 't_sourceaccount': t_sourceaccount, 't_ts': t_ts}) - JOIN(condition=t0.a_branchkey == t1.b_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_key': t0.a_key}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_branchkey': a_branchkey, 'a_key': a_key}) - FILTER(condition=SLICE(b_addr, -5:numeric, None:unknown, None:unknown) == '94105':string, columns={'b_key': b_key}) - SCAN(table=CRBNK.BRANCHES, columns={'b_addr': b_addr, 'b_key': b_key}) diff --git a/tests/test_plan_refsols/cryptbank_analysis_02.txt b/tests/test_plan_refsols/cryptbank_analysis_02.txt deleted file mode 100644 index 6eeb69743..000000000 --- a/tests/test_plan_refsols/cryptbank_analysis_02.txt +++ /dev/null @@ -1,13 +0,0 @@ -ROOT(columns=[('key', c_key), ('name', JOIN_STRINGS(' ':string, c_fname, c_lname)), ('first_recvs', DEFAULT_TO(sum_t_amount, 0:numeric))], orderings=[(DEFAULT_TO(sum_t_amount, 0:numeric)):desc_last, (c_key):asc_first], limit=3:numeric) - JOIN(condition=t0.c_key == t1.a_custkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'c_fname': t0.c_fname, 'c_key': t0.c_key, 'c_lname': t0.c_lname, 'sum_t_amount': t1.sum_t_amount}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - AGGREGATE(keys={'a_custkey': a_custkey}, aggregations={'sum_t_amount': SUM(t_amount)}) - FILTER(condition=RANKING(args=[], partition=[t_destaccount], order=[(t_ts):asc_last], allow_ties=False) == 1:numeric, columns={'a_custkey': a_custkey, 't_amount': t_amount}) - JOIN(condition=t0.t_sourceaccount == t1.a_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_custkey': t0.a_custkey, 't_amount': t0.t_amount, 't_destaccount': t0.t_destaccount, 't_ts': t0.t_ts}) - JOIN(condition=t0.a_key == t1.t_destaccount, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'a_custkey': t0.a_custkey, 't_amount': t1.t_amount, 't_destaccount': t1.t_destaccount, 't_sourceaccount': t1.t_sourceaccount, 't_ts': t1.t_ts}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_amount': t_amount, 't_destaccount': t_destaccount, 't_sourceaccount': t_sourceaccount, 't_ts': t_ts}) - JOIN(condition=t0.a_branchkey == t1.b_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_key': t0.a_key}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_branchkey': a_branchkey, 'a_key': a_key}) - FILTER(condition=SLICE(b_addr, -5:numeric, None:unknown, None:unknown) == '94105':string, columns={'b_key': b_key}) - SCAN(table=CRBNK.BRANCHES, columns={'b_addr': b_addr, 'b_key': b_key}) diff --git a/tests/test_plan_refsols/cryptbank_analysis_03.txt b/tests/test_plan_refsols/cryptbank_analysis_03.txt deleted file mode 100644 index 7eb944f5e..000000000 --- a/tests/test_plan_refsols/cryptbank_analysis_03.txt +++ /dev/null @@ -1,24 +0,0 @@ -ROOT(columns=[('key', c_key), ('name', JOIN_STRINGS(' ':string, c_fname, c_lname)), ('first_sends', DEFAULT_TO(agg_1, 0:numeric)), ('first_recvs', DEFAULT_TO(sum_t_amount, 0:numeric))], orderings=[(DEFAULT_TO(agg_1, 0:numeric) + DEFAULT_TO(sum_t_amount, 0:numeric)):desc_last, (c_key):asc_first], limit=3:numeric) - JOIN(condition=t0.c_key == t1.a_custkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'agg_1': t0.sum_t_amount, 'c_fname': t0.c_fname, 'c_key': t0.c_key, 'c_lname': t0.c_lname, 'sum_t_amount': t1.sum_t_amount}) - JOIN(condition=t0.c_key == t1.a_custkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'c_fname': t0.c_fname, 'c_key': t0.c_key, 'c_lname': t0.c_lname, 'sum_t_amount': t1.sum_t_amount}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - AGGREGATE(keys={'a_custkey': a_custkey}, aggregations={'sum_t_amount': SUM(t_amount)}) - FILTER(condition=RANKING(args=[], partition=[t_sourceaccount], order=[(t_ts):asc_last], allow_ties=False) == 1:numeric, columns={'a_custkey': a_custkey, 't_amount': t_amount}) - JOIN(condition=t0.t_destaccount == t1.a_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_custkey': t0.a_custkey, 't_amount': t0.t_amount, 't_sourceaccount': t0.t_sourceaccount, 't_ts': t0.t_ts}) - JOIN(condition=t0.a_key == t1.t_sourceaccount, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'a_custkey': t0.a_custkey, 't_amount': t1.t_amount, 't_destaccount': t1.t_destaccount, 't_sourceaccount': t1.t_sourceaccount, 't_ts': t1.t_ts}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_amount': t_amount, 't_destaccount': t_destaccount, 't_sourceaccount': t_sourceaccount, 't_ts': t_ts}) - JOIN(condition=t0.a_branchkey == t1.b_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_key': t0.a_key}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_branchkey': a_branchkey, 'a_key': a_key}) - FILTER(condition=SLICE(b_addr, -5:numeric, None:unknown, None:unknown) == '94105':string, columns={'b_key': b_key}) - SCAN(table=CRBNK.BRANCHES, columns={'b_addr': b_addr, 'b_key': b_key}) - AGGREGATE(keys={'a_custkey': a_custkey}, aggregations={'sum_t_amount': SUM(t_amount)}) - FILTER(condition=RANKING(args=[], partition=[t_destaccount], order=[(t_ts):asc_last], allow_ties=False) == 1:numeric, columns={'a_custkey': a_custkey, 't_amount': t_amount}) - JOIN(condition=t0.t_sourceaccount == t1.a_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_custkey': t0.a_custkey, 't_amount': t0.t_amount, 't_destaccount': t0.t_destaccount, 't_ts': t0.t_ts}) - JOIN(condition=t0.a_key == t1.t_destaccount, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'a_custkey': t0.a_custkey, 't_amount': t1.t_amount, 't_destaccount': t1.t_destaccount, 't_sourceaccount': t1.t_sourceaccount, 't_ts': t1.t_ts}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_amount': t_amount, 't_destaccount': t_destaccount, 't_sourceaccount': t_sourceaccount, 't_ts': t_ts}) - JOIN(condition=t0.a_branchkey == t1.b_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_key': t0.a_key}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_branchkey': a_branchkey, 'a_key': a_key}) - FILTER(condition=SLICE(b_addr, -5:numeric, None:unknown, None:unknown) == '94105':string, columns={'b_key': b_key}) - SCAN(table=CRBNK.BRANCHES, columns={'b_addr': b_addr, 'b_key': b_key}) diff --git a/tests/test_plan_refsols/cryptbank_analysis_04.txt b/tests/test_plan_refsols/cryptbank_analysis_04.txt deleted file mode 100644 index 110bc6b3d..000000000 --- a/tests/test_plan_refsols/cryptbank_analysis_04.txt +++ /dev/null @@ -1,9 +0,0 @@ -ROOT(columns=[('key', a_key), ('cust_name', JOIN_STRINGS(' ':string, c_fname, c_lname)), ('n_trans', n_rows)], orderings=[(a_key):asc_first]) - JOIN(condition=t0.a_key == t1.t_sourceaccount, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'a_key': t0.a_key, 'c_fname': t0.c_fname, 'c_lname': t0.c_lname, 'n_rows': t1.n_rows}) - JOIN(condition=t0.a_custkey == t1.c_key, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'a_key': t0.a_key, 'c_fname': t1.c_fname, 'c_lname': t1.c_lname}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) - FILTER(condition=MONOTONIC(1980:numeric, YEAR(c_birthday), 1985:numeric), columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_birthday': c_birthday, 'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - AGGREGATE(keys={'t_sourceaccount': t_sourceaccount}, aggregations={'n_rows': COUNT()}) - FILTER(condition=t_amount > 9000.0:numeric, columns={'t_sourceaccount': t_sourceaccount}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_amount': t_amount, 't_sourceaccount': t_sourceaccount}) diff --git a/tests/test_plan_refsols/cryptbank_analysis_04_raw.txt b/tests/test_plan_refsols/cryptbank_analysis_04_raw.txt index 9f7bfc6df..9f348a995 100644 --- a/tests/test_plan_refsols/cryptbank_analysis_04_raw.txt +++ b/tests/test_plan_refsols/cryptbank_analysis_04_raw.txt @@ -1,9 +1,9 @@ -ROOT(columns=[('key', UNMASK::(CASE WHEN [a_key] = 0 THEN 0 ELSE (CASE WHEN [a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([a_key], 1 + INSTR([a_key], '-'), LENGTH([a_key]) / 2) AS INTEGER) END)), ('cust_name', JOIN_STRINGS(' ':string, UNMASK::(LOWER([c_fname])), UNMASK::(LOWER([c_lname])))), ('n_trans', n_rows)], orderings=[(UNMASK::(CASE WHEN [a_key] = 0 THEN 0 ELSE (CASE WHEN [a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([a_key], 1 + INSTR([a_key], '-'), LENGTH([a_key]) / 2) AS INTEGER) END)):asc_first]) - JOIN(condition=UNMASK::(CASE WHEN [t0.a_key] = 0 THEN 0 ELSE (CASE WHEN [t0.a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([t0.a_key], 1 + INSTR([t0.a_key], '-'), LENGTH([t0.a_key]) / 2) AS INTEGER) END) == t1.t_sourceaccount, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'a_key': t0.a_key, 'c_fname': t0.c_fname, 'c_lname': t0.c_lname, 'n_rows': t1.n_rows}) - JOIN(condition=t0.a_custkey == UNMASK::((42 - ([t1.c_key]))), type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'a_key': t0.a_key, 'c_fname': t1.c_fname, 'c_lname': t1.c_lname}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) - FILTER(condition=MONOTONIC(1980:numeric, YEAR(UNMASK::(DATE([c_birthday], '+472 days'))), 1985:numeric), columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_birthday': c_birthday, 'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - AGGREGATE(keys={'t_sourceaccount': t_sourceaccount}, aggregations={'n_rows': COUNT()}) +ROOT(columns=[('key', UNMASK::(CASE WHEN [anything_a_key] = 0 THEN 0 ELSE (CASE WHEN [anything_a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([anything_a_key], 1 + INSTR([anything_a_key], '-'), LENGTH([anything_a_key]) / 2) AS INTEGER) END)), ('cust_name', JOIN_STRINGS(' ':string, UNMASK::(LOWER([anything_c_fname])), UNMASK::(LOWER([anything_c_lname])))), ('n_trans', n_rows)], orderings=[(UNMASK::(CASE WHEN [anything_a_key] = 0 THEN 0 ELSE (CASE WHEN [anything_a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([anything_a_key], 1 + INSTR([anything_a_key], '-'), LENGTH([anything_a_key]) / 2) AS INTEGER) END)):asc_first]) + AGGREGATE(keys={'t_sourceaccount': t_sourceaccount}, aggregations={'anything_a_key': ANYTHING(a_key), 'anything_c_fname': ANYTHING(c_fname), 'anything_c_lname': ANYTHING(c_lname), 'n_rows': COUNT()}) + JOIN(condition=UNMASK::(CASE WHEN [t0.a_key] = 0 THEN 0 ELSE (CASE WHEN [t0.a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([t0.a_key], 1 + INSTR([t0.a_key], '-'), LENGTH([t0.a_key]) / 2) AS INTEGER) END) == t1.t_sourceaccount, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'a_key': t0.a_key, 'c_fname': t0.c_fname, 'c_lname': t0.c_lname, 't_sourceaccount': t1.t_sourceaccount}) + JOIN(condition=t0.a_custkey == UNMASK::((42 - ([t1.c_key]))), type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'a_key': t0.a_key, 'c_fname': t1.c_fname, 'c_lname': t1.c_lname}) + SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) + FILTER(condition=MONOTONIC(1980:numeric, YEAR(UNMASK::(DATE([c_birthday], '+472 days'))), 1985:numeric), columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) + SCAN(table=CRBNK.CUSTOMERS, columns={'c_birthday': c_birthday, 'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) FILTER(condition=UNMASK::((1025.67 - ([t_amount]))) > 9000.0:numeric, columns={'t_sourceaccount': t_sourceaccount}) SCAN(table=CRBNK.TRANSACTIONS, columns={'t_amount': t_amount, 't_sourceaccount': t_sourceaccount}) diff --git a/tests/test_plan_refsols/cryptbank_analysis_04_rewrite.txt b/tests/test_plan_refsols/cryptbank_analysis_04_rewrite.txt index 9f7bfc6df..9f348a995 100644 --- a/tests/test_plan_refsols/cryptbank_analysis_04_rewrite.txt +++ b/tests/test_plan_refsols/cryptbank_analysis_04_rewrite.txt @@ -1,9 +1,9 @@ -ROOT(columns=[('key', UNMASK::(CASE WHEN [a_key] = 0 THEN 0 ELSE (CASE WHEN [a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([a_key], 1 + INSTR([a_key], '-'), LENGTH([a_key]) / 2) AS INTEGER) END)), ('cust_name', JOIN_STRINGS(' ':string, UNMASK::(LOWER([c_fname])), UNMASK::(LOWER([c_lname])))), ('n_trans', n_rows)], orderings=[(UNMASK::(CASE WHEN [a_key] = 0 THEN 0 ELSE (CASE WHEN [a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([a_key], 1 + INSTR([a_key], '-'), LENGTH([a_key]) / 2) AS INTEGER) END)):asc_first]) - JOIN(condition=UNMASK::(CASE WHEN [t0.a_key] = 0 THEN 0 ELSE (CASE WHEN [t0.a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([t0.a_key], 1 + INSTR([t0.a_key], '-'), LENGTH([t0.a_key]) / 2) AS INTEGER) END) == t1.t_sourceaccount, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'a_key': t0.a_key, 'c_fname': t0.c_fname, 'c_lname': t0.c_lname, 'n_rows': t1.n_rows}) - JOIN(condition=t0.a_custkey == UNMASK::((42 - ([t1.c_key]))), type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'a_key': t0.a_key, 'c_fname': t1.c_fname, 'c_lname': t1.c_lname}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) - FILTER(condition=MONOTONIC(1980:numeric, YEAR(UNMASK::(DATE([c_birthday], '+472 days'))), 1985:numeric), columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_birthday': c_birthday, 'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) - AGGREGATE(keys={'t_sourceaccount': t_sourceaccount}, aggregations={'n_rows': COUNT()}) +ROOT(columns=[('key', UNMASK::(CASE WHEN [anything_a_key] = 0 THEN 0 ELSE (CASE WHEN [anything_a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([anything_a_key], 1 + INSTR([anything_a_key], '-'), LENGTH([anything_a_key]) / 2) AS INTEGER) END)), ('cust_name', JOIN_STRINGS(' ':string, UNMASK::(LOWER([anything_c_fname])), UNMASK::(LOWER([anything_c_lname])))), ('n_trans', n_rows)], orderings=[(UNMASK::(CASE WHEN [anything_a_key] = 0 THEN 0 ELSE (CASE WHEN [anything_a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([anything_a_key], 1 + INSTR([anything_a_key], '-'), LENGTH([anything_a_key]) / 2) AS INTEGER) END)):asc_first]) + AGGREGATE(keys={'t_sourceaccount': t_sourceaccount}, aggregations={'anything_a_key': ANYTHING(a_key), 'anything_c_fname': ANYTHING(c_fname), 'anything_c_lname': ANYTHING(c_lname), 'n_rows': COUNT()}) + JOIN(condition=UNMASK::(CASE WHEN [t0.a_key] = 0 THEN 0 ELSE (CASE WHEN [t0.a_key] > 0 THEN 1 ELSE -1 END) * CAST(SUBSTRING([t0.a_key], 1 + INSTR([t0.a_key], '-'), LENGTH([t0.a_key]) / 2) AS INTEGER) END) == t1.t_sourceaccount, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'a_key': t0.a_key, 'c_fname': t0.c_fname, 'c_lname': t0.c_lname, 't_sourceaccount': t1.t_sourceaccount}) + JOIN(condition=t0.a_custkey == UNMASK::((42 - ([t1.c_key]))), type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'a_key': t0.a_key, 'c_fname': t1.c_fname, 'c_lname': t1.c_lname}) + SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) + FILTER(condition=MONOTONIC(1980:numeric, YEAR(UNMASK::(DATE([c_birthday], '+472 days'))), 1985:numeric), columns={'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) + SCAN(table=CRBNK.CUSTOMERS, columns={'c_birthday': c_birthday, 'c_fname': c_fname, 'c_key': c_key, 'c_lname': c_lname}) FILTER(condition=UNMASK::((1025.67 - ([t_amount]))) > 9000.0:numeric, columns={'t_sourceaccount': t_sourceaccount}) SCAN(table=CRBNK.TRANSACTIONS, columns={'t_amount': t_amount, 't_sourceaccount': t_sourceaccount}) diff --git a/tests/test_plan_refsols/cryptbank_filter_count_11.txt b/tests/test_plan_refsols/cryptbank_filter_count_11.txt deleted file mode 100644 index 80dad3caa..000000000 --- a/tests/test_plan_refsols/cryptbank_filter_count_11.txt +++ /dev/null @@ -1,8 +0,0 @@ -ROOT(columns=[('n', n_rows)], orderings=[]) - AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.t_sourceaccount == t1.a_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_sourceaccount': t_sourceaccount}) - JOIN(condition=t0.a_custkey == t1.c_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'a_key': t0.a_key}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_custkey': a_custkey, 'a_key': a_key}) - FILTER(condition=c_fname == 'alice':string, columns={'c_key': c_key}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_fname': c_fname, 'c_key': c_key}) diff --git a/tests/test_plan_refsols/cryptbank_filter_count_12.txt b/tests/test_plan_refsols/cryptbank_filter_count_12.txt deleted file mode 100644 index 03bc19679..000000000 --- a/tests/test_plan_refsols/cryptbank_filter_count_12.txt +++ /dev/null @@ -1,5 +0,0 @@ -ROOT(columns=[('n', n_rows)], orderings=[]) - AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - JOIN(condition=YEAR(t0.t_ts) == YEAR(t1.a_open_ts) & t0.t_sourceaccount == t1.a_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_sourceaccount': t_sourceaccount, 't_ts': t_ts}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_key': a_key, 'a_open_ts': a_open_ts}) diff --git a/tests/test_plan_refsols/cryptbank_filter_count_13.txt b/tests/test_plan_refsols/cryptbank_filter_count_13.txt deleted file mode 100644 index 836560846..000000000 --- a/tests/test_plan_refsols/cryptbank_filter_count_13.txt +++ /dev/null @@ -1,5 +0,0 @@ -ROOT(columns=[('n', n_rows)], orderings=[]) - AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.t_ts < DATETIME(t1.a_open_ts, '+2 years':string) & t0.t_destaccount == t1.a_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={}) - SCAN(table=CRBNK.TRANSACTIONS, columns={'t_destaccount': t_destaccount, 't_ts': t_ts}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_key': a_key, 'a_open_ts': a_open_ts}) diff --git a/tests/test_plan_refsols/cryptbank_filter_count_15.txt b/tests/test_plan_refsols/cryptbank_filter_count_15.txt deleted file mode 100644 index 174a826e7..000000000 --- a/tests/test_plan_refsols/cryptbank_filter_count_15.txt +++ /dev/null @@ -1,3 +0,0 @@ -ROOT(columns=[('n', n_rows)], orderings=[]) - AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - SCAN(table=CRBNK.CUSTOMERS, columns={}) diff --git a/tests/test_plan_refsols/cryptbank_filter_count_16.txt b/tests/test_plan_refsols/cryptbank_filter_count_16.txt deleted file mode 100644 index 174a826e7..000000000 --- a/tests/test_plan_refsols/cryptbank_filter_count_16.txt +++ /dev/null @@ -1,3 +0,0 @@ -ROOT(columns=[('n', n_rows)], orderings=[]) - AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - SCAN(table=CRBNK.CUSTOMERS, columns={}) diff --git a/tests/test_plan_refsols/cryptbank_filter_count_28.txt b/tests/test_plan_refsols/cryptbank_filter_count_28.txt deleted file mode 100644 index 4e8ab891b..000000000 --- a/tests/test_plan_refsols/cryptbank_filter_count_28.txt +++ /dev/null @@ -1,7 +0,0 @@ -ROOT(columns=[('n', n_rows)], orderings=[]) - AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.a_custkey == t1.c_key, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={}) - FILTER(condition=YEAR(a_open_ts) < 2020:numeric & a_balance >= 5000:numeric & a_type == 'retirement':string | a_type == 'savings':string, columns={'a_custkey': a_custkey}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_balance': a_balance, 'a_custkey': a_custkey, 'a_open_ts': a_open_ts, 'a_type': a_type}) - FILTER(condition=CONTAINS(c_email, 'outlook':string) | CONTAINS(c_email, 'gmail':string), columns={'c_key': c_key}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_email': c_email, 'c_key': c_key}) diff --git a/tests/test_plan_refsols/cryptbank_general_join_01.txt b/tests/test_plan_refsols/cryptbank_general_join_01.txt deleted file mode 100644 index c9ed86ebd..000000000 --- a/tests/test_plan_refsols/cryptbank_general_join_01.txt +++ /dev/null @@ -1,12 +0,0 @@ -ROOT(columns=[('branch_key', b_key), ('n_local_cust', n_rows), ('n_local_cust_local_acct', sum_n_rows)], orderings=[]) - AGGREGATE(keys={'b_key': b_key}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.b_key == t1.b_key & t0.c_key == t1.c_key, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'b_key': t0.b_key, 'n_rows': t1.n_rows}) - JOIN(condition=SLICE(t0.b_addr, -8:numeric, -6:numeric, None:unknown) == SLICE(t1.c_addr, -8:numeric, -6:numeric, None:unknown), type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'b_key': t0.b_key, 'c_key': t1.c_key}) - SCAN(table=CRBNK.BRANCHES, columns={'b_addr': b_addr, 'b_key': b_key}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_addr': c_addr, 'c_key': c_key}) - AGGREGATE(keys={'b_key': b_key, 'c_key': c_key}, aggregations={'n_rows': COUNT()}) - JOIN(condition=t0.c_key == t1.a_custkey & t1.a_branchkey == t0.b_key, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'b_key': t0.b_key, 'c_key': t0.c_key}) - JOIN(condition=SLICE(t0.b_addr, -8:numeric, -6:numeric, None:unknown) == SLICE(t1.c_addr, -8:numeric, -6:numeric, None:unknown), type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'b_key': t0.b_key, 'c_key': t1.c_key}) - SCAN(table=CRBNK.BRANCHES, columns={'b_addr': b_addr, 'b_key': b_key}) - SCAN(table=CRBNK.CUSTOMERS, columns={'c_addr': c_addr, 'c_key': c_key}) - SCAN(table=CRBNK.ACCOUNTS, columns={'a_branchkey': a_branchkey, 'a_custkey': a_custkey}) diff --git a/tests/test_plan_refsols/cryptbank_general_join_02.txt b/tests/test_plan_refsols/cryptbank_general_join_02.txt deleted file mode 100644 index 9a64589d2..000000000 --- a/tests/test_plan_refsols/cryptbank_general_join_02.txt +++ /dev/null @@ -1,3 +0,0 @@ -ROOT(columns=[('n', n_rows)], orderings=[]) - AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - SCAN(table=CRBNK.ACCOUNTS, columns={}) diff --git a/tests/test_plan_refsols/customer_largest_order_deltas.txt b/tests/test_plan_refsols/customer_largest_order_deltas.txt index 557fe4d71..1c1fd82c3 100644 --- a/tests/test_plan_refsols/customer_largest_order_deltas.txt +++ b/tests/test_plan_refsols/customer_largest_order_deltas.txt @@ -1,13 +1,13 @@ -ROOT(columns=[('name', c_name), ('largest_diff', IFF(ABS(min_revenue_delta) > max_revenue_delta, min_revenue_delta, max_revenue_delta))], orderings=[(IFF(ABS(min_revenue_delta) > max_revenue_delta, min_revenue_delta, max_revenue_delta)):desc_last], limit=5:numeric) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'max_revenue_delta': t1.max_revenue_delta, 'min_revenue_delta': t1.min_revenue_delta}) - FILTER(condition=c_mktsegment == 'AUTOMOBILE':string, columns={'c_custkey': c_custkey, 'c_name': c_name}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_name': c_name}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'max_revenue_delta': MAX(revenue_delta), 'min_revenue_delta': MIN(revenue_delta)}) - PROJECT(columns={'o_custkey': o_custkey, 'revenue_delta': DEFAULT_TO(sum_r, 0:numeric) - PREV(args=[DEFAULT_TO(sum_r, 0:numeric)], partition=[o_custkey], order=[(o_orderdate):asc_last])}) - FILTER(condition=PRESENT(PREV(args=[DEFAULT_TO(sum_r, 0:numeric)], partition=[o_custkey], order=[(o_orderdate):asc_last])), columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'sum_r': sum_r}) - JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'o_custkey': t0.o_custkey, 'o_orderdate': t0.o_orderdate, 'sum_r': t1.sum_r}) - FILTER(condition=YEAR(o_orderdate) == 1994:numeric, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_orderkey': l_orderkey}, aggregations={'sum_r': SUM(l_extendedprice * 1:numeric - l_discount)}) +ROOT(columns=[('name', anything_c_name), ('largest_diff', IFF(ABS(min_revenue_delta) > max_revenue_delta, min_revenue_delta, max_revenue_delta))], orderings=[(IFF(ABS(min_revenue_delta) > max_revenue_delta, min_revenue_delta, max_revenue_delta)):desc_last], limit=5:numeric) + AGGREGATE(keys={'anything_o_custkey': anything_o_custkey}, aggregations={'anything_c_name': ANYTHING(c_name), 'max_revenue_delta': MAX(revenue_delta), 'min_revenue_delta': MIN(revenue_delta)}) + PROJECT(columns={'anything_o_custkey': anything_o_custkey, 'c_name': c_name, 'revenue_delta': DEFAULT_TO(sum_r, 0:numeric) - PREV(args=[DEFAULT_TO(sum_r, 0:numeric)], partition=[anything_o_custkey], order=[(anything_o_orderdate):asc_last])}) + JOIN(condition=t0.c_custkey == t1.anything_o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_o_custkey': t1.anything_o_custkey, 'anything_o_orderdate': t1.anything_o_orderdate, 'c_name': t0.c_name, 'sum_r': t1.sum_r}) + FILTER(condition=c_mktsegment == 'AUTOMOBILE':string, columns={'c_custkey': c_custkey, 'c_name': c_name}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment, 'c_name': c_name}) + FILTER(condition=PRESENT(PREV(args=[DEFAULT_TO(sum_r, 0:numeric)], partition=[anything_o_custkey], order=[(anything_o_orderdate):asc_last])), columns={'anything_o_custkey': anything_o_custkey, 'anything_o_orderdate': anything_o_orderdate, 'sum_r': sum_r}) + AGGREGATE(keys={'l_orderkey': o_orderkey}, aggregations={'anything_o_custkey': ANYTHING(o_custkey), 'anything_o_orderdate': ANYTHING(o_orderdate), 'sum_r': SUM(l_extendedprice * 1:numeric - l_discount)}) + JOIN(condition=t0.o_orderkey == t1.l_orderkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_discount': t1.l_discount, 'l_extendedprice': t1.l_extendedprice, 'o_custkey': t0.o_custkey, 'o_orderdate': t0.o_orderdate, 'o_orderkey': t0.o_orderkey}) + FILTER(condition=YEAR(o_orderdate) == 1994:numeric, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) FILTER(condition=YEAR(l_shipdate) == 1994:numeric & l_shipmode == 'AIR':string, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey}) SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_orderkey': l_orderkey, 'l_shipdate': l_shipdate, 'l_shipmode': l_shipmode}) diff --git a/tests/test_plan_refsols/customer_most_recent_orders.txt b/tests/test_plan_refsols/customer_most_recent_orders.txt index 0fe2509df..5d85af002 100644 --- a/tests/test_plan_refsols/customer_most_recent_orders.txt +++ b/tests/test_plan_refsols/customer_most_recent_orders.txt @@ -1,5 +1,5 @@ ROOT(columns=[('name', c_name), ('total_recent_value', DEFAULT_TO(sum_o_totalprice, 0:numeric))], orderings=[(DEFAULT_TO(sum_o_totalprice, 0:numeric)):desc_last], limit=3:numeric) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_name': t0.c_name, 'sum_o_totalprice': t1.sum_o_totalprice}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_name': t0.c_name, 'sum_o_totalprice': t1.sum_o_totalprice}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_name': c_name}) AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'sum_o_totalprice': SUM(o_totalprice)}) FILTER(condition=RANKING(args=[], partition=[o_custkey], order=[(o_orderdate):desc_first, (o_orderkey):asc_last], allow_ties=False) <= 5:numeric, columns={'o_custkey': o_custkey, 'o_totalprice': o_totalprice}) diff --git a/tests/test_plan_refsols/epoch_intra_season_searches.txt b/tests/test_plan_refsols/epoch_intra_season_searches.txt index 18a067096..81911c559 100644 --- a/tests/test_plan_refsols/epoch_intra_season_searches.txt +++ b/tests/test_plan_refsols/epoch_intra_season_searches.txt @@ -1,11 +1,11 @@ ROOT(columns=[('season_name', s_name), ('pct_season_searches', ROUND(100.0:numeric * DEFAULT_TO(agg_2, 0:numeric) / agg_3, 2:numeric)), ('pct_event_searches', ROUND(100.0:numeric * DEFAULT_TO(sum_is_intra_season, 0:numeric) / DEFAULT_TO(n_rows, 0:numeric), 2:numeric))], orderings=[(s_name):asc_first]) JOIN(condition=t0.s_name == t1.s_name, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'agg_2': t0.sum_is_intra_season, 'agg_3': t0.n_rows, 'n_rows': t1.n_rows, 's_name': t0.s_name, 'sum_is_intra_season': t1.sum_is_intra_season}) - AGGREGATE(keys={'s_name': s_name}, aggregations={'n_rows': COUNT(), 'sum_is_intra_season': SUM(DEFAULT_TO(n_rows, 0:numeric) > 0:numeric)}) - JOIN(condition=t0.s_name == t1.s_name & t0.search_id == t1.search_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 's_name': t0.s_name}) - JOIN(condition=MONTH(t1.search_ts) == t0.s_month1 | MONTH(t1.search_ts) == t0.s_month2 | MONTH(t1.search_ts) == t0.s_month3, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'s_name': t0.s_name, 'search_id': t1.search_id}) - SCAN(table=SEASONS, columns={'s_month1': s_month1, 's_month2': s_month2, 's_month3': s_month3, 's_name': s_name}) - SCAN(table=SEARCHES, columns={'search_id': search_id, 'search_ts': search_ts}) - AGGREGATE(keys={'s_name': s_name, 'search_id': search_id}, aggregations={'n_rows': COUNT()}) + AGGREGATE(keys={'s_name': s_name}, aggregations={'n_rows': COUNT(), 'sum_is_intra_season': SUM(DEFAULT_TO(KEEP_IF(count_search_id, count_search_id != 0:numeric), 0:numeric) > 0:numeric)}) + AGGREGATE(keys={'s_name': s_name, 'search_id': search_id_0}, aggregations={'count_search_id': COUNT(search_id)}) + JOIN(condition=t0.s_name == t1.s_name & t0.search_id == t1.search_id, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'s_name': t0.s_name, 'search_id': t1.search_id, 'search_id_0': t0.search_id}) + JOIN(condition=MONTH(t1.search_ts) == t0.s_month1 | MONTH(t1.search_ts) == t0.s_month2 | MONTH(t1.search_ts) == t0.s_month3, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'s_name': t0.s_name, 'search_id': t1.search_id}) + SCAN(table=SEASONS, columns={'s_month1': s_month1, 's_month2': s_month2, 's_month3': s_month3, 's_name': s_name}) + SCAN(table=SEARCHES, columns={'search_id': search_id, 'search_ts': search_ts}) JOIN(condition=t1.s_name == t0.s_name & MONTH(t0.ev_dt) == t1.s_month1 | MONTH(t0.ev_dt) == t1.s_month2 | MONTH(t0.ev_dt) == t1.s_month3, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'s_name': t0.s_name, 'search_id': t0.search_id}) JOIN(condition=CONTAINS(LOWER(t0.search_string), LOWER(t1.ev_name)), type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'ev_dt': t1.ev_dt, 's_name': t0.s_name, 'search_id': t0.search_id}) JOIN(condition=MONTH(t1.search_ts) == t0.s_month1 | MONTH(t1.search_ts) == t0.s_month2 | MONTH(t1.search_ts) == t0.s_month3, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'s_name': t0.s_name, 'search_id': t1.search_id, 'search_string': t1.search_string}) diff --git a/tests/test_plan_refsols/epoch_users_most_cold_war_searches.txt b/tests/test_plan_refsols/epoch_users_most_cold_war_searches.txt index 9cc6d3432..9e78c8c06 100644 --- a/tests/test_plan_refsols/epoch_users_most_cold_war_searches.txt +++ b/tests/test_plan_refsols/epoch_users_most_cold_war_searches.txt @@ -1,5 +1,5 @@ ROOT(columns=[('user_name', user_name), ('n_cold_war_searches', n_rows)], orderings=[(n_rows):desc_last, (user_name):asc_first], limit=3:numeric) - JOIN(condition=t0.user_id == t1.anything_search_user_id, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'user_name': t0.user_name}) + JOIN(condition=t0.user_id == t1.anything_search_user_id, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'n_rows': t1.n_rows, 'user_name': t0.user_name}) SCAN(table=USERS, columns={'user_id': user_id, 'user_name': user_name}) AGGREGATE(keys={'anything_search_user_id': anything_search_user_id}, aggregations={'n_rows': COUNT()}) AGGREGATE(keys={'search_id': search_id}, aggregations={'anything_search_user_id': ANYTHING(search_user_id)}) diff --git a/tests/test_plan_refsols/health_first_patient_by_coverage_type_raw.txt b/tests/test_plan_refsols/health_first_patient_by_coverage_type_raw.txt index 2dc68ad4f..6f8a957da 100644 --- a/tests/test_plan_refsols/health_first_patient_by_coverage_type_raw.txt +++ b/tests/test_plan_refsols/health_first_patient_by_coverage_type_raw.txt @@ -1,5 +1,5 @@ ROOT(columns=[('coverage_type', coverage_type), ('first_name', max_anything_unmask_first_name), ('last_name', max_anything_unmask_last_name), ('date_of_birth', max_anything_unmask_date_of_birth)], orderings=[(coverage_type):asc_first]) - FILTER(condition=sum_n_rows > 0:numeric, columns={'coverage_type': coverage_type, 'max_anything_unmask_date_of_birth': max_anything_unmask_date_of_birth, 'max_anything_unmask_first_name': max_anything_unmask_first_name, 'max_anything_unmask_last_name': max_anything_unmask_last_name}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'coverage_type': coverage_type, 'max_anything_unmask_date_of_birth': max_anything_unmask_date_of_birth, 'max_anything_unmask_first_name': max_anything_unmask_first_name, 'max_anything_unmask_last_name': max_anything_unmask_last_name}) AGGREGATE(keys={'coverage_type': coverage_type}, aggregations={'max_anything_unmask_date_of_birth': MAX(anything_unmask_date_of_birth), 'max_anything_unmask_first_name': MAX(anything_unmask_first_name), 'max_anything_unmask_last_name': MAX(anything_unmask_last_name), 'sum_n_rows': SUM(n_rows)}) JOIN(condition=t0.insurance_plan_id == t1.insurance_plan_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'anything_unmask_date_of_birth': t1.anything_unmask_date_of_birth, 'anything_unmask_first_name': t1.anything_unmask_first_name, 'anything_unmask_last_name': t1.anything_unmask_last_name, 'coverage_type': t0.coverage_type, 'n_rows': t1.n_rows}) SCAN(table=bodo.health.insurance_plans, columns={'coverage_type': coverage_type, 'insurance_plan_id': insurance_plan_id}) diff --git a/tests/test_plan_refsols/health_first_patient_by_coverage_type_rewrite.txt b/tests/test_plan_refsols/health_first_patient_by_coverage_type_rewrite.txt index 2dc68ad4f..6f8a957da 100644 --- a/tests/test_plan_refsols/health_first_patient_by_coverage_type_rewrite.txt +++ b/tests/test_plan_refsols/health_first_patient_by_coverage_type_rewrite.txt @@ -1,5 +1,5 @@ ROOT(columns=[('coverage_type', coverage_type), ('first_name', max_anything_unmask_first_name), ('last_name', max_anything_unmask_last_name), ('date_of_birth', max_anything_unmask_date_of_birth)], orderings=[(coverage_type):asc_first]) - FILTER(condition=sum_n_rows > 0:numeric, columns={'coverage_type': coverage_type, 'max_anything_unmask_date_of_birth': max_anything_unmask_date_of_birth, 'max_anything_unmask_first_name': max_anything_unmask_first_name, 'max_anything_unmask_last_name': max_anything_unmask_last_name}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'coverage_type': coverage_type, 'max_anything_unmask_date_of_birth': max_anything_unmask_date_of_birth, 'max_anything_unmask_first_name': max_anything_unmask_first_name, 'max_anything_unmask_last_name': max_anything_unmask_last_name}) AGGREGATE(keys={'coverage_type': coverage_type}, aggregations={'max_anything_unmask_date_of_birth': MAX(anything_unmask_date_of_birth), 'max_anything_unmask_first_name': MAX(anything_unmask_first_name), 'max_anything_unmask_last_name': MAX(anything_unmask_last_name), 'sum_n_rows': SUM(n_rows)}) JOIN(condition=t0.insurance_plan_id == t1.insurance_plan_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'anything_unmask_date_of_birth': t1.anything_unmask_date_of_birth, 'anything_unmask_first_name': t1.anything_unmask_first_name, 'anything_unmask_last_name': t1.anything_unmask_last_name, 'coverage_type': t0.coverage_type, 'n_rows': t1.n_rows}) SCAN(table=bodo.health.insurance_plans, columns={'coverage_type': coverage_type, 'insurance_plan_id': insurance_plan_id}) diff --git a/tests/test_plan_refsols/month_year_sliding_windows.txt b/tests/test_plan_refsols/month_year_sliding_windows.txt index 900f198ff..cac47c047 100644 --- a/tests/test_plan_refsols/month_year_sliding_windows.txt +++ b/tests/test_plan_refsols/month_year_sliding_windows.txt @@ -1,11 +1,11 @@ ROOT(columns=[('year', year_o_orderdate), ('month', month_o_orderdate)], orderings=[(year_o_orderdate):asc_first, (month_o_orderdate):asc_first]) FILTER(condition=DEFAULT_TO(sum_o_totalprice, 0:numeric) > NEXT(args=[DEFAULT_TO(sum_o_totalprice, 0:numeric)], partition=[], order=[(year_o_orderdate):asc_last, (month_o_orderdate):asc_last], default=0.0) & DEFAULT_TO(sum_o_totalprice, 0:numeric) > PREV(args=[DEFAULT_TO(sum_o_totalprice, 0:numeric)], partition=[], order=[(year_o_orderdate):asc_last, (month_o_orderdate):asc_last], default=0.0), columns={'month_o_orderdate': month_o_orderdate, 'year_o_orderdate': year_o_orderdate}) - JOIN(condition=t0.year_o_orderdate == t1.year_o_orderdate, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'month_o_orderdate': t1.month_o_orderdate, 'sum_o_totalprice': t1.sum_o_totalprice, 'year_o_orderdate': t1.year_o_orderdate}) - FILTER(condition=DEFAULT_TO(sum_o_totalprice, 0:numeric) > next_year_total_spent, columns={'year_o_orderdate': year_o_orderdate}) - PROJECT(columns={'next_year_total_spent': NEXT(args=[DEFAULT_TO(sum_o_totalprice, 0:numeric)], partition=[], order=[(year_o_orderdate):asc_last], default=0.0), 'sum_o_totalprice': sum_o_totalprice, 'year_o_orderdate': year_o_orderdate}) - AGGREGATE(keys={'year_o_orderdate': YEAR(o_orderdate)}, aggregations={'sum_o_totalprice': SUM(o_totalprice)}) - FILTER(condition=o_orderpriority == '1-URGENT':string, columns={'o_orderdate': o_orderdate, 'o_totalprice': o_totalprice}) - SCAN(table=tpch.ORDERS, columns={'o_orderdate': o_orderdate, 'o_orderpriority': o_orderpriority, 'o_totalprice': o_totalprice}) - AGGREGATE(keys={'month_o_orderdate': MONTH(o_orderdate), 'year_o_orderdate': YEAR(o_orderdate)}, aggregations={'sum_o_totalprice': SUM(o_totalprice)}) + AGGREGATE(keys={'month_o_orderdate': MONTH(o_orderdate), 'year_o_orderdate': YEAR(o_orderdate)}, aggregations={'sum_o_totalprice': SUM(o_totalprice)}) + JOIN(condition=t0.year_o_orderdate == YEAR(t1.o_orderdate), type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'o_orderdate': t1.o_orderdate, 'o_totalprice': t1.o_totalprice}) + FILTER(condition=DEFAULT_TO(sum_o_totalprice, 0:numeric) > next_year_total_spent, columns={'year_o_orderdate': year_o_orderdate}) + PROJECT(columns={'next_year_total_spent': NEXT(args=[DEFAULT_TO(sum_o_totalprice, 0:numeric)], partition=[], order=[(year_o_orderdate):asc_last], default=0.0), 'sum_o_totalprice': sum_o_totalprice, 'year_o_orderdate': year_o_orderdate}) + AGGREGATE(keys={'year_o_orderdate': YEAR(o_orderdate)}, aggregations={'sum_o_totalprice': SUM(o_totalprice)}) + FILTER(condition=o_orderpriority == '1-URGENT':string, columns={'o_orderdate': o_orderdate, 'o_totalprice': o_totalprice}) + SCAN(table=tpch.ORDERS, columns={'o_orderdate': o_orderdate, 'o_orderpriority': o_orderpriority, 'o_totalprice': o_totalprice}) FILTER(condition=o_orderpriority == '1-URGENT':string, columns={'o_orderdate': o_orderdate, 'o_totalprice': o_totalprice}) SCAN(table=tpch.ORDERS, columns={'o_orderdate': o_orderdate, 'o_orderpriority': o_orderpriority, 'o_totalprice': o_totalprice}) diff --git a/tests/test_plan_refsols/multi_partition_access_6.txt b/tests/test_plan_refsols/multi_partition_access_6.txt index 404f488d8..f7361f00d 100644 --- a/tests/test_plan_refsols/multi_partition_access_6.txt +++ b/tests/test_plan_refsols/multi_partition_access_6.txt @@ -1,20 +1,20 @@ ROOT(columns=[('transaction_id', sbTxId)], orderings=[(sbTxId):asc_first]) JOIN(condition=t0.sbTxCustId == t1.sbTxCustId & t0.sbTxType == t1.sbTxType & t1.n_rows == 1:numeric | t0.n_rows == 1:numeric, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'sbTxId': t1.sbTxId}) - JOIN(condition=t0.sbTxCustId == t1.sbTxCustId, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'sbTxCustId': t1.sbTxCustId, 'sbTxType': t1.sbTxType}) - FILTER(condition=n_rows > 1:numeric, columns={'sbTxCustId': sbTxCustId}) - AGGREGATE(keys={'sbTxCustId': sbTxCustId}, aggregations={'n_rows': COUNT()}) - SCAN(table=main.sbTransaction, columns={'sbTxCustId': sbTxCustId}) - AGGREGATE(keys={'sbTxCustId': sbTxCustId, 'sbTxType': sbTxType}, aggregations={'n_rows': COUNT()}) + AGGREGATE(keys={'sbTxCustId': sbTxCustId, 'sbTxType': sbTxType}, aggregations={'n_rows': COUNT()}) + JOIN(condition=t0.sbTxCustId == t1.sbTxCustId, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'sbTxCustId': t1.sbTxCustId, 'sbTxType': t1.sbTxType}) + FILTER(condition=n_rows > 1:numeric, columns={'sbTxCustId': sbTxCustId}) + AGGREGATE(keys={'sbTxCustId': sbTxCustId}, aggregations={'n_rows': COUNT()}) + SCAN(table=main.sbTransaction, columns={'sbTxCustId': sbTxCustId}) SCAN(table=main.sbTransaction, columns={'sbTxCustId': sbTxCustId, 'sbTxType': sbTxType}) JOIN(condition=t0.sbTxTickerId == t1.sbTxTickerId & t0.sbTxType == t1.sbTxType, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t0.n_rows, 'sbTxCustId': t1.sbTxCustId, 'sbTxId': t1.sbTxId, 'sbTxType': t1.sbTxType}) - JOIN(condition=t0.sbTxType == t1.sbTxType, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'sbTxTickerId': t1.sbTxTickerId, 'sbTxType': t1.sbTxType}) - FILTER(condition=n_rows > 1:numeric, columns={'sbTxType': sbTxType}) - AGGREGATE(keys={'sbTxType': sbTxType}, aggregations={'n_rows': COUNT()}) - SCAN(table=main.sbTransaction, columns={'sbTxType': sbTxType}) - JOIN(condition=t0.sbTxTickerId == t1.sbTxTickerId, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'sbTxTickerId': t1.sbTxTickerId, 'sbTxType': t1.sbTxType}) - FILTER(condition=n_rows > 1:numeric, columns={'sbTxTickerId': sbTxTickerId}) - AGGREGATE(keys={'sbTxTickerId': sbTxTickerId}, aggregations={'n_rows': COUNT()}) - SCAN(table=main.sbTransaction, columns={'sbTxTickerId': sbTxTickerId}) - AGGREGATE(keys={'sbTxTickerId': sbTxTickerId, 'sbTxType': sbTxType}, aggregations={'n_rows': COUNT()}) + AGGREGATE(keys={'sbTxTickerId': sbTxTickerId, 'sbTxType': sbTxType}, aggregations={'n_rows': COUNT()}) + JOIN(condition=t0.sbTxType == t1.sbTxType, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'sbTxTickerId': t1.sbTxTickerId, 'sbTxType': t1.sbTxType}) + FILTER(condition=n_rows > 1:numeric, columns={'sbTxType': sbTxType}) + AGGREGATE(keys={'sbTxType': sbTxType}, aggregations={'n_rows': COUNT()}) + SCAN(table=main.sbTransaction, columns={'sbTxType': sbTxType}) + JOIN(condition=t0.sbTxTickerId == t1.sbTxTickerId, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'sbTxTickerId': t1.sbTxTickerId, 'sbTxType': t1.sbTxType}) + FILTER(condition=n_rows > 1:numeric, columns={'sbTxTickerId': sbTxTickerId}) + AGGREGATE(keys={'sbTxTickerId': sbTxTickerId}, aggregations={'n_rows': COUNT()}) + SCAN(table=main.sbTransaction, columns={'sbTxTickerId': sbTxTickerId}) SCAN(table=main.sbTransaction, columns={'sbTxTickerId': sbTxTickerId, 'sbTxType': sbTxType}) SCAN(table=main.sbTransaction, columns={'sbTxCustId': sbTxCustId, 'sbTxId': sbTxId, 'sbTxTickerId': sbTxTickerId, 'sbTxType': sbTxType}) diff --git a/tests/test_plan_refsols/nation_acctbal_breakdown.txt b/tests/test_plan_refsols/nation_acctbal_breakdown.txt index 998776cc3..3ea59b65a 100644 --- a/tests/test_plan_refsols/nation_acctbal_breakdown.txt +++ b/tests/test_plan_refsols/nation_acctbal_breakdown.txt @@ -1,8 +1,8 @@ -ROOT(columns=[('nation_name', n_name), ('n_red_acctbal', count_negative_acctbal), ('n_black_acctbal', count_non_negative_acctbal), ('median_red_acctbal', median_negative_acctbal), ('median_black_acctbal', median_non_negative_acctbal), ('median_overall_acctbal', median_c_acctbal)], orderings=[(n_name):asc_first]) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'count_negative_acctbal': t1.count_negative_acctbal, 'count_non_negative_acctbal': t1.count_non_negative_acctbal, 'median_c_acctbal': t1.median_c_acctbal, 'median_negative_acctbal': t1.median_negative_acctbal, 'median_non_negative_acctbal': t1.median_non_negative_acctbal, 'n_name': t0.n_name}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'AMERICA':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'count_negative_acctbal': COUNT(KEEP_IF(c_acctbal, c_acctbal < 0:numeric)), 'count_non_negative_acctbal': COUNT(KEEP_IF(c_acctbal, c_acctbal >= 0:numeric)), 'median_c_acctbal': MEDIAN(c_acctbal), 'median_negative_acctbal': MEDIAN(KEEP_IF(c_acctbal, c_acctbal < 0:numeric)), 'median_non_negative_acctbal': MEDIAN(KEEP_IF(c_acctbal, c_acctbal >= 0:numeric))}) +ROOT(columns=[('nation_name', anything_n_name), ('n_red_acctbal', count_negative_acctbal), ('n_black_acctbal', count_non_negative_acctbal), ('median_red_acctbal', median_negative_acctbal), ('median_black_acctbal', median_non_negative_acctbal), ('median_overall_acctbal', median_c_acctbal)], orderings=[(anything_n_name):asc_first]) + AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'count_negative_acctbal': COUNT(KEEP_IF(c_acctbal, c_acctbal < 0:numeric)), 'count_non_negative_acctbal': COUNT(KEEP_IF(c_acctbal, c_acctbal >= 0:numeric)), 'median_c_acctbal': MEDIAN(c_acctbal), 'median_negative_acctbal': MEDIAN(KEEP_IF(c_acctbal, c_acctbal < 0:numeric)), 'median_non_negative_acctbal': MEDIAN(KEEP_IF(c_acctbal, c_acctbal >= 0:numeric))}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'c_acctbal': t1.c_acctbal, 'c_nationkey': t1.c_nationkey, 'n_name': t0.n_name}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'AMERICA':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_nationkey': c_nationkey}) diff --git a/tests/test_plan_refsols/parts_quantity_increase_95_96.txt b/tests/test_plan_refsols/parts_quantity_increase_95_96.txt index 16762bac8..c6e5c9a16 100644 --- a/tests/test_plan_refsols/parts_quantity_increase_95_96.txt +++ b/tests/test_plan_refsols/parts_quantity_increase_95_96.txt @@ -1,15 +1,15 @@ -ROOT(columns=[('name', p_name), ('qty_95', DEFAULT_TO(sum_l_quantity, 0:numeric)), ('qty_96', DEFAULT_TO(agg_1, 0:numeric))], orderings=[(DEFAULT_TO(agg_1, 0:numeric) - DEFAULT_TO(sum_l_quantity, 0:numeric)):desc_last, (p_name):asc_first], limit=3:numeric) - JOIN(condition=t0.p_partkey == t1.l_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'agg_1': t1.sum_l_quantity, 'p_name': t0.p_name, 'sum_l_quantity': t0.sum_l_quantity}) - JOIN(condition=t0.p_partkey == t1.l_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'p_name': t0.p_name, 'p_partkey': t0.p_partkey, 'sum_l_quantity': t1.sum_l_quantity}) - FILTER(condition=STARTSWITH(p_container, 'SM':string), columns={'p_name': p_name, 'p_partkey': p_partkey}) - SCAN(table=tpch.PART, columns={'p_container': p_container, 'p_name': p_name, 'p_partkey': p_partkey}) - AGGREGATE(keys={'l_partkey': l_partkey}, aggregations={'sum_l_quantity': SUM(l_quantity)}) - JOIN(condition=t0.l_orderkey == t1.o_orderkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity}) - FILTER(condition=l_shipmode == 'RAIL':string, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity}) - SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipmode': l_shipmode}) - FILTER(condition=YEAR(o_orderdate) == 1995:numeric, columns={'o_orderkey': o_orderkey}) - SCAN(table=tpch.ORDERS, columns={'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) - AGGREGATE(keys={'l_partkey': l_partkey}, aggregations={'sum_l_quantity': SUM(l_quantity)}) +ROOT(columns=[('name', anything_anything_p_name), ('qty_95', DEFAULT_TO(anything_sum_l_quantity, 0:numeric)), ('qty_96', DEFAULT_TO(agg_1, 0:numeric))], orderings=[(DEFAULT_TO(agg_1, 0:numeric) - DEFAULT_TO(anything_sum_l_quantity, 0:numeric)):desc_last, (anything_anything_p_name):asc_first], limit=3:numeric) + AGGREGATE(keys={'l_partkey': l_partkey}, aggregations={'agg_1': SUM(l_quantity), 'anything_anything_p_name': ANYTHING(anything_p_name), 'anything_sum_l_quantity': ANYTHING(sum_l_quantity)}) + JOIN(condition=t0.l_partkey == t1.l_partkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_p_name': t0.anything_p_name, 'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'sum_l_quantity': t0.sum_l_quantity}) + AGGREGATE(keys={'l_partkey': l_partkey}, aggregations={'anything_p_name': ANYTHING(p_name), 'sum_l_quantity': SUM(l_quantity)}) + JOIN(condition=t0.p_partkey == t1.l_partkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity, 'p_name': t0.p_name}) + FILTER(condition=STARTSWITH(p_container, 'SM':string), columns={'p_name': p_name, 'p_partkey': p_partkey}) + SCAN(table=tpch.PART, columns={'p_container': p_container, 'p_name': p_name, 'p_partkey': p_partkey}) + JOIN(condition=t0.l_orderkey == t1.o_orderkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity}) + FILTER(condition=l_shipmode == 'RAIL':string, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity}) + SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipmode': l_shipmode}) + FILTER(condition=YEAR(o_orderdate) == 1995:numeric, columns={'o_orderkey': o_orderkey}) + SCAN(table=tpch.ORDERS, columns={'o_orderdate': o_orderdate, 'o_orderkey': o_orderkey}) JOIN(condition=t0.l_orderkey == t1.o_orderkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_partkey': t0.l_partkey, 'l_quantity': t0.l_quantity}) FILTER(condition=l_shipmode == 'RAIL':string, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity}) SCAN(table=tpch.LINEITEM, columns={'l_orderkey': l_orderkey, 'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipmode': l_shipmode}) diff --git a/tests/test_plan_refsols/quantile_function_test_2.txt b/tests/test_plan_refsols/quantile_function_test_2.txt index 39d7a7218..d1881c827 100644 --- a/tests/test_plan_refsols/quantile_function_test_2.txt +++ b/tests/test_plan_refsols/quantile_function_test_2.txt @@ -1,10 +1,10 @@ -ROOT(columns=[('region_name', r_name), ('nation_name', n_name), ('orders_min', agg_8), ('orders_1_percent', agg_1), ('orders_10_percent', agg_0), ('orders_25_percent', agg_2), ('orders_median', agg_7), ('orders_75_percent', agg_3), ('orders_90_percent', agg_4), ('orders_99_percent', agg_5), ('orders_max', agg_6)], orderings=[(n_name):asc_first]) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'agg_0': t1.agg_0, 'agg_1': t1.agg_1, 'agg_2': t1.agg_2, 'agg_3': t1.agg_3, 'agg_4': t1.agg_4, 'agg_5': t1.agg_5, 'agg_6': t1.agg_6, 'agg_7': t1.agg_7, 'agg_8': t1.agg_8, 'n_name': t0.n_name, 'r_name': t0.r_name}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'r_name': t1.r_name}) - LIMIT(limit=5:numeric, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}, orderings=[(n_name):asc_first]) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'agg_0': QUANTILE(o_totalprice, 0.1:numeric), 'agg_1': QUANTILE(o_totalprice, 0.01:numeric), 'agg_2': QUANTILE(o_totalprice, 0.25:numeric), 'agg_3': QUANTILE(o_totalprice, 0.75:numeric), 'agg_4': QUANTILE(o_totalprice, 0.9:numeric), 'agg_5': QUANTILE(o_totalprice, 0.99:numeric), 'agg_6': QUANTILE(o_totalprice, 1.0:numeric), 'agg_7': QUANTILE(o_totalprice, 0.5:numeric), 'agg_8': QUANTILE(o_totalprice, 0.0:numeric)}) +ROOT(columns=[('region_name', anything_r_name), ('nation_name', anything_n_name), ('orders_min', agg_8), ('orders_1_percent', agg_1), ('orders_10_percent', agg_0), ('orders_25_percent', agg_2), ('orders_median', agg_7), ('orders_75_percent', agg_3), ('orders_90_percent', agg_4), ('orders_99_percent', agg_5), ('orders_max', agg_6)], orderings=[(anything_n_name):asc_first]) + AGGREGATE(keys={'c_nationkey': n_nationkey}, aggregations={'agg_0': QUANTILE(o_totalprice, 0.1:numeric), 'agg_1': QUANTILE(o_totalprice, 0.01:numeric), 'agg_2': QUANTILE(o_totalprice, 0.25:numeric), 'agg_3': QUANTILE(o_totalprice, 0.75:numeric), 'agg_4': QUANTILE(o_totalprice, 0.9:numeric), 'agg_5': QUANTILE(o_totalprice, 0.99:numeric), 'agg_6': QUANTILE(o_totalprice, 1.0:numeric), 'agg_7': QUANTILE(o_totalprice, 0.5:numeric), 'agg_8': QUANTILE(o_totalprice, 0.0:numeric), 'anything_n_name': ANYTHING(n_name), 'anything_r_name': ANYTHING(r_name)}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_totalprice': t1.o_totalprice, 'r_name': t0.r_name}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'r_name': t1.r_name}) + LIMIT(limit=5:numeric, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}, orderings=[(n_name):asc_first]) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_nationkey': t0.c_nationkey, 'o_totalprice': t1.o_totalprice}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) FILTER(condition=YEAR(o_orderdate) == 1998:numeric, columns={'o_custkey': o_custkey, 'o_totalprice': o_totalprice}) diff --git a/tests/test_plan_refsols/quantile_function_test_3.txt b/tests/test_plan_refsols/quantile_function_test_3.txt index 39d7a7218..d1881c827 100644 --- a/tests/test_plan_refsols/quantile_function_test_3.txt +++ b/tests/test_plan_refsols/quantile_function_test_3.txt @@ -1,10 +1,10 @@ -ROOT(columns=[('region_name', r_name), ('nation_name', n_name), ('orders_min', agg_8), ('orders_1_percent', agg_1), ('orders_10_percent', agg_0), ('orders_25_percent', agg_2), ('orders_median', agg_7), ('orders_75_percent', agg_3), ('orders_90_percent', agg_4), ('orders_99_percent', agg_5), ('orders_max', agg_6)], orderings=[(n_name):asc_first]) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'agg_0': t1.agg_0, 'agg_1': t1.agg_1, 'agg_2': t1.agg_2, 'agg_3': t1.agg_3, 'agg_4': t1.agg_4, 'agg_5': t1.agg_5, 'agg_6': t1.agg_6, 'agg_7': t1.agg_7, 'agg_8': t1.agg_8, 'n_name': t0.n_name, 'r_name': t0.r_name}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'r_name': t1.r_name}) - LIMIT(limit=5:numeric, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}, orderings=[(n_name):asc_first]) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'agg_0': QUANTILE(o_totalprice, 0.1:numeric), 'agg_1': QUANTILE(o_totalprice, 0.01:numeric), 'agg_2': QUANTILE(o_totalprice, 0.25:numeric), 'agg_3': QUANTILE(o_totalprice, 0.75:numeric), 'agg_4': QUANTILE(o_totalprice, 0.9:numeric), 'agg_5': QUANTILE(o_totalprice, 0.99:numeric), 'agg_6': QUANTILE(o_totalprice, 1.0:numeric), 'agg_7': QUANTILE(o_totalprice, 0.5:numeric), 'agg_8': QUANTILE(o_totalprice, 0.0:numeric)}) +ROOT(columns=[('region_name', anything_r_name), ('nation_name', anything_n_name), ('orders_min', agg_8), ('orders_1_percent', agg_1), ('orders_10_percent', agg_0), ('orders_25_percent', agg_2), ('orders_median', agg_7), ('orders_75_percent', agg_3), ('orders_90_percent', agg_4), ('orders_99_percent', agg_5), ('orders_max', agg_6)], orderings=[(anything_n_name):asc_first]) + AGGREGATE(keys={'c_nationkey': n_nationkey}, aggregations={'agg_0': QUANTILE(o_totalprice, 0.1:numeric), 'agg_1': QUANTILE(o_totalprice, 0.01:numeric), 'agg_2': QUANTILE(o_totalprice, 0.25:numeric), 'agg_3': QUANTILE(o_totalprice, 0.75:numeric), 'agg_4': QUANTILE(o_totalprice, 0.9:numeric), 'agg_5': QUANTILE(o_totalprice, 0.99:numeric), 'agg_6': QUANTILE(o_totalprice, 1.0:numeric), 'agg_7': QUANTILE(o_totalprice, 0.5:numeric), 'agg_8': QUANTILE(o_totalprice, 0.0:numeric), 'anything_n_name': ANYTHING(n_name), 'anything_r_name': ANYTHING(r_name)}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_totalprice': t1.o_totalprice, 'r_name': t0.r_name}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'r_name': t1.r_name}) + LIMIT(limit=5:numeric, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}, orderings=[(n_name):asc_first]) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_nationkey': t0.c_nationkey, 'o_totalprice': t1.o_totalprice}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) FILTER(condition=YEAR(o_orderdate) == 1998:numeric, columns={'o_custkey': o_custkey, 'o_totalprice': o_totalprice}) diff --git a/tests/test_plan_refsols/quantile_function_test_4.txt b/tests/test_plan_refsols/quantile_function_test_4.txt index 1fe7deeea..1edc5f3ac 100644 --- a/tests/test_plan_refsols/quantile_function_test_4.txt +++ b/tests/test_plan_refsols/quantile_function_test_4.txt @@ -1,10 +1,10 @@ -ROOT(columns=[('region_name', r_name), ('nation_name', n_name), ('orders_min', agg_8), ('orders_1_percent', agg_1), ('orders_10_percent', agg_0), ('orders_25_percent', agg_2), ('orders_median', agg_7), ('orders_75_percent', agg_3), ('orders_90_percent', agg_4), ('orders_99_percent', agg_5), ('orders_max', agg_6)], orderings=[(n_name):asc_first]) - JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'agg_0': t1.agg_0, 'agg_1': t1.agg_1, 'agg_2': t1.agg_2, 'agg_3': t1.agg_3, 'agg_4': t1.agg_4, 'agg_5': t1.agg_5, 'agg_6': t1.agg_6, 'agg_7': t1.agg_7, 'agg_8': t1.agg_8, 'n_name': t0.n_name, 'r_name': t0.r_name}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'r_name': t1.r_name}) - LIMIT(limit=5:numeric, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}, orderings=[(n_name):asc_first]) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - AGGREGATE(keys={'c_nationkey': c_nationkey}, aggregations={'agg_0': QUANTILE(o_totalprice, 0.1:numeric), 'agg_1': QUANTILE(o_totalprice, 0.01:numeric), 'agg_2': QUANTILE(o_totalprice, 0.25:numeric), 'agg_3': QUANTILE(o_totalprice, 0.75:numeric), 'agg_4': QUANTILE(o_totalprice, 0.9:numeric), 'agg_5': QUANTILE(o_totalprice, 0.99:numeric), 'agg_6': QUANTILE(o_totalprice, 1.0:numeric), 'agg_7': QUANTILE(o_totalprice, 0.5:numeric), 'agg_8': QUANTILE(o_totalprice, 0.0:numeric)}) +ROOT(columns=[('region_name', anything_r_name), ('nation_name', anything_n_name), ('orders_min', agg_8), ('orders_1_percent', agg_1), ('orders_10_percent', agg_0), ('orders_25_percent', agg_2), ('orders_median', agg_7), ('orders_75_percent', agg_3), ('orders_90_percent', agg_4), ('orders_99_percent', agg_5), ('orders_max', agg_6)], orderings=[(anything_n_name):asc_first]) + AGGREGATE(keys={'c_nationkey': n_nationkey}, aggregations={'agg_0': QUANTILE(o_totalprice, 0.1:numeric), 'agg_1': QUANTILE(o_totalprice, 0.01:numeric), 'agg_2': QUANTILE(o_totalprice, 0.25:numeric), 'agg_3': QUANTILE(o_totalprice, 0.75:numeric), 'agg_4': QUANTILE(o_totalprice, 0.9:numeric), 'agg_5': QUANTILE(o_totalprice, 0.99:numeric), 'agg_6': QUANTILE(o_totalprice, 1.0:numeric), 'agg_7': QUANTILE(o_totalprice, 0.5:numeric), 'agg_8': QUANTILE(o_totalprice, 0.0:numeric), 'anything_n_name': ANYTHING(n_name), 'anything_r_name': ANYTHING(r_name)}) + JOIN(condition=t0.n_nationkey == t1.c_nationkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'o_totalprice': t1.o_totalprice, 'r_name': t0.r_name}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey, 'r_name': t1.r_name}) + LIMIT(limit=5:numeric, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}, orderings=[(n_name):asc_first]) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_nationkey': t0.c_nationkey, 'o_totalprice': t1.o_totalprice}) SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) FILTER(condition=o_clerk == 'Clerk#000000272':string, columns={'o_custkey': o_custkey, 'o_totalprice': o_totalprice}) diff --git a/tests/test_plan_refsols/semi_aggregate.txt b/tests/test_plan_refsols/semi_aggregate.txt index 62c91f92a..18f353c33 100644 --- a/tests/test_plan_refsols/semi_aggregate.txt +++ b/tests/test_plan_refsols/semi_aggregate.txt @@ -1,5 +1,5 @@ ROOT(columns=[('name', s_name), ('num_10parts', n_rows), ('avg_price_of_10parts', avg_p_retailprice), ('sum_price_of_10parts', DEFAULT_TO(sum_p_retailprice, 0:numeric))], orderings=[]) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'avg_p_retailprice': t1.avg_p_retailprice, 'n_rows': t1.n_rows, 's_name': t0.s_name, 'sum_p_retailprice': t1.sum_p_retailprice}) + JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'avg_p_retailprice': t1.avg_p_retailprice, 'n_rows': t1.n_rows, 's_name': t0.s_name, 'sum_p_retailprice': t1.sum_p_retailprice}) SCAN(table=tpch.SUPPLIER, columns={'s_name': s_name, 's_suppkey': s_suppkey}) AGGREGATE(keys={'ps_suppkey': ps_suppkey}, aggregations={'avg_p_retailprice': AVG(p_retailprice), 'n_rows': COUNT(), 'sum_p_retailprice': SUM(p_retailprice)}) JOIN(condition=t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'p_retailprice': t1.p_retailprice, 'ps_suppkey': t0.ps_suppkey}) diff --git a/tests/test_plan_refsols/semi_singular.txt b/tests/test_plan_refsols/semi_singular.txt index 675513cc3..e7c11c269 100644 --- a/tests/test_plan_refsols/semi_singular.txt +++ b/tests/test_plan_refsols/semi_singular.txt @@ -1,5 +1,5 @@ ROOT(columns=[('name', n_name), ('region_name', r_name)], orderings=[]) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'n_name': t0.n_name, 'r_name': t1.r_name}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'n_name': t0.n_name, 'r_name': t1.r_name}) SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_regionkey': n_regionkey}) FILTER(condition=r_name != 'ASIA':string, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) diff --git a/tests/test_plan_refsols/simple_var_std.txt b/tests/test_plan_refsols/simple_var_std.txt index 56d9687d4..89f1ca65b 100644 --- a/tests/test_plan_refsols/simple_var_std.txt +++ b/tests/test_plan_refsols/simple_var_std.txt @@ -1,6 +1,6 @@ -ROOT(columns=[('name', n_name), ('var', population_var_s_acctbal), ('std', population_std_s_acctbal), ('sample_var', sample_var_s_acctbal), ('sample_std', sample_std_s_acctbal), ('pop_var', population_var_s_acctbal), ('pop_std', population_std_s_acctbal)], orderings=[]) - JOIN(condition=t0.n_nationkey == t1.s_nationkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 'population_std_s_acctbal': t1.population_std_s_acctbal, 'population_var_s_acctbal': t1.population_var_s_acctbal, 'sample_std_s_acctbal': t1.sample_std_s_acctbal, 'sample_var_s_acctbal': t1.sample_var_s_acctbal}) - FILTER(condition=ISIN(n_name, ['ALGERIA', 'ARGENTINA']:array[unknown]), columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'s_nationkey': s_nationkey}, aggregations={'population_std_s_acctbal': POPULATION_STD(s_acctbal), 'population_var_s_acctbal': POPULATION_VAR(s_acctbal), 'sample_std_s_acctbal': SAMPLE_STD(s_acctbal), 'sample_var_s_acctbal': SAMPLE_VAR(s_acctbal)}) +ROOT(columns=[('name', anything_n_name), ('var', population_var_s_acctbal), ('std', population_std_s_acctbal), ('sample_var', sample_var_s_acctbal), ('sample_std', sample_std_s_acctbal), ('pop_var', population_var_s_acctbal), ('pop_std', population_std_s_acctbal)], orderings=[]) + AGGREGATE(keys={'s_nationkey': s_nationkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'population_std_s_acctbal': POPULATION_STD(s_acctbal), 'population_var_s_acctbal': POPULATION_VAR(s_acctbal), 'sample_std_s_acctbal': SAMPLE_STD(s_acctbal), 'sample_var_s_acctbal': SAMPLE_VAR(s_acctbal)}) + JOIN(condition=t0.n_nationkey == t1.s_nationkey, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 's_acctbal': t1.s_acctbal, 's_nationkey': t1.s_nationkey}) + FILTER(condition=ISIN(n_name, ['ALGERIA', 'ARGENTINA']:array[unknown]), columns={'n_name': n_name, 'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_nationkey': s_nationkey}) diff --git a/tests/test_plan_refsols/singular5.txt b/tests/test_plan_refsols/singular5.txt index 44b340fcb..5c0c74ea9 100644 --- a/tests/test_plan_refsols/singular5.txt +++ b/tests/test_plan_refsols/singular5.txt @@ -1,5 +1,5 @@ ROOT(columns=[('container', p_container), ('highest_price_ship_date', max_anything_l_shipdate)], orderings=[(max_anything_l_shipdate):asc_first, (p_container):asc_first], limit=5:numeric) - FILTER(condition=sum_n_rows > 0:numeric, columns={'max_anything_l_shipdate': max_anything_l_shipdate, 'p_container': p_container}) + FILTER(condition=sum_n_rows != 0:numeric, columns={'max_anything_l_shipdate': max_anything_l_shipdate, 'p_container': p_container}) AGGREGATE(keys={'p_container': p_container}, aggregations={'max_anything_l_shipdate': MAX(anything_l_shipdate), 'sum_n_rows': SUM(n_rows)}) JOIN(condition=t0.p_partkey == t1.p_partkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'anything_l_shipdate': t1.anything_l_shipdate, 'n_rows': t1.n_rows, 'p_container': t0.p_container}) FILTER(condition=p_brand == 'Brand#13':string, columns={'p_container': p_container, 'p_partkey': p_partkey}) diff --git a/tests/test_plan_refsols/singular7.txt b/tests/test_plan_refsols/singular7.txt index e49975afb..8251cf845 100644 --- a/tests/test_plan_refsols/singular7.txt +++ b/tests/test_plan_refsols/singular7.txt @@ -1,14 +1,14 @@ -ROOT(columns=[('supplier_name', s_name), ('part_name', p_name), ('n_orders', n_orders)], orderings=[(n_orders):desc_last, (s_name):asc_first], limit=5:numeric) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_orders': t1.n_orders, 'p_name': t1.p_name, 's_name': t0.s_name}) +ROOT(columns=[('supplier_name', s_name), ('part_name', anything_p_name), ('n_orders', n_orders)], orderings=[(n_orders):desc_last, (s_name):asc_first], limit=5:numeric) + JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_p_name': t1.anything_p_name, 'n_orders': t1.n_orders, 's_name': t0.s_name}) FILTER(condition=s_nationkey == 20:numeric, columns={'s_name': s_name, 's_suppkey': s_suppkey}) SCAN(table=tpch.SUPPLIER, columns={'s_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - PROJECT(columns={'n_orders': DEFAULT_TO(n_rows, 0:numeric), 'p_name': p_name, 'ps_suppkey': ps_suppkey}) - FILTER(condition=RANKING(args=[], partition=[ps_suppkey], order=[(DEFAULT_TO(n_rows, 0:numeric)):desc_first, (p_name):asc_last]) == 1:numeric, columns={'n_rows': n_rows, 'p_name': p_name, 'ps_suppkey': ps_suppkey}) - JOIN(condition=t0.ps_partkey == t1.l_partkey & t0.ps_suppkey == t1.l_suppkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'p_name': t0.p_name, 'ps_suppkey': t0.ps_suppkey}) - JOIN(condition=t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'p_name': t1.p_name, 'ps_partkey': t0.ps_partkey, 'ps_suppkey': t0.ps_suppkey}) - SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) - FILTER(condition=p_brand == 'Brand#13':string, columns={'p_name': p_name, 'p_partkey': p_partkey}) - SCAN(table=tpch.PART, columns={'p_brand': p_brand, 'p_name': p_name, 'p_partkey': p_partkey}) - AGGREGATE(keys={'l_partkey': l_partkey, 'l_suppkey': l_suppkey}, aggregations={'n_rows': COUNT()}) + PROJECT(columns={'anything_p_name': anything_p_name, 'n_orders': DEFAULT_TO(KEEP_IF(count_l_suppkey, count_l_suppkey != 0:numeric), 0:numeric), 'ps_suppkey': ps_suppkey}) + FILTER(condition=RANKING(args=[], partition=[ps_suppkey], order=[(DEFAULT_TO(KEEP_IF(count_l_suppkey, count_l_suppkey != 0:numeric), 0:numeric)):desc_first, (anything_p_name):asc_last]) == 1:numeric, columns={'anything_p_name': anything_p_name, 'count_l_suppkey': count_l_suppkey, 'ps_suppkey': ps_suppkey}) + AGGREGATE(keys={'l_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}, aggregations={'anything_p_name': ANYTHING(p_name), 'count_l_suppkey': COUNT(l_suppkey)}) + JOIN(condition=t0.ps_partkey == t1.l_partkey & t0.ps_suppkey == t1.l_suppkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_suppkey': t1.l_suppkey, 'p_name': t0.p_name, 'ps_partkey': t0.ps_partkey, 'ps_suppkey': t0.ps_suppkey}) + JOIN(condition=t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'p_name': t1.p_name, 'ps_partkey': t0.ps_partkey, 'ps_suppkey': t0.ps_suppkey}) + SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) + FILTER(condition=p_brand == 'Brand#13':string, columns={'p_name': p_name, 'p_partkey': p_partkey}) + SCAN(table=tpch.PART, columns={'p_brand': p_brand, 'p_name': p_name, 'p_partkey': p_partkey}) FILTER(condition=YEAR(l_shipdate) == 1994:numeric, columns={'l_partkey': l_partkey, 'l_suppkey': l_suppkey}) SCAN(table=tpch.LINEITEM, columns={'l_partkey': l_partkey, 'l_shipdate': l_shipdate, 'l_suppkey': l_suppkey}) diff --git a/tests/test_plan_refsols/sqlite_udf_nested.txt b/tests/test_plan_refsols/sqlite_udf_nested.txt index cd86522db..91814b415 100644 --- a/tests/test_plan_refsols/sqlite_udf_nested.txt +++ b/tests/test_plan_refsols/sqlite_udf_nested.txt @@ -1,6 +1,6 @@ ROOT(columns=[('p', ROUND(percentage_expr, 2:numeric))], orderings=[]) AGGREGATE(keys={}, aggregations={'percentage_expr': PERCENTAGE(DECODE3(c_mktsegment, 'BUILDING':string, POSITIVE(c_acctbal), 'MACHINERY':string, EPSILON(c_acctbal, min_bal, 500:numeric), 'HOUSEHOLD':string, INTEGER(FORMAT_DATETIME('%j':string, min_o_orderdate)) == '366':string, False:bool))}) - FILTER(condition=n_rows > 0:numeric, columns={'c_acctbal': c_acctbal, 'c_mktsegment': c_mktsegment, 'min_bal': min_bal, 'min_o_orderdate': min_o_orderdate}) + FILTER(condition=n_rows != 0:numeric, columns={'c_acctbal': c_acctbal, 'c_mktsegment': c_mktsegment, 'min_bal': min_bal, 'min_o_orderdate': min_o_orderdate}) PROJECT(columns={'c_acctbal': c_acctbal, 'c_mktsegment': c_mktsegment, 'min_bal': RELMIN(args=[c_acctbal], partition=[], order=[]), 'min_o_orderdate': min_o_orderdate, 'n_rows': n_rows}) JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'c_acctbal': t0.c_acctbal, 'c_mktsegment': t0.c_mktsegment, 'min_o_orderdate': t1.min_o_orderdate, 'n_rows': t1.n_rows}) SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment}) diff --git a/tests/test_plan_refsols/supplier_best_part.txt b/tests/test_plan_refsols/supplier_best_part.txt index f9b08525e..a63790075 100644 --- a/tests/test_plan_refsols/supplier_best_part.txt +++ b/tests/test_plan_refsols/supplier_best_part.txt @@ -6,7 +6,7 @@ ROOT(columns=[('supplier_name', s_name), ('part_name', p_name), ('total_quantity SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) FILTER(condition=RANKING(args=[], partition=[ps_suppkey], order=[(DEFAULT_TO(sum_l_quantity, 0:numeric)):desc_first], allow_ties=False) == 1:numeric, columns={'n_rows': n_rows, 'p_name': p_name, 'ps_suppkey': ps_suppkey, 'sum_l_quantity': sum_l_quantity}) JOIN(condition=t0.ps_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=PLURAL_FILTER, columns={'n_rows': t0.n_rows, 'p_name': t1.p_name, 'ps_suppkey': t0.ps_suppkey, 'sum_l_quantity': t0.sum_l_quantity}) - JOIN(condition=t0.ps_partkey == t1.l_partkey & t0.ps_suppkey == t1.l_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'ps_partkey': t0.ps_partkey, 'ps_suppkey': t0.ps_suppkey, 'sum_l_quantity': t1.sum_l_quantity}) + JOIN(condition=t0.ps_partkey == t1.l_partkey & t0.ps_suppkey == t1.l_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'n_rows': t1.n_rows, 'ps_partkey': t0.ps_partkey, 'ps_suppkey': t0.ps_suppkey, 'sum_l_quantity': t1.sum_l_quantity}) SCAN(table=tpch.PARTSUPP, columns={'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) AGGREGATE(keys={'l_partkey': l_partkey, 'l_suppkey': l_suppkey}, aggregations={'n_rows': COUNT(), 'sum_l_quantity': SUM(l_quantity)}) FILTER(condition=YEAR(l_shipdate) == 1994:numeric & l_tax == 0:numeric, columns={'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_suppkey': l_suppkey}) diff --git a/tests/test_plan_refsols/supplier_pct_national_qty.txt b/tests/test_plan_refsols/supplier_pct_national_qty.txt index cf94b18f6..d3a24fe65 100644 --- a/tests/test_plan_refsols/supplier_pct_national_qty.txt +++ b/tests/test_plan_refsols/supplier_pct_national_qty.txt @@ -1,13 +1,13 @@ -ROOT(columns=[('supplier_name', s_name), ('nation_name', n_name), ('supplier_quantity', DEFAULT_TO(sum_l_quantity, 0:numeric)), ('national_qty_pct', 100.0:numeric * DEFAULT_TO(sum_l_quantity, 0:numeric) / RELSUM(args=[DEFAULT_TO(sum_l_quantity, 0:numeric)], partition=[s_nationkey], order=[]))], orderings=[(100.0:numeric * DEFAULT_TO(sum_l_quantity, 0:numeric) / RELSUM(args=[DEFAULT_TO(sum_l_quantity, 0:numeric)], partition=[s_nationkey], order=[])):desc_last], limit=5:numeric) - JOIN(condition=t0.s_suppkey == t1.l_suppkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 's_name': t0.s_name, 's_nationkey': t0.s_nationkey, 'sum_l_quantity': t1.sum_l_quantity}) - JOIN(condition=t0.n_nationkey == t1.s_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 's_name': t1.s_name, 's_nationkey': t1.s_nationkey, 's_suppkey': t1.s_suppkey}) - JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=SEMI, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) - FILTER(condition=r_name == 'AFRICA':string, columns={'r_regionkey': r_regionkey}) - SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) - FILTER(condition=s_acctbal >= 0.0:numeric & CONTAINS(s_comment, 'careful':string), columns={'s_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_comment': s_comment, 's_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - AGGREGATE(keys={'l_suppkey': l_suppkey}, aggregations={'sum_l_quantity': SUM(l_quantity)}) +ROOT(columns=[('supplier_name', anything_s_name), ('nation_name', anything_n_name), ('supplier_quantity', DEFAULT_TO(sum_l_quantity, 0:numeric)), ('national_qty_pct', 100.0:numeric * DEFAULT_TO(sum_l_quantity, 0:numeric) / RELSUM(args=[DEFAULT_TO(sum_l_quantity, 0:numeric)], partition=[anything_s_nationkey], order=[]))], orderings=[(100.0:numeric * DEFAULT_TO(sum_l_quantity, 0:numeric) / RELSUM(args=[DEFAULT_TO(sum_l_quantity, 0:numeric)], partition=[anything_s_nationkey], order=[])):desc_last], limit=5:numeric) + AGGREGATE(keys={'l_suppkey': s_suppkey}, aggregations={'anything_n_name': ANYTHING(n_name), 'anything_s_name': ANYTHING(s_name), 'anything_s_nationkey': ANYTHING(s_nationkey), 'sum_l_quantity': SUM(l_quantity)}) + JOIN(condition=t0.s_suppkey == t1.l_suppkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_quantity': t1.l_quantity, 'n_name': t0.n_name, 's_name': t0.s_name, 's_nationkey': t0.s_nationkey, 's_suppkey': t0.s_suppkey}) + JOIN(condition=t0.n_nationkey == t1.s_nationkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_name': t0.n_name, 's_name': t1.s_name, 's_nationkey': t1.s_nationkey, 's_suppkey': t1.s_suppkey}) + JOIN(condition=t0.n_regionkey == t1.r_regionkey, type=SEMI, columns={'n_name': t0.n_name, 'n_nationkey': t0.n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey, 'n_regionkey': n_regionkey}) + FILTER(condition=r_name == 'AFRICA':string, columns={'r_regionkey': r_regionkey}) + SCAN(table=tpch.REGION, columns={'r_name': r_name, 'r_regionkey': r_regionkey}) + FILTER(condition=s_acctbal >= 0.0:numeric & CONTAINS(s_comment, 'careful':string), columns={'s_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_acctbal': s_acctbal, 's_comment': s_comment, 's_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) JOIN(condition=t0.l_partkey == t1.p_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'l_quantity': t0.l_quantity, 'l_suppkey': t0.l_suppkey}) FILTER(condition=YEAR(l_shipdate) == 1995:numeric & l_shipmode == 'SHIP':string, columns={'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_suppkey': l_suppkey}) SCAN(table=tpch.LINEITEM, columns={'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipdate': l_shipdate, 'l_shipmode': l_shipmode, 'l_suppkey': l_suppkey}) diff --git a/tests/test_plan_refsols/technograph_country_combination_analysis.txt b/tests/test_plan_refsols/technograph_country_combination_analysis.txt index c0ef3e327..915f73bcc 100644 --- a/tests/test_plan_refsols/technograph_country_combination_analysis.txt +++ b/tests/test_plan_refsols/technograph_country_combination_analysis.txt @@ -1,14 +1,14 @@ ROOT(columns=[('factory_country', co_name), ('purchase_country', name_2), ('ir', ROUND(DEFAULT_TO(sum_n_rows, 0:numeric) / DEFAULT_TO(n_rows, 0:numeric), 2:numeric))], orderings=[(ROUND(DEFAULT_TO(sum_n_rows, 0:numeric) / DEFAULT_TO(n_rows, 0:numeric), 2:numeric)):desc_last], limit=5:numeric) - JOIN(condition=t0.co_id == t1.co_id & t0._id_1 == t1._id_3, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'co_name': t0.co_name, 'n_rows': t1.n_rows, 'name_2': t0.name_2, 'sum_n_rows': t1.sum_n_rows}) + JOIN(condition=t0.co_id == t1.anything_co_id & t0._id_1 == t1.anything__id_3, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'co_name': t0.co_name, 'n_rows': t1.n_rows, 'name_2': t0.name_2, 'sum_n_rows': t1.sum_n_rows}) JOIN(condition=True:bool, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'_id_1': t1.co_id, 'co_id': t0.co_id, 'co_name': t0.co_name, 'name_2': t1.co_name}) SCAN(table=main.COUNTRIES, columns={'co_id': co_id, 'co_name': co_name}) SCAN(table=main.COUNTRIES, columns={'co_id': co_id, 'co_name': co_name}) - AGGREGATE(keys={'_id_3': _id_3, 'co_id': co_id}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.de_id == t1.in_device_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'_id_3': t0._id_3, 'co_id': t0.co_id, 'n_rows': t1.n_rows}) - JOIN(condition=t0._id_3 == t1.de_purchase_country_id & t1.de_production_country_id == t0.co_id, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'_id_3': t0._id_3, 'co_id': t0.co_id, 'de_id': t1.de_id}) - JOIN(condition=True:bool, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'_id_3': t1.co_id, 'co_id': t0.co_id}) - SCAN(table=main.COUNTRIES, columns={'co_id': co_id}) - SCAN(table=main.COUNTRIES, columns={'co_id': co_id}) - SCAN(table=main.DEVICES, columns={'de_id': de_id, 'de_production_country_id': de_production_country_id, 'de_purchase_country_id': de_purchase_country_id}) - AGGREGATE(keys={'in_device_id': in_device_id}, aggregations={'n_rows': COUNT()}) + AGGREGATE(keys={'anything__id_3': anything__id_3, 'anything_co_id': anything_co_id}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_in_device_id, count_in_device_id != 0:numeric))}) + AGGREGATE(keys={'in_device_id': de_id}, aggregations={'anything__id_3': ANYTHING(_id_3), 'anything_co_id': ANYTHING(co_id), 'count_in_device_id': COUNT(in_device_id)}) + JOIN(condition=t0.de_id == t1.in_device_id, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'_id_3': t0._id_3, 'co_id': t0.co_id, 'de_id': t0.de_id, 'in_device_id': t1.in_device_id}) + JOIN(condition=t0._id_3 == t1.de_purchase_country_id & t1.de_production_country_id == t0.co_id, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'_id_3': t0._id_3, 'co_id': t0.co_id, 'de_id': t1.de_id}) + JOIN(condition=True:bool, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=PLURAL_ACCESS, columns={'_id_3': t1.co_id, 'co_id': t0.co_id}) + SCAN(table=main.COUNTRIES, columns={'co_id': co_id}) + SCAN(table=main.COUNTRIES, columns={'co_id': co_id}) + SCAN(table=main.DEVICES, columns={'de_id': de_id, 'de_production_country_id': de_production_country_id, 'de_purchase_country_id': de_purchase_country_id}) SCAN(table=main.INCIDENTS, columns={'in_device_id': in_device_id}) diff --git a/tests/test_plan_refsols/technograph_country_incident_rate_analysis.txt b/tests/test_plan_refsols/technograph_country_incident_rate_analysis.txt index 1bd54185e..f72a0e8b1 100644 --- a/tests/test_plan_refsols/technograph_country_incident_rate_analysis.txt +++ b/tests/test_plan_refsols/technograph_country_incident_rate_analysis.txt @@ -1,5 +1,5 @@ ROOT(columns=[('country_name', co_name), ('made_ir', ROUND(DEFAULT_TO(sum_n_rows, 0:numeric) / n_rows, 2:numeric)), ('sold_ir', ROUND(DEFAULT_TO(agg_14, 0:numeric) / agg_3, 2:numeric)), ('user_ir', ROUND(DEFAULT_TO(agg_8, 0:numeric) / DEFAULT_TO(agg_5, 0:numeric), 2:numeric))], orderings=[(co_name):asc_first]) - JOIN(condition=t0.co_id == t1.us_country_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'agg_14': t0.agg_14, 'agg_3': t0.agg_3, 'agg_5': t1.n_rows, 'agg_8': t1.sum_n_rows, 'co_name': t0.co_name, 'n_rows': t0.n_rows, 'sum_n_rows': t0.sum_n_rows}) + JOIN(condition=t0.co_id == t1.anything_us_country_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'agg_14': t0.agg_14, 'agg_3': t0.agg_3, 'agg_5': t1.n_rows, 'agg_8': t1.sum_n_rows, 'co_name': t0.co_name, 'n_rows': t0.n_rows, 'sum_n_rows': t0.sum_n_rows}) JOIN(condition=t0.co_id == t1.de_purchase_country_id, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'agg_14': t1.sum_n_rows, 'agg_3': t1.n_rows, 'co_id': t0.co_id, 'co_name': t0.co_name, 'n_rows': t0.n_rows, 'sum_n_rows': t0.sum_n_rows}) JOIN(condition=t0.co_id == t1.de_production_country_id, type=INNER, cardinality=SINGULAR_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'co_id': t0.co_id, 'co_name': t0.co_name, 'n_rows': t1.n_rows, 'sum_n_rows': t1.sum_n_rows}) SCAN(table=main.COUNTRIES, columns={'co_id': co_id, 'co_name': co_name}) @@ -13,10 +13,10 @@ ROOT(columns=[('country_name', co_name), ('made_ir', ROUND(DEFAULT_TO(sum_n_rows SCAN(table=main.DEVICES, columns={'de_id': de_id, 'de_purchase_country_id': de_purchase_country_id}) AGGREGATE(keys={'in_device_id': in_device_id}, aggregations={'n_rows': COUNT()}) SCAN(table=main.INCIDENTS, columns={'in_device_id': in_device_id}) - AGGREGATE(keys={'us_country_id': us_country_id}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.de_id == t1.in_device_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 'us_country_id': t0.us_country_id}) - JOIN(condition=t0.us_id == t1.de_owner_id, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'de_id': t1.de_id, 'us_country_id': t0.us_country_id}) - SCAN(table=main.USERS, columns={'us_country_id': us_country_id, 'us_id': us_id}) - SCAN(table=main.DEVICES, columns={'de_id': de_id, 'de_owner_id': de_owner_id}) - AGGREGATE(keys={'in_device_id': in_device_id}, aggregations={'n_rows': COUNT()}) + AGGREGATE(keys={'anything_us_country_id': anything_us_country_id}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_in_device_id, count_in_device_id != 0:numeric))}) + AGGREGATE(keys={'in_device_id': de_id}, aggregations={'anything_us_country_id': ANYTHING(us_country_id), 'count_in_device_id': COUNT(in_device_id)}) + JOIN(condition=t0.de_id == t1.in_device_id, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'de_id': t0.de_id, 'in_device_id': t1.in_device_id, 'us_country_id': t0.us_country_id}) + JOIN(condition=t0.us_id == t1.de_owner_id, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'de_id': t1.de_id, 'us_country_id': t0.us_country_id}) + SCAN(table=main.USERS, columns={'us_country_id': us_country_id, 'us_id': us_id}) + SCAN(table=main.DEVICES, columns={'de_id': de_id, 'de_owner_id': de_owner_id}) SCAN(table=main.INCIDENTS, columns={'in_device_id': in_device_id}) diff --git a/tests/test_plan_refsols/technograph_error_rate_sun_set_by_factory_country.txt b/tests/test_plan_refsols/technograph_error_rate_sun_set_by_factory_country.txt index 9b738b2d0..4cbd2dc77 100644 --- a/tests/test_plan_refsols/technograph_error_rate_sun_set_by_factory_country.txt +++ b/tests/test_plan_refsols/technograph_error_rate_sun_set_by_factory_country.txt @@ -1,12 +1,12 @@ ROOT(columns=[('country', co_name), ('ir', ROUND(DEFAULT_TO(sum_n_incidents, 0:numeric) / DEFAULT_TO(n_rows, 0:numeric), 2:numeric))], orderings=[(co_name):asc_first]) - JOIN(condition=t0.co_id == t1.de_production_country_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'co_name': t0.co_name, 'n_rows': t1.n_rows, 'sum_n_incidents': t1.sum_n_incidents}) + JOIN(condition=t0.co_id == t1.anything_de_production_country_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'co_name': t0.co_name, 'n_rows': t1.n_rows, 'sum_n_incidents': t1.sum_n_incidents}) SCAN(table=main.COUNTRIES, columns={'co_id': co_id, 'co_name': co_name}) - PROJECT(columns={'de_production_country_id': de_production_country_id, 'n_rows': n_rows, 'sum_n_incidents': DEFAULT_TO(sum_n_rows, 0:numeric)}) - AGGREGATE(keys={'de_production_country_id': de_production_country_id}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(n_rows)}) - JOIN(condition=t0.de_id == t1.in_device_id, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'de_production_country_id': t0.de_production_country_id, 'n_rows': t1.n_rows}) - JOIN(condition=t0.de_product_id == t1.pr_id, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'de_id': t0.de_id, 'de_production_country_id': t0.de_production_country_id}) - SCAN(table=main.DEVICES, columns={'de_id': de_id, 'de_product_id': de_product_id, 'de_production_country_id': de_production_country_id}) - FILTER(condition=pr_name == 'Sun-Set':string, columns={'pr_id': pr_id}) - SCAN(table=main.PRODUCTS, columns={'pr_id': pr_id, 'pr_name': pr_name}) - AGGREGATE(keys={'in_device_id': in_device_id}, aggregations={'n_rows': COUNT()}) + PROJECT(columns={'anything_de_production_country_id': anything_de_production_country_id, 'n_rows': n_rows, 'sum_n_incidents': DEFAULT_TO(sum_n_rows, 0:numeric)}) + AGGREGATE(keys={'anything_de_production_country_id': anything_de_production_country_id}, aggregations={'n_rows': COUNT(), 'sum_n_rows': SUM(KEEP_IF(count_in_device_id, count_in_device_id != 0:numeric))}) + AGGREGATE(keys={'in_device_id': de_id}, aggregations={'anything_de_production_country_id': ANYTHING(de_production_country_id), 'count_in_device_id': COUNT(in_device_id)}) + JOIN(condition=t0.de_id == t1.in_device_id, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'de_id': t0.de_id, 'de_production_country_id': t0.de_production_country_id, 'in_device_id': t1.in_device_id}) + JOIN(condition=t0.de_product_id == t1.pr_id, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'de_id': t0.de_id, 'de_production_country_id': t0.de_production_country_id}) + SCAN(table=main.DEVICES, columns={'de_id': de_id, 'de_product_id': de_product_id, 'de_production_country_id': de_production_country_id}) + FILTER(condition=pr_name == 'Sun-Set':string, columns={'pr_id': pr_id}) + SCAN(table=main.PRODUCTS, columns={'pr_id': pr_id, 'pr_name': pr_name}) SCAN(table=main.INCIDENTS, columns={'in_device_id': in_device_id}) diff --git a/tests/test_plan_refsols/technograph_year_cumulative_incident_rate_overall.txt b/tests/test_plan_refsols/technograph_year_cumulative_incident_rate_overall.txt index 92fd8f422..7c5da2407 100644 --- a/tests/test_plan_refsols/technograph_year_cumulative_incident_rate_overall.txt +++ b/tests/test_plan_refsols/technograph_year_cumulative_incident_rate_overall.txt @@ -1,5 +1,5 @@ ROOT(columns=[('yr', year_ca_dt), ('cum_ir', ROUND(RELSUM(args=[DEFAULT_TO(sum_n_rows, 0:numeric)], partition=[], order=[(year_ca_dt):asc_last], cumulative=True) / RELSUM(args=[sum_expr], partition=[], order=[(year_ca_dt):asc_last], cumulative=True), 2:numeric)), ('pct_bought_change', ROUND(100.0:numeric * sum_expr - PREV(args=[sum_expr], partition=[], order=[(year_ca_dt):asc_last]) / PREV(args=[sum_expr], partition=[], order=[(year_ca_dt):asc_last]), 2:numeric)), ('pct_incident_change', ROUND(100.0:numeric * DEFAULT_TO(sum_n_rows, 0:numeric) - PREV(args=[DEFAULT_TO(sum_n_rows, 0:numeric)], partition=[], order=[(year_ca_dt):asc_last]) / PREV(args=[DEFAULT_TO(sum_n_rows, 0:numeric)], partition=[], order=[(year_ca_dt):asc_last]), 2:numeric)), ('bought', sum_expr), ('incidents', DEFAULT_TO(sum_n_rows, 0:numeric))], orderings=[(year_ca_dt):asc_first]) - FILTER(condition=DEFAULT_TO(sum_expr_3, 0:numeric) > 0:numeric, columns={'sum_expr': sum_expr_3, 'sum_n_rows': sum_n_rows, 'year_ca_dt': year_ca_dt}) + FILTER(condition=DEFAULT_TO(sum_expr_3, 0:numeric) != 0:numeric, columns={'sum_expr': sum_expr_3, 'sum_n_rows': sum_n_rows, 'year_ca_dt': year_ca_dt}) AGGREGATE(keys={'year_ca_dt': YEAR(ca_dt)}, aggregations={'sum_expr_3': SUM(expr_3), 'sum_n_rows': SUM(n_rows)}) JOIN(condition=t0.ca_dt == t1.ca_dt, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'ca_dt': t0.ca_dt, 'expr_3': t0.n_rows, 'n_rows': t1.n_rows}) JOIN(condition=t0.ca_dt == t1.ca_dt, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_ACCESS, columns={'ca_dt': t0.ca_dt, 'n_rows': t1.n_rows}) diff --git a/tests/test_plan_refsols/tpch_q15.txt b/tests/test_plan_refsols/tpch_q15.txt index ead8b6cda..b0f62ba71 100644 --- a/tests/test_plan_refsols/tpch_q15.txt +++ b/tests/test_plan_refsols/tpch_q15.txt @@ -2,11 +2,9 @@ ROOT(columns=[('S_SUPPKEY', s_suppkey), ('S_NAME', s_name), ('S_ADDRESS', s_addr JOIN(condition=DEFAULT_TO(t1.sum_expr, 0:numeric) == t0.max_total_revenue & t0.s_suppkey == t1.l_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'s_address': t0.s_address, 's_name': t0.s_name, 's_phone': t0.s_phone, 's_suppkey': t0.s_suppkey, 'sum_expr': t1.sum_expr}) JOIN(condition=True:bool, type=INNER, cardinality=PLURAL_ACCESS, reverse_cardinality=SINGULAR_ACCESS, columns={'max_total_revenue': t0.max_total_revenue, 's_address': t1.s_address, 's_name': t1.s_name, 's_phone': t1.s_phone, 's_suppkey': t1.s_suppkey}) AGGREGATE(keys={}, aggregations={'max_total_revenue': MAX(DEFAULT_TO(sum_expr, 0:numeric))}) - JOIN(condition=t0.s_suppkey == t1.l_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'sum_expr': t1.sum_expr}) - SCAN(table=tpch.SUPPLIER, columns={'s_suppkey': s_suppkey}) - AGGREGATE(keys={'l_suppkey': l_suppkey}, aggregations={'sum_expr': SUM(l_extendedprice * 1:numeric - l_discount)}) - FILTER(condition=l_shipdate < datetime.date(1996, 4, 1):datetime & l_shipdate >= datetime.date(1996, 1, 1):datetime, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_suppkey': l_suppkey}) - SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_shipdate': l_shipdate, 'l_suppkey': l_suppkey}) + AGGREGATE(keys={'l_suppkey': l_suppkey}, aggregations={'sum_expr': SUM(l_extendedprice * 1:numeric - l_discount)}) + FILTER(condition=l_shipdate < datetime.date(1996, 4, 1):datetime & l_shipdate >= datetime.date(1996, 1, 1):datetime, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_suppkey': l_suppkey}) + SCAN(table=tpch.LINEITEM, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_shipdate': l_shipdate, 'l_suppkey': l_suppkey}) SCAN(table=tpch.SUPPLIER, columns={'s_address': s_address, 's_name': s_name, 's_phone': s_phone, 's_suppkey': s_suppkey}) AGGREGATE(keys={'l_suppkey': l_suppkey}, aggregations={'sum_expr': SUM(l_extendedprice * 1:numeric - l_discount)}) FILTER(condition=l_shipdate < datetime.date(1996, 4, 1):datetime & l_shipdate >= datetime.date(1996, 1, 1):datetime, columns={'l_discount': l_discount, 'l_extendedprice': l_extendedprice, 'l_suppkey': l_suppkey}) diff --git a/tests/test_plan_refsols/tpch_q20.txt b/tests/test_plan_refsols/tpch_q20.txt index 012ae3c85..7100b288a 100644 --- a/tests/test_plan_refsols/tpch_q20.txt +++ b/tests/test_plan_refsols/tpch_q20.txt @@ -1,15 +1,15 @@ -ROOT(columns=[('S_NAME', s_name), ('S_ADDRESS', s_address)], orderings=[(s_name):asc_first], limit=10:numeric) - JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'s_address': t0.s_address, 's_name': t0.s_name}) - JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'s_address': t0.s_address, 's_name': t0.s_name, 's_suppkey': t0.s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_address': s_address, 's_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - FILTER(condition=n_name == 'CANADA':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'ps_suppkey': ps_suppkey}, aggregations={}) - JOIN(condition=t0.ps_partkey == t1.p_partkey & t0.ps_availqty > 0.5:numeric * DEFAULT_TO(t1.sum_l_quantity, 0:numeric), type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'ps_suppkey': t0.ps_suppkey}) +ROOT(columns=[('S_NAME', anything_s_name), ('S_ADDRESS', anything_s_address)], orderings=[(anything_s_name):asc_first], limit=10:numeric) + AGGREGATE(keys={'ps_suppkey': ps_suppkey}, aggregations={'anything_s_address': ANYTHING(s_address), 'anything_s_name': ANYTHING(s_name)}) + JOIN(condition=t0.s_suppkey == t1.ps_suppkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'ps_suppkey': t1.ps_suppkey, 's_address': t0.s_address, 's_name': t0.s_name}) + JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'s_address': t0.s_address, 's_name': t0.s_name, 's_suppkey': t0.s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_address': s_address, 's_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) + FILTER(condition=n_name == 'CANADA':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) + JOIN(condition=t0.ps_partkey == t1.l_partkey & t0.ps_availqty > 0.5:numeric * DEFAULT_TO(t1.sum_l_quantity, 0:numeric), type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_FILTER, columns={'ps_suppkey': t0.ps_suppkey}) SCAN(table=tpch.PARTSUPP, columns={'ps_availqty': ps_availqty, 'ps_partkey': ps_partkey, 'ps_suppkey': ps_suppkey}) - JOIN(condition=t0.p_partkey == t1.l_partkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'p_partkey': t0.p_partkey, 'sum_l_quantity': t1.sum_l_quantity}) - FILTER(condition=STARTSWITH(p_name, 'forest':string), columns={'p_partkey': p_partkey}) - SCAN(table=tpch.PART, columns={'p_name': p_name, 'p_partkey': p_partkey}) - AGGREGATE(keys={'l_partkey': l_partkey}, aggregations={'sum_l_quantity': SUM(l_quantity)}) + AGGREGATE(keys={'l_partkey': l_partkey}, aggregations={'sum_l_quantity': SUM(l_quantity)}) + JOIN(condition=t0.p_partkey == t1.l_partkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'l_partkey': t1.l_partkey, 'l_quantity': t1.l_quantity}) + FILTER(condition=STARTSWITH(p_name, 'forest':string), columns={'p_partkey': p_partkey}) + SCAN(table=tpch.PART, columns={'p_name': p_name, 'p_partkey': p_partkey}) FILTER(condition=YEAR(l_shipdate) == 1994:numeric, columns={'l_partkey': l_partkey, 'l_quantity': l_quantity}) SCAN(table=tpch.LINEITEM, columns={'l_partkey': l_partkey, 'l_quantity': l_quantity, 'l_shipdate': l_shipdate}) diff --git a/tests/test_plan_refsols/tpch_q21.txt b/tests/test_plan_refsols/tpch_q21.txt index 52d68c1b0..0d8a6953e 100644 --- a/tests/test_plan_refsols/tpch_q21.txt +++ b/tests/test_plan_refsols/tpch_q21.txt @@ -1,10 +1,10 @@ -ROOT(columns=[('S_NAME', s_name), ('NUMWAIT', DEFAULT_TO(n_rows, 0:numeric))], orderings=[(DEFAULT_TO(n_rows, 0:numeric)):desc_last, (s_name):asc_first], limit=10:numeric) - JOIN(condition=t0.s_suppkey == t1.anything_l_suppkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows, 's_name': t0.s_name}) - JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'s_name': t0.s_name, 's_suppkey': t0.s_suppkey}) - SCAN(table=tpch.SUPPLIER, columns={'s_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) - FILTER(condition=n_name == 'SAUDI ARABIA':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'anything_l_suppkey': anything_l_suppkey}, aggregations={'n_rows': COUNT()}) +ROOT(columns=[('S_NAME', anything_s_name), ('NUMWAIT', DEFAULT_TO(KEEP_IF(count_anything_l_suppkey, count_anything_l_suppkey != 0:numeric), 0:numeric))], orderings=[(DEFAULT_TO(KEEP_IF(count_anything_l_suppkey, count_anything_l_suppkey != 0:numeric), 0:numeric)):desc_last, (anything_s_name):asc_first], limit=10:numeric) + AGGREGATE(keys={'anything_l_suppkey': s_suppkey}, aggregations={'anything_s_name': ANYTHING(s_name), 'count_anything_l_suppkey': COUNT(anything_l_suppkey)}) + JOIN(condition=t0.s_suppkey == t1.anything_l_suppkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'anything_l_suppkey': t1.anything_l_suppkey, 's_name': t0.s_name, 's_suppkey': t0.s_suppkey}) + JOIN(condition=t0.s_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'s_name': t0.s_name, 's_suppkey': t0.s_suppkey}) + SCAN(table=tpch.SUPPLIER, columns={'s_name': s_name, 's_nationkey': s_nationkey, 's_suppkey': s_suppkey}) + FILTER(condition=n_name == 'SAUDI ARABIA':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) JOIN(condition=t0.l_linenumber == t1.l_linenumber & t0.l_orderkey == t1.l_orderkey & t0.o_orderkey == t1.o_orderkey, type=ANTI, columns={'anything_l_suppkey': t0.anything_l_suppkey}) FILTER(condition=anything_o_orderstatus == 'F':string, columns={'anything_l_suppkey': anything_l_suppkey, 'l_linenumber': l_linenumber, 'l_orderkey': l_orderkey, 'o_orderkey': o_orderkey}) AGGREGATE(keys={'l_linenumber': l_linenumber, 'l_orderkey': l_orderkey, 'o_orderkey': o_orderkey}, aggregations={'anything_l_suppkey': ANYTHING(l_suppkey), 'anything_o_orderstatus': ANYTHING(o_orderstatus)}) diff --git a/tests/test_plan_refsols/tpch_q22.txt b/tests/test_plan_refsols/tpch_q22.txt index dbbf1ce32..076214713 100644 --- a/tests/test_plan_refsols/tpch_q22.txt +++ b/tests/test_plan_refsols/tpch_q22.txt @@ -1,12 +1,10 @@ ROOT(columns=[('CNTRY_CODE', cntry_code), ('NUM_CUSTS', n_rows), ('TOTACCTBAL', DEFAULT_TO(sum_c_acctbal, 0:numeric))], orderings=[(cntry_code):asc_first]) AGGREGATE(keys={'cntry_code': SLICE(c_phone, None:unknown, 2:numeric, None:unknown)}, aggregations={'n_rows': COUNT(), 'sum_c_acctbal': SUM(c_acctbal)}) - FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) == 0:numeric, columns={'c_acctbal': c_acctbal, 'c_phone': c_phone}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_acctbal': t0.c_acctbal, 'c_phone': t0.c_phone, 'n_rows': t1.n_rows}) - JOIN(condition=t1.c_acctbal > t0.avg_c_acctbal, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_acctbal': t1.c_acctbal, 'c_custkey': t1.c_custkey, 'c_phone': t1.c_phone}) - AGGREGATE(keys={}, aggregations={'avg_c_acctbal': AVG(c_acctbal)}) - FILTER(condition=c_acctbal > 0.0:numeric & ISIN(SLICE(c_phone, None:unknown, 2:numeric, None:unknown), ['13', '31', '23', '29', '30', '18', '17']:array[unknown]), columns={'c_acctbal': c_acctbal}) - SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_phone': c_phone}) - FILTER(condition=ISIN(SLICE(c_phone, None:unknown, 2:numeric, None:unknown), ['13', '31', '23', '29', '30', '18', '17']:array[unknown]), columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_phone': c_phone}) - SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_phone': c_phone}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) - SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=ANTI, columns={'c_acctbal': t0.c_acctbal, 'c_phone': t0.c_phone}) + JOIN(condition=t1.c_acctbal > t0.avg_c_acctbal, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_acctbal': t1.c_acctbal, 'c_custkey': t1.c_custkey, 'c_phone': t1.c_phone}) + AGGREGATE(keys={}, aggregations={'avg_c_acctbal': AVG(c_acctbal)}) + FILTER(condition=c_acctbal > 0.0:numeric & ISIN(SLICE(c_phone, None:unknown, 2:numeric, None:unknown), ['13', '31', '23', '29', '30', '18', '17']:array[unknown]), columns={'c_acctbal': c_acctbal}) + SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_phone': c_phone}) + FILTER(condition=ISIN(SLICE(c_phone, None:unknown, 2:numeric, None:unknown), ['13', '31', '23', '29', '30', '18', '17']:array[unknown]), columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_phone': c_phone}) + SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_phone': c_phone}) + SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey}) diff --git a/tests/test_plan_refsols/window_filter_order_1.txt b/tests/test_plan_refsols/window_filter_order_1.txt index d3401bdb9..fb1fe6e66 100644 --- a/tests/test_plan_refsols/window_filter_order_1.txt +++ b/tests/test_plan_refsols/window_filter_order_1.txt @@ -1,11 +1,11 @@ ROOT(columns=[('n', n_rows)], orderings=[]) AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) < RELAVG(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[], order=[]) & n_rows > 0:numeric, columns={}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows}) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - FILTER(condition=n_name == 'GERMANY':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) + FILTER(condition=KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric) != 0:numeric & DEFAULT_TO(KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric), 0:numeric) < RELAVG(args=[DEFAULT_TO(KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric), 0:numeric)], partition=[], order=[]), columns={}) + AGGREGATE(keys={'o_custkey': c_custkey}, aggregations={'count_o_custkey': COUNT(o_custkey)}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'o_custkey': t1.o_custkey}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + FILTER(condition=n_name == 'GERMANY':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) FILTER(condition=YEAR(o_orderdate) == 1992:numeric, columns={'o_custkey': o_custkey}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate}) diff --git a/tests/test_plan_refsols/window_filter_order_2.txt b/tests/test_plan_refsols/window_filter_order_2.txt index d3401bdb9..fb1fe6e66 100644 --- a/tests/test_plan_refsols/window_filter_order_2.txt +++ b/tests/test_plan_refsols/window_filter_order_2.txt @@ -1,11 +1,11 @@ ROOT(columns=[('n', n_rows)], orderings=[]) AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) < RELAVG(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[], order=[]) & n_rows > 0:numeric, columns={}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows}) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - FILTER(condition=n_name == 'GERMANY':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) + FILTER(condition=KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric) != 0:numeric & DEFAULT_TO(KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric), 0:numeric) < RELAVG(args=[DEFAULT_TO(KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric), 0:numeric)], partition=[], order=[]), columns={}) + AGGREGATE(keys={'o_custkey': c_custkey}, aggregations={'count_o_custkey': COUNT(o_custkey)}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'o_custkey': t1.o_custkey}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + FILTER(condition=n_name == 'GERMANY':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) FILTER(condition=YEAR(o_orderdate) == 1992:numeric, columns={'o_custkey': o_custkey}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate}) diff --git a/tests/test_plan_refsols/window_filter_order_3.txt b/tests/test_plan_refsols/window_filter_order_3.txt index d3401bdb9..fb1fe6e66 100644 --- a/tests/test_plan_refsols/window_filter_order_3.txt +++ b/tests/test_plan_refsols/window_filter_order_3.txt @@ -1,11 +1,11 @@ ROOT(columns=[('n', n_rows)], orderings=[]) AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - FILTER(condition=DEFAULT_TO(n_rows, 0:numeric) < RELAVG(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[], order=[]) & n_rows > 0:numeric, columns={}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows}) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - FILTER(condition=n_name == 'GERMANY':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) + FILTER(condition=KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric) != 0:numeric & DEFAULT_TO(KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric), 0:numeric) < RELAVG(args=[DEFAULT_TO(KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric), 0:numeric)], partition=[], order=[]), columns={}) + AGGREGATE(keys={'o_custkey': c_custkey}, aggregations={'count_o_custkey': COUNT(o_custkey)}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'o_custkey': t1.o_custkey}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + FILTER(condition=n_name == 'GERMANY':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) FILTER(condition=YEAR(o_orderdate) == 1992:numeric, columns={'o_custkey': o_custkey}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate}) diff --git a/tests/test_plan_refsols/window_filter_order_4.txt b/tests/test_plan_refsols/window_filter_order_4.txt index 06f4e0403..c8c5f1d0e 100644 --- a/tests/test_plan_refsols/window_filter_order_4.txt +++ b/tests/test_plan_refsols/window_filter_order_4.txt @@ -1,11 +1,11 @@ ROOT(columns=[('n', n_rows)], orderings=[]) AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) FILTER(condition=n_rows < RELAVG(args=[n_rows], partition=[], order=[]), columns={}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'n_rows': t1.n_rows}) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - FILTER(condition=n_name == 'GERMANY':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) + AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=INNER, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'o_custkey': t1.o_custkey}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_custkey': t0.c_custkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + FILTER(condition=n_name == 'GERMANY':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) FILTER(condition=YEAR(o_orderdate) == 1992:numeric, columns={'o_custkey': o_custkey}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate}) diff --git a/tests/test_plan_refsols/window_filter_order_8.txt b/tests/test_plan_refsols/window_filter_order_8.txt index 72d47c245..b0d2c5307 100644 --- a/tests/test_plan_refsols/window_filter_order_8.txt +++ b/tests/test_plan_refsols/window_filter_order_8.txt @@ -1,11 +1,11 @@ ROOT(columns=[('n', n_rows)], orderings=[]) AGGREGATE(keys={}, aggregations={'n_rows': COUNT()}) - FILTER(condition=ABSENT(n_rows) & c_acctbal < RELSUM(args=[DEFAULT_TO(n_rows, 0:numeric)], partition=[], order=[]), columns={}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_acctbal': t0.c_acctbal, 'n_rows': t1.n_rows}) - JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_acctbal': t0.c_acctbal, 'c_custkey': t0.c_custkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) - FILTER(condition=n_name == 'FRANCE':string, columns={'n_nationkey': n_nationkey}) - SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'n_rows': COUNT()}) + FILTER(condition=ABSENT(KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric)) & anything_c_acctbal < RELSUM(args=[DEFAULT_TO(KEEP_IF(count_o_custkey, count_o_custkey != 0:numeric), 0:numeric)], partition=[], order=[]), columns={}) + AGGREGATE(keys={'o_custkey': c_custkey}, aggregations={'anything_c_acctbal': ANYTHING(c_acctbal), 'count_o_custkey': COUNT(o_custkey)}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_acctbal': t0.c_acctbal, 'c_custkey': t0.c_custkey, 'o_custkey': t1.o_custkey}) + JOIN(condition=t0.c_nationkey == t1.n_nationkey, type=INNER, cardinality=SINGULAR_FILTER, reverse_cardinality=PLURAL_ACCESS, columns={'c_acctbal': t0.c_acctbal, 'c_custkey': t0.c_custkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_acctbal': c_acctbal, 'c_custkey': c_custkey, 'c_nationkey': c_nationkey}) + FILTER(condition=n_name == 'FRANCE':string, columns={'n_nationkey': n_nationkey}) + SCAN(table=tpch.NATION, columns={'n_name': n_name, 'n_nationkey': n_nationkey}) FILTER(condition=MONTH(o_orderdate) == 1:numeric & YEAR(o_orderdate) == 1998:numeric, columns={'o_custkey': o_custkey}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_orderdate': o_orderdate}) diff --git a/tests/test_plan_refsols/window_filter_order_9.txt b/tests/test_plan_refsols/window_filter_order_9.txt index 6c9e87b17..13abfb05d 100644 --- a/tests/test_plan_refsols/window_filter_order_9.txt +++ b/tests/test_plan_refsols/window_filter_order_9.txt @@ -5,8 +5,8 @@ ROOT(columns=[('n', n_rows)], orderings=[]) FILTER(condition=o_clerk == 'Clerk#000000001':string, columns={'o_custkey': o_custkey, 'o_totalprice': o_totalprice}) SCAN(table=tpch.ORDERS, columns={'o_clerk': o_clerk, 'o_custkey': o_custkey, 'o_totalprice': o_totalprice}) PROJECT(columns={'c_custkey': c_custkey, 'expr_0': 1:numeric, 'total_spent': DEFAULT_TO(sum_o_totalprice, 0:numeric)}) - JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=SINGULAR_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'sum_o_totalprice': t1.sum_o_totalprice}) - FILTER(condition=c_mktsegment == 'BUILDING':string, columns={'c_custkey': c_custkey}) - SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment}) - AGGREGATE(keys={'o_custkey': o_custkey}, aggregations={'sum_o_totalprice': SUM(o_totalprice)}) + AGGREGATE(keys={'c_custkey': c_custkey}, aggregations={'sum_o_totalprice': SUM(o_totalprice)}) + JOIN(condition=t0.c_custkey == t1.o_custkey, type=LEFT, cardinality=PLURAL_FILTER, reverse_cardinality=SINGULAR_FILTER, columns={'c_custkey': t0.c_custkey, 'o_totalprice': t1.o_totalprice}) + FILTER(condition=c_mktsegment == 'BUILDING':string, columns={'c_custkey': c_custkey}) + SCAN(table=tpch.CUSTOMER, columns={'c_custkey': c_custkey, 'c_mktsegment': c_mktsegment}) SCAN(table=tpch.ORDERS, columns={'o_custkey': o_custkey, 'o_totalprice': o_totalprice}) diff --git a/tests/test_pydough_functions/common_prefix_pydough_functions.py b/tests/test_pydough_functions/common_prefix_pydough_functions.py index 979381fc2..93c88f337 100644 --- a/tests/test_pydough_functions/common_prefix_pydough_functions.py +++ b/tests/test_pydough_functions/common_prefix_pydough_functions.py @@ -428,12 +428,14 @@ def common_prefix_x(): def common_prefix_y(): - # For each customer who has NEVER made a zero-tax purchase, count how - # many total orders they have made. Keep the top 5 customers by number - # of orders, breaking ties by customer name. - return ( - customers.WHERE(HASNOT(orders.lines.WHERE(tax == 0))) - .CALCULATE(name, n_orders=COUNT(orders)) + # For each customer who has NEVER made a zero-tax purchase through clerk + # number 1, count how many total orders they have made through that clerk. + # Keep the top 5 customers by number of orders, breaking ties by customer + # name. + clerk_one_orders = orders.WHERE(clerk == "Clerk#000000001") + return ( + customers.WHERE(HASNOT(clerk_one_orders.lines.WHERE(tax == 0))) + .CALCULATE(name, n_orders=COUNT(clerk_one_orders)) .TOP_K(5, by=(n_orders.DESC(), name.ASC())) ) @@ -698,7 +700,26 @@ def common_prefix_al(): # For each remaining customer, list their key, number of orders made, and # number of lineitems without tax/discount made. When choosing the top 10 # customers, pick the 10 with the lowest key values. - selected_lines = orders.lines.WHERE((tax == 0) & (discount == 0)) + selected_lines = orders.lines.WHERE( + (tax == 0) + & (discount == 0) + & ISIN( + part_key, + ( + 53360, + 123069, + 132776, + 62217, + 67393, + 87784, + 148252, + 176947, + 196620, + 103099, + 169275, + ), + ) + ) selected_part_purchase = selected_lines.part.WHERE(size < 15) return ( nations.customers.CALCULATE(n_orders=COUNT(orders)) @@ -707,7 +728,7 @@ def common_prefix_al(): .WHERE(HAS(selected_lines)) .TOP_K(10, by=key.ASC()) .CALCULATE(cust_key=key, n_orders=n_orders, n_no_tax_discount=n_no_tax_discount) - .WHERE(HAS(selected_part_purchase) & (COUNT(selected_part_purchase) > 0)) + .WHERE(HAS(selected_part_purchase) & (COUNT(selected_part_purchase) != 0)) ) @@ -724,7 +745,7 @@ def common_prefix_am(): .WHERE( HAS(selected_lines) & HAS(selected_part_purchase) - & (COUNT(selected_part_purchase) > 0) + & (COUNT(selected_part_purchase) != 0) ) .CALCULATE( cust_key=key, n_orders=n_orders, n_no_tax_discount=COUNT(selected_lines) @@ -744,7 +765,7 @@ def common_prefix_an(): .WHERE( (COUNT(orders) > RELAVG(COUNT(orders), per="nations")) & HAS(selected_part_purchase) - & (COUNT(selected_part_purchase) > 0) + & (COUNT(selected_part_purchase) != 0) ) .CALCULATE( cust_key=key, diff --git a/tests/test_pydough_functions/correlated_pydough_functions.py b/tests/test_pydough_functions/correlated_pydough_functions.py index d2f3d8d8e..8fe32bfa8 100644 --- a/tests/test_pydough_functions/correlated_pydough_functions.py +++ b/tests/test_pydough_functions/correlated_pydough_functions.py @@ -209,7 +209,7 @@ def correl_13(): supplier_info = suppliers.WHERE(nation_key <= 3).CALCULATE( avg_price=AVG(supply_records.part.retail_price) ) - selected_suppliers = supplier_info.WHERE(COUNT(selected_supply_records) > 0) + selected_suppliers = supplier_info.WHERE(COUNT(selected_supply_records) != 0) return TPCH.CALCULATE(n=COUNT(selected_suppliers)) @@ -748,7 +748,7 @@ def correl_35(): ) .order.WHERE(YEAR(order_date) == 1998) .CALCULATE(original_priority=order_priority) - .WHERE(COUNT(alt_orders) > 0) + .WHERE(COUNT(alt_orders) != 0) ) ) @@ -778,7 +778,7 @@ def correl_36(): ) .order.WHERE(YEAR(order_date) == 1998) .CALCULATE(original_priority=order_priority) - .WHERE(COUNT(alt_orders) > 0) + .WHERE(COUNT(alt_orders) != 0) ) ) diff --git a/tests/test_pydough_functions/defog_test_functions.py b/tests/test_pydough_functions/defog_test_functions.py index d000330d2..8a2770086 100644 --- a/tests/test_pydough_functions/defog_test_functions.py +++ b/tests/test_pydough_functions/defog_test_functions.py @@ -287,7 +287,7 @@ def impl_defog_broker_adv8(): & (date_time >= DATETIME("now", "start of week", "-1 week")) ) return Broker.CALCULATE( - n_transactions=KEEP_IF(COUNT(selected_txns), COUNT(selected_txns) > 0), + n_transactions=KEEP_IF(COUNT(selected_txns), COUNT(selected_txns) != 0), total_amount=SUM(selected_txns.amount), ) @@ -727,8 +727,9 @@ def impl_defog_dealership_adv3(): model names, engine_type and vin_number, match case-insensitively and allow partial matches using LIKE with wildcards. """ - return cars.WHERE(CONTAINS(LOWER(vin_number), "m5")).CALCULATE( - make, model, num_sales=COUNT(sale_records) + selected_cars = cars.WHERE(CONTAINS(LOWER(vin_number), "m5")) + return selected_cars.PARTITION(name="car_models", by=(make, model)).CALCULATE( + make, model, num_sales=COUNT(cars.sale_records) ) @@ -742,12 +743,14 @@ def impl_defog_dealership_adv4(): """ date_threshold = DATETIME("now", "-30 days") - selected_sales = sale_records.WHERE(sale_date >= date_threshold) + selected_sales = cars.WHERE(CONTAINS(LOWER(make), "toyota")).sale_records.WHERE( + sale_date >= date_threshold + ) - return cars.WHERE(CONTAINS(LOWER(make), "toyota")).CALCULATE( + return Dealership.CALCULATE( num_sales=COUNT(selected_sales), total_revenue=KEEP_IF( - SUM(selected_sales.sale_price), COUNT(selected_sales) > 0 + SUM(selected_sales.sale_price), COUNT(selected_sales) != 0 ), ) @@ -1330,7 +1333,7 @@ def impl_defog_ewallet_adv4(): # Calculate the number of transactions and the total amount for the filtered transactions return Ewallet.CALCULATE( num_transactions=COUNT(us_transactions), - total_amount=KEEP_IF(SUM(us_transactions.amount), COUNT(us_transactions) > 0), + total_amount=KEEP_IF(SUM(us_transactions.amount), COUNT(us_transactions) != 0), ) @@ -2563,7 +2566,7 @@ def impl_defog_academic_gen11(): n_pub = COUNT(publications) n_auth = COUNT(authors) return Academic.CALCULATE( - publication_to_author_ratio=n_pub / KEEP_IF(n_auth, n_auth > 0) + publication_to_author_ratio=n_pub / KEEP_IF(n_auth, n_auth != 0) ) @@ -2577,7 +2580,7 @@ def impl_defog_academic_gen12(): """ n_confs = SUM(PRESENT(publications.conference_id)) n_jours = SUM(PRESENT(publications.journal_id)) - return Academic.CALCULATE(ratio=n_confs / KEEP_IF(n_jours, n_jours > 0)) + return Academic.CALCULATE(ratio=n_confs / KEEP_IF(n_jours, n_jours != 0)) def impl_defog_academic_gen13(): @@ -2591,7 +2594,7 @@ def impl_defog_academic_gen13(): n_pubs = COUNT(domain_publications) n_keys = COUNT(domain_keywords) - return domains.CALCULATE(domain_id, ratio=n_pubs / KEEP_IF(n_keys, n_keys > 0)) + return domains.CALCULATE(domain_id, ratio=n_pubs / KEEP_IF(n_keys, n_keys != 0)) def impl_defog_academic_gen14(): @@ -2608,7 +2611,7 @@ def impl_defog_academic_gen14(): year, num_publications=n_pubs, num_journals=n_jours, - ratio=n_pubs / KEEP_IF(n_jours, n_jours > 0), + ratio=n_pubs / KEEP_IF(n_jours, n_jours != 0), ) diff --git a/tests/test_pydough_functions/epoch_pydough_functions.py b/tests/test_pydough_functions/epoch_pydough_functions.py index 98560a12f..15a5f851c 100644 --- a/tests/test_pydough_functions/epoch_pydough_functions.py +++ b/tests/test_pydough_functions/epoch_pydough_functions.py @@ -204,7 +204,7 @@ def overlapping_event_searches_per_user(): # most such searches, breaking ties alphabetically. same_event_other_user = events.searches.user.WHERE(name != original_user_name) selected_searches = searches.WHERE( - (COUNT(same_event_other_user) > 0) & HAS(same_event_other_user) + (COUNT(same_event_other_user) != 0) & HAS(same_event_other_user) ) return ( users.CALCULATE(original_user_name=name) diff --git a/tests/test_pydough_functions/technograph_pydough_functions.py b/tests/test_pydough_functions/technograph_pydough_functions.py index 54e875c7c..99230f9d5 100644 --- a/tests/test_pydough_functions/technograph_pydough_functions.py +++ b/tests/test_pydough_functions/technograph_pydough_functions.py @@ -158,7 +158,7 @@ def year_cumulative_incident_rate_overall(): n_devices=COUNT(calendar.devices_sold), n_incidents=COUNT(calendar.incidents_reported), ) - .WHERE(n_devices > 0) + .WHERE(n_devices != 0) .CALCULATE( yr=year, cum_ir=ROUND( diff --git a/tests/test_pydough_functions/tpch_test_functions.py b/tests/test_pydough_functions/tpch_test_functions.py index f3a9d689e..3acb740e0 100644 --- a/tests/test_pydough_functions/tpch_test_functions.py +++ b/tests/test_pydough_functions/tpch_test_functions.py @@ -526,9 +526,7 @@ def impl_tpch_q22(): ) .customers.CALCULATE(cntry_code=phone[:2]) .WHERE( - is_selected_code - & (account_balance > global_avg_balance) - & (COUNT(orders) == 0) + is_selected_code & (account_balance > global_avg_balance) & HASNOT(orders) ) .PARTITION( name="countries", diff --git a/tests/test_qualification.py b/tests/test_qualification.py index 2f46c9865..ab5e083ab 100644 --- a/tests/test_qualification.py +++ b/tests/test_qualification.py @@ -548,7 +548,7 @@ │ └─┬─ AccessChild │ ├─── TableCollection[customers] │ ├─── Calculate[cntry_code=SLICE(phone, None, 2, None)] - │ └─┬─ Where[ISIN(cntry_code, ['13', '31', '23', '29', '30', '18', '17']) & (account_balance > global_avg_balance) & (COUNT($1) == 0)] + │ └─┬─ Where[ISIN(cntry_code, ['13', '31', '23', '29', '30', '18', '17']) & (account_balance > global_avg_balance) & HASNOT($1)] │ └─┬─ AccessChild │ └─── SubCollection[orders] ├─┬─ Calculate[CNTRY_CODE=cntry_code, NUM_CUSTS=COUNT($1), TOTACCTBAL=SUM($1.account_balance)] diff --git a/tests/test_sql_refsols/agg_simplification_1_mysql.sql b/tests/test_sql_refsols/agg_simplification_1_mysql.sql index 5667ce930..d24493ae3 100644 --- a/tests/test_sql_refsols/agg_simplification_1_mysql.sql +++ b/tests/test_sql_refsols/agg_simplification_1_mysql.sql @@ -4,10 +4,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( ( - COUNT(1) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(1) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) / 2.0 ) ) < 1.0 @@ -17,10 +17,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( ( - COUNT(2) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(2) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) / 2.0 ) ) < 1.0 @@ -30,10 +30,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( ( - COUNT(-1) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(-1) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) / 2.0 ) ) < 1.0 @@ -43,10 +43,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( ( - COUNT(-3) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(-3) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) / 2.0 ) ) < 1.0 @@ -56,10 +56,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( ( - COUNT(0) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(0) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) / 2.0 ) ) < 1.0 @@ -69,10 +69,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( ( - COUNT(0.5) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(0.5) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) / 2.0 ) ) < 1.0 @@ -82,74 +82,70 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) DESC) - 1.0 + ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) DESC) - 1.0 ) - ( ( - COUNT( - CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) - ) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) / 2.0 ) ) < 1.0 - THEN CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) + THEN CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ELSE NULL END AS expr_79, CASE WHEN TRUNCATE( - CAST(0.9 * COUNT(1) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS FLOAT), + CAST(0.9 * COUNT(1) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN 1 ELSE NULL END AS expr_80, CASE WHEN TRUNCATE( - CAST(0.8 * COUNT(2) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS FLOAT), + CAST(0.8 * COUNT(2) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN 2 ELSE NULL END AS expr_81, CASE WHEN TRUNCATE( - CAST(0.7 * COUNT(-1) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS FLOAT), + CAST(0.7 * COUNT(-1) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN -1 ELSE NULL END AS expr_82, CASE WHEN TRUNCATE( - CAST(0.6 * COUNT(-3) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS FLOAT), + CAST(0.6 * COUNT(-3) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN -3 ELSE NULL END AS expr_83, CASE WHEN TRUNCATE( - CAST(0.5 * COUNT(0) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS FLOAT), + CAST(0.5 * COUNT(0) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN 0 ELSE NULL END AS expr_84, CASE WHEN TRUNCATE( - CAST(0.4 * COUNT(0.5) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS FLOAT), + CAST(0.4 * COUNT(0.5) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN 0.5 ELSE NULL END AS expr_85, CASE WHEN TRUNCATE( - CAST(0.19999999999999996 * COUNT( - CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) - ) OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS FLOAT), + CAST(0.19999999999999996 * COUNT(CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) DESC) - THEN CHAR_LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) + ) < ROW_NUMBER() OVER (PARTITION BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) DESC) + THEN CHAR_LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ELSE NULL END AS expr_87 FROM main.sbTicker diff --git a/tests/test_sql_refsols/agg_simplification_1_sqlite.sql b/tests/test_sql_refsols/agg_simplification_1_sqlite.sql index 3a89a1dc1..74738286b 100644 --- a/tests/test_sql_refsols/agg_simplification_1_sqlite.sql +++ b/tests/test_sql_refsols/agg_simplification_1_sqlite.sql @@ -4,10 +4,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( CAST(( - COUNT(1) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(1) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 @@ -17,10 +17,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( CAST(( - COUNT(2) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(2) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 @@ -30,10 +30,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( CAST(( - COUNT(-1) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(-1) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 @@ -43,10 +43,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( CAST(( - COUNT(-3) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(-3) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 @@ -56,10 +56,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( CAST(( - COUNT(0) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(0) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 @@ -69,10 +69,10 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') - 1.0 + ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') - 1.0 ) - ( CAST(( - COUNT(0.5) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(0.5) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 @@ -82,53 +82,49 @@ WITH _t1 AS ( CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) DESC) - 1.0 + ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) DESC) - 1.0 ) - ( CAST(( - COUNT( - LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) - ) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) - 1.0 + COUNT(LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 - THEN LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) + THEN LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ELSE NULL END AS expr_79, CASE - WHEN CAST(0.9 * COUNT(1) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + WHEN CAST(0.9 * COUNT(1) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN 1 ELSE NULL END AS expr_80, CASE - WHEN CAST(0.8 * COUNT(2) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + WHEN CAST(0.8 * COUNT(2) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN 2 ELSE NULL END AS expr_81, CASE - WHEN CAST(0.7 * COUNT(-1) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + WHEN CAST(0.7 * COUNT(-1) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN -1 ELSE NULL END AS expr_82, CASE - WHEN CAST(0.6 * COUNT(-3) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + WHEN CAST(0.6 * COUNT(-3) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN -3 ELSE NULL END AS expr_83, CASE - WHEN CAST(0.5 * COUNT(0) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + WHEN CAST(0.5 * COUNT(0) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN 0 ELSE NULL END AS expr_84, CASE - WHEN CAST(0.4 * COUNT(0.5) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY '1') + WHEN CAST(0.4 * COUNT(0.5) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY '1') THEN 0.5 ELSE NULL END AS expr_85, CASE - WHEN CAST(0.19999999999999996 * COUNT( - LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) - ) OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END)) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) ORDER BY LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) DESC) - THEN LENGTH(CASE WHEN sbtickerexchange <> 'NYSE Arca' THEN sbtickerexchange ELSE NULL END) + WHEN CAST(0.19999999999999996 * COUNT(LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca'))) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ORDER BY LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) DESC) + THEN LENGTH(NULLIF(sbtickerexchange, 'NYSE Arca')) ELSE NULL END AS expr_87 FROM main.sbticker diff --git a/tests/test_sql_refsols/conditional_functions_ansi.sql b/tests/test_sql_refsols/conditional_functions_ansi.sql index 6e09fcd6f..f17079889 100644 --- a/tests/test_sql_refsols/conditional_functions_ansi.sql +++ b/tests/test_sql_refsols/conditional_functions_ansi.sql @@ -1,20 +1,18 @@ -WITH _s1 AS ( - SELECT - o_custkey, - MIN(o_totalprice) AS min_o_totalprice - FROM tpch.orders - GROUP BY - 1 -) SELECT - CASE WHEN customer.c_acctbal > 1000 THEN 'High' ELSE 'Low' END AS iff_col, - customer.c_name IN ('Alice', 'Bob', 'Charlie') AS isin_col, - COALESCE(_s1.min_o_totalprice, 0.0) AS default_val, - NOT _s1.min_o_totalprice IS NULL AS has_acct_bal, - _s1.min_o_totalprice IS NULL AS no_acct_bal, - CASE WHEN customer.c_acctbal > 0 THEN customer.c_acctbal ELSE NULL END AS no_debt_bal + CASE WHEN ANY_VALUE(customer.c_acctbal) > 1000 THEN 'High' ELSE 'Low' END AS iff_col, + ANY_VALUE(customer.c_name) IN ('Alice', 'Bob', 'Charlie') AS isin_col, + COALESCE(MIN(orders.o_totalprice), 0.0) AS default_val, + NOT MIN(orders.o_totalprice) IS NULL AS has_acct_bal, + MIN(orders.o_totalprice) IS NULL AS no_acct_bal, + CASE + WHEN ANY_VALUE(customer.c_acctbal) > 0 + THEN ANY_VALUE(customer.c_acctbal) + ELSE NULL + END AS no_debt_bal FROM tpch.customer AS customer -LEFT JOIN _s1 AS _s1 - ON _s1.o_custkey = customer.c_custkey +LEFT JOIN tpch.orders AS orders + ON customer.c_custkey = orders.o_custkey WHERE customer.c_acctbal <= 1000 AND customer.c_acctbal >= 100 +GROUP BY + customer.c_custkey diff --git a/tests/test_sql_refsols/conditional_functions_mysql.sql b/tests/test_sql_refsols/conditional_functions_mysql.sql index 76aa8fcd2..b41dd6053 100644 --- a/tests/test_sql_refsols/conditional_functions_mysql.sql +++ b/tests/test_sql_refsols/conditional_functions_mysql.sql @@ -1,20 +1,18 @@ -WITH _s1 AS ( - SELECT - o_custkey, - MIN(o_totalprice) AS min_o_totalprice - FROM tpch.ORDERS - GROUP BY - 1 -) SELECT - CASE WHEN CUSTOMER.c_acctbal > 1000 THEN 'High' ELSE 'Low' END AS iff_col, - CUSTOMER.c_name IN ('Alice', 'Bob', 'Charlie') AS isin_col, - COALESCE(_s1.min_o_totalprice, 0.0) AS default_val, - NOT _s1.min_o_totalprice IS NULL AS has_acct_bal, - _s1.min_o_totalprice IS NULL AS no_acct_bal, - CASE WHEN CUSTOMER.c_acctbal > 0 THEN CUSTOMER.c_acctbal ELSE NULL END AS no_debt_bal + CASE WHEN ANY_VALUE(CUSTOMER.c_acctbal) > 1000 THEN 'High' ELSE 'Low' END AS iff_col, + ANY_VALUE(CUSTOMER.c_name) IN ('Alice', 'Bob', 'Charlie') AS isin_col, + COALESCE(MIN(ORDERS.o_totalprice), 0.0) AS default_val, + NOT MIN(ORDERS.o_totalprice) IS NULL AS has_acct_bal, + MIN(ORDERS.o_totalprice) IS NULL AS no_acct_bal, + CASE + WHEN ANY_VALUE(CUSTOMER.c_acctbal) > 0 + THEN ANY_VALUE(CUSTOMER.c_acctbal) + ELSE NULL + END AS no_debt_bal FROM tpch.CUSTOMER AS CUSTOMER -LEFT JOIN _s1 AS _s1 - ON CUSTOMER.c_custkey = _s1.o_custkey +LEFT JOIN tpch.ORDERS AS ORDERS + ON CUSTOMER.c_custkey = ORDERS.o_custkey WHERE CUSTOMER.c_acctbal <= 1000 AND CUSTOMER.c_acctbal >= 100 +GROUP BY + CUSTOMER.c_custkey diff --git a/tests/test_sql_refsols/conditional_functions_postgres.sql b/tests/test_sql_refsols/conditional_functions_postgres.sql index 6e09fcd6f..e6ed56574 100644 --- a/tests/test_sql_refsols/conditional_functions_postgres.sql +++ b/tests/test_sql_refsols/conditional_functions_postgres.sql @@ -1,20 +1,14 @@ -WITH _s1 AS ( - SELECT - o_custkey, - MIN(o_totalprice) AS min_o_totalprice - FROM tpch.orders - GROUP BY - 1 -) SELECT - CASE WHEN customer.c_acctbal > 1000 THEN 'High' ELSE 'Low' END AS iff_col, - customer.c_name IN ('Alice', 'Bob', 'Charlie') AS isin_col, - COALESCE(_s1.min_o_totalprice, 0.0) AS default_val, - NOT _s1.min_o_totalprice IS NULL AS has_acct_bal, - _s1.min_o_totalprice IS NULL AS no_acct_bal, - CASE WHEN customer.c_acctbal > 0 THEN customer.c_acctbal ELSE NULL END AS no_debt_bal + CASE WHEN MAX(customer.c_acctbal) > 1000 THEN 'High' ELSE 'Low' END AS iff_col, + MAX(customer.c_name) IN ('Alice', 'Bob', 'Charlie') AS isin_col, + COALESCE(MIN(orders.o_totalprice), 0.0) AS default_val, + NOT MIN(orders.o_totalprice) IS NULL AS has_acct_bal, + MIN(orders.o_totalprice) IS NULL AS no_acct_bal, + CASE WHEN MAX(customer.c_acctbal) > 0 THEN MAX(customer.c_acctbal) ELSE NULL END AS no_debt_bal FROM tpch.customer AS customer -LEFT JOIN _s1 AS _s1 - ON _s1.o_custkey = customer.c_custkey +LEFT JOIN tpch.orders AS orders + ON customer.c_custkey = orders.o_custkey WHERE customer.c_acctbal <= 1000 AND customer.c_acctbal >= 100 +GROUP BY + customer.c_custkey diff --git a/tests/test_sql_refsols/conditional_functions_snowflake.sql b/tests/test_sql_refsols/conditional_functions_snowflake.sql index 1b93205be..4260b4e22 100644 --- a/tests/test_sql_refsols/conditional_functions_snowflake.sql +++ b/tests/test_sql_refsols/conditional_functions_snowflake.sql @@ -1,20 +1,18 @@ -WITH _s1 AS ( - SELECT - o_custkey, - MIN(o_totalprice) AS min_o_totalprice - FROM tpch.orders - GROUP BY - 1 -) SELECT - IFF(customer.c_acctbal > 1000, 'High', 'Low') AS iff_col, - customer.c_name IN ('Alice', 'Bob', 'Charlie') AS isin_col, - COALESCE(_s1.min_o_totalprice, 0.0) AS default_val, - NOT _s1.min_o_totalprice IS NULL AS has_acct_bal, - _s1.min_o_totalprice IS NULL AS no_acct_bal, - CASE WHEN customer.c_acctbal > 0 THEN customer.c_acctbal ELSE NULL END AS no_debt_bal + IFF(ANY_VALUE(customer.c_acctbal) > 1000, 'High', 'Low') AS iff_col, + ANY_VALUE(customer.c_name) IN ('Alice', 'Bob', 'Charlie') AS isin_col, + COALESCE(MIN(orders.o_totalprice), 0.0) AS default_val, + NOT MIN(orders.o_totalprice) IS NULL AS has_acct_bal, + MIN(orders.o_totalprice) IS NULL AS no_acct_bal, + CASE + WHEN ANY_VALUE(customer.c_acctbal) > 0 + THEN ANY_VALUE(customer.c_acctbal) + ELSE NULL + END AS no_debt_bal FROM tpch.customer AS customer -LEFT JOIN _s1 AS _s1 - ON _s1.o_custkey = customer.c_custkey +LEFT JOIN tpch.orders AS orders + ON customer.c_custkey = orders.o_custkey WHERE customer.c_acctbal <= 1000 AND customer.c_acctbal >= 100 +GROUP BY + customer.c_custkey diff --git a/tests/test_sql_refsols/conditional_functions_sqlite.sql b/tests/test_sql_refsols/conditional_functions_sqlite.sql index 940b627a9..5690691ad 100644 --- a/tests/test_sql_refsols/conditional_functions_sqlite.sql +++ b/tests/test_sql_refsols/conditional_functions_sqlite.sql @@ -1,20 +1,14 @@ -WITH _s1 AS ( - SELECT - o_custkey, - MIN(o_totalprice) AS min_o_totalprice - FROM tpch.orders - GROUP BY - 1 -) SELECT - IIF(customer.c_acctbal > 1000, 'High', 'Low') AS iff_col, - customer.c_name IN ('Alice', 'Bob', 'Charlie') AS isin_col, - COALESCE(_s1.min_o_totalprice, 0.0) AS default_val, - NOT _s1.min_o_totalprice IS NULL AS has_acct_bal, - _s1.min_o_totalprice IS NULL AS no_acct_bal, - CASE WHEN customer.c_acctbal > 0 THEN customer.c_acctbal ELSE NULL END AS no_debt_bal + IIF(MAX(customer.c_acctbal) > 1000, 'High', 'Low') AS iff_col, + MAX(customer.c_name) IN ('Alice', 'Bob', 'Charlie') AS isin_col, + COALESCE(MIN(orders.o_totalprice), 0.0) AS default_val, + NOT MIN(orders.o_totalprice) IS NULL AS has_acct_bal, + MIN(orders.o_totalprice) IS NULL AS no_acct_bal, + CASE WHEN MAX(customer.c_acctbal) > 0 THEN MAX(customer.c_acctbal) ELSE NULL END AS no_debt_bal FROM tpch.customer AS customer -LEFT JOIN _s1 AS _s1 - ON _s1.o_custkey = customer.c_custkey +LEFT JOIN tpch.orders AS orders + ON customer.c_custkey = orders.o_custkey WHERE customer.c_acctbal <= 1000 AND customer.c_acctbal >= 100 +GROUP BY + customer.c_custkey diff --git a/tests/test_sql_refsols/correl_13_sqlite.sql b/tests/test_sql_refsols/correl_13_sqlite.sql index c96106b05..fb6428421 100644 --- a/tests/test_sql_refsols/correl_13_sqlite.sql +++ b/tests/test_sql_refsols/correl_13_sqlite.sql @@ -1,18 +1,13 @@ -WITH _s3 AS ( - SELECT DISTINCT - partsupp.ps_suppkey - FROM tpch.partsupp AS partsupp - JOIN tpch.part AS part - ON part.p_container LIKE 'SM%' - AND part.p_partkey = partsupp.ps_partkey - AND part.p_retailprice < ( - partsupp.ps_supplycost * 1.5 - ) -) SELECT - COUNT(*) AS n + COUNT(DISTINCT partsupp.ps_suppkey) AS n FROM tpch.supplier AS supplier -JOIN _s3 AS _s3 - ON _s3.ps_suppkey = supplier.s_suppkey +JOIN tpch.partsupp AS partsupp + ON partsupp.ps_suppkey = supplier.s_suppkey +JOIN tpch.part AS part + ON part.p_container LIKE 'SM%' + AND part.p_partkey = partsupp.ps_partkey + AND part.p_retailprice < ( + partsupp.ps_supplycost * 1.5 + ) WHERE supplier.s_nationkey <= 3 diff --git a/tests/test_sql_refsols/correl_14_sqlite.sql b/tests/test_sql_refsols/correl_14_sqlite.sql index fdf2e036d..011898756 100644 --- a/tests/test_sql_refsols/correl_14_sqlite.sql +++ b/tests/test_sql_refsols/correl_14_sqlite.sql @@ -1,26 +1,26 @@ -WITH _s3 AS ( +WITH _s4 AS ( SELECT partsupp.ps_suppkey, AVG(part.p_retailprice) AS avg_p_retailprice - FROM tpch.partsupp AS partsupp + FROM tpch.supplier AS supplier + JOIN tpch.partsupp AS partsupp + ON partsupp.ps_suppkey = supplier.s_suppkey JOIN tpch.part AS part ON part.p_partkey = partsupp.ps_partkey + WHERE + supplier.s_acctbal < 1000 AND supplier.s_nationkey = 19 GROUP BY 1 ) SELECT - COUNT(DISTINCT supplier.s_suppkey) AS n -FROM tpch.supplier AS supplier -JOIN _s3 AS _s3 - ON _s3.ps_suppkey = supplier.s_suppkey + COUNT(DISTINCT _s4.ps_suppkey) AS n +FROM _s4 AS _s4 JOIN tpch.partsupp AS partsupp - ON partsupp.ps_suppkey = supplier.s_suppkey + ON _s4.ps_suppkey = partsupp.ps_suppkey JOIN tpch.part AS part - ON _s3.avg_p_retailprice > part.p_retailprice + ON _s4.avg_p_retailprice > part.p_retailprice AND part.p_container = 'LG DRUM' AND part.p_partkey = partsupp.ps_partkey AND part.p_retailprice < ( partsupp.ps_supplycost * 1.5 ) -WHERE - supplier.s_acctbal < 1000 AND supplier.s_nationkey = 19 diff --git a/tests/test_sql_refsols/correl_15_sqlite.sql b/tests/test_sql_refsols/correl_15_sqlite.sql index 65487aef4..f65eaa980 100644 --- a/tests/test_sql_refsols/correl_15_sqlite.sql +++ b/tests/test_sql_refsols/correl_15_sqlite.sql @@ -2,31 +2,32 @@ WITH _s0 AS ( SELECT AVG(p_retailprice) AS avg_p_retailprice FROM tpch.part -), _s5 AS ( +), _s6 AS ( SELECT partsupp.ps_suppkey, - AVG(part.p_retailprice) AS avg_p_retailprice - FROM tpch.partsupp AS partsupp + MAX(_s0.avg_p_retailprice) AS anything_avg_p_retailprice, + AVG(part.p_retailprice) AS supplier_avg_price + FROM _s0 AS _s0 + JOIN tpch.supplier AS supplier + ON supplier.s_acctbal < 1000 AND supplier.s_nationkey = 19 + JOIN tpch.partsupp AS partsupp + ON partsupp.ps_suppkey = supplier.s_suppkey JOIN tpch.part AS part ON part.p_partkey = partsupp.ps_partkey GROUP BY 1 ) SELECT - COUNT(DISTINCT supplier.s_suppkey) AS n -FROM _s0 AS _s0 -JOIN tpch.supplier AS supplier - ON supplier.s_acctbal < 1000 AND supplier.s_nationkey = 19 -JOIN _s5 AS _s5 - ON _s5.ps_suppkey = supplier.s_suppkey + COUNT(DISTINCT _s6.ps_suppkey) AS n +FROM _s6 AS _s6 JOIN tpch.partsupp AS partsupp - ON partsupp.ps_suppkey = supplier.s_suppkey + ON _s6.ps_suppkey = partsupp.ps_suppkey JOIN tpch.part AS part - ON _s5.avg_p_retailprice > part.p_retailprice + ON _s6.supplier_avg_price > part.p_retailprice AND part.p_container = 'LG DRUM' AND part.p_partkey = partsupp.ps_partkey AND part.p_retailprice < ( - _s0.avg_p_retailprice * 0.85 + _s6.anything_avg_p_retailprice * 0.85 ) AND part.p_retailprice < ( partsupp.ps_supplycost * 1.5 diff --git a/tests/test_sql_refsols/correl_29_sqlite.sql b/tests/test_sql_refsols/correl_29_sqlite.sql index 04510c07f..5ec76c6d8 100644 --- a/tests/test_sql_refsols/correl_29_sqlite.sql +++ b/tests/test_sql_refsols/correl_29_sqlite.sql @@ -1,4 +1,4 @@ -WITH _t3 AS ( +WITH _t5 AS ( SELECT c_acctbal, c_nationkey @@ -7,10 +7,10 @@ WITH _t3 AS ( SELECT c_nationkey, AVG(c_acctbal) AS avg_c_acctbal - FROM _t3 + FROM _t5 GROUP BY 1 -), _t1 AS ( +), _t3 AS ( SELECT nation.n_nationkey, MAX(nation.n_name) AS anything_n_name, @@ -19,16 +19,23 @@ WITH _t3 AS ( FROM tpch.nation AS nation JOIN _s1 AS _s1 ON _s1.c_nationkey = nation.n_nationkey - JOIN _t3 AS _s3 + JOIN _t5 AS _s3 ON _s1.avg_c_acctbal < _s3.c_acctbal AND _s3.c_nationkey = nation.n_nationkey GROUP BY 1 -), _s5 AS ( +), _s10 AS ( SELECT - c_nationkey, - MAX(c_acctbal) AS max_c_acctbal, - MIN(c_acctbal) AS min_c_acctbal - FROM _t3 + _s5.c_nationkey, + MAX(_t3.anything_n_name) AS anything_anything_n_name, + MAX(_t3.anything_n_regionkey) AS anything_anything_n_regionkey, + MAX(_t3.n_rows) AS anything_n_rows, + MAX(_s5.c_acctbal) AS max_c_acctbal, + MIN(_s5.c_acctbal) AS min_c_acctbal + FROM _t3 AS _t3 + JOIN _t5 AS _s5 + ON _s5.c_nationkey = _t3.n_nationkey + WHERE + _t3.anything_n_regionkey IN (1, 3) GROUP BY 1 ), _t6 AS ( @@ -43,32 +50,23 @@ WITH _t3 AS ( FROM _t6 GROUP BY 1 -), _s11 AS ( - SELECT - nation.n_nationkey, - COUNT(*) AS n_rows - FROM tpch.nation AS nation - JOIN _s7 AS _s7 - ON _s7.s_nationkey = nation.n_nationkey - JOIN _t6 AS _s9 - ON _s7.avg_s_acctbal < _s9.s_acctbal AND _s9.s_nationkey = nation.n_nationkey - GROUP BY - 1 ) SELECT - _t1.anything_n_regionkey AS region_key, - _t1.anything_n_name AS nation_name, - _t1.n_rows AS n_above_avg_customers, - _s11.n_rows AS n_above_avg_suppliers, - _s5.min_c_acctbal AS min_cust_acctbal, - _s5.max_c_acctbal AS max_cust_acctbal -FROM _t1 AS _t1 -JOIN _s5 AS _s5 - ON _s5.c_nationkey = _t1.n_nationkey -JOIN _s11 AS _s11 - ON _s11.n_nationkey = _t1.n_nationkey -WHERE - _t1.anything_n_regionkey IN (1, 3) + MAX(_s10.anything_anything_n_regionkey) AS region_key, + MAX(_s10.anything_anything_n_name) AS nation_name, + MAX(_s10.anything_n_rows) AS n_above_avg_customers, + COUNT(*) AS n_above_avg_suppliers, + MAX(_s10.min_c_acctbal) AS min_cust_acctbal, + MAX(_s10.max_c_acctbal) AS max_cust_acctbal +FROM _s10 AS _s10 +JOIN tpch.nation AS nation + ON _s10.c_nationkey = nation.n_nationkey +JOIN _s7 AS _s7 + ON _s7.s_nationkey = nation.n_nationkey +JOIN _t6 AS _s9 + ON _s7.avg_s_acctbal < _s9.s_acctbal AND _s9.s_nationkey = nation.n_nationkey +GROUP BY + nation.n_nationkey ORDER BY 1, 2 diff --git a/tests/test_sql_refsols/correl_30_sqlite.sql b/tests/test_sql_refsols/correl_30_sqlite.sql index e0e7d6846..e94f9a71c 100644 --- a/tests/test_sql_refsols/correl_30_sqlite.sql +++ b/tests/test_sql_refsols/correl_30_sqlite.sql @@ -17,21 +17,6 @@ WITH _t2 AS ( FROM tpch.region WHERE NOT r_name IN ('MIDDLE EAST', 'AFRICA', 'ASIA') -), _s12 AS ( - SELECT - nation.n_nationkey, - MAX(LOWER(_t3.r_name)) AS anything_lower_r_name, - MAX(nation.n_name) AS anything_n_name, - COUNT(*) AS n_rows - FROM tpch.nation AS nation - JOIN _s1 AS _s1 - ON _s1.c_nationkey = nation.n_nationkey - JOIN _t3 AS _t3 - ON _t3.r_regionkey = nation.n_regionkey - JOIN _t2 AS _s5 - ON _s1.avg_c_acctbal < _s5.c_acctbal AND _s5.c_nationkey = nation.n_nationkey - GROUP BY - 1 ), _t5 AS ( SELECT s_acctbal, @@ -59,13 +44,21 @@ WITH _t2 AS ( 1 ) SELECT - _s12.anything_lower_r_name AS region_name, - _s12.anything_n_name AS nation_name, - _s12.n_rows AS n_above_avg_customers, - _s13.n_rows AS n_above_avg_suppliers -FROM _s12 AS _s12 + MAX(LOWER(_t3.r_name)) AS region_name, + MAX(nation.n_name) AS nation_name, + COUNT(*) AS n_above_avg_customers, + MAX(_s13.n_rows) AS n_above_avg_suppliers +FROM tpch.nation AS nation +JOIN _s1 AS _s1 + ON _s1.c_nationkey = nation.n_nationkey +JOIN _t3 AS _t3 + ON _t3.r_regionkey = nation.n_regionkey +JOIN _t2 AS _s5 + ON _s1.avg_c_acctbal < _s5.c_acctbal AND _s5.c_nationkey = nation.n_nationkey JOIN _s13 AS _s13 - ON _s12.n_nationkey = _s13.n_nationkey + ON _s13.n_nationkey = nation.n_nationkey +GROUP BY + nation.n_nationkey ORDER BY 1, 2 diff --git a/tests/test_sql_refsols/correl_35_sqlite.sql b/tests/test_sql_refsols/correl_35_sqlite.sql index 637cf039d..16cab7b6a 100644 --- a/tests/test_sql_refsols/correl_35_sqlite.sql +++ b/tests/test_sql_refsols/correl_35_sqlite.sql @@ -54,6 +54,6 @@ JOIN _t3 AS _t3 AND _t3.c_custkey = orders.o_custkey AND _t3.c_nationkey = supplier.s_nationkey AND _t3.o_orderpriority = orders.o_orderpriority - AND _t3.sum_n_rows > 0 + AND _t3.sum_n_rows <> 0 WHERE CAST(STRFTIME('%Y', lineitem.l_shipdate) AS INTEGER) = 1998 diff --git a/tests/test_sql_refsols/correl_6_sqlite.sql b/tests/test_sql_refsols/correl_6_sqlite.sql index 9e8c22fc2..d6dd965e6 100644 --- a/tests/test_sql_refsols/correl_6_sqlite.sql +++ b/tests/test_sql_refsols/correl_6_sqlite.sql @@ -1,17 +1,10 @@ -WITH _s1 AS ( - SELECT - SUBSTRING(n_name, 1, 1) AS expr_1, - n_regionkey, - COUNT(*) AS n_rows - FROM tpch.nation - GROUP BY - 1, - 2 -) SELECT - region.r_name AS name, - _s1.n_rows AS n_prefix_nations + MAX(region.r_name) AS name, + COUNT(*) AS n_prefix_nations FROM tpch.region AS region -JOIN _s1 AS _s1 - ON _s1.expr_1 = SUBSTRING(region.r_name, 1, 1) - AND _s1.n_regionkey = region.r_regionkey +JOIN tpch.nation AS nation + ON SUBSTRING(nation.n_name, 1, 1) = SUBSTRING(region.r_name, 1, 1) + AND nation.n_regionkey = region.r_regionkey +GROUP BY + nation.n_regionkey, + SUBSTRING(nation.n_name, 1, 1) diff --git a/tests/test_sql_refsols/correl_8_sqlite.sql b/tests/test_sql_refsols/correl_8_sqlite.sql index 06962dcb4..856108a52 100644 --- a/tests/test_sql_refsols/correl_8_sqlite.sql +++ b/tests/test_sql_refsols/correl_8_sqlite.sql @@ -1,16 +1,9 @@ -WITH _s1 AS ( - SELECT - SUBSTRING(r_name, 1, 1) AS expr_0, - r_name, - r_regionkey - FROM tpch.region -) SELECT nation.n_name AS name, - _s1.r_name AS rname + region.r_name AS rname FROM tpch.nation AS nation -LEFT JOIN _s1 AS _s1 - ON _s1.expr_0 = SUBSTRING(nation.n_name, 1, 1) - AND _s1.r_regionkey = nation.n_regionkey +LEFT JOIN tpch.region AS region + ON SUBSTRING(nation.n_name, 1, 1) = SUBSTRING(region.r_name, 1, 1) + AND nation.n_regionkey = region.r_regionkey ORDER BY 1 diff --git a/tests/test_sql_refsols/cryptbank_analysis_04_raw_sqlite.sql b/tests/test_sql_refsols/cryptbank_analysis_04_raw_sqlite.sql index b21c053ef..82c586b20 100644 --- a/tests/test_sql_refsols/cryptbank_analysis_04_raw_sqlite.sql +++ b/tests/test_sql_refsols/cryptbank_analysis_04_raw_sqlite.sql @@ -1,27 +1,15 @@ -WITH _s3 AS ( - SELECT - t_sourceaccount, - COUNT(*) AS n_rows - FROM crbnk.transactions - WHERE - ( - 1025.67 - t_amount - ) > 9000.0 - GROUP BY - 1 -) SELECT CASE - WHEN accounts.a_key = 0 + WHEN MAX(accounts.a_key) = 0 THEN 0 - ELSE CASE WHEN accounts.a_key > 0 THEN 1 ELSE -1 END * CAST(SUBSTRING( - accounts.a_key, - 1 + INSTR(accounts.a_key, '-'), - CAST(LENGTH(accounts.a_key) AS REAL) / 2 + ELSE CASE WHEN MAX(accounts.a_key) > 0 THEN 1 ELSE -1 END * CAST(SUBSTRING( + MAX(accounts.a_key), + 1 + INSTR(MAX(accounts.a_key), '-'), + CAST(LENGTH(MAX(accounts.a_key)) AS REAL) / 2 ) AS INTEGER) END AS key, - CONCAT_WS(' ', LOWER(customers.c_fname), LOWER(customers.c_lname)) AS cust_name, - _s3.n_rows AS n_trans + CONCAT_WS(' ', LOWER(MAX(customers.c_fname)), LOWER(MAX(customers.c_lname))) AS cust_name, + COUNT(*) AS n_trans FROM crbnk.accounts AS accounts JOIN crbnk.customers AS customers ON CAST(STRFTIME('%Y', DATE(customers.c_birthday, '+472 days')) AS INTEGER) <= 1985 @@ -29,8 +17,11 @@ JOIN crbnk.customers AS customers AND accounts.a_custkey = ( 42 - customers.c_key ) -JOIN _s3 AS _s3 - ON _s3.t_sourceaccount = CASE +JOIN crbnk.transactions AS transactions + ON ( + 1025.67 - transactions.t_amount + ) > 9000.0 + AND transactions.t_sourceaccount = CASE WHEN accounts.a_key = 0 THEN 0 ELSE CASE WHEN accounts.a_key > 0 THEN 1 ELSE -1 END * CAST(SUBSTRING( @@ -39,5 +30,7 @@ JOIN _s3 AS _s3 CAST(LENGTH(accounts.a_key) AS REAL) / 2 ) AS INTEGER) END +GROUP BY + transactions.t_sourceaccount ORDER BY 1 diff --git a/tests/test_sql_refsols/cryptbank_analysis_04_rewrite_sqlite.sql b/tests/test_sql_refsols/cryptbank_analysis_04_rewrite_sqlite.sql index b21c053ef..82c586b20 100644 --- a/tests/test_sql_refsols/cryptbank_analysis_04_rewrite_sqlite.sql +++ b/tests/test_sql_refsols/cryptbank_analysis_04_rewrite_sqlite.sql @@ -1,27 +1,15 @@ -WITH _s3 AS ( - SELECT - t_sourceaccount, - COUNT(*) AS n_rows - FROM crbnk.transactions - WHERE - ( - 1025.67 - t_amount - ) > 9000.0 - GROUP BY - 1 -) SELECT CASE - WHEN accounts.a_key = 0 + WHEN MAX(accounts.a_key) = 0 THEN 0 - ELSE CASE WHEN accounts.a_key > 0 THEN 1 ELSE -1 END * CAST(SUBSTRING( - accounts.a_key, - 1 + INSTR(accounts.a_key, '-'), - CAST(LENGTH(accounts.a_key) AS REAL) / 2 + ELSE CASE WHEN MAX(accounts.a_key) > 0 THEN 1 ELSE -1 END * CAST(SUBSTRING( + MAX(accounts.a_key), + 1 + INSTR(MAX(accounts.a_key), '-'), + CAST(LENGTH(MAX(accounts.a_key)) AS REAL) / 2 ) AS INTEGER) END AS key, - CONCAT_WS(' ', LOWER(customers.c_fname), LOWER(customers.c_lname)) AS cust_name, - _s3.n_rows AS n_trans + CONCAT_WS(' ', LOWER(MAX(customers.c_fname)), LOWER(MAX(customers.c_lname))) AS cust_name, + COUNT(*) AS n_trans FROM crbnk.accounts AS accounts JOIN crbnk.customers AS customers ON CAST(STRFTIME('%Y', DATE(customers.c_birthday, '+472 days')) AS INTEGER) <= 1985 @@ -29,8 +17,11 @@ JOIN crbnk.customers AS customers AND accounts.a_custkey = ( 42 - customers.c_key ) -JOIN _s3 AS _s3 - ON _s3.t_sourceaccount = CASE +JOIN crbnk.transactions AS transactions + ON ( + 1025.67 - transactions.t_amount + ) > 9000.0 + AND transactions.t_sourceaccount = CASE WHEN accounts.a_key = 0 THEN 0 ELSE CASE WHEN accounts.a_key > 0 THEN 1 ELSE -1 END * CAST(SUBSTRING( @@ -39,5 +30,7 @@ JOIN _s3 AS _s3 CAST(LENGTH(accounts.a_key) AS REAL) / 2 ) AS INTEGER) END +GROUP BY + transactions.t_sourceaccount ORDER BY 1 diff --git a/tests/test_sql_refsols/defog_academic_gen11_ansi.sql b/tests/test_sql_refsols/defog_academic_gen11_ansi.sql index ecf4d7f72..34b47f018 100644 --- a/tests/test_sql_refsols/defog_academic_gen11_ansi.sql +++ b/tests/test_sql_refsols/defog_academic_gen11_ansi.sql @@ -8,6 +8,6 @@ WITH _s0 AS ( FROM main.author ) SELECT - _s0.n_rows / CASE WHEN _s1.n_rows > 0 THEN _s1.n_rows ELSE NULL END AS publication_to_author_ratio + _s0.n_rows / NULLIF(_s1.n_rows, 0) AS publication_to_author_ratio FROM _s0 AS _s0 CROSS JOIN _s1 AS _s1 diff --git a/tests/test_sql_refsols/defog_academic_gen11_mysql.sql b/tests/test_sql_refsols/defog_academic_gen11_mysql.sql index ecf4d7f72..34b47f018 100644 --- a/tests/test_sql_refsols/defog_academic_gen11_mysql.sql +++ b/tests/test_sql_refsols/defog_academic_gen11_mysql.sql @@ -8,6 +8,6 @@ WITH _s0 AS ( FROM main.author ) SELECT - _s0.n_rows / CASE WHEN _s1.n_rows > 0 THEN _s1.n_rows ELSE NULL END AS publication_to_author_ratio + _s0.n_rows / NULLIF(_s1.n_rows, 0) AS publication_to_author_ratio FROM _s0 AS _s0 CROSS JOIN _s1 AS _s1 diff --git a/tests/test_sql_refsols/defog_academic_gen11_postgres.sql b/tests/test_sql_refsols/defog_academic_gen11_postgres.sql index 723ebe9af..6f3332d6c 100644 --- a/tests/test_sql_refsols/defog_academic_gen11_postgres.sql +++ b/tests/test_sql_refsols/defog_academic_gen11_postgres.sql @@ -8,6 +8,6 @@ WITH _s0 AS ( FROM main.author ) SELECT - CAST(_s0.n_rows AS DOUBLE PRECISION) / CASE WHEN _s1.n_rows > 0 THEN _s1.n_rows ELSE NULL END AS publication_to_author_ratio + CAST(_s0.n_rows AS DOUBLE PRECISION) / NULLIF(_s1.n_rows, 0) AS publication_to_author_ratio FROM _s0 AS _s0 CROSS JOIN _s1 AS _s1 diff --git a/tests/test_sql_refsols/defog_academic_gen11_snowflake.sql b/tests/test_sql_refsols/defog_academic_gen11_snowflake.sql index ecf4d7f72..34b47f018 100644 --- a/tests/test_sql_refsols/defog_academic_gen11_snowflake.sql +++ b/tests/test_sql_refsols/defog_academic_gen11_snowflake.sql @@ -8,6 +8,6 @@ WITH _s0 AS ( FROM main.author ) SELECT - _s0.n_rows / CASE WHEN _s1.n_rows > 0 THEN _s1.n_rows ELSE NULL END AS publication_to_author_ratio + _s0.n_rows / NULLIF(_s1.n_rows, 0) AS publication_to_author_ratio FROM _s0 AS _s0 CROSS JOIN _s1 AS _s1 diff --git a/tests/test_sql_refsols/defog_academic_gen11_sqlite.sql b/tests/test_sql_refsols/defog_academic_gen11_sqlite.sql index 33a3678ed..600c593d8 100644 --- a/tests/test_sql_refsols/defog_academic_gen11_sqlite.sql +++ b/tests/test_sql_refsols/defog_academic_gen11_sqlite.sql @@ -8,6 +8,6 @@ WITH _s0 AS ( FROM main.author ) SELECT - CAST(_s0.n_rows AS REAL) / CASE WHEN _s1.n_rows > 0 THEN _s1.n_rows ELSE NULL END AS publication_to_author_ratio + CAST(_s0.n_rows AS REAL) / NULLIF(_s1.n_rows, 0) AS publication_to_author_ratio FROM _s0 AS _s0 CROSS JOIN _s1 AS _s1 diff --git a/tests/test_sql_refsols/defog_academic_gen12_ansi.sql b/tests/test_sql_refsols/defog_academic_gen12_ansi.sql index fc4698b0b..ae4550fd0 100644 --- a/tests/test_sql_refsols/defog_academic_gen12_ansi.sql +++ b/tests/test_sql_refsols/defog_academic_gen12_ansi.sql @@ -1,3 +1,3 @@ SELECT - SUM(NOT cid IS NULL) / CASE WHEN SUM(NOT jid IS NULL) > 0 THEN SUM(NOT jid IS NULL) ELSE NULL END AS ratio + SUM(NOT cid IS NULL) / NULLIF(SUM(NOT jid IS NULL), 0) AS ratio FROM main.publication diff --git a/tests/test_sql_refsols/defog_academic_gen12_mysql.sql b/tests/test_sql_refsols/defog_academic_gen12_mysql.sql index fc4698b0b..ae4550fd0 100644 --- a/tests/test_sql_refsols/defog_academic_gen12_mysql.sql +++ b/tests/test_sql_refsols/defog_academic_gen12_mysql.sql @@ -1,3 +1,3 @@ SELECT - SUM(NOT cid IS NULL) / CASE WHEN SUM(NOT jid IS NULL) > 0 THEN SUM(NOT jid IS NULL) ELSE NULL END AS ratio + SUM(NOT cid IS NULL) / NULLIF(SUM(NOT jid IS NULL), 0) AS ratio FROM main.publication diff --git a/tests/test_sql_refsols/defog_academic_gen12_postgres.sql b/tests/test_sql_refsols/defog_academic_gen12_postgres.sql index c10a33368..8625dcab8 100644 --- a/tests/test_sql_refsols/defog_academic_gen12_postgres.sql +++ b/tests/test_sql_refsols/defog_academic_gen12_postgres.sql @@ -1,7 +1,3 @@ SELECT - CAST(SUM(CASE WHEN NOT cid IS NULL THEN 1 ELSE 0 END) AS DOUBLE PRECISION) / CASE - WHEN SUM(CASE WHEN NOT jid IS NULL THEN 1 ELSE 0 END) > 0 - THEN SUM(CASE WHEN NOT jid IS NULL THEN 1 ELSE 0 END) - ELSE NULL - END AS ratio + CAST(SUM(CASE WHEN NOT cid IS NULL THEN 1 ELSE 0 END) AS DOUBLE PRECISION) / NULLIF(SUM(CASE WHEN NOT jid IS NULL THEN 1 ELSE 0 END), 0) AS ratio FROM main.publication diff --git a/tests/test_sql_refsols/defog_academic_gen12_snowflake.sql b/tests/test_sql_refsols/defog_academic_gen12_snowflake.sql index 1de35fe7c..9552f439b 100644 --- a/tests/test_sql_refsols/defog_academic_gen12_snowflake.sql +++ b/tests/test_sql_refsols/defog_academic_gen12_snowflake.sql @@ -1,3 +1,3 @@ SELECT - COUNT_IF(NOT cid IS NULL) / CASE WHEN COUNT_IF(NOT jid IS NULL) > 0 THEN COUNT_IF(NOT jid IS NULL) ELSE NULL END AS ratio + COUNT_IF(NOT cid IS NULL) / NULLIF(COUNT_IF(NOT jid IS NULL), 0) AS ratio FROM main.publication diff --git a/tests/test_sql_refsols/defog_academic_gen12_sqlite.sql b/tests/test_sql_refsols/defog_academic_gen12_sqlite.sql index 61b1549a7..42ac2b338 100644 --- a/tests/test_sql_refsols/defog_academic_gen12_sqlite.sql +++ b/tests/test_sql_refsols/defog_academic_gen12_sqlite.sql @@ -1,3 +1,3 @@ SELECT - CAST(SUM(NOT cid IS NULL) AS REAL) / CASE WHEN SUM(NOT jid IS NULL) > 0 THEN SUM(NOT jid IS NULL) ELSE NULL END AS ratio + CAST(SUM(NOT cid IS NULL) AS REAL) / NULLIF(SUM(NOT jid IS NULL), 0) AS ratio FROM main.publication diff --git a/tests/test_sql_refsols/defog_academic_gen13_ansi.sql b/tests/test_sql_refsols/defog_academic_gen13_ansi.sql index a15aac0b1..8a5250a76 100644 --- a/tests/test_sql_refsols/defog_academic_gen13_ansi.sql +++ b/tests/test_sql_refsols/defog_academic_gen13_ansi.sql @@ -15,13 +15,7 @@ WITH _s1 AS ( ) SELECT domain.did AS domain_id, - COALESCE(_s1.n_rows, 0) / CASE - WHEN ( - NOT _s3.n_rows IS NULL AND _s3.n_rows > 0 - ) - THEN COALESCE(_s3.n_rows, 0) - ELSE NULL - END AS ratio + COALESCE(_s1.n_rows, 0) / NULLIF(_s3.n_rows, 0) AS ratio FROM main.domain AS domain LEFT JOIN _s1 AS _s1 ON _s1.did = domain.did diff --git a/tests/test_sql_refsols/defog_academic_gen13_mysql.sql b/tests/test_sql_refsols/defog_academic_gen13_mysql.sql index a15aac0b1..8a5250a76 100644 --- a/tests/test_sql_refsols/defog_academic_gen13_mysql.sql +++ b/tests/test_sql_refsols/defog_academic_gen13_mysql.sql @@ -15,13 +15,7 @@ WITH _s1 AS ( ) SELECT domain.did AS domain_id, - COALESCE(_s1.n_rows, 0) / CASE - WHEN ( - NOT _s3.n_rows IS NULL AND _s3.n_rows > 0 - ) - THEN COALESCE(_s3.n_rows, 0) - ELSE NULL - END AS ratio + COALESCE(_s1.n_rows, 0) / NULLIF(_s3.n_rows, 0) AS ratio FROM main.domain AS domain LEFT JOIN _s1 AS _s1 ON _s1.did = domain.did diff --git a/tests/test_sql_refsols/defog_academic_gen13_postgres.sql b/tests/test_sql_refsols/defog_academic_gen13_postgres.sql index e2a713801..a5b45bbac 100644 --- a/tests/test_sql_refsols/defog_academic_gen13_postgres.sql +++ b/tests/test_sql_refsols/defog_academic_gen13_postgres.sql @@ -15,13 +15,7 @@ WITH _s1 AS ( ) SELECT domain.did AS domain_id, - CAST(COALESCE(_s1.n_rows, 0) AS DOUBLE PRECISION) / CASE - WHEN ( - NOT _s3.n_rows IS NULL AND _s3.n_rows > 0 - ) - THEN COALESCE(_s3.n_rows, 0) - ELSE NULL - END AS ratio + CAST(COALESCE(_s1.n_rows, 0) AS DOUBLE PRECISION) / NULLIF(_s3.n_rows, 0) AS ratio FROM main.domain AS domain LEFT JOIN _s1 AS _s1 ON _s1.did = domain.did diff --git a/tests/test_sql_refsols/defog_academic_gen13_snowflake.sql b/tests/test_sql_refsols/defog_academic_gen13_snowflake.sql index a15aac0b1..8a5250a76 100644 --- a/tests/test_sql_refsols/defog_academic_gen13_snowflake.sql +++ b/tests/test_sql_refsols/defog_academic_gen13_snowflake.sql @@ -15,13 +15,7 @@ WITH _s1 AS ( ) SELECT domain.did AS domain_id, - COALESCE(_s1.n_rows, 0) / CASE - WHEN ( - NOT _s3.n_rows IS NULL AND _s3.n_rows > 0 - ) - THEN COALESCE(_s3.n_rows, 0) - ELSE NULL - END AS ratio + COALESCE(_s1.n_rows, 0) / NULLIF(_s3.n_rows, 0) AS ratio FROM main.domain AS domain LEFT JOIN _s1 AS _s1 ON _s1.did = domain.did diff --git a/tests/test_sql_refsols/defog_academic_gen13_sqlite.sql b/tests/test_sql_refsols/defog_academic_gen13_sqlite.sql index 491db135f..034fbc55f 100644 --- a/tests/test_sql_refsols/defog_academic_gen13_sqlite.sql +++ b/tests/test_sql_refsols/defog_academic_gen13_sqlite.sql @@ -15,13 +15,7 @@ WITH _s1 AS ( ) SELECT domain.did AS domain_id, - CAST(COALESCE(_s1.n_rows, 0) AS REAL) / CASE - WHEN ( - NOT _s3.n_rows IS NULL AND _s3.n_rows > 0 - ) - THEN COALESCE(_s3.n_rows, 0) - ELSE NULL - END AS ratio + CAST(COALESCE(_s1.n_rows, 0) AS REAL) / NULLIF(_s3.n_rows, 0) AS ratio FROM main.domain AS domain LEFT JOIN _s1 AS _s1 ON _s1.did = domain.did diff --git a/tests/test_sql_refsols/defog_academic_gen14_ansi.sql b/tests/test_sql_refsols/defog_academic_gen14_ansi.sql index 3a5d0782e..f578e20e5 100644 --- a/tests/test_sql_refsols/defog_academic_gen14_ansi.sql +++ b/tests/test_sql_refsols/defog_academic_gen14_ansi.sql @@ -2,7 +2,7 @@ SELECT year, COUNT(*) AS num_publications, COUNT(DISTINCT jid) AS num_journals, - COUNT(*) / CASE WHEN COUNT(DISTINCT jid) > 0 THEN COUNT(DISTINCT jid) ELSE NULL END AS ratio + COUNT(*) / NULLIF(COUNT(DISTINCT jid), 0) AS ratio FROM main.publication GROUP BY 1 diff --git a/tests/test_sql_refsols/defog_academic_gen14_mysql.sql b/tests/test_sql_refsols/defog_academic_gen14_mysql.sql index 3a5d0782e..f578e20e5 100644 --- a/tests/test_sql_refsols/defog_academic_gen14_mysql.sql +++ b/tests/test_sql_refsols/defog_academic_gen14_mysql.sql @@ -2,7 +2,7 @@ SELECT year, COUNT(*) AS num_publications, COUNT(DISTINCT jid) AS num_journals, - COUNT(*) / CASE WHEN COUNT(DISTINCT jid) > 0 THEN COUNT(DISTINCT jid) ELSE NULL END AS ratio + COUNT(*) / NULLIF(COUNT(DISTINCT jid), 0) AS ratio FROM main.publication GROUP BY 1 diff --git a/tests/test_sql_refsols/defog_academic_gen14_postgres.sql b/tests/test_sql_refsols/defog_academic_gen14_postgres.sql index 553f06330..eecc51955 100644 --- a/tests/test_sql_refsols/defog_academic_gen14_postgres.sql +++ b/tests/test_sql_refsols/defog_academic_gen14_postgres.sql @@ -2,7 +2,7 @@ SELECT year, COUNT(*) AS num_publications, COUNT(DISTINCT jid) AS num_journals, - CAST(COUNT(*) AS DOUBLE PRECISION) / CASE WHEN COUNT(DISTINCT jid) > 0 THEN COUNT(DISTINCT jid) ELSE NULL END AS ratio + CAST(COUNT(*) AS DOUBLE PRECISION) / NULLIF(COUNT(DISTINCT jid), 0) AS ratio FROM main.publication GROUP BY 1 diff --git a/tests/test_sql_refsols/defog_academic_gen14_snowflake.sql b/tests/test_sql_refsols/defog_academic_gen14_snowflake.sql index 3a5d0782e..f578e20e5 100644 --- a/tests/test_sql_refsols/defog_academic_gen14_snowflake.sql +++ b/tests/test_sql_refsols/defog_academic_gen14_snowflake.sql @@ -2,7 +2,7 @@ SELECT year, COUNT(*) AS num_publications, COUNT(DISTINCT jid) AS num_journals, - COUNT(*) / CASE WHEN COUNT(DISTINCT jid) > 0 THEN COUNT(DISTINCT jid) ELSE NULL END AS ratio + COUNT(*) / NULLIF(COUNT(DISTINCT jid), 0) AS ratio FROM main.publication GROUP BY 1 diff --git a/tests/test_sql_refsols/defog_academic_gen14_sqlite.sql b/tests/test_sql_refsols/defog_academic_gen14_sqlite.sql index 3113ffd43..0a2b57a4f 100644 --- a/tests/test_sql_refsols/defog_academic_gen14_sqlite.sql +++ b/tests/test_sql_refsols/defog_academic_gen14_sqlite.sql @@ -2,7 +2,7 @@ SELECT year, COUNT(*) AS num_publications, COUNT(DISTINCT jid) AS num_journals, - CAST(COUNT(*) AS REAL) / CASE WHEN COUNT(DISTINCT jid) > 0 THEN COUNT(DISTINCT jid) ELSE NULL END AS ratio + CAST(COUNT(*) AS REAL) / NULLIF(COUNT(DISTINCT jid), 0) AS ratio FROM main.publication GROUP BY 1 diff --git a/tests/test_sql_refsols/defog_academic_gen15_ansi.sql b/tests/test_sql_refsols/defog_academic_gen15_ansi.sql index 8aec67c5a..6aff22630 100644 --- a/tests/test_sql_refsols/defog_academic_gen15_ansi.sql +++ b/tests/test_sql_refsols/defog_academic_gen15_ansi.sql @@ -1,17 +1,17 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - oid, - COUNT(*) AS n_rows - FROM main.author + ANY_VALUE(organization.continent) AS anything_continent, + COUNT(author.oid) AS count_oid + FROM main.organization AS organization + LEFT JOIN main.author AS author + ON author.oid = organization.oid GROUP BY - 1 + organization.oid ) SELECT - organization.continent, - COALESCE(SUM(_s1.n_rows), 0) / COUNT(*) AS ratio -FROM main.organization AS organization -LEFT JOIN _s1 AS _s1 - ON _s1.oid = organization.oid + anything_continent AS continent, + COALESCE(SUM(count_oid), 0) / COUNT(*) AS ratio +FROM _t1 GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/defog_academic_gen15_mysql.sql b/tests/test_sql_refsols/defog_academic_gen15_mysql.sql index 8aec67c5a..6aff22630 100644 --- a/tests/test_sql_refsols/defog_academic_gen15_mysql.sql +++ b/tests/test_sql_refsols/defog_academic_gen15_mysql.sql @@ -1,17 +1,17 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - oid, - COUNT(*) AS n_rows - FROM main.author + ANY_VALUE(organization.continent) AS anything_continent, + COUNT(author.oid) AS count_oid + FROM main.organization AS organization + LEFT JOIN main.author AS author + ON author.oid = organization.oid GROUP BY - 1 + organization.oid ) SELECT - organization.continent, - COALESCE(SUM(_s1.n_rows), 0) / COUNT(*) AS ratio -FROM main.organization AS organization -LEFT JOIN _s1 AS _s1 - ON _s1.oid = organization.oid + anything_continent AS continent, + COALESCE(SUM(count_oid), 0) / COUNT(*) AS ratio +FROM _t1 GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/defog_academic_gen15_postgres.sql b/tests/test_sql_refsols/defog_academic_gen15_postgres.sql index 0062172b1..f32c244df 100644 --- a/tests/test_sql_refsols/defog_academic_gen15_postgres.sql +++ b/tests/test_sql_refsols/defog_academic_gen15_postgres.sql @@ -1,17 +1,17 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - oid, - COUNT(*) AS n_rows - FROM main.author + MAX(organization.continent) AS anything_continent, + COUNT(author.oid) AS count_oid + FROM main.organization AS organization + LEFT JOIN main.author AS author + ON author.oid = organization.oid GROUP BY - 1 + organization.oid ) SELECT - organization.continent, - CAST(COALESCE(SUM(_s1.n_rows), 0) AS DOUBLE PRECISION) / COUNT(*) AS ratio -FROM main.organization AS organization -LEFT JOIN _s1 AS _s1 - ON _s1.oid = organization.oid + anything_continent AS continent, + CAST(COALESCE(SUM(count_oid), 0) AS DOUBLE PRECISION) / COUNT(*) AS ratio +FROM _t1 GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/defog_academic_gen15_snowflake.sql b/tests/test_sql_refsols/defog_academic_gen15_snowflake.sql index bef6f834f..976e19ef5 100644 --- a/tests/test_sql_refsols/defog_academic_gen15_snowflake.sql +++ b/tests/test_sql_refsols/defog_academic_gen15_snowflake.sql @@ -1,17 +1,17 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - oid, - COUNT(*) AS n_rows - FROM main.author + ANY_VALUE(organization.continent) AS anything_continent, + COUNT(author.oid) AS count_oid + FROM main.organization AS organization + LEFT JOIN main.author AS author + ON author.oid = organization.oid GROUP BY - 1 + organization.oid ) SELECT - organization.continent, - COALESCE(SUM(_s1.n_rows), 0) / COUNT(*) AS ratio -FROM main.organization AS organization -LEFT JOIN _s1 AS _s1 - ON _s1.oid = organization.oid + anything_continent AS continent, + COALESCE(SUM(count_oid), 0) / COUNT(*) AS ratio +FROM _t1 GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/defog_academic_gen15_sqlite.sql b/tests/test_sql_refsols/defog_academic_gen15_sqlite.sql index 6d72e6c55..e7a243354 100644 --- a/tests/test_sql_refsols/defog_academic_gen15_sqlite.sql +++ b/tests/test_sql_refsols/defog_academic_gen15_sqlite.sql @@ -1,17 +1,17 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - oid, - COUNT(*) AS n_rows - FROM main.author + MAX(organization.continent) AS anything_continent, + COUNT(author.oid) AS count_oid + FROM main.organization AS organization + LEFT JOIN main.author AS author + ON author.oid = organization.oid GROUP BY - 1 + organization.oid ) SELECT - organization.continent, - CAST(COALESCE(SUM(_s1.n_rows), 0) AS REAL) / COUNT(*) AS ratio -FROM main.organization AS organization -LEFT JOIN _s1 AS _s1 - ON _s1.oid = organization.oid + anything_continent AS continent, + CAST(COALESCE(SUM(count_oid), 0) AS REAL) / COUNT(*) AS ratio +FROM _t1 GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/defog_academic_gen17_ansi.sql b/tests/test_sql_refsols/defog_academic_gen17_ansi.sql index f0641b802..504cb2598 100644 --- a/tests/test_sql_refsols/defog_academic_gen17_ansi.sql +++ b/tests/test_sql_refsols/defog_academic_gen17_ansi.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - conference.name, - COALESCE(_s1.n_rows, 0) AS count_publications + ANY_VALUE(conference.name) AS name, + COUNT(publication.cid) AS count_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC, 1 DESC diff --git a/tests/test_sql_refsols/defog_academic_gen17_mysql.sql b/tests/test_sql_refsols/defog_academic_gen17_mysql.sql index d5b70427f..b8207083a 100644 --- a/tests/test_sql_refsols/defog_academic_gen17_mysql.sql +++ b/tests/test_sql_refsols/defog_academic_gen17_mysql.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - name COLLATE utf8mb4_bin AS name, - COALESCE(_s1.n_rows, 0) AS count_publications + ANY_VALUE(conference.name) COLLATE utf8mb4_bin AS name, + COUNT(publication.cid) AS count_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC, 1 DESC diff --git a/tests/test_sql_refsols/defog_academic_gen17_postgres.sql b/tests/test_sql_refsols/defog_academic_gen17_postgres.sql index 4339e1f73..4635122b3 100644 --- a/tests/test_sql_refsols/defog_academic_gen17_postgres.sql +++ b/tests/test_sql_refsols/defog_academic_gen17_postgres.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - conference.name, - COALESCE(_s1.n_rows, 0) AS count_publications + MAX(conference.name) AS name, + COUNT(publication.cid) AS count_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC NULLS LAST, 1 DESC NULLS LAST diff --git a/tests/test_sql_refsols/defog_academic_gen17_snowflake.sql b/tests/test_sql_refsols/defog_academic_gen17_snowflake.sql index 4339e1f73..a4ef4321b 100644 --- a/tests/test_sql_refsols/defog_academic_gen17_snowflake.sql +++ b/tests/test_sql_refsols/defog_academic_gen17_snowflake.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - conference.name, - COALESCE(_s1.n_rows, 0) AS count_publications + ANY_VALUE(conference.name) AS name, + COUNT(publication.cid) AS count_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC NULLS LAST, 1 DESC NULLS LAST diff --git a/tests/test_sql_refsols/defog_academic_gen17_sqlite.sql b/tests/test_sql_refsols/defog_academic_gen17_sqlite.sql index f0641b802..492220fdb 100644 --- a/tests/test_sql_refsols/defog_academic_gen17_sqlite.sql +++ b/tests/test_sql_refsols/defog_academic_gen17_sqlite.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - conference.name, - COALESCE(_s1.n_rows, 0) AS count_publications + MAX(conference.name) AS name, + COUNT(publication.cid) AS count_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC, 1 DESC diff --git a/tests/test_sql_refsols/defog_academic_gen19_ansi.sql b/tests/test_sql_refsols/defog_academic_gen19_ansi.sql index fdcb1ec05..38b7fbcc1 100644 --- a/tests/test_sql_refsols/defog_academic_gen19_ansi.sql +++ b/tests/test_sql_refsols/defog_academic_gen19_ansi.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - conference.name, - COALESCE(_s1.n_rows, 0) AS num_publications + ANY_VALUE(conference.name) AS name, + COUNT(publication.cid) AS num_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC, 1 diff --git a/tests/test_sql_refsols/defog_academic_gen19_mysql.sql b/tests/test_sql_refsols/defog_academic_gen19_mysql.sql index 3677a3657..846c76c9d 100644 --- a/tests/test_sql_refsols/defog_academic_gen19_mysql.sql +++ b/tests/test_sql_refsols/defog_academic_gen19_mysql.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - name COLLATE utf8mb4_bin AS name, - COALESCE(_s1.n_rows, 0) AS num_publications + ANY_VALUE(conference.name) COLLATE utf8mb4_bin AS name, + COUNT(publication.cid) AS num_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC, 1 diff --git a/tests/test_sql_refsols/defog_academic_gen19_postgres.sql b/tests/test_sql_refsols/defog_academic_gen19_postgres.sql index a55f1326e..4b7b9b29b 100644 --- a/tests/test_sql_refsols/defog_academic_gen19_postgres.sql +++ b/tests/test_sql_refsols/defog_academic_gen19_postgres.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - conference.name, - COALESCE(_s1.n_rows, 0) AS num_publications + MAX(conference.name) AS name, + COUNT(publication.cid) AS num_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC NULLS LAST, 1 NULLS FIRST diff --git a/tests/test_sql_refsols/defog_academic_gen19_snowflake.sql b/tests/test_sql_refsols/defog_academic_gen19_snowflake.sql index a55f1326e..5cfa8fc98 100644 --- a/tests/test_sql_refsols/defog_academic_gen19_snowflake.sql +++ b/tests/test_sql_refsols/defog_academic_gen19_snowflake.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - conference.name, - COALESCE(_s1.n_rows, 0) AS num_publications + ANY_VALUE(conference.name) AS name, + COUNT(publication.cid) AS num_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC NULLS LAST, 1 NULLS FIRST diff --git a/tests/test_sql_refsols/defog_academic_gen19_sqlite.sql b/tests/test_sql_refsols/defog_academic_gen19_sqlite.sql index fdcb1ec05..4605e9446 100644 --- a/tests/test_sql_refsols/defog_academic_gen19_sqlite.sql +++ b/tests/test_sql_refsols/defog_academic_gen19_sqlite.sql @@ -1,17 +1,11 @@ -WITH _s1 AS ( - SELECT - cid, - COUNT(*) AS n_rows - FROM main.publication - GROUP BY - 1 -) SELECT - conference.name, - COALESCE(_s1.n_rows, 0) AS num_publications + MAX(conference.name) AS name, + COUNT(publication.cid) AS num_publications FROM main.conference AS conference -LEFT JOIN _s1 AS _s1 - ON _s1.cid = conference.cid +LEFT JOIN main.publication AS publication + ON conference.cid = publication.cid +GROUP BY + conference.cid ORDER BY 2 DESC, 1 diff --git a/tests/test_sql_refsols/defog_broker_adv15_snowflake.sql b/tests/test_sql_refsols/defog_broker_adv15_snowflake.sql index e735bcfcd..94bef5fce 100644 --- a/tests/test_sql_refsols/defog_broker_adv15_snowflake.sql +++ b/tests/test_sql_refsols/defog_broker_adv15_snowflake.sql @@ -1,7 +1,7 @@ SELECT sbcustcountry AS country, 100 * ( - COALESCE(COUNT_IF(sbcuststatus = 'active'), 0) / COUNT(*) + COUNT_IF(sbcuststatus = 'active') / COUNT(*) ) AS ar FROM main.sbcustomer WHERE diff --git a/tests/test_sql_refsols/defog_broker_adv8_ansi.sql b/tests/test_sql_refsols/defog_broker_adv8_ansi.sql index 666371daa..3d88d5356 100644 --- a/tests/test_sql_refsols/defog_broker_adv8_ansi.sql +++ b/tests/test_sql_refsols/defog_broker_adv8_ansi.sql @@ -1,5 +1,5 @@ SELECT - CASE WHEN COUNT(*) > 0 THEN COUNT(*) ELSE NULL END AS n_transactions, + NULLIF(COUNT(*), 0) AS n_transactions, COALESCE(SUM(sbtransaction.sbtxamount), 0) AS total_amount FROM main.sbtransaction AS sbtransaction JOIN main.sbcustomer AS sbcustomer diff --git a/tests/test_sql_refsols/defog_broker_adv8_mysql.sql b/tests/test_sql_refsols/defog_broker_adv8_mysql.sql index d3c6c59dd..17fb88b4a 100644 --- a/tests/test_sql_refsols/defog_broker_adv8_mysql.sql +++ b/tests/test_sql_refsols/defog_broker_adv8_mysql.sql @@ -8,7 +8,7 @@ WITH _u_0 AS ( 1 ) SELECT - CASE WHEN COUNT(*) > 0 THEN COUNT(*) ELSE NULL END AS n_transactions, + NULLIF(COUNT(*), 0) AS n_transactions, COALESCE(SUM(sbTransaction.sbtxamount), 0) AS total_amount FROM main.sbTransaction AS sbTransaction LEFT JOIN _u_0 AS _u_0 diff --git a/tests/test_sql_refsols/defog_broker_adv8_postgres.sql b/tests/test_sql_refsols/defog_broker_adv8_postgres.sql index 7d014559a..26080ce78 100644 --- a/tests/test_sql_refsols/defog_broker_adv8_postgres.sql +++ b/tests/test_sql_refsols/defog_broker_adv8_postgres.sql @@ -8,7 +8,7 @@ WITH _u_0 AS ( 1 ) SELECT - CASE WHEN COUNT(*) > 0 THEN COUNT(*) ELSE NULL END AS n_transactions, + NULLIF(COUNT(*), 0) AS n_transactions, COALESCE(SUM(sbtransaction.sbtxamount), 0) AS total_amount FROM main.sbtransaction AS sbtransaction LEFT JOIN _u_0 AS _u_0 diff --git a/tests/test_sql_refsols/defog_broker_adv8_snowflake.sql b/tests/test_sql_refsols/defog_broker_adv8_snowflake.sql index 50141aab4..37f29683c 100644 --- a/tests/test_sql_refsols/defog_broker_adv8_snowflake.sql +++ b/tests/test_sql_refsols/defog_broker_adv8_snowflake.sql @@ -8,7 +8,7 @@ WITH _u_0 AS ( 1 ) SELECT - CASE WHEN COUNT(*) > 0 THEN COUNT(*) ELSE NULL END AS n_transactions, + NULLIF(COUNT(*), 0) AS n_transactions, COALESCE(SUM(sbtransaction.sbtxamount), 0) AS total_amount FROM main.sbtransaction AS sbtransaction LEFT JOIN _u_0 AS _u_0 diff --git a/tests/test_sql_refsols/defog_broker_adv8_sqlite.sql b/tests/test_sql_refsols/defog_broker_adv8_sqlite.sql index 959dad00c..b94aec102 100644 --- a/tests/test_sql_refsols/defog_broker_adv8_sqlite.sql +++ b/tests/test_sql_refsols/defog_broker_adv8_sqlite.sql @@ -8,7 +8,7 @@ WITH _u_0 AS ( 1 ) SELECT - CASE WHEN COUNT(*) > 0 THEN COUNT(*) ELSE NULL END AS n_transactions, + NULLIF(COUNT(*), 0) AS n_transactions, COALESCE(SUM(sbtransaction.sbtxamount), 0) AS total_amount FROM main.sbtransaction AS sbtransaction LEFT JOIN _u_0 AS _u_0 diff --git a/tests/test_sql_refsols/defog_broker_adv9_snowflake.sql b/tests/test_sql_refsols/defog_broker_adv9_snowflake.sql index e98831783..45c9d4417 100644 --- a/tests/test_sql_refsols/defog_broker_adv9_snowflake.sql +++ b/tests/test_sql_refsols/defog_broker_adv9_snowflake.sql @@ -12,14 +12,11 @@ SELECT ) ) AS week, COUNT(*) AS num_transactions, - COALESCE( - COUNT_IF(( - ( - DAYOFWEEK(sbtransaction.sbtxdatetime) + 6 - ) % 7 - ) IN (5, 6)), - 0 - ) AS weekend_transactions + COUNT_IF(( + ( + DAYOFWEEK(sbtransaction.sbtxdatetime) + 6 + ) % 7 + ) IN (5, 6)) AS weekend_transactions FROM main.sbtransaction AS sbtransaction JOIN main.sbticker AS sbticker ON sbticker.sbtickerid = sbtransaction.sbtxtickerid diff --git a/tests/test_sql_refsols/defog_dealership_adv12_ansi.sql b/tests/test_sql_refsols/defog_dealership_adv12_ansi.sql index 7eb2d10dc..ab2c3cee5 100644 --- a/tests/test_sql_refsols/defog_dealership_adv12_ansi.sql +++ b/tests/test_sql_refsols/defog_dealership_adv12_ansi.sql @@ -1,28 +1,14 @@ -WITH _t1 AS ( - SELECT - cars._id AS _id_1, - ANY_VALUE(sales.car_id) AS anything_car_id, - ANY_VALUE(cars.make) AS anything_make, - ANY_VALUE(cars.model) AS anything_model, - ANY_VALUE(sales.sale_price) AS anything_sale_price - FROM main.sales AS sales - JOIN main.cars AS cars - ON cars._id = sales.car_id - JOIN main.inventory_snapshots AS inventory_snapshots - ON NOT inventory_snapshots.is_in_inventory - AND cars._id = inventory_snapshots.car_id - AND inventory_snapshots.snapshot_date = sales.sale_date - GROUP BY - sales._id, - 1 -) SELECT - anything_make AS make, - anything_model AS model, - anything_sale_price AS sale_price -FROM _t1 -WHERE - _id_1 = anything_car_id + cars.make, + cars.model, + sales.sale_price +FROM main.sales AS sales +JOIN main.cars AS cars + ON cars._id = sales.car_id +JOIN main.inventory_snapshots AS inventory_snapshots + ON NOT inventory_snapshots.is_in_inventory + AND cars._id = inventory_snapshots.car_id + AND inventory_snapshots.snapshot_date = sales.sale_date ORDER BY 3 DESC LIMIT 1 diff --git a/tests/test_sql_refsols/defog_dealership_adv12_mysql.sql b/tests/test_sql_refsols/defog_dealership_adv12_mysql.sql index 7eb2d10dc..ab2c3cee5 100644 --- a/tests/test_sql_refsols/defog_dealership_adv12_mysql.sql +++ b/tests/test_sql_refsols/defog_dealership_adv12_mysql.sql @@ -1,28 +1,14 @@ -WITH _t1 AS ( - SELECT - cars._id AS _id_1, - ANY_VALUE(sales.car_id) AS anything_car_id, - ANY_VALUE(cars.make) AS anything_make, - ANY_VALUE(cars.model) AS anything_model, - ANY_VALUE(sales.sale_price) AS anything_sale_price - FROM main.sales AS sales - JOIN main.cars AS cars - ON cars._id = sales.car_id - JOIN main.inventory_snapshots AS inventory_snapshots - ON NOT inventory_snapshots.is_in_inventory - AND cars._id = inventory_snapshots.car_id - AND inventory_snapshots.snapshot_date = sales.sale_date - GROUP BY - sales._id, - 1 -) SELECT - anything_make AS make, - anything_model AS model, - anything_sale_price AS sale_price -FROM _t1 -WHERE - _id_1 = anything_car_id + cars.make, + cars.model, + sales.sale_price +FROM main.sales AS sales +JOIN main.cars AS cars + ON cars._id = sales.car_id +JOIN main.inventory_snapshots AS inventory_snapshots + ON NOT inventory_snapshots.is_in_inventory + AND cars._id = inventory_snapshots.car_id + AND inventory_snapshots.snapshot_date = sales.sale_date ORDER BY 3 DESC LIMIT 1 diff --git a/tests/test_sql_refsols/defog_dealership_adv12_postgres.sql b/tests/test_sql_refsols/defog_dealership_adv12_postgres.sql index 5338986f0..f8f74f3ce 100644 --- a/tests/test_sql_refsols/defog_dealership_adv12_postgres.sql +++ b/tests/test_sql_refsols/defog_dealership_adv12_postgres.sql @@ -1,28 +1,14 @@ -WITH _t1 AS ( - SELECT - cars._id AS _id_1, - MAX(sales.car_id) AS anything_car_id, - MAX(cars.make) AS anything_make, - MAX(cars.model) AS anything_model, - MAX(sales.sale_price) AS anything_sale_price - FROM main.sales AS sales - JOIN main.cars AS cars - ON cars._id = sales.car_id - JOIN main.inventory_snapshots AS inventory_snapshots - ON NOT inventory_snapshots.is_in_inventory - AND cars._id = inventory_snapshots.car_id - AND inventory_snapshots.snapshot_date = sales.sale_date - GROUP BY - sales._id, - 1 -) SELECT - anything_make AS make, - anything_model AS model, - anything_sale_price AS sale_price -FROM _t1 -WHERE - _id_1 = anything_car_id + cars.make, + cars.model, + sales.sale_price +FROM main.sales AS sales +JOIN main.cars AS cars + ON cars._id = sales.car_id +JOIN main.inventory_snapshots AS inventory_snapshots + ON NOT inventory_snapshots.is_in_inventory + AND cars._id = inventory_snapshots.car_id + AND inventory_snapshots.snapshot_date = sales.sale_date ORDER BY 3 DESC NULLS LAST LIMIT 1 diff --git a/tests/test_sql_refsols/defog_dealership_adv12_snowflake.sql b/tests/test_sql_refsols/defog_dealership_adv12_snowflake.sql index b0d7fdefb..f8f74f3ce 100644 --- a/tests/test_sql_refsols/defog_dealership_adv12_snowflake.sql +++ b/tests/test_sql_refsols/defog_dealership_adv12_snowflake.sql @@ -1,28 +1,14 @@ -WITH _t1 AS ( - SELECT - cars._id AS _id_1, - ANY_VALUE(sales.car_id) AS anything_car_id, - ANY_VALUE(cars.make) AS anything_make, - ANY_VALUE(cars.model) AS anything_model, - ANY_VALUE(sales.sale_price) AS anything_sale_price - FROM main.sales AS sales - JOIN main.cars AS cars - ON cars._id = sales.car_id - JOIN main.inventory_snapshots AS inventory_snapshots - ON NOT inventory_snapshots.is_in_inventory - AND cars._id = inventory_snapshots.car_id - AND inventory_snapshots.snapshot_date = sales.sale_date - GROUP BY - sales._id, - 1 -) SELECT - anything_make AS make, - anything_model AS model, - anything_sale_price AS sale_price -FROM _t1 -WHERE - _id_1 = anything_car_id + cars.make, + cars.model, + sales.sale_price +FROM main.sales AS sales +JOIN main.cars AS cars + ON cars._id = sales.car_id +JOIN main.inventory_snapshots AS inventory_snapshots + ON NOT inventory_snapshots.is_in_inventory + AND cars._id = inventory_snapshots.car_id + AND inventory_snapshots.snapshot_date = sales.sale_date ORDER BY 3 DESC NULLS LAST LIMIT 1 diff --git a/tests/test_sql_refsols/defog_dealership_adv12_sqlite.sql b/tests/test_sql_refsols/defog_dealership_adv12_sqlite.sql index 8972af49b..ab2c3cee5 100644 --- a/tests/test_sql_refsols/defog_dealership_adv12_sqlite.sql +++ b/tests/test_sql_refsols/defog_dealership_adv12_sqlite.sql @@ -1,28 +1,14 @@ -WITH _t1 AS ( - SELECT - cars._id AS _id_1, - MAX(sales.car_id) AS anything_car_id, - MAX(cars.make) AS anything_make, - MAX(cars.model) AS anything_model, - MAX(sales.sale_price) AS anything_sale_price - FROM main.sales AS sales - JOIN main.cars AS cars - ON cars._id = sales.car_id - JOIN main.inventory_snapshots AS inventory_snapshots - ON NOT inventory_snapshots.is_in_inventory - AND cars._id = inventory_snapshots.car_id - AND inventory_snapshots.snapshot_date = sales.sale_date - GROUP BY - sales._id, - 1 -) SELECT - anything_make AS make, - anything_model AS model, - anything_sale_price AS sale_price -FROM _t1 -WHERE - _id_1 = anything_car_id + cars.make, + cars.model, + sales.sale_price +FROM main.sales AS sales +JOIN main.cars AS cars + ON cars._id = sales.car_id +JOIN main.inventory_snapshots AS inventory_snapshots + ON NOT inventory_snapshots.is_in_inventory + AND cars._id = inventory_snapshots.car_id + AND inventory_snapshots.snapshot_date = sales.sale_date ORDER BY 3 DESC LIMIT 1 diff --git a/tests/test_sql_refsols/defog_dealership_adv1_snowflake.sql b/tests/test_sql_refsols/defog_dealership_adv1_snowflake.sql index 28c10f073..4fcbd4db9 100644 --- a/tests/test_sql_refsols/defog_dealership_adv1_snowflake.sql +++ b/tests/test_sql_refsols/defog_dealership_adv1_snowflake.sql @@ -12,14 +12,11 @@ SELECT ) ) AS payment_week, COUNT(*) AS total_payments, - COALESCE( - COUNT_IF(( - ( - DAYOFWEEK(payments_received.payment_date) + 6 - ) % 7 - ) IN (5, 6)), - 0 - ) AS weekend_payments + COUNT_IF(( + ( + DAYOFWEEK(payments_received.payment_date) + 6 + ) % 7 + ) IN (5, 6)) AS weekend_payments FROM main.payments_received AS payments_received JOIN main.sales AS sales ON payments_received.sale_id = sales._id AND sales.sale_price > 30000 diff --git a/tests/test_sql_refsols/defog_dealership_adv3_ansi.sql b/tests/test_sql_refsols/defog_dealership_adv3_ansi.sql index 0d07f9c46..a14e5f434 100644 --- a/tests/test_sql_refsols/defog_dealership_adv3_ansi.sql +++ b/tests/test_sql_refsols/defog_dealership_adv3_ansi.sql @@ -1,17 +1,21 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - car_id, - COUNT(*) AS n_rows - FROM main.sales + ANY_VALUE(cars.make) AS anything_make, + ANY_VALUE(cars.model) AS anything_model, + COUNT(sales.car_id) AS count_car_id + FROM main.cars AS cars + LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id + WHERE + LOWER(cars.vin_number) LIKE '%m5%' GROUP BY - 1 + cars._id ) SELECT - cars.make, - cars.model, - COALESCE(_s1.n_rows, 0) AS num_sales -FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id -WHERE - LOWER(cars.vin_number) LIKE '%m5%' + anything_make AS make, + anything_model AS model, + COALESCE(SUM(count_car_id), 0) AS num_sales +FROM _t1 +GROUP BY + 1, + 2 diff --git a/tests/test_sql_refsols/defog_dealership_adv3_mysql.sql b/tests/test_sql_refsols/defog_dealership_adv3_mysql.sql index 0d07f9c46..a14e5f434 100644 --- a/tests/test_sql_refsols/defog_dealership_adv3_mysql.sql +++ b/tests/test_sql_refsols/defog_dealership_adv3_mysql.sql @@ -1,17 +1,21 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - car_id, - COUNT(*) AS n_rows - FROM main.sales + ANY_VALUE(cars.make) AS anything_make, + ANY_VALUE(cars.model) AS anything_model, + COUNT(sales.car_id) AS count_car_id + FROM main.cars AS cars + LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id + WHERE + LOWER(cars.vin_number) LIKE '%m5%' GROUP BY - 1 + cars._id ) SELECT - cars.make, - cars.model, - COALESCE(_s1.n_rows, 0) AS num_sales -FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id -WHERE - LOWER(cars.vin_number) LIKE '%m5%' + anything_make AS make, + anything_model AS model, + COALESCE(SUM(count_car_id), 0) AS num_sales +FROM _t1 +GROUP BY + 1, + 2 diff --git a/tests/test_sql_refsols/defog_dealership_adv3_postgres.sql b/tests/test_sql_refsols/defog_dealership_adv3_postgres.sql index 0d07f9c46..7fc3cc4b3 100644 --- a/tests/test_sql_refsols/defog_dealership_adv3_postgres.sql +++ b/tests/test_sql_refsols/defog_dealership_adv3_postgres.sql @@ -1,17 +1,21 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - car_id, - COUNT(*) AS n_rows - FROM main.sales + MAX(cars.make) AS anything_make, + MAX(cars.model) AS anything_model, + COUNT(sales.car_id) AS count_car_id + FROM main.cars AS cars + LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id + WHERE + LOWER(cars.vin_number) LIKE '%m5%' GROUP BY - 1 + cars._id ) SELECT - cars.make, - cars.model, - COALESCE(_s1.n_rows, 0) AS num_sales -FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id -WHERE - LOWER(cars.vin_number) LIKE '%m5%' + anything_make AS make, + anything_model AS model, + COALESCE(SUM(count_car_id), 0) AS num_sales +FROM _t1 +GROUP BY + 1, + 2 diff --git a/tests/test_sql_refsols/defog_dealership_adv3_snowflake.sql b/tests/test_sql_refsols/defog_dealership_adv3_snowflake.sql index d6d854f70..2c6607199 100644 --- a/tests/test_sql_refsols/defog_dealership_adv3_snowflake.sql +++ b/tests/test_sql_refsols/defog_dealership_adv3_snowflake.sql @@ -1,17 +1,21 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - car_id, - COUNT(*) AS n_rows - FROM main.sales + ANY_VALUE(cars.make) AS anything_make, + ANY_VALUE(cars.model) AS anything_model, + COUNT(sales.car_id) AS count_car_id + FROM main.cars AS cars + LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id + WHERE + CONTAINS(LOWER(cars.vin_number), 'm5') GROUP BY - 1 + cars._id ) SELECT - cars.make, - cars.model, - COALESCE(_s1.n_rows, 0) AS num_sales -FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id -WHERE - CONTAINS(LOWER(cars.vin_number), 'm5') + anything_make AS make, + anything_model AS model, + COALESCE(SUM(count_car_id), 0) AS num_sales +FROM _t1 +GROUP BY + 1, + 2 diff --git a/tests/test_sql_refsols/defog_dealership_adv3_sqlite.sql b/tests/test_sql_refsols/defog_dealership_adv3_sqlite.sql index 0d07f9c46..7fc3cc4b3 100644 --- a/tests/test_sql_refsols/defog_dealership_adv3_sqlite.sql +++ b/tests/test_sql_refsols/defog_dealership_adv3_sqlite.sql @@ -1,17 +1,21 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - car_id, - COUNT(*) AS n_rows - FROM main.sales + MAX(cars.make) AS anything_make, + MAX(cars.model) AS anything_model, + COUNT(sales.car_id) AS count_car_id + FROM main.cars AS cars + LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id + WHERE + LOWER(cars.vin_number) LIKE '%m5%' GROUP BY - 1 + cars._id ) SELECT - cars.make, - cars.model, - COALESCE(_s1.n_rows, 0) AS num_sales -FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id -WHERE - LOWER(cars.vin_number) LIKE '%m5%' + anything_make AS make, + anything_model AS model, + COALESCE(SUM(count_car_id), 0) AS num_sales +FROM _t1 +GROUP BY + 1, + 2 diff --git a/tests/test_sql_refsols/defog_dealership_adv4_ansi.sql b/tests/test_sql_refsols/defog_dealership_adv4_ansi.sql index 7888680d0..6a01e71f2 100644 --- a/tests/test_sql_refsols/defog_dealership_adv4_ansi.sql +++ b/tests/test_sql_refsols/defog_dealership_adv4_ansi.sql @@ -1,25 +1,9 @@ -WITH _s1 AS ( - SELECT - car_id, - COUNT(*) AS n_rows, - SUM(sale_price) AS sum_sale_price - FROM main.sales - WHERE - sale_date >= DATE_SUB(CURRENT_TIMESTAMP(), 30, DAY) - GROUP BY - 1 -) SELECT - COALESCE(_s1.n_rows, 0) AS num_sales, - CASE - WHEN ( - NOT _s1.n_rows IS NULL AND _s1.n_rows > 0 - ) - THEN COALESCE(_s1.sum_sale_price, 0) - ELSE NULL - END AS total_revenue + COUNT(*) AS num_sales, + CASE WHEN COUNT(*) <> 0 THEN COALESCE(SUM(sales.sale_price), 0) ELSE NULL END AS total_revenue FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id +JOIN main.sales AS sales + ON cars._id = sales.car_id + AND sales.sale_date >= DATE_SUB(CURRENT_TIMESTAMP(), 30, DAY) WHERE LOWER(cars.make) LIKE '%toyota%' diff --git a/tests/test_sql_refsols/defog_dealership_adv4_mysql.sql b/tests/test_sql_refsols/defog_dealership_adv4_mysql.sql index cf51a9c54..db03b2dea 100644 --- a/tests/test_sql_refsols/defog_dealership_adv4_mysql.sql +++ b/tests/test_sql_refsols/defog_dealership_adv4_mysql.sql @@ -1,25 +1,9 @@ -WITH _s1 AS ( - SELECT - car_id, - COUNT(*) AS n_rows, - SUM(sale_price) AS sum_sale_price - FROM main.sales - WHERE - sale_date >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL '30' DAY) - GROUP BY - 1 -) SELECT - COALESCE(_s1.n_rows, 0) AS num_sales, - CASE - WHEN ( - NOT _s1.n_rows IS NULL AND _s1.n_rows > 0 - ) - THEN COALESCE(_s1.sum_sale_price, 0) - ELSE NULL - END AS total_revenue + COUNT(*) AS num_sales, + CASE WHEN COUNT(*) <> 0 THEN COALESCE(SUM(sales.sale_price), 0) ELSE NULL END AS total_revenue FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id +JOIN main.sales AS sales + ON cars._id = sales.car_id + AND sales.sale_date >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL '30' DAY) WHERE LOWER(cars.make) LIKE '%toyota%' diff --git a/tests/test_sql_refsols/defog_dealership_adv4_postgres.sql b/tests/test_sql_refsols/defog_dealership_adv4_postgres.sql index 99650cd1d..9ea071f87 100644 --- a/tests/test_sql_refsols/defog_dealership_adv4_postgres.sql +++ b/tests/test_sql_refsols/defog_dealership_adv4_postgres.sql @@ -1,25 +1,9 @@ -WITH _s1 AS ( - SELECT - car_id, - COUNT(*) AS n_rows, - SUM(sale_price) AS sum_sale_price - FROM main.sales - WHERE - sale_date >= CURRENT_TIMESTAMP - INTERVAL '30 DAY' - GROUP BY - 1 -) SELECT - COALESCE(_s1.n_rows, 0) AS num_sales, - CASE - WHEN ( - NOT _s1.n_rows IS NULL AND _s1.n_rows > 0 - ) - THEN COALESCE(_s1.sum_sale_price, 0) - ELSE NULL - END AS total_revenue + COUNT(*) AS num_sales, + CASE WHEN COUNT(*) <> 0 THEN COALESCE(SUM(sales.sale_price), 0) ELSE NULL END AS total_revenue FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id +JOIN main.sales AS sales + ON cars._id = sales.car_id + AND sales.sale_date >= CURRENT_TIMESTAMP - INTERVAL '30 DAY' WHERE LOWER(cars.make) LIKE '%toyota%' diff --git a/tests/test_sql_refsols/defog_dealership_adv4_snowflake.sql b/tests/test_sql_refsols/defog_dealership_adv4_snowflake.sql index dcf1f3a92..3239142db 100644 --- a/tests/test_sql_refsols/defog_dealership_adv4_snowflake.sql +++ b/tests/test_sql_refsols/defog_dealership_adv4_snowflake.sql @@ -1,25 +1,9 @@ -WITH _s1 AS ( - SELECT - car_id, - COUNT(*) AS n_rows, - SUM(sale_price) AS sum_sale_price - FROM main.sales - WHERE - sale_date >= DATEADD(DAY, -30, CURRENT_TIMESTAMP()) - GROUP BY - 1 -) SELECT - COALESCE(_s1.n_rows, 0) AS num_sales, - CASE - WHEN ( - NOT _s1.n_rows IS NULL AND _s1.n_rows > 0 - ) - THEN COALESCE(_s1.sum_sale_price, 0) - ELSE NULL - END AS total_revenue + COUNT(*) AS num_sales, + CASE WHEN COUNT(*) <> 0 THEN COALESCE(SUM(sales.sale_price), 0) ELSE NULL END AS total_revenue FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id +JOIN main.sales AS sales + ON cars._id = sales.car_id + AND sales.sale_date >= DATEADD(DAY, -30, CURRENT_TIMESTAMP()) WHERE CONTAINS(LOWER(cars.make), 'toyota') diff --git a/tests/test_sql_refsols/defog_dealership_adv4_sqlite.sql b/tests/test_sql_refsols/defog_dealership_adv4_sqlite.sql index 56f43495a..8847c48ad 100644 --- a/tests/test_sql_refsols/defog_dealership_adv4_sqlite.sql +++ b/tests/test_sql_refsols/defog_dealership_adv4_sqlite.sql @@ -1,25 +1,8 @@ -WITH _s1 AS ( - SELECT - car_id, - COUNT(*) AS n_rows, - SUM(sale_price) AS sum_sale_price - FROM main.sales - WHERE - sale_date >= DATETIME('now', '-30 day') - GROUP BY - 1 -) SELECT - COALESCE(_s1.n_rows, 0) AS num_sales, - CASE - WHEN ( - NOT _s1.n_rows IS NULL AND _s1.n_rows > 0 - ) - THEN COALESCE(_s1.sum_sale_price, 0) - ELSE NULL - END AS total_revenue + COUNT(*) AS num_sales, + CASE WHEN COUNT(*) <> 0 THEN COALESCE(SUM(sales.sale_price), 0) ELSE NULL END AS total_revenue FROM main.cars AS cars -LEFT JOIN _s1 AS _s1 - ON _s1.car_id = cars._id +JOIN main.sales AS sales + ON cars._id = sales.car_id AND sales.sale_date >= DATETIME('now', '-30 day') WHERE LOWER(cars.make) LIKE '%toyota%' diff --git a/tests/test_sql_refsols/defog_dealership_adv6_ansi.sql b/tests/test_sql_refsols/defog_dealership_adv6_ansi.sql index be8d9ee7f..1126345c2 100644 --- a/tests/test_sql_refsols/defog_dealership_adv6_ansi.sql +++ b/tests/test_sql_refsols/defog_dealership_adv6_ansi.sql @@ -1,26 +1,21 @@ -WITH _t1 AS ( +WITH _t2 AS ( SELECT car_id FROM main.inventory_snapshots QUALIFY NOT is_in_inventory AND ROW_NUMBER() OVER (PARTITION BY car_id ORDER BY snapshot_date DESC NULLS FIRST) = 1 -), _s3 AS ( - SELECT - car_id, - MAX(sale_price) AS max_sale_price - FROM main.sales - GROUP BY - 1 ) SELECT - cars.make, - cars.model, - _s3.max_sale_price AS highest_sale_price + ANY_VALUE(cars.make) AS make, + ANY_VALUE(cars.model) AS model, + MAX(sales.sale_price) AS highest_sale_price FROM main.cars AS cars -JOIN _t1 AS _t1 - ON _t1.car_id = cars._id -LEFT JOIN _s3 AS _s3 - ON _s3.car_id = cars._id +JOIN _t2 AS _t2 + ON _t2.car_id = cars._id +LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id +GROUP BY + cars._id ORDER BY 3 DESC diff --git a/tests/test_sql_refsols/defog_dealership_adv6_mysql.sql b/tests/test_sql_refsols/defog_dealership_adv6_mysql.sql index 6645daaa0..dbae4e04f 100644 --- a/tests/test_sql_refsols/defog_dealership_adv6_mysql.sql +++ b/tests/test_sql_refsols/defog_dealership_adv6_mysql.sql @@ -4,22 +4,17 @@ WITH _t AS ( is_in_inventory, ROW_NUMBER() OVER (PARTITION BY car_id ORDER BY CASE WHEN snapshot_date IS NULL THEN 1 ELSE 0 END DESC, snapshot_date DESC) AS _w FROM main.inventory_snapshots -), _s3 AS ( - SELECT - car_id, - MAX(sale_price) AS max_sale_price - FROM main.sales - GROUP BY - 1 ) SELECT - cars.make, - cars.model, - _s3.max_sale_price AS highest_sale_price + ANY_VALUE(cars.make) AS make, + ANY_VALUE(cars.model) AS model, + MAX(sales.sale_price) AS highest_sale_price FROM main.cars AS cars JOIN _t AS _t ON NOT _t.is_in_inventory AND _t._w = 1 AND _t.car_id = cars._id -LEFT JOIN _s3 AS _s3 - ON _s3.car_id = cars._id +LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id +GROUP BY + cars._id ORDER BY 3 DESC diff --git a/tests/test_sql_refsols/defog_dealership_adv6_postgres.sql b/tests/test_sql_refsols/defog_dealership_adv6_postgres.sql index 8deeb5bbf..afd34c12e 100644 --- a/tests/test_sql_refsols/defog_dealership_adv6_postgres.sql +++ b/tests/test_sql_refsols/defog_dealership_adv6_postgres.sql @@ -4,22 +4,17 @@ WITH _t AS ( is_in_inventory, ROW_NUMBER() OVER (PARTITION BY car_id ORDER BY snapshot_date DESC) AS _w FROM main.inventory_snapshots -), _s3 AS ( - SELECT - car_id, - MAX(sale_price) AS max_sale_price - FROM main.sales - GROUP BY - 1 ) SELECT - cars.make, - cars.model, - _s3.max_sale_price AS highest_sale_price + MAX(cars.make) AS make, + MAX(cars.model) AS model, + MAX(sales.sale_price) AS highest_sale_price FROM main.cars AS cars JOIN _t AS _t ON NOT _t.is_in_inventory AND _t._w = 1 AND _t.car_id = cars._id -LEFT JOIN _s3 AS _s3 - ON _s3.car_id = cars._id +LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id +GROUP BY + cars._id ORDER BY 3 DESC NULLS LAST diff --git a/tests/test_sql_refsols/defog_dealership_adv6_snowflake.sql b/tests/test_sql_refsols/defog_dealership_adv6_snowflake.sql index 579066595..10d15777f 100644 --- a/tests/test_sql_refsols/defog_dealership_adv6_snowflake.sql +++ b/tests/test_sql_refsols/defog_dealership_adv6_snowflake.sql @@ -1,26 +1,21 @@ -WITH _t1 AS ( +WITH _t2 AS ( SELECT car_id FROM main.inventory_snapshots QUALIFY NOT is_in_inventory AND ROW_NUMBER() OVER (PARTITION BY car_id ORDER BY snapshot_date DESC) = 1 -), _s3 AS ( - SELECT - car_id, - MAX(sale_price) AS max_sale_price - FROM main.sales - GROUP BY - 1 ) SELECT - cars.make, - cars.model, - _s3.max_sale_price AS highest_sale_price + ANY_VALUE(cars.make) AS make, + ANY_VALUE(cars.model) AS model, + MAX(sales.sale_price) AS highest_sale_price FROM main.cars AS cars -JOIN _t1 AS _t1 - ON _t1.car_id = cars._id -LEFT JOIN _s3 AS _s3 - ON _s3.car_id = cars._id +JOIN _t2 AS _t2 + ON _t2.car_id = cars._id +LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id +GROUP BY + cars._id ORDER BY 3 DESC NULLS LAST diff --git a/tests/test_sql_refsols/defog_dealership_adv6_sqlite.sql b/tests/test_sql_refsols/defog_dealership_adv6_sqlite.sql index 4183cfea8..0d704d83a 100644 --- a/tests/test_sql_refsols/defog_dealership_adv6_sqlite.sql +++ b/tests/test_sql_refsols/defog_dealership_adv6_sqlite.sql @@ -4,22 +4,17 @@ WITH _t AS ( is_in_inventory, ROW_NUMBER() OVER (PARTITION BY car_id ORDER BY snapshot_date DESC) AS _w FROM main.inventory_snapshots -), _s3 AS ( - SELECT - car_id, - MAX(sale_price) AS max_sale_price - FROM main.sales - GROUP BY - 1 ) SELECT - cars.make, - cars.model, - _s3.max_sale_price AS highest_sale_price + MAX(cars.make) AS make, + MAX(cars.model) AS model, + MAX(sales.sale_price) AS highest_sale_price FROM main.cars AS cars JOIN _t AS _t ON NOT _t.is_in_inventory AND _t._w = 1 AND _t.car_id = cars._id -LEFT JOIN _s3 AS _s3 - ON _s3.car_id = cars._id +LEFT JOIN main.sales AS sales + ON cars._id = sales.car_id +GROUP BY + cars._id ORDER BY 3 DESC diff --git a/tests/test_sql_refsols/defog_dermtreatment_adv5_ansi.sql b/tests/test_sql_refsols/defog_dermtreatment_adv5_ansi.sql index 27af44320..e86b2495d 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_adv5_ansi.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_adv5_ansi.sql @@ -1,19 +1,18 @@ -WITH _s3 AS ( +WITH _t1 AS ( SELECT - patient_id, - MIN(EXTRACT(YEAR FROM CAST(start_dt AS DATETIME))) AS min_year_start_dt - FROM main.treatments + MIN(EXTRACT(YEAR FROM CAST(treatments_2.start_dt AS DATETIME))) AS min_year_start_dt + FROM main.patients AS patients + JOIN main.treatments AS treatments + ON patients.patient_id = treatments.patient_id + LEFT JOIN main.treatments AS treatments_2 + ON patients.patient_id = treatments_2.patient_id GROUP BY - 1 + patients.patient_id ), _t0 AS ( SELECT - _s3.min_year_start_dt, + min_year_start_dt, COUNT(*) AS n_rows - FROM main.patients AS patients - JOIN main.treatments AS treatments - ON patients.patient_id = treatments.patient_id - LEFT JOIN _s3 AS _s3 - ON _s3.patient_id = patients.patient_id + FROM _t1 GROUP BY 1 ) diff --git a/tests/test_sql_refsols/defog_dermtreatment_adv5_mysql.sql b/tests/test_sql_refsols/defog_dermtreatment_adv5_mysql.sql index 91808179f..525de8128 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_adv5_mysql.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_adv5_mysql.sql @@ -4,24 +4,23 @@ WITH _u_0 AS ( FROM main.treatments GROUP BY 1 -), _s3 AS ( +), _t1 AS ( SELECT - patient_id, - MIN(EXTRACT(YEAR FROM CAST(start_dt AS DATETIME))) AS min_year_start_dt - FROM main.treatments - GROUP BY - 1 -), _t0 AS ( - SELECT - _s3.min_year_start_dt, - COUNT(*) AS n_rows + MIN(EXTRACT(YEAR FROM CAST(treatments.start_dt AS DATETIME))) AS min_year_start_dt FROM main.patients AS patients LEFT JOIN _u_0 AS _u_0 ON _u_0._u_1 = patients.patient_id - LEFT JOIN _s3 AS _s3 - ON _s3.patient_id = patients.patient_id + LEFT JOIN main.treatments AS treatments + ON patients.patient_id = treatments.patient_id WHERE NOT _u_0._u_1 IS NULL + GROUP BY + patients.patient_id +), _t0 AS ( + SELECT + min_year_start_dt, + COUNT(*) AS n_rows + FROM _t1 GROUP BY 1 ) diff --git a/tests/test_sql_refsols/defog_dermtreatment_adv5_postgres.sql b/tests/test_sql_refsols/defog_dermtreatment_adv5_postgres.sql index 3399479cd..faa66b9ef 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_adv5_postgres.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_adv5_postgres.sql @@ -4,24 +4,23 @@ WITH _u_0 AS ( FROM main.treatments GROUP BY 1 -), _s3 AS ( +), _t1 AS ( SELECT - patient_id, - MIN(EXTRACT(YEAR FROM CAST(start_dt AS TIMESTAMP))) AS min_year_start_dt - FROM main.treatments - GROUP BY - 1 -), _t0 AS ( - SELECT - _s3.min_year_start_dt, - COUNT(*) AS n_rows + MIN(EXTRACT(YEAR FROM CAST(treatments.start_dt AS TIMESTAMP))) AS min_year_start_dt FROM main.patients AS patients LEFT JOIN _u_0 AS _u_0 ON _u_0._u_1 = patients.patient_id - LEFT JOIN _s3 AS _s3 - ON _s3.patient_id = patients.patient_id + LEFT JOIN main.treatments AS treatments + ON patients.patient_id = treatments.patient_id WHERE NOT _u_0._u_1 IS NULL + GROUP BY + patients.patient_id +), _t0 AS ( + SELECT + min_year_start_dt, + COUNT(*) AS n_rows + FROM _t1 GROUP BY 1 ) diff --git a/tests/test_sql_refsols/defog_dermtreatment_adv5_snowflake.sql b/tests/test_sql_refsols/defog_dermtreatment_adv5_snowflake.sql index 5f3d0ed63..046c47d1f 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_adv5_snowflake.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_adv5_snowflake.sql @@ -4,24 +4,23 @@ WITH _u_0 AS ( FROM main.treatments GROUP BY 1 -), _s3 AS ( +), _t1 AS ( SELECT - patient_id, - MIN(YEAR(CAST(start_dt AS TIMESTAMP))) AS min_year_start_dt - FROM main.treatments - GROUP BY - 1 -), _t0 AS ( - SELECT - _s3.min_year_start_dt, - COUNT(*) AS n_rows + MIN(YEAR(CAST(treatments.start_dt AS TIMESTAMP))) AS min_year_start_dt FROM main.patients AS patients LEFT JOIN _u_0 AS _u_0 ON _u_0._u_1 = patients.patient_id - LEFT JOIN _s3 AS _s3 - ON _s3.patient_id = patients.patient_id + LEFT JOIN main.treatments AS treatments + ON patients.patient_id = treatments.patient_id WHERE NOT _u_0._u_1 IS NULL + GROUP BY + patients.patient_id +), _t0 AS ( + SELECT + min_year_start_dt, + COUNT(*) AS n_rows + FROM _t1 GROUP BY 1 ) diff --git a/tests/test_sql_refsols/defog_dermtreatment_adv5_sqlite.sql b/tests/test_sql_refsols/defog_dermtreatment_adv5_sqlite.sql index aac28d505..4fba654ce 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_adv5_sqlite.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_adv5_sqlite.sql @@ -4,24 +4,23 @@ WITH _u_0 AS ( FROM main.treatments GROUP BY 1 -), _s3 AS ( +), _t1 AS ( SELECT - patient_id, - MIN(CAST(STRFTIME('%Y', start_dt) AS INTEGER)) AS min_year_start_dt - FROM main.treatments - GROUP BY - 1 -), _t0 AS ( - SELECT - _s3.min_year_start_dt, - COUNT(*) AS n_rows + MIN(CAST(STRFTIME('%Y', treatments.start_dt) AS INTEGER)) AS min_year_start_dt FROM main.patients AS patients LEFT JOIN _u_0 AS _u_0 ON _u_0._u_1 = patients.patient_id - LEFT JOIN _s3 AS _s3 - ON _s3.patient_id = patients.patient_id + LEFT JOIN main.treatments AS treatments + ON patients.patient_id = treatments.patient_id WHERE NOT _u_0._u_1 IS NULL + GROUP BY + patients.patient_id +), _t0 AS ( + SELECT + min_year_start_dt, + COUNT(*) AS n_rows + FROM _t1 GROUP BY 1 ) diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic1_ansi.sql b/tests/test_sql_refsols/defog_dermtreatment_basic1_ansi.sql index f6fbe2cee..3b76ccc51 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic1_ansi.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic1_ansi.sql @@ -25,7 +25,7 @@ SELECT COALESCE(sum_sum_tot_drug_amt, 0) AS total_drug_amount FROM _t1 WHERE - sum_n_rows > 0 + sum_n_rows <> 0 ORDER BY 3 DESC LIMIT 3 diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic1_mysql.sql b/tests/test_sql_refsols/defog_dermtreatment_basic1_mysql.sql index ec0b04d18..7dabfa3ba 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic1_mysql.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic1_mysql.sql @@ -25,7 +25,7 @@ SELECT COALESCE(sum_sum_tot_drug_amt, 0) AS total_drug_amount FROM _t1 WHERE - sum_n_rows > 0 + sum_n_rows <> 0 ORDER BY 3 DESC LIMIT 3 diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic1_postgres.sql b/tests/test_sql_refsols/defog_dermtreatment_basic1_postgres.sql index b36c34e24..7d9e6d6ec 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic1_postgres.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic1_postgres.sql @@ -25,7 +25,7 @@ SELECT COALESCE(sum_sum_tot_drug_amt, 0) AS total_drug_amount FROM _t1 WHERE - sum_n_rows > 0 + sum_n_rows <> 0 ORDER BY 3 DESC NULLS LAST LIMIT 3 diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic1_snowflake.sql b/tests/test_sql_refsols/defog_dermtreatment_basic1_snowflake.sql index 82c37ab10..ce6474ebe 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic1_snowflake.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic1_snowflake.sql @@ -25,7 +25,7 @@ SELECT COALESCE(sum_sum_tot_drug_amt, 0) AS total_drug_amount FROM _t1 WHERE - sum_n_rows > 0 + sum_n_rows <> 0 ORDER BY 3 DESC NULLS LAST LIMIT 3 diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic1_sqlite.sql b/tests/test_sql_refsols/defog_dermtreatment_basic1_sqlite.sql index 2819d078d..57f5fb620 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic1_sqlite.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic1_sqlite.sql @@ -25,7 +25,7 @@ SELECT COALESCE(sum_sum_tot_drug_amt, 0) AS total_drug_amount FROM _t1 WHERE - sum_n_rows > 0 + sum_n_rows <> 0 ORDER BY 3 DESC LIMIT 3 diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic4_ansi.sql b/tests/test_sql_refsols/defog_dermtreatment_basic4_ansi.sql index 109955774..028a298d0 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic4_ansi.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic4_ansi.sql @@ -1,28 +1,29 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - treatment_id, - MAX(day100_itch_vas) AS max_day100_itch_vas - FROM main.outcomes + ANY_VALUE(treatments.diag_id) AS anything_diag_id, + ANY_VALUE(treatments.patient_id) AS anything_patient_id, + MAX(outcomes.day100_itch_vas) AS max_day100_itch_vas + FROM main.treatments AS treatments + JOIN main.outcomes AS outcomes + ON outcomes.treatment_id = treatments.treatment_id GROUP BY - 1 + outcomes.treatment_id ), _s3 AS ( SELECT - treatments.diag_id, - MAX(_s1.max_day100_itch_vas) AS max_max_day100_itch_vas, - COUNT(DISTINCT treatments.patient_id) AS ndistinct_patient_id - FROM main.treatments AS treatments - JOIN _s1 AS _s1 - ON _s1.treatment_id = treatments.treatment_id + anything_diag_id, + MAX(max_day100_itch_vas) AS max_max_day100_itch_vas, + COUNT(DISTINCT anything_patient_id) AS ndistinct_anything_patient_id + FROM _t1 GROUP BY 1 ) SELECT diagnoses.diag_name AS diagnosis_name, - _s3.ndistinct_patient_id AS num_patients, + _s3.ndistinct_anything_patient_id AS num_patients, _s3.max_max_day100_itch_vas AS max_itch_score FROM main.diagnoses AS diagnoses JOIN _s3 AS _s3 - ON _s3.diag_id = diagnoses.diag_id + ON _s3.anything_diag_id = diagnoses.diag_id ORDER BY 3 DESC, 2 DESC diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic4_mysql.sql b/tests/test_sql_refsols/defog_dermtreatment_basic4_mysql.sql index 109955774..028a298d0 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic4_mysql.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic4_mysql.sql @@ -1,28 +1,29 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - treatment_id, - MAX(day100_itch_vas) AS max_day100_itch_vas - FROM main.outcomes + ANY_VALUE(treatments.diag_id) AS anything_diag_id, + ANY_VALUE(treatments.patient_id) AS anything_patient_id, + MAX(outcomes.day100_itch_vas) AS max_day100_itch_vas + FROM main.treatments AS treatments + JOIN main.outcomes AS outcomes + ON outcomes.treatment_id = treatments.treatment_id GROUP BY - 1 + outcomes.treatment_id ), _s3 AS ( SELECT - treatments.diag_id, - MAX(_s1.max_day100_itch_vas) AS max_max_day100_itch_vas, - COUNT(DISTINCT treatments.patient_id) AS ndistinct_patient_id - FROM main.treatments AS treatments - JOIN _s1 AS _s1 - ON _s1.treatment_id = treatments.treatment_id + anything_diag_id, + MAX(max_day100_itch_vas) AS max_max_day100_itch_vas, + COUNT(DISTINCT anything_patient_id) AS ndistinct_anything_patient_id + FROM _t1 GROUP BY 1 ) SELECT diagnoses.diag_name AS diagnosis_name, - _s3.ndistinct_patient_id AS num_patients, + _s3.ndistinct_anything_patient_id AS num_patients, _s3.max_max_day100_itch_vas AS max_itch_score FROM main.diagnoses AS diagnoses JOIN _s3 AS _s3 - ON _s3.diag_id = diagnoses.diag_id + ON _s3.anything_diag_id = diagnoses.diag_id ORDER BY 3 DESC, 2 DESC diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic4_postgres.sql b/tests/test_sql_refsols/defog_dermtreatment_basic4_postgres.sql index 3bcefdbaa..cc72c3961 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic4_postgres.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic4_postgres.sql @@ -1,28 +1,29 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - treatment_id, - MAX(day100_itch_vas) AS max_day100_itch_vas - FROM main.outcomes + MAX(treatments.diag_id) AS anything_diag_id, + MAX(treatments.patient_id) AS anything_patient_id, + MAX(outcomes.day100_itch_vas) AS max_day100_itch_vas + FROM main.treatments AS treatments + JOIN main.outcomes AS outcomes + ON outcomes.treatment_id = treatments.treatment_id GROUP BY - 1 + outcomes.treatment_id ), _s3 AS ( SELECT - treatments.diag_id, - MAX(_s1.max_day100_itch_vas) AS max_max_day100_itch_vas, - COUNT(DISTINCT treatments.patient_id) AS ndistinct_patient_id - FROM main.treatments AS treatments - JOIN _s1 AS _s1 - ON _s1.treatment_id = treatments.treatment_id + anything_diag_id, + MAX(max_day100_itch_vas) AS max_max_day100_itch_vas, + COUNT(DISTINCT anything_patient_id) AS ndistinct_anything_patient_id + FROM _t1 GROUP BY 1 ) SELECT diagnoses.diag_name AS diagnosis_name, - _s3.ndistinct_patient_id AS num_patients, + _s3.ndistinct_anything_patient_id AS num_patients, _s3.max_max_day100_itch_vas AS max_itch_score FROM main.diagnoses AS diagnoses JOIN _s3 AS _s3 - ON _s3.diag_id = diagnoses.diag_id + ON _s3.anything_diag_id = diagnoses.diag_id ORDER BY 3 DESC NULLS LAST, 2 DESC NULLS LAST diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic4_snowflake.sql b/tests/test_sql_refsols/defog_dermtreatment_basic4_snowflake.sql index 3bcefdbaa..460b8dd84 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic4_snowflake.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic4_snowflake.sql @@ -1,28 +1,29 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - treatment_id, - MAX(day100_itch_vas) AS max_day100_itch_vas - FROM main.outcomes + ANY_VALUE(treatments.diag_id) AS anything_diag_id, + ANY_VALUE(treatments.patient_id) AS anything_patient_id, + MAX(outcomes.day100_itch_vas) AS max_day100_itch_vas + FROM main.treatments AS treatments + JOIN main.outcomes AS outcomes + ON outcomes.treatment_id = treatments.treatment_id GROUP BY - 1 + outcomes.treatment_id ), _s3 AS ( SELECT - treatments.diag_id, - MAX(_s1.max_day100_itch_vas) AS max_max_day100_itch_vas, - COUNT(DISTINCT treatments.patient_id) AS ndistinct_patient_id - FROM main.treatments AS treatments - JOIN _s1 AS _s1 - ON _s1.treatment_id = treatments.treatment_id + anything_diag_id, + MAX(max_day100_itch_vas) AS max_max_day100_itch_vas, + COUNT(DISTINCT anything_patient_id) AS ndistinct_anything_patient_id + FROM _t1 GROUP BY 1 ) SELECT diagnoses.diag_name AS diagnosis_name, - _s3.ndistinct_patient_id AS num_patients, + _s3.ndistinct_anything_patient_id AS num_patients, _s3.max_max_day100_itch_vas AS max_itch_score FROM main.diagnoses AS diagnoses JOIN _s3 AS _s3 - ON _s3.diag_id = diagnoses.diag_id + ON _s3.anything_diag_id = diagnoses.diag_id ORDER BY 3 DESC NULLS LAST, 2 DESC NULLS LAST diff --git a/tests/test_sql_refsols/defog_dermtreatment_basic4_sqlite.sql b/tests/test_sql_refsols/defog_dermtreatment_basic4_sqlite.sql index 109955774..be3227e2e 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_basic4_sqlite.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_basic4_sqlite.sql @@ -1,28 +1,29 @@ -WITH _s1 AS ( +WITH _t1 AS ( SELECT - treatment_id, - MAX(day100_itch_vas) AS max_day100_itch_vas - FROM main.outcomes + MAX(treatments.diag_id) AS anything_diag_id, + MAX(treatments.patient_id) AS anything_patient_id, + MAX(outcomes.day100_itch_vas) AS max_day100_itch_vas + FROM main.treatments AS treatments + JOIN main.outcomes AS outcomes + ON outcomes.treatment_id = treatments.treatment_id GROUP BY - 1 + outcomes.treatment_id ), _s3 AS ( SELECT - treatments.diag_id, - MAX(_s1.max_day100_itch_vas) AS max_max_day100_itch_vas, - COUNT(DISTINCT treatments.patient_id) AS ndistinct_patient_id - FROM main.treatments AS treatments - JOIN _s1 AS _s1 - ON _s1.treatment_id = treatments.treatment_id + anything_diag_id, + MAX(max_day100_itch_vas) AS max_max_day100_itch_vas, + COUNT(DISTINCT anything_patient_id) AS ndistinct_anything_patient_id + FROM _t1 GROUP BY 1 ) SELECT diagnoses.diag_name AS diagnosis_name, - _s3.ndistinct_patient_id AS num_patients, + _s3.ndistinct_anything_patient_id AS num_patients, _s3.max_max_day100_itch_vas AS max_itch_score FROM main.diagnoses AS diagnoses JOIN _s3 AS _s3 - ON _s3.diag_id = diagnoses.diag_id + ON _s3.anything_diag_id = diagnoses.diag_id ORDER BY 3 DESC, 2 DESC diff --git a/tests/test_sql_refsols/defog_dermtreatment_gen2_ansi.sql b/tests/test_sql_refsols/defog_dermtreatment_gen2_ansi.sql index 383878883..a2f0b75ae 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_gen2_ansi.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_gen2_ansi.sql @@ -6,20 +6,14 @@ WITH _t1 AS ( FROM main.treatments QUALIFY ROW_NUMBER() OVER (PARTITION BY doc_id ORDER BY start_dt NULLS LAST) = 1 -), _s1 AS ( - SELECT - doc_id, - start_dt, - treatment_id - FROM _t1 ) SELECT doctors.last_name, doctors.year_reg, - _s1.start_dt AS first_treatment_date, - _s1.treatment_id AS first_treatment_id + _t1.start_dt AS first_treatment_date, + _t1.treatment_id AS first_treatment_id FROM main.doctors AS doctors -LEFT JOIN _s1 AS _s1 - ON _s1.doc_id = doctors.doc_id +LEFT JOIN _t1 AS _t1 + ON _t1.doc_id = doctors.doc_id WHERE doctors.year_reg = EXTRACT(YEAR FROM DATE_SUB(CURRENT_TIMESTAMP(), 2, YEAR)) diff --git a/tests/test_sql_refsols/defog_dermtreatment_gen2_snowflake.sql b/tests/test_sql_refsols/defog_dermtreatment_gen2_snowflake.sql index be1f1e306..7aa9c8338 100644 --- a/tests/test_sql_refsols/defog_dermtreatment_gen2_snowflake.sql +++ b/tests/test_sql_refsols/defog_dermtreatment_gen2_snowflake.sql @@ -6,20 +6,14 @@ WITH _t1 AS ( FROM main.treatments QUALIFY ROW_NUMBER() OVER (PARTITION BY doc_id ORDER BY start_dt) = 1 -), _s1 AS ( - SELECT - doc_id, - start_dt, - treatment_id - FROM _t1 ) SELECT doctors.last_name, doctors.year_reg, - _s1.start_dt AS first_treatment_date, - _s1.treatment_id AS first_treatment_id + _t1.start_dt AS first_treatment_date, + _t1.treatment_id AS first_treatment_id FROM main.doctors AS doctors -LEFT JOIN _s1 AS _s1 - ON _s1.doc_id = doctors.doc_id +LEFT JOIN _t1 AS _t1 + ON _t1.doc_id = doctors.doc_id WHERE doctors.year_reg = YEAR(DATEADD(YEAR, -2, CURRENT_TIMESTAMP())) diff --git a/tests/test_sql_refsols/defog_ewallet_adv10_ansi.sql b/tests/test_sql_refsols/defog_ewallet_adv10_ansi.sql index 3f7b5e66c..f3eae3bdb 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv10_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv10_ansi.sql @@ -1,16 +1,9 @@ -WITH _s1 AS ( - SELECT - sender_id, - COUNT(*) AS n_rows - FROM main.wallet_transactions_daily - WHERE - sender_type = 0 - GROUP BY - 1 -) SELECT - users.uid AS user_id, - _s1.n_rows AS total_transactions + wallet_transactions_daily.sender_id AS user_id, + COUNT(*) AS total_transactions FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.sender_id = users.uid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON users.uid = wallet_transactions_daily.sender_id + AND wallet_transactions_daily.sender_type = 0 +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv10_mysql.sql b/tests/test_sql_refsols/defog_ewallet_adv10_mysql.sql index 3f7b5e66c..f3eae3bdb 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv10_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv10_mysql.sql @@ -1,16 +1,9 @@ -WITH _s1 AS ( - SELECT - sender_id, - COUNT(*) AS n_rows - FROM main.wallet_transactions_daily - WHERE - sender_type = 0 - GROUP BY - 1 -) SELECT - users.uid AS user_id, - _s1.n_rows AS total_transactions + wallet_transactions_daily.sender_id AS user_id, + COUNT(*) AS total_transactions FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.sender_id = users.uid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON users.uid = wallet_transactions_daily.sender_id + AND wallet_transactions_daily.sender_type = 0 +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv10_postgres.sql b/tests/test_sql_refsols/defog_ewallet_adv10_postgres.sql index 3f7b5e66c..f3eae3bdb 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv10_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv10_postgres.sql @@ -1,16 +1,9 @@ -WITH _s1 AS ( - SELECT - sender_id, - COUNT(*) AS n_rows - FROM main.wallet_transactions_daily - WHERE - sender_type = 0 - GROUP BY - 1 -) SELECT - users.uid AS user_id, - _s1.n_rows AS total_transactions + wallet_transactions_daily.sender_id AS user_id, + COUNT(*) AS total_transactions FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.sender_id = users.uid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON users.uid = wallet_transactions_daily.sender_id + AND wallet_transactions_daily.sender_type = 0 +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv10_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv10_snowflake.sql index 3f7b5e66c..f3eae3bdb 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv10_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv10_snowflake.sql @@ -1,16 +1,9 @@ -WITH _s1 AS ( - SELECT - sender_id, - COUNT(*) AS n_rows - FROM main.wallet_transactions_daily - WHERE - sender_type = 0 - GROUP BY - 1 -) SELECT - users.uid AS user_id, - _s1.n_rows AS total_transactions + wallet_transactions_daily.sender_id AS user_id, + COUNT(*) AS total_transactions FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.sender_id = users.uid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON users.uid = wallet_transactions_daily.sender_id + AND wallet_transactions_daily.sender_type = 0 +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv10_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_adv10_sqlite.sql index 3f7b5e66c..f3eae3bdb 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv10_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv10_sqlite.sql @@ -1,16 +1,9 @@ -WITH _s1 AS ( - SELECT - sender_id, - COUNT(*) AS n_rows - FROM main.wallet_transactions_daily - WHERE - sender_type = 0 - GROUP BY - 1 -) SELECT - users.uid AS user_id, - _s1.n_rows AS total_transactions + wallet_transactions_daily.sender_id AS user_id, + COUNT(*) AS total_transactions FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.sender_id = users.uid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON users.uid = wallet_transactions_daily.sender_id + AND wallet_transactions_daily.sender_type = 0 +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv11_ansi.sql b/tests/test_sql_refsols/defog_ewallet_adv11_ansi.sql index 3f2270a77..185e648da 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv11_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv11_ansi.sql @@ -1,20 +1,18 @@ -WITH _s1 AS ( - SELECT - user_id, - SUM( - DATEDIFF(CAST(session_end_ts AS DATETIME), CAST(session_start_ts AS DATETIME), SECOND) - ) AS sum_duration - FROM main.user_sessions - WHERE - session_end_ts < '2023-06-08' AND session_start_ts >= '2023-06-01' - GROUP BY - 1 -) SELECT - users.uid, - _s1.sum_duration AS total_duration + user_sessions.user_id AS uid, + SUM( + DATEDIFF( + CAST(user_sessions.session_end_ts AS DATETIME), + CAST(user_sessions.session_start_ts AS DATETIME), + SECOND + ) + ) AS total_duration FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.user_sessions AS user_sessions + ON user_sessions.session_end_ts < '2023-06-08' + AND user_sessions.session_start_ts >= '2023-06-01' + AND user_sessions.user_id = users.uid +GROUP BY + 1 ORDER BY 2 DESC diff --git a/tests/test_sql_refsols/defog_ewallet_adv11_mysql.sql b/tests/test_sql_refsols/defog_ewallet_adv11_mysql.sql index 8c68cd3c4..41b3428dd 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv11_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv11_mysql.sql @@ -1,18 +1,14 @@ -WITH _s1 AS ( - SELECT - user_id, - SUM(TIMESTAMPDIFF(SECOND, session_start_ts, session_end_ts)) AS sum_duration - FROM main.user_sessions - WHERE - session_end_ts < '2023-06-08' AND session_start_ts >= '2023-06-01' - GROUP BY - 1 -) SELECT - users.uid, - _s1.sum_duration AS total_duration + user_sessions.user_id AS uid, + SUM( + TIMESTAMPDIFF(SECOND, user_sessions.session_start_ts, user_sessions.session_end_ts) + ) AS total_duration FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.user_sessions AS user_sessions + ON user_sessions.session_end_ts < '2023-06-08' + AND user_sessions.session_start_ts >= '2023-06-01' + AND user_sessions.user_id = users.uid +GROUP BY + 1 ORDER BY 2 DESC diff --git a/tests/test_sql_refsols/defog_ewallet_adv11_postgres.sql b/tests/test_sql_refsols/defog_ewallet_adv11_postgres.sql index 53fd12a9c..e123f50d6 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv11_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv11_postgres.sql @@ -1,22 +1,16 @@ -WITH _s1 AS ( - SELECT - user_id, - SUM( - EXTRACT(EPOCH FROM ( - CAST(session_end_ts AS TIMESTAMP) - CAST(session_start_ts AS TIMESTAMP) - )) - ) AS sum_duration - FROM main.user_sessions - WHERE - session_end_ts < '2023-06-08' AND session_start_ts >= '2023-06-01' - GROUP BY - 1 -) SELECT - users.uid, - _s1.sum_duration AS total_duration + user_sessions.user_id AS uid, + SUM( + EXTRACT(EPOCH FROM ( + CAST(user_sessions.session_end_ts AS TIMESTAMP) - CAST(user_sessions.session_start_ts AS TIMESTAMP) + )) + ) AS total_duration FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.user_sessions AS user_sessions + ON user_sessions.session_end_ts < '2023-06-08' + AND user_sessions.session_start_ts >= '2023-06-01' + AND user_sessions.user_id = users.uid +GROUP BY + 1 ORDER BY 2 DESC NULLS LAST diff --git a/tests/test_sql_refsols/defog_ewallet_adv11_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv11_snowflake.sql index 75d2470d8..7d8defbb6 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv11_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv11_snowflake.sql @@ -1,20 +1,18 @@ -WITH _s1 AS ( - SELECT - user_id, - SUM( - DATEDIFF(SECOND, CAST(session_start_ts AS DATETIME), CAST(session_end_ts AS DATETIME)) - ) AS sum_duration - FROM main.user_sessions - WHERE - session_end_ts < '2023-06-08' AND session_start_ts >= '2023-06-01' - GROUP BY - 1 -) SELECT - users.uid, - _s1.sum_duration AS total_duration + user_sessions.user_id AS uid, + SUM( + DATEDIFF( + SECOND, + CAST(user_sessions.session_start_ts AS DATETIME), + CAST(user_sessions.session_end_ts AS DATETIME) + ) + ) AS total_duration FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.user_sessions AS user_sessions + ON user_sessions.session_end_ts < '2023-06-08' + AND user_sessions.session_start_ts >= '2023-06-01' + AND user_sessions.user_id = users.uid +GROUP BY + 1 ORDER BY 2 DESC NULLS LAST diff --git a/tests/test_sql_refsols/defog_ewallet_adv11_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_adv11_sqlite.sql index ad97e11a0..508a4685b 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv11_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv11_sqlite.sql @@ -1,26 +1,20 @@ -WITH _s1 AS ( - SELECT - user_id, - SUM( - ( - ( - CAST(( - JULIANDAY(DATE(session_end_ts, 'start of day')) - JULIANDAY(DATE(session_start_ts, 'start of day')) - ) AS INTEGER) * 24 + CAST(STRFTIME('%H', session_end_ts) AS INTEGER) - CAST(STRFTIME('%H', session_start_ts) AS INTEGER) - ) * 60 + CAST(STRFTIME('%M', session_end_ts) AS INTEGER) - CAST(STRFTIME('%M', session_start_ts) AS INTEGER) - ) * 60 + CAST(STRFTIME('%S', session_end_ts) AS INTEGER) - CAST(STRFTIME('%S', session_start_ts) AS INTEGER) - ) AS sum_duration - FROM main.user_sessions - WHERE - session_end_ts < '2023-06-08' AND session_start_ts >= '2023-06-01' - GROUP BY - 1 -) SELECT - users.uid, - _s1.sum_duration AS total_duration + user_sessions.user_id AS uid, + SUM( + ( + ( + CAST(( + JULIANDAY(DATE(user_sessions.session_end_ts, 'start of day')) - JULIANDAY(DATE(user_sessions.session_start_ts, 'start of day')) + ) AS INTEGER) * 24 + CAST(STRFTIME('%H', user_sessions.session_end_ts) AS INTEGER) - CAST(STRFTIME('%H', user_sessions.session_start_ts) AS INTEGER) + ) * 60 + CAST(STRFTIME('%M', user_sessions.session_end_ts) AS INTEGER) - CAST(STRFTIME('%M', user_sessions.session_start_ts) AS INTEGER) + ) * 60 + CAST(STRFTIME('%S', user_sessions.session_end_ts) AS INTEGER) - CAST(STRFTIME('%S', user_sessions.session_start_ts) AS INTEGER) + ) AS total_duration FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.user_sessions AS user_sessions + ON user_sessions.session_end_ts < '2023-06-08' + AND user_sessions.session_start_ts >= '2023-06-01' + AND user_sessions.user_id = users.uid +GROUP BY + 1 ORDER BY 2 DESC diff --git a/tests/test_sql_refsols/defog_ewallet_adv12_ansi.sql b/tests/test_sql_refsols/defog_ewallet_adv12_ansi.sql index 4d9ff37da..e7b28d656 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv12_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv12_ansi.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - coupon_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT coupons.cid AS coupon_id, - COALESCE(_s1.sum_amount, 0) AS total_discount + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id WHERE coupons.merchant_id = '1' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv12_mysql.sql b/tests/test_sql_refsols/defog_ewallet_adv12_mysql.sql index 4d9ff37da..e7b28d656 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv12_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv12_mysql.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - coupon_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT coupons.cid AS coupon_id, - COALESCE(_s1.sum_amount, 0) AS total_discount + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id WHERE coupons.merchant_id = '1' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv12_postgres.sql b/tests/test_sql_refsols/defog_ewallet_adv12_postgres.sql index 4d9ff37da..e7b28d656 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv12_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv12_postgres.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - coupon_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT coupons.cid AS coupon_id, - COALESCE(_s1.sum_amount, 0) AS total_discount + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id WHERE coupons.merchant_id = '1' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv12_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv12_snowflake.sql index 4d9ff37da..e7b28d656 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv12_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv12_snowflake.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - coupon_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT coupons.cid AS coupon_id, - COALESCE(_s1.sum_amount, 0) AS total_discount + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id WHERE coupons.merchant_id = '1' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv12_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_adv12_sqlite.sql index 4d9ff37da..e7b28d656 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv12_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv12_sqlite.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - coupon_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT coupons.cid AS coupon_id, - COALESCE(_s1.sum_amount, 0) AS total_discount + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id WHERE coupons.merchant_id = '1' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv14_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv14_snowflake.sql index 3cfa5fa6f..afce8a628 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv14_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv14_snowflake.sql @@ -1,5 +1,5 @@ SELECT - COALESCE(COUNT_IF(status = 'success'), 0) / COUNT(*) AS _expr0 + COUNT_IF(status = 'success') / COUNT(*) AS _expr0 FROM main.wallet_transactions_daily WHERE DATEDIFF(MONTH, CAST(created_at AS DATETIME), CURRENT_TIMESTAMP()) = 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv16_ansi.sql b/tests/test_sql_refsols/defog_ewallet_adv16_ansi.sql index 66a103b7d..6ec5b8cb9 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv16_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv16_ansi.sql @@ -1,18 +1,12 @@ -WITH _s1 AS ( - SELECT - user_id, - COUNT(*) AS n_rows - FROM main.notifications - WHERE - status = 'unread' AND type = 'promotion' - GROUP BY - 1 -) SELECT - users.username, - _s1.n_rows AS total_unread_notifs + ANY_VALUE(users.username) AS username, + COUNT(*) AS total_unread_notifs FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.notifications AS notifications + ON notifications.status = 'unread' + AND notifications.type = 'promotion' + AND notifications.user_id = users.uid WHERE LOWER(users.country) = 'us' +GROUP BY + notifications.user_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv16_mysql.sql b/tests/test_sql_refsols/defog_ewallet_adv16_mysql.sql index 66a103b7d..6ec5b8cb9 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv16_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv16_mysql.sql @@ -1,18 +1,12 @@ -WITH _s1 AS ( - SELECT - user_id, - COUNT(*) AS n_rows - FROM main.notifications - WHERE - status = 'unread' AND type = 'promotion' - GROUP BY - 1 -) SELECT - users.username, - _s1.n_rows AS total_unread_notifs + ANY_VALUE(users.username) AS username, + COUNT(*) AS total_unread_notifs FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.notifications AS notifications + ON notifications.status = 'unread' + AND notifications.type = 'promotion' + AND notifications.user_id = users.uid WHERE LOWER(users.country) = 'us' +GROUP BY + notifications.user_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv16_postgres.sql b/tests/test_sql_refsols/defog_ewallet_adv16_postgres.sql index 66a103b7d..8ea047239 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv16_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv16_postgres.sql @@ -1,18 +1,12 @@ -WITH _s1 AS ( - SELECT - user_id, - COUNT(*) AS n_rows - FROM main.notifications - WHERE - status = 'unread' AND type = 'promotion' - GROUP BY - 1 -) SELECT - users.username, - _s1.n_rows AS total_unread_notifs + MAX(users.username) AS username, + COUNT(*) AS total_unread_notifs FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.notifications AS notifications + ON notifications.status = 'unread' + AND notifications.type = 'promotion' + AND notifications.user_id = users.uid WHERE LOWER(users.country) = 'us' +GROUP BY + notifications.user_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv16_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv16_snowflake.sql index 66a103b7d..6ec5b8cb9 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv16_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv16_snowflake.sql @@ -1,18 +1,12 @@ -WITH _s1 AS ( - SELECT - user_id, - COUNT(*) AS n_rows - FROM main.notifications - WHERE - status = 'unread' AND type = 'promotion' - GROUP BY - 1 -) SELECT - users.username, - _s1.n_rows AS total_unread_notifs + ANY_VALUE(users.username) AS username, + COUNT(*) AS total_unread_notifs FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.notifications AS notifications + ON notifications.status = 'unread' + AND notifications.type = 'promotion' + AND notifications.user_id = users.uid WHERE LOWER(users.country) = 'us' +GROUP BY + notifications.user_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv16_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_adv16_sqlite.sql index 66a103b7d..8ea047239 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv16_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv16_sqlite.sql @@ -1,18 +1,12 @@ -WITH _s1 AS ( - SELECT - user_id, - COUNT(*) AS n_rows - FROM main.notifications - WHERE - status = 'unread' AND type = 'promotion' - GROUP BY - 1 -) SELECT - users.username, - _s1.n_rows AS total_unread_notifs + MAX(users.username) AS username, + COUNT(*) AS total_unread_notifs FROM main.users AS users -JOIN _s1 AS _s1 - ON _s1.user_id = users.uid +JOIN main.notifications AS notifications + ON notifications.status = 'unread' + AND notifications.type = 'promotion' + AND notifications.user_id = users.uid WHERE LOWER(users.country) = 'us' +GROUP BY + notifications.user_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv1_ansi.sql b/tests/test_sql_refsols/defog_ewallet_adv1_ansi.sql index 903ab4f68..23e0a0267 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv1_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv1_ansi.sql @@ -1,17 +1,9 @@ -WITH _s1 AS ( - SELECT - receiver_id, - COUNT(DISTINCT coupon_id) AS ndistinct_coupon_id, - COUNT(DISTINCT txid) AS ndistinct_txid - FROM main.wallet_transactions_daily - WHERE - status = 'success' - GROUP BY - 1 -) SELECT - merchants.name, - _s1.ndistinct_coupon_id / _s1.ndistinct_txid AS CPUR + ANY_VALUE(merchants.name) AS name, + COUNT(DISTINCT wallet_transactions_daily.coupon_id) / COUNT(DISTINCT wallet_transactions_daily.txid) AS CPUR FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.status = 'success' +GROUP BY + wallet_transactions_daily.receiver_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv1_mysql.sql b/tests/test_sql_refsols/defog_ewallet_adv1_mysql.sql index 903ab4f68..23e0a0267 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv1_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv1_mysql.sql @@ -1,17 +1,9 @@ -WITH _s1 AS ( - SELECT - receiver_id, - COUNT(DISTINCT coupon_id) AS ndistinct_coupon_id, - COUNT(DISTINCT txid) AS ndistinct_txid - FROM main.wallet_transactions_daily - WHERE - status = 'success' - GROUP BY - 1 -) SELECT - merchants.name, - _s1.ndistinct_coupon_id / _s1.ndistinct_txid AS CPUR + ANY_VALUE(merchants.name) AS name, + COUNT(DISTINCT wallet_transactions_daily.coupon_id) / COUNT(DISTINCT wallet_transactions_daily.txid) AS CPUR FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.status = 'success' +GROUP BY + wallet_transactions_daily.receiver_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv1_postgres.sql b/tests/test_sql_refsols/defog_ewallet_adv1_postgres.sql index a6d74f708..7cd6edb41 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv1_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv1_postgres.sql @@ -1,17 +1,9 @@ -WITH _s1 AS ( - SELECT - receiver_id, - COUNT(DISTINCT coupon_id) AS ndistinct_coupon_id, - COUNT(DISTINCT txid) AS ndistinct_txid - FROM main.wallet_transactions_daily - WHERE - status = 'success' - GROUP BY - 1 -) SELECT - merchants.name, - CAST(_s1.ndistinct_coupon_id AS DOUBLE PRECISION) / _s1.ndistinct_txid AS CPUR + MAX(merchants.name) AS name, + CAST(COUNT(DISTINCT wallet_transactions_daily.coupon_id) AS DOUBLE PRECISION) / COUNT(DISTINCT wallet_transactions_daily.txid) AS CPUR FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.status = 'success' +GROUP BY + wallet_transactions_daily.receiver_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv1_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv1_snowflake.sql index 903ab4f68..23e0a0267 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv1_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv1_snowflake.sql @@ -1,17 +1,9 @@ -WITH _s1 AS ( - SELECT - receiver_id, - COUNT(DISTINCT coupon_id) AS ndistinct_coupon_id, - COUNT(DISTINCT txid) AS ndistinct_txid - FROM main.wallet_transactions_daily - WHERE - status = 'success' - GROUP BY - 1 -) SELECT - merchants.name, - _s1.ndistinct_coupon_id / _s1.ndistinct_txid AS CPUR + ANY_VALUE(merchants.name) AS name, + COUNT(DISTINCT wallet_transactions_daily.coupon_id) / COUNT(DISTINCT wallet_transactions_daily.txid) AS CPUR FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.status = 'success' +GROUP BY + wallet_transactions_daily.receiver_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv1_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_adv1_sqlite.sql index 765240a19..8c171e4f1 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv1_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv1_sqlite.sql @@ -1,17 +1,9 @@ -WITH _s1 AS ( - SELECT - receiver_id, - COUNT(DISTINCT coupon_id) AS ndistinct_coupon_id, - COUNT(DISTINCT txid) AS ndistinct_txid - FROM main.wallet_transactions_daily - WHERE - status = 'success' - GROUP BY - 1 -) SELECT - merchants.name, - CAST(_s1.ndistinct_coupon_id AS REAL) / _s1.ndistinct_txid AS CPUR + MAX(merchants.name) AS name, + CAST(COUNT(DISTINCT wallet_transactions_daily.coupon_id) AS REAL) / COUNT(DISTINCT wallet_transactions_daily.txid) AS CPUR FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.status = 'success' +GROUP BY + wallet_transactions_daily.receiver_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv2_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv2_snowflake.sql index bd7a73fe3..9d45a1ed5 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv2_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv2_snowflake.sql @@ -12,11 +12,11 @@ SELECT ) ) AS week, COUNT(*) AS num_notifs, - COALESCE(COUNT_IF(( + COUNT_IF(( ( DAYOFWEEK(notifications.created_at) + 6 ) % 7 - ) IN (5, 6)), 0) AS weekend_notifs + ) IN (5, 6)) AS weekend_notifs FROM main.notifications AS notifications JOIN main.users AS users ON notifications.user_id = users.uid AND users.country IN ('US', 'CA') diff --git a/tests/test_sql_refsols/defog_ewallet_adv3_ansi.sql b/tests/test_sql_refsols/defog_ewallet_adv3_ansi.sql index 9f6e854c1..e7cd13330 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv3_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv3_ansi.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - merchant_id, - COUNT(*) AS n_rows - FROM main.coupons - GROUP BY - 1 -) SELECT - merchants.name AS merchant_name, - _s1.n_rows AS total_coupons + ANY_VALUE(merchants.name) AS merchant_name, + COUNT(*) AS total_coupons FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid +JOIN main.coupons AS coupons + ON coupons.merchant_id = merchants.mid WHERE LOWER(merchants.category) LIKE '%retail%' AND merchants.status = 'active' +GROUP BY + coupons.merchant_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv3_mysql.sql b/tests/test_sql_refsols/defog_ewallet_adv3_mysql.sql index 9f6e854c1..e7cd13330 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv3_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv3_mysql.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - merchant_id, - COUNT(*) AS n_rows - FROM main.coupons - GROUP BY - 1 -) SELECT - merchants.name AS merchant_name, - _s1.n_rows AS total_coupons + ANY_VALUE(merchants.name) AS merchant_name, + COUNT(*) AS total_coupons FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid +JOIN main.coupons AS coupons + ON coupons.merchant_id = merchants.mid WHERE LOWER(merchants.category) LIKE '%retail%' AND merchants.status = 'active' +GROUP BY + coupons.merchant_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv3_postgres.sql b/tests/test_sql_refsols/defog_ewallet_adv3_postgres.sql index 9f6e854c1..ed5902569 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv3_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv3_postgres.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - merchant_id, - COUNT(*) AS n_rows - FROM main.coupons - GROUP BY - 1 -) SELECT - merchants.name AS merchant_name, - _s1.n_rows AS total_coupons + MAX(merchants.name) AS merchant_name, + COUNT(*) AS total_coupons FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid +JOIN main.coupons AS coupons + ON coupons.merchant_id = merchants.mid WHERE LOWER(merchants.category) LIKE '%retail%' AND merchants.status = 'active' +GROUP BY + coupons.merchant_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv3_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv3_snowflake.sql index 859a0e293..c300a9bda 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv3_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv3_snowflake.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - merchant_id, - COUNT(*) AS n_rows - FROM main.coupons - GROUP BY - 1 -) SELECT - merchants.name AS merchant_name, - _s1.n_rows AS total_coupons + ANY_VALUE(merchants.name) AS merchant_name, + COUNT(*) AS total_coupons FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid +JOIN main.coupons AS coupons + ON coupons.merchant_id = merchants.mid WHERE CONTAINS(LOWER(merchants.category), 'retail') AND merchants.status = 'active' +GROUP BY + coupons.merchant_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv3_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_adv3_sqlite.sql index 9f6e854c1..ed5902569 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv3_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv3_sqlite.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - merchant_id, - COUNT(*) AS n_rows - FROM main.coupons - GROUP BY - 1 -) SELECT - merchants.name AS merchant_name, - _s1.n_rows AS total_coupons + MAX(merchants.name) AS merchant_name, + COUNT(*) AS total_coupons FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid +JOIN main.coupons AS coupons + ON coupons.merchant_id = merchants.mid WHERE LOWER(merchants.category) LIKE '%retail%' AND merchants.status = 'active' +GROUP BY + coupons.merchant_id diff --git a/tests/test_sql_refsols/defog_ewallet_adv4_ansi.sql b/tests/test_sql_refsols/defog_ewallet_adv4_ansi.sql index b8077b272..2d7f76170 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv4_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv4_ansi.sql @@ -1,7 +1,7 @@ SELECT COUNT(*) AS num_transactions, CASE - WHEN COUNT(*) > 0 + WHEN COUNT(*) <> 0 THEN COALESCE(SUM(wallet_transactions_daily.amount), 0) ELSE NULL END AS total_amount diff --git a/tests/test_sql_refsols/defog_ewallet_adv4_mysql.sql b/tests/test_sql_refsols/defog_ewallet_adv4_mysql.sql index 7a2285708..432086c72 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv4_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv4_mysql.sql @@ -1,7 +1,7 @@ SELECT COUNT(*) AS num_transactions, CASE - WHEN COUNT(*) > 0 + WHEN COUNT(*) <> 0 THEN COALESCE(SUM(wallet_transactions_daily.amount), 0) ELSE NULL END AS total_amount diff --git a/tests/test_sql_refsols/defog_ewallet_adv4_postgres.sql b/tests/test_sql_refsols/defog_ewallet_adv4_postgres.sql index c1dfcc764..ab41f723f 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv4_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv4_postgres.sql @@ -1,7 +1,7 @@ SELECT COUNT(*) AS num_transactions, CASE - WHEN COUNT(*) > 0 + WHEN COUNT(*) <> 0 THEN COALESCE(SUM(wallet_transactions_daily.amount), 0) ELSE NULL END AS total_amount diff --git a/tests/test_sql_refsols/defog_ewallet_adv4_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv4_snowflake.sql index b6ab12c52..51d6034ea 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv4_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv4_snowflake.sql @@ -1,7 +1,7 @@ SELECT COUNT(*) AS num_transactions, CASE - WHEN COUNT(*) > 0 + WHEN COUNT(*) <> 0 THEN COALESCE(SUM(wallet_transactions_daily.amount), 0) ELSE NULL END AS total_amount diff --git a/tests/test_sql_refsols/defog_ewallet_adv4_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_adv4_sqlite.sql index 4a5b8a56b..25d13401e 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv4_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv4_sqlite.sql @@ -1,7 +1,7 @@ SELECT COUNT(*) AS num_transactions, CASE - WHEN COUNT(*) > 0 + WHEN COUNT(*) <> 0 THEN COALESCE(SUM(wallet_transactions_daily.amount), 0) ELSE NULL END AS total_amount diff --git a/tests/test_sql_refsols/defog_ewallet_adv8_ansi.sql b/tests/test_sql_refsols/defog_ewallet_adv8_ansi.sql index 5b5f3027b..1d96449b8 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv8_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv8_ansi.sql @@ -1,19 +1,13 @@ -WITH _s1 AS ( - SELECT - receiver_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - WHERE - receiver_type = 1 AND status = 'success' - GROUP BY - 1 -) SELECT - merchants.mid AS merchants_id, - merchants.name AS merchants_name, - merchants.category, - COALESCE(_s1.sum_amount, 0) AS total_revenue, - ROW_NUMBER() OVER (ORDER BY COALESCE(_s1.sum_amount, 0) DESC NULLS FIRST) AS mrr + wallet_transactions_daily.receiver_id AS merchants_id, + ANY_VALUE(merchants.name) AS merchants_name, + ANY_VALUE(merchants.category) AS category, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_revenue, + ROW_NUMBER() OVER (ORDER BY COALESCE(SUM(wallet_transactions_daily.amount), 0) DESC NULLS FIRST) AS mrr FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.receiver_type = 1 + AND wallet_transactions_daily.status = 'success' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv8_mysql.sql b/tests/test_sql_refsols/defog_ewallet_adv8_mysql.sql index 41f5dab89..8519016f7 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv8_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv8_mysql.sql @@ -1,19 +1,13 @@ -WITH _s1 AS ( - SELECT - receiver_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - WHERE - receiver_type = 1 AND status = 'success' - GROUP BY - 1 -) SELECT - merchants.mid AS merchants_id, - merchants.name AS merchants_name, - merchants.category, - COALESCE(_s1.sum_amount, 0) AS total_revenue, - ROW_NUMBER() OVER (ORDER BY COALESCE(_s1.sum_amount, 0) DESC) AS mrr + wallet_transactions_daily.receiver_id AS merchants_id, + ANY_VALUE(merchants.name) AS merchants_name, + ANY_VALUE(merchants.category) AS category, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_revenue, + ROW_NUMBER() OVER (ORDER BY COALESCE(SUM(wallet_transactions_daily.amount), 0) DESC) AS mrr FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.receiver_type = 1 + AND wallet_transactions_daily.status = 'success' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv8_postgres.sql b/tests/test_sql_refsols/defog_ewallet_adv8_postgres.sql index 41f5dab89..33e2f6661 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv8_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv8_postgres.sql @@ -1,19 +1,13 @@ -WITH _s1 AS ( - SELECT - receiver_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - WHERE - receiver_type = 1 AND status = 'success' - GROUP BY - 1 -) SELECT - merchants.mid AS merchants_id, - merchants.name AS merchants_name, - merchants.category, - COALESCE(_s1.sum_amount, 0) AS total_revenue, - ROW_NUMBER() OVER (ORDER BY COALESCE(_s1.sum_amount, 0) DESC) AS mrr + wallet_transactions_daily.receiver_id AS merchants_id, + MAX(merchants.name) AS merchants_name, + MAX(merchants.category) AS category, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_revenue, + ROW_NUMBER() OVER (ORDER BY COALESCE(SUM(wallet_transactions_daily.amount), 0) DESC) AS mrr FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.receiver_type = 1 + AND wallet_transactions_daily.status = 'success' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv8_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_adv8_snowflake.sql index 41f5dab89..8519016f7 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv8_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv8_snowflake.sql @@ -1,19 +1,13 @@ -WITH _s1 AS ( - SELECT - receiver_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - WHERE - receiver_type = 1 AND status = 'success' - GROUP BY - 1 -) SELECT - merchants.mid AS merchants_id, - merchants.name AS merchants_name, - merchants.category, - COALESCE(_s1.sum_amount, 0) AS total_revenue, - ROW_NUMBER() OVER (ORDER BY COALESCE(_s1.sum_amount, 0) DESC) AS mrr + wallet_transactions_daily.receiver_id AS merchants_id, + ANY_VALUE(merchants.name) AS merchants_name, + ANY_VALUE(merchants.category) AS category, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_revenue, + ROW_NUMBER() OVER (ORDER BY COALESCE(SUM(wallet_transactions_daily.amount), 0) DESC) AS mrr FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.receiver_type = 1 + AND wallet_transactions_daily.status = 'success' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_adv8_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_adv8_sqlite.sql index 41f5dab89..33e2f6661 100644 --- a/tests/test_sql_refsols/defog_ewallet_adv8_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_adv8_sqlite.sql @@ -1,19 +1,13 @@ -WITH _s1 AS ( - SELECT - receiver_id, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - WHERE - receiver_type = 1 AND status = 'success' - GROUP BY - 1 -) SELECT - merchants.mid AS merchants_id, - merchants.name AS merchants_name, - merchants.category, - COALESCE(_s1.sum_amount, 0) AS total_revenue, - ROW_NUMBER() OVER (ORDER BY COALESCE(_s1.sum_amount, 0) DESC) AS mrr + wallet_transactions_daily.receiver_id AS merchants_id, + MAX(merchants.name) AS merchants_name, + MAX(merchants.category) AS category, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_revenue, + ROW_NUMBER() OVER (ORDER BY COALESCE(SUM(wallet_transactions_daily.amount), 0) DESC) AS mrr FROM main.merchants AS merchants -JOIN _s1 AS _s1 - ON _s1.receiver_id = merchants.mid +JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON merchants.mid = wallet_transactions_daily.receiver_id + AND wallet_transactions_daily.receiver_type = 1 + AND wallet_transactions_daily.status = 'success' +GROUP BY + 1 diff --git a/tests/test_sql_refsols/defog_ewallet_basic10_ansi.sql b/tests/test_sql_refsols/defog_ewallet_basic10_ansi.sql index 95d2f6397..9da610e5d 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic10_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic10_ansi.sql @@ -1,22 +1,21 @@ WITH _s1 AS ( SELECT - receiver_id, - COUNT(*) AS n_rows, - SUM(amount) AS sum_amount + amount, + receiver_id FROM main.wallet_transactions_daily WHERE created_at >= DATE_TRUNC('DAY', DATE_SUB(CURRENT_TIMESTAMP(), 150, DAY)) AND receiver_type = 1 - GROUP BY - 1 ) SELECT - merchants.name AS merchant_name, - COALESCE(_s1.n_rows, 0) AS total_transactions, - COALESCE(_s1.sum_amount, 0) AS total_amount + ANY_VALUE(merchants.name) AS merchant_name, + COUNT(_s1.receiver_id) AS total_transactions, + COALESCE(SUM(_s1.amount), 0) AS total_amount FROM main.merchants AS merchants LEFT JOIN _s1 AS _s1 ON _s1.receiver_id = merchants.mid +GROUP BY + merchants.mid ORDER BY 3 DESC LIMIT 2 diff --git a/tests/test_sql_refsols/defog_ewallet_basic10_mysql.sql b/tests/test_sql_refsols/defog_ewallet_basic10_mysql.sql index b2bded8f1..f7f6babf0 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic10_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic10_mysql.sql @@ -1,22 +1,21 @@ WITH _s1 AS ( SELECT - receiver_id, - COUNT(*) AS n_rows, - SUM(amount) AS sum_amount + amount, + receiver_id FROM main.wallet_transactions_daily WHERE created_at >= CAST(DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL '150' DAY) AS DATE) AND receiver_type = 1 - GROUP BY - 1 ) SELECT - merchants.name AS merchant_name, - COALESCE(_s1.n_rows, 0) AS total_transactions, - COALESCE(_s1.sum_amount, 0) AS total_amount + ANY_VALUE(merchants.name) AS merchant_name, + COUNT(_s1.receiver_id) AS total_transactions, + COALESCE(SUM(_s1.amount), 0) AS total_amount FROM main.merchants AS merchants LEFT JOIN _s1 AS _s1 ON _s1.receiver_id = merchants.mid +GROUP BY + merchants.mid ORDER BY 3 DESC LIMIT 2 diff --git a/tests/test_sql_refsols/defog_ewallet_basic10_postgres.sql b/tests/test_sql_refsols/defog_ewallet_basic10_postgres.sql index 7663d0ac5..1c7b93bbe 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic10_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic10_postgres.sql @@ -1,22 +1,21 @@ WITH _s1 AS ( SELECT - receiver_id, - COUNT(*) AS n_rows, - SUM(amount) AS sum_amount + amount, + receiver_id FROM main.wallet_transactions_daily WHERE created_at >= DATE_TRUNC('DAY', CURRENT_TIMESTAMP - INTERVAL '150 DAY') AND receiver_type = 1 - GROUP BY - 1 ) SELECT - merchants.name AS merchant_name, - COALESCE(_s1.n_rows, 0) AS total_transactions, - COALESCE(_s1.sum_amount, 0) AS total_amount + MAX(merchants.name) AS merchant_name, + COUNT(_s1.receiver_id) AS total_transactions, + COALESCE(SUM(_s1.amount), 0) AS total_amount FROM main.merchants AS merchants LEFT JOIN _s1 AS _s1 ON _s1.receiver_id = merchants.mid +GROUP BY + merchants.mid ORDER BY 3 DESC NULLS LAST LIMIT 2 diff --git a/tests/test_sql_refsols/defog_ewallet_basic10_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_basic10_snowflake.sql index abf9ce4b6..3618ff61c 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic10_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic10_snowflake.sql @@ -1,22 +1,21 @@ WITH _s1 AS ( SELECT - receiver_id, - COUNT(*) AS n_rows, - SUM(amount) AS sum_amount + amount, + receiver_id FROM main.wallet_transactions_daily WHERE created_at >= DATE_TRUNC('DAY', DATEADD(DAY, -150, CURRENT_TIMESTAMP())) AND receiver_type = 1 - GROUP BY - 1 ) SELECT - merchants.name AS merchant_name, - COALESCE(_s1.n_rows, 0) AS total_transactions, - COALESCE(_s1.sum_amount, 0) AS total_amount + ANY_VALUE(merchants.name) AS merchant_name, + COUNT(_s1.receiver_id) AS total_transactions, + COALESCE(SUM(_s1.amount), 0) AS total_amount FROM main.merchants AS merchants LEFT JOIN _s1 AS _s1 ON _s1.receiver_id = merchants.mid +GROUP BY + merchants.mid ORDER BY 3 DESC NULLS LAST LIMIT 2 diff --git a/tests/test_sql_refsols/defog_ewallet_basic10_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_basic10_sqlite.sql index 6a4fff33f..43b6b1cf6 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic10_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic10_sqlite.sql @@ -1,22 +1,21 @@ WITH _s1 AS ( SELECT - receiver_id, - COUNT(*) AS n_rows, - SUM(amount) AS sum_amount + amount, + receiver_id FROM main.wallet_transactions_daily WHERE created_at >= DATE(DATETIME('now', '-150 day'), 'start of day') AND receiver_type = 1 - GROUP BY - 1 ) SELECT - merchants.name AS merchant_name, - COALESCE(_s1.n_rows, 0) AS total_transactions, - COALESCE(_s1.sum_amount, 0) AS total_amount + MAX(merchants.name) AS merchant_name, + COUNT(_s1.receiver_id) AS total_transactions, + COALESCE(SUM(_s1.amount), 0) AS total_amount FROM main.merchants AS merchants LEFT JOIN _s1 AS _s1 ON _s1.receiver_id = merchants.mid +GROUP BY + merchants.mid ORDER BY 3 DESC LIMIT 2 diff --git a/tests/test_sql_refsols/defog_ewallet_basic8_ansi.sql b/tests/test_sql_refsols/defog_ewallet_basic8_ansi.sql index 28ec4e7cd..fe8b9ea5a 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic8_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic8_ansi.sql @@ -1,19 +1,12 @@ -WITH _s1 AS ( - SELECT - coupon_id, - COUNT(txid) AS count_txid, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT - coupons.code AS coupon_code, - COALESCE(_s1.count_txid, 0) AS redemption_count, - COALESCE(_s1.sum_amount, 0) AS total_discount + ANY_VALUE(coupons.code) AS coupon_code, + COUNT(wallet_transactions_daily.txid) AS redemption_count, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id +GROUP BY + coupons.cid ORDER BY 2 DESC LIMIT 3 diff --git a/tests/test_sql_refsols/defog_ewallet_basic8_mysql.sql b/tests/test_sql_refsols/defog_ewallet_basic8_mysql.sql index 28ec4e7cd..fe8b9ea5a 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic8_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic8_mysql.sql @@ -1,19 +1,12 @@ -WITH _s1 AS ( - SELECT - coupon_id, - COUNT(txid) AS count_txid, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT - coupons.code AS coupon_code, - COALESCE(_s1.count_txid, 0) AS redemption_count, - COALESCE(_s1.sum_amount, 0) AS total_discount + ANY_VALUE(coupons.code) AS coupon_code, + COUNT(wallet_transactions_daily.txid) AS redemption_count, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id +GROUP BY + coupons.cid ORDER BY 2 DESC LIMIT 3 diff --git a/tests/test_sql_refsols/defog_ewallet_basic8_postgres.sql b/tests/test_sql_refsols/defog_ewallet_basic8_postgres.sql index 9799ac581..a2ac158c4 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic8_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic8_postgres.sql @@ -1,19 +1,12 @@ -WITH _s1 AS ( - SELECT - coupon_id, - COUNT(txid) AS count_txid, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT - coupons.code AS coupon_code, - COALESCE(_s1.count_txid, 0) AS redemption_count, - COALESCE(_s1.sum_amount, 0) AS total_discount + MAX(coupons.code) AS coupon_code, + COUNT(wallet_transactions_daily.txid) AS redemption_count, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id +GROUP BY + coupons.cid ORDER BY 2 DESC NULLS LAST LIMIT 3 diff --git a/tests/test_sql_refsols/defog_ewallet_basic8_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_basic8_snowflake.sql index 9799ac581..f2308b204 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic8_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic8_snowflake.sql @@ -1,19 +1,12 @@ -WITH _s1 AS ( - SELECT - coupon_id, - COUNT(txid) AS count_txid, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT - coupons.code AS coupon_code, - COALESCE(_s1.count_txid, 0) AS redemption_count, - COALESCE(_s1.sum_amount, 0) AS total_discount + ANY_VALUE(coupons.code) AS coupon_code, + COUNT(wallet_transactions_daily.txid) AS redemption_count, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id +GROUP BY + coupons.cid ORDER BY 2 DESC NULLS LAST LIMIT 3 diff --git a/tests/test_sql_refsols/defog_ewallet_basic8_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_basic8_sqlite.sql index 28ec4e7cd..c40521c08 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic8_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic8_sqlite.sql @@ -1,19 +1,12 @@ -WITH _s1 AS ( - SELECT - coupon_id, - COUNT(txid) AS count_txid, - SUM(amount) AS sum_amount - FROM main.wallet_transactions_daily - GROUP BY - 1 -) SELECT - coupons.code AS coupon_code, - COALESCE(_s1.count_txid, 0) AS redemption_count, - COALESCE(_s1.sum_amount, 0) AS total_discount + MAX(coupons.code) AS coupon_code, + COUNT(wallet_transactions_daily.txid) AS redemption_count, + COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_discount FROM main.coupons AS coupons -LEFT JOIN _s1 AS _s1 - ON _s1.coupon_id = coupons.cid +LEFT JOIN main.wallet_transactions_daily AS wallet_transactions_daily + ON coupons.cid = wallet_transactions_daily.coupon_id +GROUP BY + coupons.cid ORDER BY 2 DESC LIMIT 3 diff --git a/tests/test_sql_refsols/defog_ewallet_basic9_ansi.sql b/tests/test_sql_refsols/defog_ewallet_basic9_ansi.sql index 969fb9cb2..64fef3152 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic9_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic9_ansi.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - country, - uid - FROM main.users -) SELECT - _s1.country, + users.country, COUNT(DISTINCT wallet_transactions_daily.sender_id) AS user_count, COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_amount FROM main.wallet_transactions_daily AS wallet_transactions_daily -LEFT JOIN _s1 AS _s1 - ON _s1.uid = wallet_transactions_daily.sender_id +LEFT JOIN main.users AS users + ON users.uid = wallet_transactions_daily.sender_id WHERE wallet_transactions_daily.sender_type = 0 GROUP BY diff --git a/tests/test_sql_refsols/defog_ewallet_basic9_mysql.sql b/tests/test_sql_refsols/defog_ewallet_basic9_mysql.sql index 969fb9cb2..64fef3152 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic9_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic9_mysql.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - country, - uid - FROM main.users -) SELECT - _s1.country, + users.country, COUNT(DISTINCT wallet_transactions_daily.sender_id) AS user_count, COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_amount FROM main.wallet_transactions_daily AS wallet_transactions_daily -LEFT JOIN _s1 AS _s1 - ON _s1.uid = wallet_transactions_daily.sender_id +LEFT JOIN main.users AS users + ON users.uid = wallet_transactions_daily.sender_id WHERE wallet_transactions_daily.sender_type = 0 GROUP BY diff --git a/tests/test_sql_refsols/defog_ewallet_basic9_postgres.sql b/tests/test_sql_refsols/defog_ewallet_basic9_postgres.sql index 114ba10b7..4fd98674e 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic9_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic9_postgres.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - country, - uid - FROM main.users -) SELECT - _s1.country, + users.country, COUNT(DISTINCT wallet_transactions_daily.sender_id) AS user_count, COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_amount FROM main.wallet_transactions_daily AS wallet_transactions_daily -LEFT JOIN _s1 AS _s1 - ON _s1.uid = wallet_transactions_daily.sender_id +LEFT JOIN main.users AS users + ON users.uid = wallet_transactions_daily.sender_id WHERE wallet_transactions_daily.sender_type = 0 GROUP BY diff --git a/tests/test_sql_refsols/defog_ewallet_basic9_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_basic9_snowflake.sql index 114ba10b7..4fd98674e 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic9_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic9_snowflake.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - country, - uid - FROM main.users -) SELECT - _s1.country, + users.country, COUNT(DISTINCT wallet_transactions_daily.sender_id) AS user_count, COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_amount FROM main.wallet_transactions_daily AS wallet_transactions_daily -LEFT JOIN _s1 AS _s1 - ON _s1.uid = wallet_transactions_daily.sender_id +LEFT JOIN main.users AS users + ON users.uid = wallet_transactions_daily.sender_id WHERE wallet_transactions_daily.sender_type = 0 GROUP BY diff --git a/tests/test_sql_refsols/defog_ewallet_basic9_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_basic9_sqlite.sql index 969fb9cb2..64fef3152 100644 --- a/tests/test_sql_refsols/defog_ewallet_basic9_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_basic9_sqlite.sql @@ -1,16 +1,10 @@ -WITH _s1 AS ( - SELECT - country, - uid - FROM main.users -) SELECT - _s1.country, + users.country, COUNT(DISTINCT wallet_transactions_daily.sender_id) AS user_count, COALESCE(SUM(wallet_transactions_daily.amount), 0) AS total_amount FROM main.wallet_transactions_daily AS wallet_transactions_daily -LEFT JOIN _s1 AS _s1 - ON _s1.uid = wallet_transactions_daily.sender_id +LEFT JOIN main.users AS users + ON users.uid = wallet_transactions_daily.sender_id WHERE wallet_transactions_daily.sender_type = 0 GROUP BY diff --git a/tests/test_sql_refsols/defog_ewallet_gen4_ansi.sql b/tests/test_sql_refsols/defog_ewallet_gen4_ansi.sql index 805d5b52f..169cba686 100644 --- a/tests/test_sql_refsols/defog_ewallet_gen4_ansi.sql +++ b/tests/test_sql_refsols/defog_ewallet_gen4_ansi.sql @@ -1,4 +1,4 @@ -WITH _t0 AS ( +WITH _t1 AS ( SELECT merchant_id, start_date @@ -7,29 +7,30 @@ WITH _t0 AS ( SELECT merchant_id, MIN(start_date) AS min_start_date - FROM _t0 + FROM _t1 GROUP BY 1 -), _s3 AS ( +), _s4 AS ( SELECT - merchant_id, - start_date, - MAX(cid) AS max_cid - FROM main.coupons + merchants.mid, + _s1.min_start_date, + ANY_VALUE(merchants.created_at) AS anything_created_at, + MAX(coupons.cid) AS max_cid + FROM main.merchants AS merchants + LEFT JOIN _s1 AS _s1 + ON _s1.merchant_id = merchants.mid + LEFT JOIN main.coupons AS coupons + ON _s1.min_start_date = coupons.start_date AND coupons.merchant_id = merchants.mid GROUP BY 1, 2 ) SELECT - merchants.mid AS merchants_id, - merchants.created_at AS merchant_registration_date, - _s1.min_start_date AS earliest_coupon_start_date, - _s3.max_cid AS earliest_coupon_id -FROM main.merchants AS merchants -LEFT JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid -LEFT JOIN _s3 AS _s3 - ON _s1.min_start_date = _s3.start_date AND _s3.merchant_id = merchants.mid -JOIN _t0 AS _s5 - ON _s5.merchant_id = merchants.mid - AND _s5.start_date <= DATE_ADD(CAST(merchants.created_at AS TIMESTAMP), 1, 'YEAR') + _s4.mid AS merchants_id, + _s4.anything_created_at AS merchant_registration_date, + _s4.min_start_date AS earliest_coupon_start_date, + _s4.max_cid AS earliest_coupon_id +FROM _s4 AS _s4 +JOIN _t1 AS _s5 + ON _s4.mid = _s5.merchant_id + AND _s5.start_date <= DATE_ADD(CAST(_s4.anything_created_at AS TIMESTAMP), 1, 'YEAR') diff --git a/tests/test_sql_refsols/defog_ewallet_gen4_mysql.sql b/tests/test_sql_refsols/defog_ewallet_gen4_mysql.sql index 65fdd6894..be0cd0c51 100644 --- a/tests/test_sql_refsols/defog_ewallet_gen4_mysql.sql +++ b/tests/test_sql_refsols/defog_ewallet_gen4_mysql.sql @@ -1,4 +1,4 @@ -WITH _t0 AS ( +WITH _t1 AS ( SELECT merchant_id, start_date @@ -7,29 +7,30 @@ WITH _t0 AS ( SELECT merchant_id, MIN(start_date) AS min_start_date - FROM _t0 + FROM _t1 GROUP BY 1 -), _s3 AS ( +), _s4 AS ( SELECT - merchant_id, - start_date, - MAX(cid) AS max_cid - FROM main.coupons + merchants.mid, + _s1.min_start_date, + ANY_VALUE(merchants.created_at) AS anything_created_at, + MAX(coupons.cid) AS max_cid + FROM main.merchants AS merchants + LEFT JOIN _s1 AS _s1 + ON _s1.merchant_id = merchants.mid + LEFT JOIN main.coupons AS coupons + ON _s1.min_start_date = coupons.start_date AND coupons.merchant_id = merchants.mid GROUP BY 1, 2 ) SELECT - merchants.mid AS merchants_id, - merchants.created_at AS merchant_registration_date, - _s1.min_start_date AS earliest_coupon_start_date, - _s3.max_cid AS earliest_coupon_id -FROM main.merchants AS merchants -LEFT JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid -LEFT JOIN _s3 AS _s3 - ON _s1.min_start_date = _s3.start_date AND _s3.merchant_id = merchants.mid -JOIN _t0 AS _s5 - ON _s5.merchant_id = merchants.mid - AND _s5.start_date <= DATE_ADD(CAST(merchants.created_at AS DATETIME), INTERVAL '1' YEAR) + _s4.mid AS merchants_id, + _s4.anything_created_at AS merchant_registration_date, + _s4.min_start_date AS earliest_coupon_start_date, + _s4.max_cid AS earliest_coupon_id +FROM _s4 AS _s4 +JOIN _t1 AS _s5 + ON _s4.mid = _s5.merchant_id + AND _s5.start_date <= DATE_ADD(CAST(_s4.anything_created_at AS DATETIME), INTERVAL '1' YEAR) diff --git a/tests/test_sql_refsols/defog_ewallet_gen4_postgres.sql b/tests/test_sql_refsols/defog_ewallet_gen4_postgres.sql index be36c89fb..3d5c151c9 100644 --- a/tests/test_sql_refsols/defog_ewallet_gen4_postgres.sql +++ b/tests/test_sql_refsols/defog_ewallet_gen4_postgres.sql @@ -1,4 +1,4 @@ -WITH _t0 AS ( +WITH _t1 AS ( SELECT merchant_id, start_date @@ -7,29 +7,30 @@ WITH _t0 AS ( SELECT merchant_id, MIN(start_date) AS min_start_date - FROM _t0 + FROM _t1 GROUP BY 1 -), _s3 AS ( +), _s4 AS ( SELECT - merchant_id, - start_date, - MAX(cid) AS max_cid - FROM main.coupons + merchants.mid, + _s1.min_start_date, + MAX(merchants.created_at) AS anything_created_at, + MAX(coupons.cid) AS max_cid + FROM main.merchants AS merchants + LEFT JOIN _s1 AS _s1 + ON _s1.merchant_id = merchants.mid + LEFT JOIN main.coupons AS coupons + ON _s1.min_start_date = coupons.start_date AND coupons.merchant_id = merchants.mid GROUP BY 1, 2 ) SELECT - merchants.mid AS merchants_id, - merchants.created_at AS merchant_registration_date, - _s1.min_start_date AS earliest_coupon_start_date, - _s3.max_cid AS earliest_coupon_id -FROM main.merchants AS merchants -LEFT JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid -LEFT JOIN _s3 AS _s3 - ON _s1.min_start_date = _s3.start_date AND _s3.merchant_id = merchants.mid -JOIN _t0 AS _s5 - ON _s5.merchant_id = merchants.mid - AND _s5.start_date <= CAST(merchants.created_at AS TIMESTAMP) + INTERVAL '1 YEAR' + _s4.mid AS merchants_id, + _s4.anything_created_at AS merchant_registration_date, + _s4.min_start_date AS earliest_coupon_start_date, + _s4.max_cid AS earliest_coupon_id +FROM _s4 AS _s4 +JOIN _t1 AS _s5 + ON _s4.mid = _s5.merchant_id + AND _s5.start_date <= CAST(_s4.anything_created_at AS TIMESTAMP) + INTERVAL '1 YEAR' diff --git a/tests/test_sql_refsols/defog_ewallet_gen4_snowflake.sql b/tests/test_sql_refsols/defog_ewallet_gen4_snowflake.sql index 867b81dd2..169a87861 100644 --- a/tests/test_sql_refsols/defog_ewallet_gen4_snowflake.sql +++ b/tests/test_sql_refsols/defog_ewallet_gen4_snowflake.sql @@ -1,4 +1,4 @@ -WITH _t0 AS ( +WITH _t1 AS ( SELECT merchant_id, start_date @@ -7,29 +7,30 @@ WITH _t0 AS ( SELECT merchant_id, MIN(start_date) AS min_start_date - FROM _t0 + FROM _t1 GROUP BY 1 -), _s3 AS ( +), _s4 AS ( SELECT - merchant_id, - start_date, - MAX(cid) AS max_cid - FROM main.coupons + merchants.mid, + _s1.min_start_date, + ANY_VALUE(merchants.created_at) AS anything_created_at, + MAX(coupons.cid) AS max_cid + FROM main.merchants AS merchants + LEFT JOIN _s1 AS _s1 + ON _s1.merchant_id = merchants.mid + LEFT JOIN main.coupons AS coupons + ON _s1.min_start_date = coupons.start_date AND coupons.merchant_id = merchants.mid GROUP BY 1, 2 ) SELECT - merchants.mid AS merchants_id, - merchants.created_at AS merchant_registration_date, - _s1.min_start_date AS earliest_coupon_start_date, - _s3.max_cid AS earliest_coupon_id -FROM main.merchants AS merchants -LEFT JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid -LEFT JOIN _s3 AS _s3 - ON _s1.min_start_date = _s3.start_date AND _s3.merchant_id = merchants.mid -JOIN _t0 AS _s5 - ON _s5.merchant_id = merchants.mid - AND _s5.start_date <= DATEADD(YEAR, 1, CAST(merchants.created_at AS TIMESTAMP)) + _s4.mid AS merchants_id, + _s4.anything_created_at AS merchant_registration_date, + _s4.min_start_date AS earliest_coupon_start_date, + _s4.max_cid AS earliest_coupon_id +FROM _s4 AS _s4 +JOIN _t1 AS _s5 + ON _s4.mid = _s5.merchant_id + AND _s5.start_date <= DATEADD(YEAR, 1, CAST(_s4.anything_created_at AS TIMESTAMP)) diff --git a/tests/test_sql_refsols/defog_ewallet_gen4_sqlite.sql b/tests/test_sql_refsols/defog_ewallet_gen4_sqlite.sql index ffd54f0de..605f1bcd1 100644 --- a/tests/test_sql_refsols/defog_ewallet_gen4_sqlite.sql +++ b/tests/test_sql_refsols/defog_ewallet_gen4_sqlite.sql @@ -1,4 +1,4 @@ -WITH _t0 AS ( +WITH _t1 AS ( SELECT merchant_id, start_date @@ -7,29 +7,30 @@ WITH _t0 AS ( SELECT merchant_id, MIN(start_date) AS min_start_date - FROM _t0 + FROM _t1 GROUP BY 1 -), _s3 AS ( +), _s4 AS ( SELECT - merchant_id, - start_date, - MAX(cid) AS max_cid - FROM main.coupons + merchants.mid, + _s1.min_start_date, + MAX(merchants.created_at) AS anything_created_at, + MAX(coupons.cid) AS max_cid + FROM main.merchants AS merchants + LEFT JOIN _s1 AS _s1 + ON _s1.merchant_id = merchants.mid + LEFT JOIN main.coupons AS coupons + ON _s1.min_start_date = coupons.start_date AND coupons.merchant_id = merchants.mid GROUP BY 1, 2 ) SELECT - merchants.mid AS merchants_id, - merchants.created_at AS merchant_registration_date, - _s1.min_start_date AS earliest_coupon_start_date, - _s3.max_cid AS earliest_coupon_id -FROM main.merchants AS merchants -LEFT JOIN _s1 AS _s1 - ON _s1.merchant_id = merchants.mid -LEFT JOIN _s3 AS _s3 - ON _s1.min_start_date = _s3.start_date AND _s3.merchant_id = merchants.mid -JOIN _t0 AS _s5 - ON _s5.merchant_id = merchants.mid - AND _s5.start_date <= DATETIME(merchants.created_at, '1 year') + _s4.mid AS merchants_id, + _s4.anything_created_at AS merchant_registration_date, + _s4.min_start_date AS earliest_coupon_start_date, + _s4.max_cid AS earliest_coupon_id +FROM _s4 AS _s4 +JOIN _t1 AS _s5 + ON _s4.mid = _s5.merchant_id + AND _s5.start_date <= DATETIME(_s4.anything_created_at, '1 year') diff --git a/tests/test_sql_refsols/defog_restaurants_gen12_ansi.sql b/tests/test_sql_refsols/defog_restaurants_gen12_ansi.sql index 9afcc60a6..ece2fa784 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen12_ansi.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen12_ansi.sql @@ -1,9 +1,3 @@ SELECT - COALESCE(SUM(rating > 4.0), 0) / CASE - WHEN ( - NOT SUM(rating < 4.0) IS NULL AND SUM(rating < 4.0) <> 0 - ) - THEN COALESCE(SUM(rating < 4.0), 0) - ELSE NULL - END AS ratio + COALESCE(SUM(rating > 4.0), 0) / NULLIF(SUM(rating < 4.0), 0) AS ratio FROM main.restaurant diff --git a/tests/test_sql_refsols/defog_restaurants_gen12_mysql.sql b/tests/test_sql_refsols/defog_restaurants_gen12_mysql.sql index 9afcc60a6..ece2fa784 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen12_mysql.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen12_mysql.sql @@ -1,9 +1,3 @@ SELECT - COALESCE(SUM(rating > 4.0), 0) / CASE - WHEN ( - NOT SUM(rating < 4.0) IS NULL AND SUM(rating < 4.0) <> 0 - ) - THEN COALESCE(SUM(rating < 4.0), 0) - ELSE NULL - END AS ratio + COALESCE(SUM(rating > 4.0), 0) / NULLIF(SUM(rating < 4.0), 0) AS ratio FROM main.restaurant diff --git a/tests/test_sql_refsols/defog_restaurants_gen12_postgres.sql b/tests/test_sql_refsols/defog_restaurants_gen12_postgres.sql index fc66f22ba..c59b4a694 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen12_postgres.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen12_postgres.sql @@ -1,10 +1,3 @@ SELECT - CAST(COALESCE(SUM(CASE WHEN rating > 4.0 THEN 1 ELSE 0 END), 0) AS DOUBLE PRECISION) / CASE - WHEN ( - NOT SUM(CASE WHEN rating < 4.0 THEN 1 ELSE 0 END) IS NULL - AND SUM(CASE WHEN rating < 4.0 THEN 1 ELSE 0 END) <> 0 - ) - THEN COALESCE(SUM(CASE WHEN rating < 4.0 THEN 1 ELSE 0 END), 0) - ELSE NULL - END AS ratio + CAST(COALESCE(SUM(CASE WHEN rating > 4.0 THEN 1 ELSE 0 END), 0) AS DOUBLE PRECISION) / NULLIF(SUM(CASE WHEN rating < 4.0 THEN 1 ELSE 0 END), 0) AS ratio FROM main.restaurant diff --git a/tests/test_sql_refsols/defog_restaurants_gen12_snowflake.sql b/tests/test_sql_refsols/defog_restaurants_gen12_snowflake.sql index 9d1bcf6ad..4b6a300ba 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen12_snowflake.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen12_snowflake.sql @@ -1,9 +1,3 @@ SELECT - COALESCE(COUNT_IF(rating > 4.0), 0) / CASE - WHEN ( - COUNT_IF(rating < 4.0) <> 0 AND NOT COUNT_IF(rating < 4.0) IS NULL - ) - THEN COALESCE(COUNT_IF(rating < 4.0), 0) - ELSE NULL - END AS ratio + COUNT_IF(rating > 4.0) / NULLIF(COUNT_IF(rating < 4.0), 0) AS ratio FROM main.restaurant diff --git a/tests/test_sql_refsols/defog_restaurants_gen12_sqlite.sql b/tests/test_sql_refsols/defog_restaurants_gen12_sqlite.sql index 837e07fbc..84b0a470e 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen12_sqlite.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen12_sqlite.sql @@ -1,9 +1,3 @@ SELECT - CAST(COALESCE(SUM(rating > 4.0), 0) AS REAL) / CASE - WHEN ( - NOT SUM(rating < 4.0) IS NULL AND SUM(rating < 4.0) <> 0 - ) - THEN COALESCE(SUM(rating < 4.0), 0) - ELSE NULL - END AS ratio + CAST(COALESCE(SUM(rating > 4.0), 0) AS REAL) / NULLIF(SUM(rating < 4.0), 0) AS ratio FROM main.restaurant diff --git a/tests/test_sql_refsols/defog_restaurants_gen13_ansi.sql b/tests/test_sql_refsols/defog_restaurants_gen13_ansi.sql index e242399d5..7742fc35b 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen13_ansi.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen13_ansi.sql @@ -1,11 +1,5 @@ SELECT - COALESCE(SUM(rating > 4.0), 0) / CASE - WHEN ( - NOT SUM(rating < 4.0) IS NULL AND SUM(rating < 4.0) <> 0 - ) - THEN COALESCE(SUM(rating < 4.0), 0) - ELSE NULL - END AS ratio + COALESCE(SUM(rating > 4.0), 0) / NULLIF(SUM(rating < 4.0), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'new york' diff --git a/tests/test_sql_refsols/defog_restaurants_gen13_mysql.sql b/tests/test_sql_refsols/defog_restaurants_gen13_mysql.sql index e242399d5..7742fc35b 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen13_mysql.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen13_mysql.sql @@ -1,11 +1,5 @@ SELECT - COALESCE(SUM(rating > 4.0), 0) / CASE - WHEN ( - NOT SUM(rating < 4.0) IS NULL AND SUM(rating < 4.0) <> 0 - ) - THEN COALESCE(SUM(rating < 4.0), 0) - ELSE NULL - END AS ratio + COALESCE(SUM(rating > 4.0), 0) / NULLIF(SUM(rating < 4.0), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'new york' diff --git a/tests/test_sql_refsols/defog_restaurants_gen13_postgres.sql b/tests/test_sql_refsols/defog_restaurants_gen13_postgres.sql index 7d950c523..7433576cd 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen13_postgres.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen13_postgres.sql @@ -1,12 +1,5 @@ SELECT - CAST(COALESCE(SUM(CASE WHEN rating > 4.0 THEN 1 ELSE 0 END), 0) AS DOUBLE PRECISION) / CASE - WHEN ( - NOT SUM(CASE WHEN rating < 4.0 THEN 1 ELSE 0 END) IS NULL - AND SUM(CASE WHEN rating < 4.0 THEN 1 ELSE 0 END) <> 0 - ) - THEN COALESCE(SUM(CASE WHEN rating < 4.0 THEN 1 ELSE 0 END), 0) - ELSE NULL - END AS ratio + CAST(COALESCE(SUM(CASE WHEN rating > 4.0 THEN 1 ELSE 0 END), 0) AS DOUBLE PRECISION) / NULLIF(SUM(CASE WHEN rating < 4.0 THEN 1 ELSE 0 END), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'new york' diff --git a/tests/test_sql_refsols/defog_restaurants_gen13_snowflake.sql b/tests/test_sql_refsols/defog_restaurants_gen13_snowflake.sql index 615701afe..57b28518e 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen13_snowflake.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen13_snowflake.sql @@ -1,11 +1,5 @@ SELECT - COALESCE(COUNT_IF(rating > 4.0), 0) / CASE - WHEN ( - COUNT_IF(rating < 4.0) <> 0 AND NOT COUNT_IF(rating < 4.0) IS NULL - ) - THEN COALESCE(COUNT_IF(rating < 4.0), 0) - ELSE NULL - END AS ratio + COUNT_IF(rating > 4.0) / NULLIF(COUNT_IF(rating < 4.0), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'new york' diff --git a/tests/test_sql_refsols/defog_restaurants_gen13_sqlite.sql b/tests/test_sql_refsols/defog_restaurants_gen13_sqlite.sql index 65e74ad5c..246b16f4d 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen13_sqlite.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen13_sqlite.sql @@ -1,11 +1,5 @@ SELECT - CAST(COALESCE(SUM(rating > 4.0), 0) AS REAL) / CASE - WHEN ( - NOT SUM(rating < 4.0) IS NULL AND SUM(rating < 4.0) <> 0 - ) - THEN COALESCE(SUM(rating < 4.0), 0) - ELSE NULL - END AS ratio + CAST(COALESCE(SUM(rating > 4.0), 0) AS REAL) / NULLIF(SUM(rating < 4.0), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'new york' diff --git a/tests/test_sql_refsols/defog_restaurants_gen14_ansi.sql b/tests/test_sql_refsols/defog_restaurants_gen14_ansi.sql index 6d482b5af..d9975b8d2 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen14_ansi.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen14_ansi.sql @@ -1,12 +1,5 @@ SELECT - COALESCE(SUM(LOWER(food_type) = 'vegan'), 0) / CASE - WHEN ( - NOT SUM(LOWER(food_type) <> 'vegan') IS NULL - AND SUM(LOWER(food_type) <> 'vegan') <> 0 - ) - THEN COALESCE(SUM(LOWER(food_type) <> 'vegan'), 0) - ELSE NULL - END AS ratio + COALESCE(SUM(LOWER(food_type) = 'vegan'), 0) / NULLIF(SUM(LOWER(food_type) <> 'vegan'), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'san francisco' diff --git a/tests/test_sql_refsols/defog_restaurants_gen14_mysql.sql b/tests/test_sql_refsols/defog_restaurants_gen14_mysql.sql index 6d482b5af..d9975b8d2 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen14_mysql.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen14_mysql.sql @@ -1,12 +1,5 @@ SELECT - COALESCE(SUM(LOWER(food_type) = 'vegan'), 0) / CASE - WHEN ( - NOT SUM(LOWER(food_type) <> 'vegan') IS NULL - AND SUM(LOWER(food_type) <> 'vegan') <> 0 - ) - THEN COALESCE(SUM(LOWER(food_type) <> 'vegan'), 0) - ELSE NULL - END AS ratio + COALESCE(SUM(LOWER(food_type) = 'vegan'), 0) / NULLIF(SUM(LOWER(food_type) <> 'vegan'), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'san francisco' diff --git a/tests/test_sql_refsols/defog_restaurants_gen14_postgres.sql b/tests/test_sql_refsols/defog_restaurants_gen14_postgres.sql index a184ccfef..74d49c9a3 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen14_postgres.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen14_postgres.sql @@ -1,12 +1,5 @@ SELECT - CAST(COALESCE(SUM(CASE WHEN LOWER(food_type) = 'vegan' THEN 1 ELSE 0 END), 0) AS DOUBLE PRECISION) / CASE - WHEN ( - NOT SUM(CASE WHEN LOWER(food_type) <> 'vegan' THEN 1 ELSE 0 END) IS NULL - AND SUM(CASE WHEN LOWER(food_type) <> 'vegan' THEN 1 ELSE 0 END) <> 0 - ) - THEN COALESCE(SUM(CASE WHEN LOWER(food_type) <> 'vegan' THEN 1 ELSE 0 END), 0) - ELSE NULL - END AS ratio + CAST(COALESCE(SUM(CASE WHEN LOWER(food_type) = 'vegan' THEN 1 ELSE 0 END), 0) AS DOUBLE PRECISION) / NULLIF(SUM(CASE WHEN LOWER(food_type) <> 'vegan' THEN 1 ELSE 0 END), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'san francisco' diff --git a/tests/test_sql_refsols/defog_restaurants_gen14_snowflake.sql b/tests/test_sql_refsols/defog_restaurants_gen14_snowflake.sql index 70767f83e..9f437c5c6 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen14_snowflake.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen14_snowflake.sql @@ -1,12 +1,5 @@ SELECT - COALESCE(COUNT_IF(LOWER(food_type) = 'vegan'), 0) / CASE - WHEN ( - COUNT_IF(LOWER(food_type) <> 'vegan') <> 0 - AND NOT COUNT_IF(LOWER(food_type) <> 'vegan') IS NULL - ) - THEN COALESCE(COUNT_IF(LOWER(food_type) <> 'vegan'), 0) - ELSE NULL - END AS ratio + COUNT_IF(LOWER(food_type) = 'vegan') / NULLIF(COUNT_IF(LOWER(food_type) <> 'vegan'), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'san francisco' diff --git a/tests/test_sql_refsols/defog_restaurants_gen14_sqlite.sql b/tests/test_sql_refsols/defog_restaurants_gen14_sqlite.sql index 59b2ad815..06f824271 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen14_sqlite.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen14_sqlite.sql @@ -1,12 +1,5 @@ SELECT - CAST(COALESCE(SUM(LOWER(food_type) = 'vegan'), 0) AS REAL) / CASE - WHEN ( - NOT SUM(LOWER(food_type) <> 'vegan') IS NULL - AND SUM(LOWER(food_type) <> 'vegan') <> 0 - ) - THEN COALESCE(SUM(LOWER(food_type) <> 'vegan'), 0) - ELSE NULL - END AS ratio + CAST(COALESCE(SUM(LOWER(food_type) = 'vegan'), 0) AS REAL) / NULLIF(SUM(LOWER(food_type) <> 'vegan'), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'san francisco' diff --git a/tests/test_sql_refsols/defog_restaurants_gen15_ansi.sql b/tests/test_sql_refsols/defog_restaurants_gen15_ansi.sql index f1d9a4ac5..c15bdb8d1 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen15_ansi.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen15_ansi.sql @@ -1,5 +1,5 @@ SELECT - COALESCE(SUM(LOWER(food_type) = 'italian'), 0) / CASE WHEN COUNT(*) <> 0 THEN COUNT(*) ELSE NULL END AS ratio + COALESCE(SUM(LOWER(food_type) = 'italian'), 0) / NULLIF(COUNT(*), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'los angeles' diff --git a/tests/test_sql_refsols/defog_restaurants_gen15_mysql.sql b/tests/test_sql_refsols/defog_restaurants_gen15_mysql.sql index f1d9a4ac5..c15bdb8d1 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen15_mysql.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen15_mysql.sql @@ -1,5 +1,5 @@ SELECT - COALESCE(SUM(LOWER(food_type) = 'italian'), 0) / CASE WHEN COUNT(*) <> 0 THEN COUNT(*) ELSE NULL END AS ratio + COALESCE(SUM(LOWER(food_type) = 'italian'), 0) / NULLIF(COUNT(*), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'los angeles' diff --git a/tests/test_sql_refsols/defog_restaurants_gen15_postgres.sql b/tests/test_sql_refsols/defog_restaurants_gen15_postgres.sql index 68ac00f1e..5016a56a6 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen15_postgres.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen15_postgres.sql @@ -1,5 +1,5 @@ SELECT - CAST(COALESCE(SUM(CASE WHEN LOWER(food_type) = 'italian' THEN 1 ELSE 0 END), 0) AS DOUBLE PRECISION) / CASE WHEN COUNT(*) <> 0 THEN COUNT(*) ELSE NULL END AS ratio + CAST(COALESCE(SUM(CASE WHEN LOWER(food_type) = 'italian' THEN 1 ELSE 0 END), 0) AS DOUBLE PRECISION) / NULLIF(COUNT(*), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'los angeles' diff --git a/tests/test_sql_refsols/defog_restaurants_gen15_snowflake.sql b/tests/test_sql_refsols/defog_restaurants_gen15_snowflake.sql index f31117c9a..d3d759103 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen15_snowflake.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen15_snowflake.sql @@ -1,5 +1,5 @@ SELECT - COALESCE(COUNT_IF(LOWER(food_type) = 'italian'), 0) / CASE WHEN COUNT(*) <> 0 THEN COUNT(*) ELSE NULL END AS ratio + COUNT_IF(LOWER(food_type) = 'italian') / NULLIF(COUNT(*), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'los angeles' diff --git a/tests/test_sql_refsols/defog_restaurants_gen15_sqlite.sql b/tests/test_sql_refsols/defog_restaurants_gen15_sqlite.sql index 6cf3b4b72..c5dcfc7fb 100644 --- a/tests/test_sql_refsols/defog_restaurants_gen15_sqlite.sql +++ b/tests/test_sql_refsols/defog_restaurants_gen15_sqlite.sql @@ -1,5 +1,5 @@ SELECT - CAST(COALESCE(SUM(LOWER(food_type) = 'italian'), 0) AS REAL) / CASE WHEN COUNT(*) <> 0 THEN COUNT(*) ELSE NULL END AS ratio + CAST(COALESCE(SUM(LOWER(food_type) = 'italian'), 0) AS REAL) / NULLIF(COUNT(*), 0) AS ratio FROM main.restaurant WHERE LOWER(city_name) = 'los angeles' diff --git a/tests/test_sql_refsols/epoch_intra_season_searches_ansi.sql b/tests/test_sql_refsols/epoch_intra_season_searches_ansi.sql index 2b80900d5..3ce047156 100644 --- a/tests/test_sql_refsols/epoch_intra_season_searches_ansi.sql +++ b/tests/test_sql_refsols/epoch_intra_season_searches_ansi.sql @@ -13,8 +13,7 @@ WITH _s0 AS ( ), _s9 AS ( SELECT _s2.s_name, - searches.search_id, - COUNT(*) AS n_rows + searches.search_id FROM _s0 AS _s2 JOIN searches AS searches ON _s2.s_month1 = EXTRACT(MONTH FROM CAST(searches.search_ts AS DATETIME)) @@ -29,16 +28,10 @@ WITH _s0 AS ( OR _s7.s_month2 = EXTRACT(MONTH FROM CAST(_s5.ev_dt AS DATETIME)) OR _s7.s_month3 = EXTRACT(MONTH FROM CAST(_s5.ev_dt AS DATETIME)) ) - GROUP BY - 1, - 2 -), _s16 AS ( +), _t1 AS ( SELECT _s0.s_name, - COUNT(*) AS n_rows, - SUM(( - NOT _s9.n_rows IS NULL AND _s9.n_rows > 0 - )) AS sum_is_intra_season + COUNT(_s9.search_id) AS count_search_id FROM _s0 AS _s0 JOIN searches AS searches ON _s0.s_month1 = EXTRACT(MONTH FROM CAST(searches.search_ts AS DATETIME)) @@ -46,6 +39,17 @@ WITH _s0 AS ( OR _s0.s_month3 = EXTRACT(MONTH FROM CAST(searches.search_ts AS DATETIME)) LEFT JOIN _s9 AS _s9 ON _s0.s_name = _s9.s_name AND _s9.search_id = searches.search_id + GROUP BY + searches.search_id, + 1 +), _s16 AS ( + SELECT + s_name, + COUNT(*) AS n_rows, + SUM(( + NOT NULLIF(count_search_id, 0) IS NULL AND NULLIF(count_search_id, 0) > 0 + )) AS sum_is_intra_season + FROM _t1 GROUP BY 1 ), _s17 AS ( diff --git a/tests/test_sql_refsols/epoch_intra_season_searches_mysql.sql b/tests/test_sql_refsols/epoch_intra_season_searches_mysql.sql index 4f19d94db..19c0198c5 100644 --- a/tests/test_sql_refsols/epoch_intra_season_searches_mysql.sql +++ b/tests/test_sql_refsols/epoch_intra_season_searches_mysql.sql @@ -13,8 +13,7 @@ WITH _s0 AS ( ), _s9 AS ( SELECT _s2.s_name, - SEARCHES.search_id, - COUNT(*) AS n_rows + SEARCHES.search_id FROM _s0 AS _s2 JOIN SEARCHES AS SEARCHES ON _s2.s_month1 = EXTRACT(MONTH FROM CAST(SEARCHES.search_ts AS DATETIME)) @@ -29,16 +28,10 @@ WITH _s0 AS ( OR _s7.s_month2 = EXTRACT(MONTH FROM CAST(_s5.ev_dt AS DATETIME)) OR _s7.s_month3 = EXTRACT(MONTH FROM CAST(_s5.ev_dt AS DATETIME)) ) - GROUP BY - 1, - 2 -), _s16 AS ( +), _t1 AS ( SELECT _s0.s_name, - COUNT(*) AS n_rows, - SUM(( - NOT _s9.n_rows IS NULL AND _s9.n_rows > 0 - )) AS sum_is_intra_season + COUNT(_s9.search_id) AS count_search_id FROM _s0 AS _s0 JOIN SEARCHES AS SEARCHES ON _s0.s_month1 = EXTRACT(MONTH FROM CAST(SEARCHES.search_ts AS DATETIME)) @@ -46,6 +39,17 @@ WITH _s0 AS ( OR _s0.s_month3 = EXTRACT(MONTH FROM CAST(SEARCHES.search_ts AS DATETIME)) LEFT JOIN _s9 AS _s9 ON SEARCHES.search_id = _s9.search_id AND _s0.s_name = _s9.s_name + GROUP BY + SEARCHES.search_id, + 1 +), _s16 AS ( + SELECT + s_name, + COUNT(*) AS n_rows, + SUM(( + NOT NULLIF(count_search_id, 0) IS NULL AND NULLIF(count_search_id, 0) > 0 + )) AS sum_is_intra_season + FROM _t1 GROUP BY 1 ), _s17 AS ( diff --git a/tests/test_sql_refsols/epoch_intra_season_searches_postgres.sql b/tests/test_sql_refsols/epoch_intra_season_searches_postgres.sql index 1d2372745..d090f9eeb 100644 --- a/tests/test_sql_refsols/epoch_intra_season_searches_postgres.sql +++ b/tests/test_sql_refsols/epoch_intra_season_searches_postgres.sql @@ -13,8 +13,7 @@ WITH _s0 AS ( ), _s9 AS ( SELECT _s2.s_name, - searches.search_id, - COUNT(*) AS n_rows + searches.search_id FROM _s0 AS _s2 JOIN searches AS searches ON _s2.s_month1 = EXTRACT(MONTH FROM CAST(searches.search_ts AS TIMESTAMP)) @@ -29,16 +28,10 @@ WITH _s0 AS ( OR _s7.s_month2 = EXTRACT(MONTH FROM CAST(_s5.ev_dt AS TIMESTAMP)) OR _s7.s_month3 = EXTRACT(MONTH FROM CAST(_s5.ev_dt AS TIMESTAMP)) ) - GROUP BY - 1, - 2 -), _s16 AS ( +), _t1 AS ( SELECT _s0.s_name, - COUNT(*) AS n_rows, - SUM(CASE WHEN ( - NOT _s9.n_rows IS NULL AND _s9.n_rows > 0 - ) THEN 1 ELSE 0 END) AS sum_is_intra_season + COUNT(_s9.search_id) AS count_search_id FROM _s0 AS _s0 JOIN searches AS searches ON _s0.s_month1 = EXTRACT(MONTH FROM CAST(searches.search_ts AS TIMESTAMP)) @@ -46,6 +39,23 @@ WITH _s0 AS ( OR _s0.s_month3 = EXTRACT(MONTH FROM CAST(searches.search_ts AS TIMESTAMP)) LEFT JOIN _s9 AS _s9 ON _s0.s_name = _s9.s_name AND _s9.search_id = searches.search_id + GROUP BY + searches.search_id, + 1 +), _s16 AS ( + SELECT + s_name, + COUNT(*) AS n_rows, + SUM( + CASE + WHEN ( + NOT NULLIF(count_search_id, 0) IS NULL AND NULLIF(count_search_id, 0) > 0 + ) + THEN 1 + ELSE 0 + END + ) AS sum_is_intra_season + FROM _t1 GROUP BY 1 ), _s17 AS ( diff --git a/tests/test_sql_refsols/epoch_intra_season_searches_snowflake.sql b/tests/test_sql_refsols/epoch_intra_season_searches_snowflake.sql index 0f4672297..c9418b406 100644 --- a/tests/test_sql_refsols/epoch_intra_season_searches_snowflake.sql +++ b/tests/test_sql_refsols/epoch_intra_season_searches_snowflake.sql @@ -13,8 +13,7 @@ WITH _s0 AS ( ), _s9 AS ( SELECT _s2.s_name, - searches.search_id, - COUNT(*) AS n_rows + searches.search_id FROM _s0 AS _s2 JOIN searches AS searches ON _s2.s_month1 = MONTH(CAST(searches.search_ts AS TIMESTAMP)) @@ -29,16 +28,10 @@ WITH _s0 AS ( OR _s7.s_month2 = MONTH(CAST(_s5.ev_dt AS TIMESTAMP)) OR _s7.s_month3 = MONTH(CAST(_s5.ev_dt AS TIMESTAMP)) ) - GROUP BY - 1, - 2 -), _s16 AS ( +), _t1 AS ( SELECT _s0.s_name, - COUNT(*) AS n_rows, - COUNT_IF(( - NOT _s9.n_rows IS NULL AND _s9.n_rows > 0 - )) AS sum_is_intra_season + COUNT(_s9.search_id) AS count_search_id FROM _s0 AS _s0 JOIN searches AS searches ON _s0.s_month1 = MONTH(CAST(searches.search_ts AS TIMESTAMP)) @@ -46,6 +39,17 @@ WITH _s0 AS ( OR _s0.s_month3 = MONTH(CAST(searches.search_ts AS TIMESTAMP)) LEFT JOIN _s9 AS _s9 ON _s0.s_name = _s9.s_name AND _s9.search_id = searches.search_id + GROUP BY + searches.search_id, + 1 +), _s16 AS ( + SELECT + s_name, + COUNT(*) AS n_rows, + COUNT_IF(( + NOT NULLIF(count_search_id, 0) IS NULL AND NULLIF(count_search_id, 0) > 0 + )) AS sum_is_intra_season + FROM _t1 GROUP BY 1 ), _s17 AS ( diff --git a/tests/test_sql_refsols/epoch_intra_season_searches_sqlite.sql b/tests/test_sql_refsols/epoch_intra_season_searches_sqlite.sql index c2f6d6642..6b664ade5 100644 --- a/tests/test_sql_refsols/epoch_intra_season_searches_sqlite.sql +++ b/tests/test_sql_refsols/epoch_intra_season_searches_sqlite.sql @@ -13,8 +13,7 @@ WITH _s0 AS ( ), _s9 AS ( SELECT _s2.s_name, - searches.search_id, - COUNT(*) AS n_rows + searches.search_id FROM _s0 AS _s2 JOIN searches AS searches ON _s2.s_month1 = CAST(STRFTIME('%m', searches.search_ts) AS INTEGER) @@ -31,16 +30,10 @@ WITH _s0 AS ( OR _s7.s_month2 = CAST(STRFTIME('%m', _s5.ev_dt) AS INTEGER) OR _s7.s_month3 = CAST(STRFTIME('%m', _s5.ev_dt) AS INTEGER) ) - GROUP BY - 1, - 2 -), _s16 AS ( +), _t1 AS ( SELECT _s0.s_name, - COUNT(*) AS n_rows, - SUM(( - NOT _s9.n_rows IS NULL AND _s9.n_rows > 0 - )) AS sum_is_intra_season + COUNT(_s9.search_id) AS count_search_id FROM _s0 AS _s0 JOIN searches AS searches ON _s0.s_month1 = CAST(STRFTIME('%m', searches.search_ts) AS INTEGER) @@ -48,6 +41,17 @@ WITH _s0 AS ( OR _s0.s_month3 = CAST(STRFTIME('%m', searches.search_ts) AS INTEGER) LEFT JOIN _s9 AS _s9 ON _s0.s_name = _s9.s_name AND _s9.search_id = searches.search_id + GROUP BY + searches.search_id, + 1 +), _s16 AS ( + SELECT + s_name, + COUNT(*) AS n_rows, + SUM(( + NOT NULLIF(count_search_id, 0) IS NULL AND NULLIF(count_search_id, 0) > 0 + )) AS sum_is_intra_season + FROM _t1 GROUP BY 1 ), _s17 AS ( diff --git a/tests/test_sql_refsols/health_first_patient_by_coverage_type_raw_snowflake.sql b/tests/test_sql_refsols/health_first_patient_by_coverage_type_raw_snowflake.sql index 315a54897..9d2ce7b2f 100644 --- a/tests/test_sql_refsols/health_first_patient_by_coverage_type_raw_snowflake.sql +++ b/tests/test_sql_refsols/health_first_patient_by_coverage_type_raw_snowflake.sql @@ -39,6 +39,6 @@ SELECT max_anything_unmask_date_of_birth AS date_of_birth FROM _t0 WHERE - sum_n_rows > 0 + sum_n_rows <> 0 ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/health_first_patient_by_coverage_type_rewrite_snowflake.sql b/tests/test_sql_refsols/health_first_patient_by_coverage_type_rewrite_snowflake.sql index 315a54897..9d2ce7b2f 100644 --- a/tests/test_sql_refsols/health_first_patient_by_coverage_type_rewrite_snowflake.sql +++ b/tests/test_sql_refsols/health_first_patient_by_coverage_type_rewrite_snowflake.sql @@ -39,6 +39,6 @@ SELECT max_anything_unmask_date_of_birth AS date_of_birth FROM _t0 WHERE - sum_n_rows > 0 + sum_n_rows <> 0 ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/nation_acctbal_breakdown_ansi.sql b/tests/test_sql_refsols/nation_acctbal_breakdown_ansi.sql index 61fe15fea..939a6e155 100644 --- a/tests/test_sql_refsols/nation_acctbal_breakdown_ansi.sql +++ b/tests/test_sql_refsols/nation_acctbal_breakdown_ansi.sql @@ -1,26 +1,16 @@ -WITH _s3 AS ( - SELECT - c_nationkey, - COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS count_negative_acctbal, - COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS count_non_negative_acctbal, - MEDIAN(c_acctbal) AS median_c_acctbal, - MEDIAN(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS median_negative_acctbal, - MEDIAN(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS median_non_negative_acctbal - FROM tpch.customer - GROUP BY - 1 -) SELECT - nation.n_name AS nation_name, - _s3.count_negative_acctbal AS n_red_acctbal, - _s3.count_non_negative_acctbal AS n_black_acctbal, - _s3.median_negative_acctbal AS median_red_acctbal, - _s3.median_non_negative_acctbal AS median_black_acctbal, - _s3.median_c_acctbal AS median_overall_acctbal + ANY_VALUE(nation.n_name) AS nation_name, + COUNT(CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END) AS n_red_acctbal, + COUNT(CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END) AS n_black_acctbal, + MEDIAN(CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END) AS median_red_acctbal, + MEDIAN(CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END) AS median_black_acctbal, + MEDIAN(customer.c_acctbal) AS median_overall_acctbal FROM tpch.nation AS nation JOIN tpch.region AS region ON nation.n_regionkey = region.r_regionkey AND region.r_name = 'AMERICA' -JOIN _s3 AS _s3 - ON _s3.c_nationkey = nation.n_nationkey +JOIN tpch.customer AS customer + ON customer.c_nationkey = nation.n_nationkey +GROUP BY + customer.c_nationkey ORDER BY 1 diff --git a/tests/test_sql_refsols/nation_acctbal_breakdown_mysql.sql b/tests/test_sql_refsols/nation_acctbal_breakdown_mysql.sql index c4225e2bb..85a03e7e5 100644 --- a/tests/test_sql_refsols/nation_acctbal_breakdown_mysql.sql +++ b/tests/test_sql_refsols/nation_acctbal_breakdown_mysql.sql @@ -1,70 +1,62 @@ -WITH _t2 AS ( +WITH _t1 AS ( SELECT - c_acctbal, - c_nationkey, + CUSTOMER.c_acctbal, + CUSTOMER.c_nationkey, + NATION.n_name, CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY c_nationkey ORDER BY CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END DESC) - 1.0 + ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY CASE WHEN CUSTOMER.c_acctbal >= 0 THEN CUSTOMER.c_acctbal ELSE NULL END DESC) - 1.0 ) - ( ( - COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) OVER (PARTITION BY c_nationkey) - 1.0 + COUNT(CASE WHEN CUSTOMER.c_acctbal >= 0 THEN CUSTOMER.c_acctbal ELSE NULL END) OVER (PARTITION BY CUSTOMER.c_nationkey) - 1.0 ) / 2.0 ) ) < 1.0 - THEN CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END + THEN CASE WHEN CUSTOMER.c_acctbal >= 0 THEN CUSTOMER.c_acctbal ELSE NULL END ELSE NULL END AS expr_5, CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY c_nationkey ORDER BY c_acctbal DESC) - 1.0 + ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY CUSTOMER.c_acctbal DESC) - 1.0 ) - ( ( - COUNT(c_acctbal) OVER (PARTITION BY c_nationkey) - 1.0 + COUNT(CUSTOMER.c_acctbal) OVER (PARTITION BY CUSTOMER.c_nationkey) - 1.0 ) / 2.0 ) ) < 1.0 - THEN c_acctbal + THEN CUSTOMER.c_acctbal ELSE NULL END AS expr_6, CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY c_nationkey ORDER BY CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END DESC) - 1.0 + ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY CASE WHEN CUSTOMER.c_acctbal < 0 THEN CUSTOMER.c_acctbal ELSE NULL END DESC) - 1.0 ) - ( ( - COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) OVER (PARTITION BY c_nationkey) - 1.0 + COUNT(CASE WHEN CUSTOMER.c_acctbal < 0 THEN CUSTOMER.c_acctbal ELSE NULL END) OVER (PARTITION BY CUSTOMER.c_nationkey) - 1.0 ) / 2.0 ) ) < 1.0 - THEN CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END + THEN CASE WHEN CUSTOMER.c_acctbal < 0 THEN CUSTOMER.c_acctbal ELSE NULL END ELSE NULL END AS expr_7 - FROM tpch.CUSTOMER -), _s3 AS ( - SELECT - c_nationkey, - AVG(expr_5) AS avg_expr_5, - AVG(expr_6) AS avg_expr_6, - AVG(expr_7) AS avg_expr_7, - COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS count_negative_acctbal, - COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS count_non_negative_acctbal - FROM _t2 - GROUP BY - 1 + FROM tpch.NATION AS NATION + JOIN tpch.REGION AS REGION + ON NATION.n_regionkey = REGION.r_regionkey AND REGION.r_name = 'AMERICA' + JOIN tpch.CUSTOMER AS CUSTOMER + ON CUSTOMER.c_nationkey = NATION.n_nationkey ) SELECT - NATION.n_name COLLATE utf8mb4_bin AS nation_name, - _s3.count_negative_acctbal AS n_red_acctbal, - _s3.count_non_negative_acctbal AS n_black_acctbal, - _s3.avg_expr_7 AS median_red_acctbal, - _s3.avg_expr_5 AS median_black_acctbal, - _s3.avg_expr_6 AS median_overall_acctbal -FROM tpch.NATION AS NATION -JOIN tpch.REGION AS REGION - ON NATION.n_regionkey = REGION.r_regionkey AND REGION.r_name = 'AMERICA' -JOIN _s3 AS _s3 - ON NATION.n_nationkey = _s3.c_nationkey + ANY_VALUE(n_name) COLLATE utf8mb4_bin AS nation_name, + COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS n_red_acctbal, + COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS n_black_acctbal, + AVG(expr_7) AS median_red_acctbal, + AVG(expr_5) AS median_black_acctbal, + AVG(expr_6) AS median_overall_acctbal +FROM _t1 +GROUP BY + c_nationkey ORDER BY 1 diff --git a/tests/test_sql_refsols/nation_acctbal_breakdown_postgres.sql b/tests/test_sql_refsols/nation_acctbal_breakdown_postgres.sql index 813210501..6b44688e2 100644 --- a/tests/test_sql_refsols/nation_acctbal_breakdown_postgres.sql +++ b/tests/test_sql_refsols/nation_acctbal_breakdown_postgres.sql @@ -1,29 +1,19 @@ -WITH _s3 AS ( - SELECT - c_nationkey, - COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS count_negative_acctbal, - COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS count_non_negative_acctbal, - PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY - c_acctbal) AS median_c_acctbal, - PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY - CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS median_negative_acctbal, - PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY - CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS median_non_negative_acctbal - FROM tpch.customer - GROUP BY - 1 -) SELECT - nation.n_name AS nation_name, - _s3.count_negative_acctbal AS n_red_acctbal, - _s3.count_non_negative_acctbal AS n_black_acctbal, - _s3.median_negative_acctbal AS median_red_acctbal, - _s3.median_non_negative_acctbal AS median_black_acctbal, - _s3.median_c_acctbal AS median_overall_acctbal + MAX(nation.n_name) AS nation_name, + COUNT(CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END) AS n_red_acctbal, + COUNT(CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END) AS n_black_acctbal, + PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY + CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END) AS median_red_acctbal, + PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY + CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END) AS median_black_acctbal, + PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY + customer.c_acctbal) AS median_overall_acctbal FROM tpch.nation AS nation JOIN tpch.region AS region ON nation.n_regionkey = region.r_regionkey AND region.r_name = 'AMERICA' -JOIN _s3 AS _s3 - ON _s3.c_nationkey = nation.n_nationkey +JOIN tpch.customer AS customer + ON customer.c_nationkey = nation.n_nationkey +GROUP BY + customer.c_nationkey ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/nation_acctbal_breakdown_snowflake.sql b/tests/test_sql_refsols/nation_acctbal_breakdown_snowflake.sql index 6704d705e..8096e2aa4 100644 --- a/tests/test_sql_refsols/nation_acctbal_breakdown_snowflake.sql +++ b/tests/test_sql_refsols/nation_acctbal_breakdown_snowflake.sql @@ -1,26 +1,16 @@ -WITH _s3 AS ( - SELECT - c_nationkey, - COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS count_negative_acctbal, - COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS count_non_negative_acctbal, - MEDIAN(c_acctbal) AS median_c_acctbal, - MEDIAN(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS median_negative_acctbal, - MEDIAN(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS median_non_negative_acctbal - FROM tpch.customer - GROUP BY - 1 -) SELECT - nation.n_name AS nation_name, - _s3.count_negative_acctbal AS n_red_acctbal, - _s3.count_non_negative_acctbal AS n_black_acctbal, - _s3.median_negative_acctbal AS median_red_acctbal, - _s3.median_non_negative_acctbal AS median_black_acctbal, - _s3.median_c_acctbal AS median_overall_acctbal + ANY_VALUE(nation.n_name) AS nation_name, + COUNT(CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END) AS n_red_acctbal, + COUNT(CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END) AS n_black_acctbal, + MEDIAN(CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END) AS median_red_acctbal, + MEDIAN(CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END) AS median_black_acctbal, + MEDIAN(customer.c_acctbal) AS median_overall_acctbal FROM tpch.nation AS nation JOIN tpch.region AS region ON nation.n_regionkey = region.r_regionkey AND region.r_name = 'AMERICA' -JOIN _s3 AS _s3 - ON _s3.c_nationkey = nation.n_nationkey +JOIN tpch.customer AS customer + ON customer.c_nationkey = nation.n_nationkey +GROUP BY + customer.c_nationkey ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/nation_acctbal_breakdown_sqlite.sql b/tests/test_sql_refsols/nation_acctbal_breakdown_sqlite.sql index 46df14df7..a64ebcc8e 100644 --- a/tests/test_sql_refsols/nation_acctbal_breakdown_sqlite.sql +++ b/tests/test_sql_refsols/nation_acctbal_breakdown_sqlite.sql @@ -1,70 +1,62 @@ -WITH _t2 AS ( +WITH _t1 AS ( SELECT - c_acctbal, - c_nationkey, + customer.c_acctbal, + customer.c_nationkey, + nation.n_name, CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY c_nationkey ORDER BY CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END DESC) - 1.0 + ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END DESC) - 1.0 ) - ( CAST(( - COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) OVER (PARTITION BY c_nationkey) - 1.0 + COUNT(CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END) OVER (PARTITION BY customer.c_nationkey) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 - THEN CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END + THEN CASE WHEN customer.c_acctbal >= 0 THEN customer.c_acctbal ELSE NULL END ELSE NULL END AS expr_5, CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY c_nationkey ORDER BY c_acctbal DESC) - 1.0 + ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY customer.c_acctbal DESC) - 1.0 ) - ( CAST(( - COUNT(c_acctbal) OVER (PARTITION BY c_nationkey) - 1.0 + COUNT(customer.c_acctbal) OVER (PARTITION BY customer.c_nationkey) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 - THEN c_acctbal + THEN customer.c_acctbal ELSE NULL END AS expr_6, CASE WHEN ABS( ( - ROW_NUMBER() OVER (PARTITION BY c_nationkey ORDER BY CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END DESC) - 1.0 + ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END DESC) - 1.0 ) - ( CAST(( - COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) OVER (PARTITION BY c_nationkey) - 1.0 + COUNT(CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END) OVER (PARTITION BY customer.c_nationkey) - 1.0 ) AS REAL) / 2.0 ) ) < 1.0 - THEN CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END + THEN CASE WHEN customer.c_acctbal < 0 THEN customer.c_acctbal ELSE NULL END ELSE NULL END AS expr_7 - FROM tpch.customer -), _s3 AS ( - SELECT - c_nationkey, - AVG(expr_5) AS avg_expr_5, - AVG(expr_6) AS avg_expr_6, - AVG(expr_7) AS avg_expr_7, - COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS count_negative_acctbal, - COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS count_non_negative_acctbal - FROM _t2 - GROUP BY - 1 + FROM tpch.nation AS nation + JOIN tpch.region AS region + ON nation.n_regionkey = region.r_regionkey AND region.r_name = 'AMERICA' + JOIN tpch.customer AS customer + ON customer.c_nationkey = nation.n_nationkey ) SELECT - nation.n_name AS nation_name, - _s3.count_negative_acctbal AS n_red_acctbal, - _s3.count_non_negative_acctbal AS n_black_acctbal, - _s3.avg_expr_7 AS median_red_acctbal, - _s3.avg_expr_5 AS median_black_acctbal, - _s3.avg_expr_6 AS median_overall_acctbal -FROM tpch.nation AS nation -JOIN tpch.region AS region - ON nation.n_regionkey = region.r_regionkey AND region.r_name = 'AMERICA' -JOIN _s3 AS _s3 - ON _s3.c_nationkey = nation.n_nationkey + MAX(n_name) AS nation_name, + COUNT(CASE WHEN c_acctbal < 0 THEN c_acctbal ELSE NULL END) AS n_red_acctbal, + COUNT(CASE WHEN c_acctbal >= 0 THEN c_acctbal ELSE NULL END) AS n_black_acctbal, + AVG(expr_7) AS median_red_acctbal, + AVG(expr_5) AS median_black_acctbal, + AVG(expr_6) AS median_overall_acctbal +FROM _t1 +GROUP BY + c_nationkey ORDER BY 1 diff --git a/tests/test_sql_refsols/quantile_test_2_ansi.sql b/tests/test_sql_refsols/quantile_test_2_ansi.sql index 4ba2e6135..30c89063e 100644 --- a/tests/test_sql_refsols/quantile_test_2_ansi.sql +++ b/tests/test_sql_refsols/quantile_test_2_ansi.sql @@ -10,47 +10,39 @@ WITH _s0 AS ( ), _s5 AS ( SELECT customer.c_nationkey, - PERCENTILE_DISC(0.1) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_0, - PERCENTILE_DISC(0.01) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_1, - PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_2, - PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_3, - PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_4, - PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_5, - PERCENTILE_DISC(1.0) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_6, - PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_7, - PERCENTILE_DISC(0.0) WITHIN GROUP (ORDER BY - orders.o_totalprice NULLS LAST) AS agg_8 + orders.o_totalprice FROM tpch.customer AS customer JOIN tpch.orders AS orders ON EXTRACT(YEAR FROM CAST(orders.o_orderdate AS DATETIME)) = 1998 AND customer.c_custkey = orders.o_custkey - GROUP BY - 1 ) SELECT - region.r_name AS region_name, - _s0.n_name AS nation_name, - _s5.agg_8 AS orders_min, - _s5.agg_1 AS orders_1_percent, - _s5.agg_0 AS orders_10_percent, - _s5.agg_2 AS orders_25_percent, - _s5.agg_7 AS orders_median, - _s5.agg_3 AS orders_75_percent, - _s5.agg_4 AS orders_90_percent, - _s5.agg_5 AS orders_99_percent, - _s5.agg_6 AS orders_max + ANY_VALUE(region.r_name) AS region_name, + ANY_VALUE(_s0.n_name) AS nation_name, + PERCENTILE_DISC(0.0) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_min, + PERCENTILE_DISC(0.01) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_1_percent, + PERCENTILE_DISC(0.1) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_10_percent, + PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_25_percent, + PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_median, + PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_75_percent, + PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_90_percent, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_99_percent, + PERCENTILE_DISC(1.0) WITHIN GROUP (ORDER BY + _s5.o_totalprice NULLS LAST) AS orders_max FROM _s0 AS _s0 JOIN tpch.region AS region ON _s0.n_regionkey = region.r_regionkey LEFT JOIN _s5 AS _s5 ON _s0.n_nationkey = _s5.c_nationkey +GROUP BY + _s0.n_nationkey ORDER BY 2 diff --git a/tests/test_sql_refsols/quantile_test_2_mysql.sql b/tests/test_sql_refsols/quantile_test_2_mysql.sql index a406ab474..fed259c26 100644 --- a/tests/test_sql_refsols/quantile_test_2_mysql.sql +++ b/tests/test_sql_refsols/quantile_test_2_mysql.sql @@ -7,110 +7,101 @@ WITH _s0 AS ( ORDER BY 1 LIMIT 5 -), _t2 AS ( +), _s5 AS ( SELECT CUSTOMER.c_nationkey, - ORDERS.o_totalprice, + ORDERS.o_totalprice + FROM tpch.CUSTOMER AS CUSTOMER + JOIN tpch.ORDERS AS ORDERS + ON CUSTOMER.c_custkey = ORDERS.o_custkey + AND EXTRACT(YEAR FROM CAST(ORDERS.o_orderdate AS DATETIME)) = 1998 +), _t1 AS ( + SELECT + _s0.n_name, + _s0.n_nationkey, + _s5.o_totalprice, + REGION.r_name, CASE WHEN TRUNCATE( - CAST(0.99 * COUNT(ORDERS.o_totalprice) OVER (PARTITION BY CUSTOMER.c_nationkey) AS FLOAT), + CAST(0.99 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY ORDERS.o_totalprice DESC) - THEN ORDERS.o_totalprice + ) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_10, CASE WHEN TRUNCATE( - CAST(0.75 * COUNT(ORDERS.o_totalprice) OVER (PARTITION BY CUSTOMER.c_nationkey) AS FLOAT), + CAST(0.75 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY ORDERS.o_totalprice DESC) - THEN ORDERS.o_totalprice + ) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_11, CASE WHEN TRUNCATE( - CAST(0.25 * COUNT(ORDERS.o_totalprice) OVER (PARTITION BY CUSTOMER.c_nationkey) AS FLOAT), + CAST(0.25 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY ORDERS.o_totalprice DESC) - THEN ORDERS.o_totalprice + ) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_12, CASE WHEN TRUNCATE( - CAST(0.09999999999999998 * COUNT(ORDERS.o_totalprice) OVER (PARTITION BY CUSTOMER.c_nationkey) AS FLOAT), + CAST(0.09999999999999998 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY ORDERS.o_totalprice DESC) - THEN ORDERS.o_totalprice + ) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_13, CASE WHEN TRUNCATE( - CAST(0.010000000000000009 * COUNT(ORDERS.o_totalprice) OVER (PARTITION BY CUSTOMER.c_nationkey) AS FLOAT), + CAST(0.010000000000000009 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY ORDERS.o_totalprice DESC) - THEN ORDERS.o_totalprice + ) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_14, CASE WHEN TRUNCATE( - CAST(0.5 * COUNT(ORDERS.o_totalprice) OVER (PARTITION BY CUSTOMER.c_nationkey) AS FLOAT), + CAST(0.5 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY ORDERS.o_totalprice DESC) - THEN ORDERS.o_totalprice + ) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_16, CASE - WHEN TRUNCATE( - CAST(COUNT(ORDERS.o_totalprice) OVER (PARTITION BY CUSTOMER.c_nationkey) AS FLOAT), - 0 - ) < ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY ORDERS.o_totalprice DESC) - THEN ORDERS.o_totalprice + WHEN TRUNCATE(CAST(COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS FLOAT), 0) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_17, CASE WHEN TRUNCATE( - CAST(0.9 * COUNT(ORDERS.o_totalprice) OVER (PARTITION BY CUSTOMER.c_nationkey) AS FLOAT), + CAST(0.9 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS FLOAT), 0 - ) < ROW_NUMBER() OVER (PARTITION BY CUSTOMER.c_nationkey ORDER BY ORDERS.o_totalprice DESC) - THEN ORDERS.o_totalprice + ) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_9 - FROM tpch.CUSTOMER AS CUSTOMER - JOIN tpch.ORDERS AS ORDERS - ON CUSTOMER.c_custkey = ORDERS.o_custkey - AND EXTRACT(YEAR FROM CAST(ORDERS.o_orderdate AS DATETIME)) = 1998 -), _s5 AS ( - SELECT - c_nationkey, - MAX(expr_10) AS max_expr_10, - MAX(expr_11) AS max_expr_11, - MAX(expr_12) AS max_expr_12, - MAX(expr_13) AS max_expr_13, - MAX(expr_14) AS max_expr_14, - MAX(expr_16) AS max_expr_16, - MAX(expr_17) AS max_expr_17, - MAX(expr_9) AS max_expr_9, - MAX(o_totalprice) AS max_o_totalprice - FROM _t2 - GROUP BY - 1 + FROM _s0 AS _s0 + JOIN tpch.REGION AS REGION + ON REGION.r_regionkey = _s0.n_regionkey + LEFT JOIN _s5 AS _s5 + ON _s0.n_nationkey = _s5.c_nationkey ) SELECT - REGION.r_name AS region_name, - _s0.n_name COLLATE utf8mb4_bin AS nation_name, - _s5.max_expr_17 AS orders_min, - _s5.max_expr_10 AS orders_1_percent, - _s5.max_expr_9 AS orders_10_percent, - _s5.max_expr_11 AS orders_25_percent, - _s5.max_expr_16 AS orders_median, - _s5.max_expr_12 AS orders_75_percent, - _s5.max_expr_13 AS orders_90_percent, - _s5.max_expr_14 AS orders_99_percent, - _s5.max_o_totalprice AS orders_max -FROM _s0 AS _s0 -JOIN tpch.REGION AS REGION - ON REGION.r_regionkey = _s0.n_regionkey -LEFT JOIN _s5 AS _s5 - ON _s0.n_nationkey = _s5.c_nationkey + ANY_VALUE(r_name) AS region_name, + ANY_VALUE(n_name) COLLATE utf8mb4_bin AS nation_name, + MAX(expr_17) AS orders_min, + MAX(expr_10) AS orders_1_percent, + MAX(expr_9) AS orders_10_percent, + MAX(expr_11) AS orders_25_percent, + MAX(expr_16) AS orders_median, + MAX(expr_12) AS orders_75_percent, + MAX(expr_13) AS orders_90_percent, + MAX(expr_14) AS orders_99_percent, + MAX(o_totalprice) AS orders_max +FROM _t1 +GROUP BY + n_nationkey ORDER BY 2 diff --git a/tests/test_sql_refsols/quantile_test_2_postgres.sql b/tests/test_sql_refsols/quantile_test_2_postgres.sql index 0f38ecac2..3ed701633 100644 --- a/tests/test_sql_refsols/quantile_test_2_postgres.sql +++ b/tests/test_sql_refsols/quantile_test_2_postgres.sql @@ -10,47 +10,39 @@ WITH _s0 AS ( ), _s5 AS ( SELECT customer.c_nationkey, - PERCENTILE_DISC(0.1) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_0, - PERCENTILE_DISC(0.01) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_1, - PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_2, - PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_3, - PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_4, - PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_5, - PERCENTILE_DISC(1.0) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_6, - PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_7, - PERCENTILE_DISC(0.0) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_8 + orders.o_totalprice FROM tpch.customer AS customer JOIN tpch.orders AS orders ON EXTRACT(YEAR FROM CAST(orders.o_orderdate AS TIMESTAMP)) = 1998 AND customer.c_custkey = orders.o_custkey - GROUP BY - 1 ) SELECT - region.r_name AS region_name, - _s0.n_name AS nation_name, - _s5.agg_8 AS orders_min, - _s5.agg_1 AS orders_1_percent, - _s5.agg_0 AS orders_10_percent, - _s5.agg_2 AS orders_25_percent, - _s5.agg_7 AS orders_median, - _s5.agg_3 AS orders_75_percent, - _s5.agg_4 AS orders_90_percent, - _s5.agg_5 AS orders_99_percent, - _s5.agg_6 AS orders_max + MAX(region.r_name) AS region_name, + MAX(_s0.n_name) AS nation_name, + PERCENTILE_DISC(0.0) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_min, + PERCENTILE_DISC(0.01) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_1_percent, + PERCENTILE_DISC(0.1) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_10_percent, + PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_25_percent, + PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_median, + PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_75_percent, + PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_90_percent, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_99_percent, + PERCENTILE_DISC(1.0) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_max FROM _s0 AS _s0 JOIN tpch.region AS region ON _s0.n_regionkey = region.r_regionkey LEFT JOIN _s5 AS _s5 ON _s0.n_nationkey = _s5.c_nationkey +GROUP BY + _s0.n_nationkey ORDER BY 2 NULLS FIRST diff --git a/tests/test_sql_refsols/quantile_test_2_snowflake.sql b/tests/test_sql_refsols/quantile_test_2_snowflake.sql index ab146d061..dc89969a2 100644 --- a/tests/test_sql_refsols/quantile_test_2_snowflake.sql +++ b/tests/test_sql_refsols/quantile_test_2_snowflake.sql @@ -10,47 +10,39 @@ WITH _s0 AS ( ), _s5 AS ( SELECT customer.c_nationkey, - PERCENTILE_DISC(0.1) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_0, - PERCENTILE_DISC(0.01) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_1, - PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_2, - PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_3, - PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_4, - PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_5, - PERCENTILE_DISC(1.0) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_6, - PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_7, - PERCENTILE_DISC(0.0) WITHIN GROUP (ORDER BY - orders.o_totalprice) AS agg_8 + orders.o_totalprice FROM tpch.customer AS customer JOIN tpch.orders AS orders ON YEAR(CAST(orders.o_orderdate AS TIMESTAMP)) = 1998 AND customer.c_custkey = orders.o_custkey - GROUP BY - 1 ) SELECT - region.r_name AS region_name, - _s0.n_name AS nation_name, - _s5.agg_8 AS orders_min, - _s5.agg_1 AS orders_1_percent, - _s5.agg_0 AS orders_10_percent, - _s5.agg_2 AS orders_25_percent, - _s5.agg_7 AS orders_median, - _s5.agg_3 AS orders_75_percent, - _s5.agg_4 AS orders_90_percent, - _s5.agg_5 AS orders_99_percent, - _s5.agg_6 AS orders_max + ANY_VALUE(region.r_name) AS region_name, + ANY_VALUE(_s0.n_name) AS nation_name, + PERCENTILE_DISC(0.0) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_min, + PERCENTILE_DISC(0.01) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_1_percent, + PERCENTILE_DISC(0.1) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_10_percent, + PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_25_percent, + PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_median, + PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_75_percent, + PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_90_percent, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_99_percent, + PERCENTILE_DISC(1.0) WITHIN GROUP (ORDER BY + _s5.o_totalprice) AS orders_max FROM _s0 AS _s0 JOIN tpch.region AS region ON _s0.n_regionkey = region.r_regionkey LEFT JOIN _s5 AS _s5 ON _s0.n_nationkey = _s5.c_nationkey +GROUP BY + _s0.n_nationkey ORDER BY 2 NULLS FIRST diff --git a/tests/test_sql_refsols/quantile_test_2_sqlite.sql b/tests/test_sql_refsols/quantile_test_2_sqlite.sql index 4f083adf1..ed39f3e35 100644 --- a/tests/test_sql_refsols/quantile_test_2_sqlite.sql +++ b/tests/test_sql_refsols/quantile_test_2_sqlite.sql @@ -7,86 +7,80 @@ WITH _s0 AS ( ORDER BY 1 LIMIT 5 -), _t1 AS ( +), _s5 AS ( SELECT customer.c_nationkey, - orders.o_totalprice, + orders.o_totalprice + FROM tpch.customer AS customer + JOIN tpch.orders AS orders + ON CAST(STRFTIME('%Y', orders.o_orderdate) AS INTEGER) = 1998 + AND customer.c_custkey = orders.o_custkey +), _t1 AS ( + SELECT + _s0.n_name, + _s0.n_nationkey, + _s5.o_totalprice, + region.r_name, CASE - WHEN CAST(0.99 * COUNT(orders.o_totalprice) OVER (PARTITION BY customer.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY orders.o_totalprice DESC) - THEN orders.o_totalprice + WHEN CAST(0.99 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_10, CASE - WHEN CAST(0.75 * COUNT(orders.o_totalprice) OVER (PARTITION BY customer.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY orders.o_totalprice DESC) - THEN orders.o_totalprice + WHEN CAST(0.75 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_11, CASE - WHEN CAST(0.25 * COUNT(orders.o_totalprice) OVER (PARTITION BY customer.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY orders.o_totalprice DESC) - THEN orders.o_totalprice + WHEN CAST(0.25 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_12, CASE - WHEN CAST(0.09999999999999998 * COUNT(orders.o_totalprice) OVER (PARTITION BY customer.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY orders.o_totalprice DESC) - THEN orders.o_totalprice + WHEN CAST(0.09999999999999998 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_13, CASE - WHEN CAST(0.010000000000000009 * COUNT(orders.o_totalprice) OVER (PARTITION BY customer.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY orders.o_totalprice DESC) - THEN orders.o_totalprice + WHEN CAST(0.010000000000000009 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_14, CASE - WHEN CAST(0.5 * COUNT(orders.o_totalprice) OVER (PARTITION BY customer.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY orders.o_totalprice DESC) - THEN orders.o_totalprice + WHEN CAST(0.5 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_16, CASE - WHEN CAST(COUNT(orders.o_totalprice) OVER (PARTITION BY customer.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY orders.o_totalprice DESC) - THEN orders.o_totalprice + WHEN CAST(COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_17, CASE - WHEN CAST(0.9 * COUNT(orders.o_totalprice) OVER (PARTITION BY customer.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY customer.c_nationkey ORDER BY orders.o_totalprice DESC) - THEN orders.o_totalprice + WHEN CAST(0.9 * COUNT(_s5.o_totalprice) OVER (PARTITION BY _s5.c_nationkey) AS INTEGER) < ROW_NUMBER() OVER (PARTITION BY _s5.c_nationkey ORDER BY _s5.o_totalprice DESC) + THEN _s5.o_totalprice ELSE NULL END AS expr_9 - FROM tpch.customer AS customer - JOIN tpch.orders AS orders - ON CAST(STRFTIME('%Y', orders.o_orderdate) AS INTEGER) = 1998 - AND customer.c_custkey = orders.o_custkey -), _s5 AS ( - SELECT - c_nationkey, - MAX(expr_10) AS max_expr_10, - MAX(expr_11) AS max_expr_11, - MAX(expr_12) AS max_expr_12, - MAX(expr_13) AS max_expr_13, - MAX(expr_14) AS max_expr_14, - MAX(expr_16) AS max_expr_16, - MAX(expr_17) AS max_expr_17, - MAX(expr_9) AS max_expr_9, - MAX(o_totalprice) AS max_o_totalprice - FROM _t1 - GROUP BY - 1 + FROM _s0 AS _s0 + JOIN tpch.region AS region + ON _s0.n_regionkey = region.r_regionkey + LEFT JOIN _s5 AS _s5 + ON _s0.n_nationkey = _s5.c_nationkey ) SELECT - region.r_name AS region_name, - _s0.n_name AS nation_name, - _s5.max_expr_17 AS orders_min, - _s5.max_expr_10 AS orders_1_percent, - _s5.max_expr_9 AS orders_10_percent, - _s5.max_expr_11 AS orders_25_percent, - _s5.max_expr_16 AS orders_median, - _s5.max_expr_12 AS orders_75_percent, - _s5.max_expr_13 AS orders_90_percent, - _s5.max_expr_14 AS orders_99_percent, - _s5.max_o_totalprice AS orders_max -FROM _s0 AS _s0 -JOIN tpch.region AS region - ON _s0.n_regionkey = region.r_regionkey -LEFT JOIN _s5 AS _s5 - ON _s0.n_nationkey = _s5.c_nationkey + MAX(r_name) AS region_name, + MAX(n_name) AS nation_name, + MAX(expr_17) AS orders_min, + MAX(expr_10) AS orders_1_percent, + MAX(expr_9) AS orders_10_percent, + MAX(expr_11) AS orders_25_percent, + MAX(expr_16) AS orders_median, + MAX(expr_12) AS orders_75_percent, + MAX(expr_13) AS orders_90_percent, + MAX(expr_14) AS orders_99_percent, + MAX(o_totalprice) AS orders_max +FROM _t1 +GROUP BY + n_nationkey ORDER BY 2 diff --git a/tests/test_sql_refsols/simple_var_std_ansi.sql b/tests/test_sql_refsols/simple_var_std_ansi.sql index b477025a8..3db44a93e 100644 --- a/tests/test_sql_refsols/simple_var_std_ansi.sql +++ b/tests/test_sql_refsols/simple_var_std_ansi.sql @@ -1,24 +1,15 @@ -WITH _s1 AS ( - SELECT - s_nationkey, - STDDEV_POP(s_acctbal) AS population_std_s_acctbal, - VARIANCE_POP(s_acctbal) AS population_var_s_acctbal, - STDDEV(s_acctbal) AS sample_std_s_acctbal, - VARIANCE(s_acctbal) AS sample_var_s_acctbal - FROM tpch.supplier - GROUP BY - 1 -) SELECT - nation.n_name AS name, - _s1.population_var_s_acctbal AS var, - _s1.population_std_s_acctbal AS std, - _s1.sample_var_s_acctbal AS sample_var, - _s1.sample_std_s_acctbal AS sample_std, - _s1.population_var_s_acctbal AS pop_var, - _s1.population_std_s_acctbal AS pop_std + ANY_VALUE(nation.n_name) AS name, + VARIANCE_POP(supplier.s_acctbal) AS var, + STDDEV_POP(supplier.s_acctbal) AS std, + VARIANCE(supplier.s_acctbal) AS sample_var, + STDDEV(supplier.s_acctbal) AS sample_std, + VARIANCE_POP(supplier.s_acctbal) AS pop_var, + STDDEV_POP(supplier.s_acctbal) AS pop_std FROM tpch.nation AS nation -JOIN _s1 AS _s1 - ON _s1.s_nationkey = nation.n_nationkey +JOIN tpch.supplier AS supplier + ON nation.n_nationkey = supplier.s_nationkey WHERE nation.n_name IN ('ALGERIA', 'ARGENTINA') +GROUP BY + supplier.s_nationkey diff --git a/tests/test_sql_refsols/simple_var_std_mysql.sql b/tests/test_sql_refsols/simple_var_std_mysql.sql index 0f6e38717..197dcc144 100644 --- a/tests/test_sql_refsols/simple_var_std_mysql.sql +++ b/tests/test_sql_refsols/simple_var_std_mysql.sql @@ -1,70 +1,82 @@ -WITH _s1 AS ( - SELECT - s_nationkey, - POWER( +SELECT + ANY_VALUE(NATION.n_name) AS name, + ( + SUM(( + POWER(SUPPLIER.s_acctbal, 2) + )) - ( ( - ( - SUM(( - POWER(s_acctbal, 2) - )) - ( - ( - POWER(SUM(s_acctbal), 2) - ) / COUNT(s_acctbal) - ) - ) / COUNT(s_acctbal) - ), - 0.5 - ) AS population_std_s_acctbal, + POWER(SUM(SUPPLIER.s_acctbal), 2) + ) / COUNT(SUPPLIER.s_acctbal) + ) + ) / COUNT(SUPPLIER.s_acctbal) AS var, + POWER( ( - SUM(( - POWER(s_acctbal, 2) - )) - ( - ( - POWER(SUM(s_acctbal), 2) - ) / COUNT(s_acctbal) - ) - ) / COUNT(s_acctbal) AS population_var_s_acctbal, - POWER( ( - ( - SUM(( - POWER(s_acctbal, 2) - )) - ( - ( - POWER(SUM(s_acctbal), 2) - ) / COUNT(s_acctbal) - ) - ) / ( - COUNT(s_acctbal) - 1 + SUM(( + POWER(SUPPLIER.s_acctbal, 2) + )) - ( + ( + POWER(SUM(SUPPLIER.s_acctbal), 2) + ) / COUNT(SUPPLIER.s_acctbal) ) - ), - 0.5 - ) AS sample_std_s_acctbal, + ) / COUNT(SUPPLIER.s_acctbal) + ), + 0.5 + ) AS std, + ( + SUM(( + POWER(SUPPLIER.s_acctbal, 2) + )) - ( + ( + POWER(SUM(SUPPLIER.s_acctbal), 2) + ) / COUNT(SUPPLIER.s_acctbal) + ) + ) / ( + COUNT(SUPPLIER.s_acctbal) - 1 + ) AS sample_var, + POWER( ( - SUM(( - POWER(s_acctbal, 2) - )) - ( - ( - POWER(SUM(s_acctbal), 2) - ) / COUNT(s_acctbal) + ( + SUM(( + POWER(SUPPLIER.s_acctbal, 2) + )) - ( + ( + POWER(SUM(SUPPLIER.s_acctbal), 2) + ) / COUNT(SUPPLIER.s_acctbal) + ) + ) / ( + COUNT(SUPPLIER.s_acctbal) - 1 ) - ) / ( - COUNT(s_acctbal) - 1 - ) AS sample_var_s_acctbal - FROM tpch.SUPPLIER - GROUP BY - 1 -) -SELECT - NATION.n_name AS name, - _s1.population_var_s_acctbal AS var, - _s1.population_std_s_acctbal AS std, - _s1.sample_var_s_acctbal AS sample_var, - _s1.sample_std_s_acctbal AS sample_std, - _s1.population_var_s_acctbal AS pop_var, - _s1.population_std_s_acctbal AS pop_std + ), + 0.5 + ) AS sample_std, + ( + SUM(( + POWER(SUPPLIER.s_acctbal, 2) + )) - ( + ( + POWER(SUM(SUPPLIER.s_acctbal), 2) + ) / COUNT(SUPPLIER.s_acctbal) + ) + ) / COUNT(SUPPLIER.s_acctbal) AS pop_var, + POWER( + ( + ( + SUM(( + POWER(SUPPLIER.s_acctbal, 2) + )) - ( + ( + POWER(SUM(SUPPLIER.s_acctbal), 2) + ) / COUNT(SUPPLIER.s_acctbal) + ) + ) / COUNT(SUPPLIER.s_acctbal) + ), + 0.5 + ) AS pop_std FROM tpch.NATION AS NATION -JOIN _s1 AS _s1 - ON NATION.n_nationkey = _s1.s_nationkey +JOIN tpch.SUPPLIER AS SUPPLIER + ON NATION.n_nationkey = SUPPLIER.s_nationkey WHERE NATION.n_name IN ('ALGERIA', 'ARGENTINA') +GROUP BY + SUPPLIER.s_nationkey diff --git a/tests/test_sql_refsols/simple_var_std_postgres.sql b/tests/test_sql_refsols/simple_var_std_postgres.sql index 47cf6a80a..94419638f 100644 --- a/tests/test_sql_refsols/simple_var_std_postgres.sql +++ b/tests/test_sql_refsols/simple_var_std_postgres.sql @@ -1,24 +1,15 @@ -WITH _s1 AS ( - SELECT - s_nationkey, - STDDEV_POP(s_acctbal) AS population_std_s_acctbal, - VAR_POP(s_acctbal) AS population_var_s_acctbal, - STDDEV(s_acctbal) AS sample_std_s_acctbal, - VAR_SAMP(s_acctbal) AS sample_var_s_acctbal - FROM tpch.supplier - GROUP BY - 1 -) SELECT - nation.n_name AS name, - _s1.population_var_s_acctbal AS var, - _s1.population_std_s_acctbal AS std, - _s1.sample_var_s_acctbal AS sample_var, - _s1.sample_std_s_acctbal AS sample_std, - _s1.population_var_s_acctbal AS pop_var, - _s1.population_std_s_acctbal AS pop_std + MAX(nation.n_name) AS name, + VAR_POP(supplier.s_acctbal) AS var, + STDDEV_POP(supplier.s_acctbal) AS std, + VAR_SAMP(supplier.s_acctbal) AS sample_var, + STDDEV(supplier.s_acctbal) AS sample_std, + VAR_POP(supplier.s_acctbal) AS pop_var, + STDDEV_POP(supplier.s_acctbal) AS pop_std FROM tpch.nation AS nation -JOIN _s1 AS _s1 - ON _s1.s_nationkey = nation.n_nationkey +JOIN tpch.supplier AS supplier + ON nation.n_nationkey = supplier.s_nationkey WHERE nation.n_name IN ('ALGERIA', 'ARGENTINA') +GROUP BY + supplier.s_nationkey diff --git a/tests/test_sql_refsols/simple_var_std_snowflake.sql b/tests/test_sql_refsols/simple_var_std_snowflake.sql index b477025a8..3db44a93e 100644 --- a/tests/test_sql_refsols/simple_var_std_snowflake.sql +++ b/tests/test_sql_refsols/simple_var_std_snowflake.sql @@ -1,24 +1,15 @@ -WITH _s1 AS ( - SELECT - s_nationkey, - STDDEV_POP(s_acctbal) AS population_std_s_acctbal, - VARIANCE_POP(s_acctbal) AS population_var_s_acctbal, - STDDEV(s_acctbal) AS sample_std_s_acctbal, - VARIANCE(s_acctbal) AS sample_var_s_acctbal - FROM tpch.supplier - GROUP BY - 1 -) SELECT - nation.n_name AS name, - _s1.population_var_s_acctbal AS var, - _s1.population_std_s_acctbal AS std, - _s1.sample_var_s_acctbal AS sample_var, - _s1.sample_std_s_acctbal AS sample_std, - _s1.population_var_s_acctbal AS pop_var, - _s1.population_std_s_acctbal AS pop_std + ANY_VALUE(nation.n_name) AS name, + VARIANCE_POP(supplier.s_acctbal) AS var, + STDDEV_POP(supplier.s_acctbal) AS std, + VARIANCE(supplier.s_acctbal) AS sample_var, + STDDEV(supplier.s_acctbal) AS sample_std, + VARIANCE_POP(supplier.s_acctbal) AS pop_var, + STDDEV_POP(supplier.s_acctbal) AS pop_std FROM tpch.nation AS nation -JOIN _s1 AS _s1 - ON _s1.s_nationkey = nation.n_nationkey +JOIN tpch.supplier AS supplier + ON nation.n_nationkey = supplier.s_nationkey WHERE nation.n_name IN ('ALGERIA', 'ARGENTINA') +GROUP BY + supplier.s_nationkey diff --git a/tests/test_sql_refsols/simple_var_std_sqlite.sql b/tests/test_sql_refsols/simple_var_std_sqlite.sql index 569265b93..c73ac7bd0 100644 --- a/tests/test_sql_refsols/simple_var_std_sqlite.sql +++ b/tests/test_sql_refsols/simple_var_std_sqlite.sql @@ -1,70 +1,82 @@ -WITH _s1 AS ( - SELECT - s_nationkey, - POWER( - ( - CAST(( - SUM(( - POWER(s_acctbal, 2) - )) - ( - CAST(( - POWER(SUM(s_acctbal), 2) - ) AS REAL) / COUNT(s_acctbal) - ) - ) AS REAL) / COUNT(s_acctbal) - ), - 0.5 - ) AS population_std_s_acctbal, - CAST(( - SUM(( - POWER(s_acctbal, 2) - )) - ( - CAST(( - POWER(SUM(s_acctbal), 2) - ) AS REAL) / COUNT(s_acctbal) - ) - ) AS REAL) / COUNT(s_acctbal) AS population_var_s_acctbal, - POWER( - ( - CAST(( - SUM(( - POWER(s_acctbal, 2) - )) - ( - CAST(( - POWER(SUM(s_acctbal), 2) - ) AS REAL) / COUNT(s_acctbal) - ) - ) AS REAL) / ( - COUNT(s_acctbal) - 1 +SELECT + MAX(nation.n_name) AS name, + CAST(( + SUM(( + POWER(supplier.s_acctbal, 2) + )) - ( + CAST(( + POWER(SUM(supplier.s_acctbal), 2) + ) AS REAL) / COUNT(supplier.s_acctbal) + ) + ) AS REAL) / COUNT(supplier.s_acctbal) AS var, + POWER( + ( + CAST(( + SUM(( + POWER(supplier.s_acctbal, 2) + )) - ( + CAST(( + POWER(SUM(supplier.s_acctbal), 2) + ) AS REAL) / COUNT(supplier.s_acctbal) + ) + ) AS REAL) / COUNT(supplier.s_acctbal) + ), + 0.5 + ) AS std, + CAST(( + SUM(( + POWER(supplier.s_acctbal, 2) + )) - ( + CAST(( + POWER(SUM(supplier.s_acctbal), 2) + ) AS REAL) / COUNT(supplier.s_acctbal) + ) + ) AS REAL) / ( + COUNT(supplier.s_acctbal) - 1 + ) AS sample_var, + POWER( + ( + CAST(( + SUM(( + POWER(supplier.s_acctbal, 2) + )) - ( + CAST(( + POWER(SUM(supplier.s_acctbal), 2) + ) AS REAL) / COUNT(supplier.s_acctbal) ) - ), - 0.5 - ) AS sample_std_s_acctbal, - CAST(( - SUM(( - POWER(s_acctbal, 2) - )) - ( - CAST(( - POWER(SUM(s_acctbal), 2) - ) AS REAL) / COUNT(s_acctbal) + ) AS REAL) / ( + COUNT(supplier.s_acctbal) - 1 ) - ) AS REAL) / ( - COUNT(s_acctbal) - 1 - ) AS sample_var_s_acctbal - FROM tpch.supplier - GROUP BY - 1 -) -SELECT - nation.n_name AS name, - _s1.population_var_s_acctbal AS var, - _s1.population_std_s_acctbal AS std, - _s1.sample_var_s_acctbal AS sample_var, - _s1.sample_std_s_acctbal AS sample_std, - _s1.population_var_s_acctbal AS pop_var, - _s1.population_std_s_acctbal AS pop_std + ), + 0.5 + ) AS sample_std, + CAST(( + SUM(( + POWER(supplier.s_acctbal, 2) + )) - ( + CAST(( + POWER(SUM(supplier.s_acctbal), 2) + ) AS REAL) / COUNT(supplier.s_acctbal) + ) + ) AS REAL) / COUNT(supplier.s_acctbal) AS pop_var, + POWER( + ( + CAST(( + SUM(( + POWER(supplier.s_acctbal, 2) + )) - ( + CAST(( + POWER(SUM(supplier.s_acctbal), 2) + ) AS REAL) / COUNT(supplier.s_acctbal) + ) + ) AS REAL) / COUNT(supplier.s_acctbal) + ), + 0.5 + ) AS pop_std FROM tpch.nation AS nation -JOIN _s1 AS _s1 - ON _s1.s_nationkey = nation.n_nationkey +JOIN tpch.supplier AS supplier + ON nation.n_nationkey = supplier.s_nationkey WHERE nation.n_name IN ('ALGERIA', 'ARGENTINA') +GROUP BY + supplier.s_nationkey diff --git a/tests/test_sql_refsols/sqlite_udf_combine_strings_sqlite.sql b/tests/test_sql_refsols/sqlite_udf_combine_strings_sqlite.sql index c5d1f2e61..56cc7cf5b 100644 --- a/tests/test_sql_refsols/sqlite_udf_combine_strings_sqlite.sql +++ b/tests/test_sql_refsols/sqlite_udf_combine_strings_sqlite.sql @@ -1,6 +1,6 @@ WITH _s0 AS ( SELECT - GROUP_CONCAT(CASE WHEN r_name <> 'EUROPE' THEN r_name ELSE NULL END, ', ') AS agg_1, + GROUP_CONCAT(NULLIF(r_name, 'EUROPE'), ', ') AS agg_1, GROUP_CONCAT(r_name) AS combine_strings_r_name FROM tpch.region ), _s1 AS ( diff --git a/tests/test_sql_refsols/sqlite_udf_nested_sqlite.sql b/tests/test_sql_refsols/sqlite_udf_nested_sqlite.sql index d6d15ac93..6c5a99b67 100644 --- a/tests/test_sql_refsols/sqlite_udf_nested_sqlite.sql +++ b/tests/test_sql_refsols/sqlite_udf_nested_sqlite.sql @@ -39,4 +39,4 @@ SELECT ) AS p FROM _t2 WHERE - n_rows > 0 + n_rows <> 0 diff --git a/tests/test_sql_refsols/technograph_country_combination_analysis_ansi.sql b/tests/test_sql_refsols/technograph_country_combination_analysis_ansi.sql index b0023d3a7..f7eb33c2f 100644 --- a/tests/test_sql_refsols/technograph_country_combination_analysis_ansi.sql +++ b/tests/test_sql_refsols/technograph_country_combination_analysis_ansi.sql @@ -7,26 +7,27 @@ WITH _s0 AS ( SELECT co_id FROM main.countries -), _s7 AS ( +), _t1 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.incidents - GROUP BY - 1 -), _s9 AS ( - SELECT - _s3.co_id AS _id_3, - _s2.co_id, - COUNT(*) AS n_rows, - SUM(_s7.n_rows) AS sum_n_rows + ANY_VALUE(_s3.co_id) AS anything__id_3, + ANY_VALUE(_s2.co_id) AS anything_co_id, + COUNT(incidents.in_device_id) AS count_in_device_id FROM _s2 AS _s2 CROSS JOIN _s2 AS _s3 JOIN main.devices AS devices ON _s2.co_id = devices.de_production_country_id AND _s3.co_id = devices.de_purchase_country_id - LEFT JOIN _s7 AS _s7 - ON _s7.in_device_id = devices.de_id + LEFT JOIN main.incidents AS incidents + ON devices.de_id = incidents.in_device_id + GROUP BY + devices.de_id +), _s9 AS ( + SELECT + anything__id_3, + anything_co_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t1 GROUP BY 1, 2 @@ -38,7 +39,7 @@ SELECT FROM _s0 AS _s0 CROSS JOIN _s0 AS _s1 LEFT JOIN _s9 AS _s9 - ON _s0.co_id = _s9.co_id AND _s1.co_id = _s9._id_3 + ON _s0.co_id = _s9.anything_co_id AND _s1.co_id = _s9.anything__id_3 ORDER BY 3 DESC LIMIT 5 diff --git a/tests/test_sql_refsols/technograph_country_combination_analysis_mysql.sql b/tests/test_sql_refsols/technograph_country_combination_analysis_mysql.sql index 575a620ff..4da22fe5e 100644 --- a/tests/test_sql_refsols/technograph_country_combination_analysis_mysql.sql +++ b/tests/test_sql_refsols/technograph_country_combination_analysis_mysql.sql @@ -7,26 +7,27 @@ WITH _s0 AS ( SELECT co_id FROM main.COUNTRIES -), _s7 AS ( +), _t1 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.INCIDENTS - GROUP BY - 1 -), _s9 AS ( - SELECT - _s3.co_id AS _id_3, - _s2.co_id, - COUNT(*) AS n_rows, - SUM(_s7.n_rows) AS sum_n_rows + ANY_VALUE(_s3.co_id) AS anything__id_3, + ANY_VALUE(_s2.co_id) AS anything_co_id, + COUNT(INCIDENTS.in_device_id) AS count_in_device_id FROM _s2 AS _s2 CROSS JOIN _s2 AS _s3 JOIN main.DEVICES AS DEVICES ON DEVICES.de_production_country_id = _s2.co_id AND DEVICES.de_purchase_country_id = _s3.co_id - LEFT JOIN _s7 AS _s7 - ON DEVICES.de_id = _s7.in_device_id + LEFT JOIN main.INCIDENTS AS INCIDENTS + ON DEVICES.de_id = INCIDENTS.in_device_id + GROUP BY + DEVICES.de_id +), _s9 AS ( + SELECT + anything__id_3, + anything_co_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t1 GROUP BY 1, 2 @@ -38,7 +39,7 @@ SELECT FROM _s0 AS _s0 CROSS JOIN _s0 AS _s1 LEFT JOIN _s9 AS _s9 - ON _s0.co_id = _s9.co_id AND _s1.co_id = _s9._id_3 + ON _s0.co_id = _s9.anything_co_id AND _s1.co_id = _s9.anything__id_3 ORDER BY 3 DESC LIMIT 5 diff --git a/tests/test_sql_refsols/technograph_country_combination_analysis_postgres.sql b/tests/test_sql_refsols/technograph_country_combination_analysis_postgres.sql index 37e678ff0..eb48d5a1a 100644 --- a/tests/test_sql_refsols/technograph_country_combination_analysis_postgres.sql +++ b/tests/test_sql_refsols/technograph_country_combination_analysis_postgres.sql @@ -7,26 +7,27 @@ WITH _s0 AS ( SELECT co_id FROM main.countries -), _s7 AS ( +), _t1 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.incidents - GROUP BY - 1 -), _s9 AS ( - SELECT - _s3.co_id AS _id_3, - _s2.co_id, - COUNT(*) AS n_rows, - SUM(_s7.n_rows) AS sum_n_rows + MAX(_s3.co_id) AS anything__id_3, + MAX(_s2.co_id) AS anything_co_id, + COUNT(incidents.in_device_id) AS count_in_device_id FROM _s2 AS _s2 CROSS JOIN _s2 AS _s3 JOIN main.devices AS devices ON _s2.co_id = devices.de_production_country_id AND _s3.co_id = devices.de_purchase_country_id - LEFT JOIN _s7 AS _s7 - ON _s7.in_device_id = devices.de_id + LEFT JOIN main.incidents AS incidents + ON devices.de_id = incidents.in_device_id + GROUP BY + devices.de_id +), _s9 AS ( + SELECT + anything__id_3, + anything_co_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t1 GROUP BY 1, 2 @@ -41,7 +42,7 @@ SELECT FROM _s0 AS _s0 CROSS JOIN _s0 AS _s1 LEFT JOIN _s9 AS _s9 - ON _s0.co_id = _s9.co_id AND _s1.co_id = _s9._id_3 + ON _s0.co_id = _s9.anything_co_id AND _s1.co_id = _s9.anything__id_3 ORDER BY 3 DESC NULLS LAST LIMIT 5 diff --git a/tests/test_sql_refsols/technograph_country_combination_analysis_snowflake.sql b/tests/test_sql_refsols/technograph_country_combination_analysis_snowflake.sql index ee15a23c4..7d0b311b7 100644 --- a/tests/test_sql_refsols/technograph_country_combination_analysis_snowflake.sql +++ b/tests/test_sql_refsols/technograph_country_combination_analysis_snowflake.sql @@ -7,26 +7,27 @@ WITH _s0 AS ( SELECT co_id FROM main.countries -), _s7 AS ( +), _t1 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.incidents - GROUP BY - 1 -), _s9 AS ( - SELECT - _s3.co_id AS _id_3, - _s2.co_id, - COUNT(*) AS n_rows, - SUM(_s7.n_rows) AS sum_n_rows + ANY_VALUE(_s3.co_id) AS anything__id_3, + ANY_VALUE(_s2.co_id) AS anything_co_id, + COUNT(incidents.in_device_id) AS count_in_device_id FROM _s2 AS _s2 CROSS JOIN _s2 AS _s3 JOIN main.devices AS devices ON _s2.co_id = devices.de_production_country_id AND _s3.co_id = devices.de_purchase_country_id - LEFT JOIN _s7 AS _s7 - ON _s7.in_device_id = devices.de_id + LEFT JOIN main.incidents AS incidents + ON devices.de_id = incidents.in_device_id + GROUP BY + devices.de_id +), _s9 AS ( + SELECT + anything__id_3, + anything_co_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t1 GROUP BY 1, 2 @@ -38,7 +39,7 @@ SELECT FROM _s0 AS _s0 CROSS JOIN _s0 AS _s1 LEFT JOIN _s9 AS _s9 - ON _s0.co_id = _s9.co_id AND _s1.co_id = _s9._id_3 + ON _s0.co_id = _s9.anything_co_id AND _s1.co_id = _s9.anything__id_3 ORDER BY 3 DESC NULLS LAST LIMIT 5 diff --git a/tests/test_sql_refsols/technograph_country_combination_analysis_sqlite.sql b/tests/test_sql_refsols/technograph_country_combination_analysis_sqlite.sql index 37fb038e7..3818c4c74 100644 --- a/tests/test_sql_refsols/technograph_country_combination_analysis_sqlite.sql +++ b/tests/test_sql_refsols/technograph_country_combination_analysis_sqlite.sql @@ -7,26 +7,27 @@ WITH _s0 AS ( SELECT co_id FROM main.countries -), _s7 AS ( +), _t1 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.incidents - GROUP BY - 1 -), _s9 AS ( - SELECT - _s3.co_id AS _id_3, - _s2.co_id, - COUNT(*) AS n_rows, - SUM(_s7.n_rows) AS sum_n_rows + MAX(_s3.co_id) AS anything__id_3, + MAX(_s2.co_id) AS anything_co_id, + COUNT(incidents.in_device_id) AS count_in_device_id FROM _s2 AS _s2 CROSS JOIN _s2 AS _s3 JOIN main.devices AS devices ON _s2.co_id = devices.de_production_country_id AND _s3.co_id = devices.de_purchase_country_id - LEFT JOIN _s7 AS _s7 - ON _s7.in_device_id = devices.de_id + LEFT JOIN main.incidents AS incidents + ON devices.de_id = incidents.in_device_id + GROUP BY + devices.de_id +), _s9 AS ( + SELECT + anything__id_3, + anything_co_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t1 GROUP BY 1, 2 @@ -38,7 +39,7 @@ SELECT FROM _s0 AS _s0 CROSS JOIN _s0 AS _s1 LEFT JOIN _s9 AS _s9 - ON _s0.co_id = _s9.co_id AND _s1.co_id = _s9._id_3 + ON _s0.co_id = _s9.anything_co_id AND _s1.co_id = _s9.anything__id_3 ORDER BY 3 DESC LIMIT 5 diff --git a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_ansi.sql b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_ansi.sql index e28700188..9e9dea053 100644 --- a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_ansi.sql +++ b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_ansi.sql @@ -36,23 +36,23 @@ WITH _t2 AS ( ON _s5.in_device_id = devices.de_id GROUP BY 1 -), _s11 AS ( +), _t5 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM _t2 - GROUP BY - 1 -), _s13 AS ( - SELECT - users.us_country_id, - COUNT(*) AS n_rows, - SUM(_s11.n_rows) AS sum_n_rows + ANY_VALUE(users.us_country_id) AS anything_us_country_id, + COUNT(_s11.in_device_id) AS count_in_device_id FROM main.users AS users JOIN main.devices AS devices ON devices.de_owner_id = users.us_id - LEFT JOIN _s11 AS _s11 + LEFT JOIN _t2 AS _s11 ON _s11.in_device_id = devices.de_id + GROUP BY + devices.de_id +), _s13 AS ( + SELECT + anything_us_country_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t5 GROUP BY 1 ) @@ -67,6 +67,6 @@ JOIN _s3 AS _s3 JOIN _s7 AS _s7 ON _s7.de_purchase_country_id = countries.co_id LEFT JOIN _s13 AS _s13 - ON _s13.us_country_id = countries.co_id + ON _s13.anything_us_country_id = countries.co_id ORDER BY 1 diff --git a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_mysql.sql b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_mysql.sql index c7b65cbda..c95eb1d4c 100644 --- a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_mysql.sql +++ b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_mysql.sql @@ -36,23 +36,23 @@ WITH _t2 AS ( ON DEVICES.de_id = _s5.in_device_id GROUP BY 1 -), _s11 AS ( +), _t5 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM _t2 - GROUP BY - 1 -), _s13 AS ( - SELECT - USERS.us_country_id, - COUNT(*) AS n_rows, - SUM(_s11.n_rows) AS sum_n_rows + ANY_VALUE(USERS.us_country_id) AS anything_us_country_id, + COUNT(_s11.in_device_id) AS count_in_device_id FROM main.USERS AS USERS JOIN main.DEVICES AS DEVICES ON DEVICES.de_owner_id = USERS.us_id - LEFT JOIN _s11 AS _s11 + LEFT JOIN _t2 AS _s11 ON DEVICES.de_id = _s11.in_device_id + GROUP BY + DEVICES.de_id +), _s13 AS ( + SELECT + anything_us_country_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t5 GROUP BY 1 ) @@ -67,6 +67,6 @@ JOIN _s3 AS _s3 JOIN _s7 AS _s7 ON COUNTRIES.co_id = _s7.de_purchase_country_id LEFT JOIN _s13 AS _s13 - ON COUNTRIES.co_id = _s13.us_country_id + ON COUNTRIES.co_id = _s13.anything_us_country_id ORDER BY 1 diff --git a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_postgres.sql b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_postgres.sql index d885247e9..c6b655158 100644 --- a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_postgres.sql +++ b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_postgres.sql @@ -36,23 +36,23 @@ WITH _t2 AS ( ON _s5.in_device_id = devices.de_id GROUP BY 1 -), _s11 AS ( +), _t5 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM _t2 - GROUP BY - 1 -), _s13 AS ( - SELECT - users.us_country_id, - COUNT(*) AS n_rows, - SUM(_s11.n_rows) AS sum_n_rows + MAX(users.us_country_id) AS anything_us_country_id, + COUNT(_s11.in_device_id) AS count_in_device_id FROM main.users AS users JOIN main.devices AS devices ON devices.de_owner_id = users.us_id - LEFT JOIN _s11 AS _s11 + LEFT JOIN _t2 AS _s11 ON _s11.in_device_id = devices.de_id + GROUP BY + devices.de_id +), _s13 AS ( + SELECT + anything_us_country_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t5 GROUP BY 1 ) @@ -76,6 +76,6 @@ JOIN _s3 AS _s3 JOIN _s7 AS _s7 ON _s7.de_purchase_country_id = countries.co_id LEFT JOIN _s13 AS _s13 - ON _s13.us_country_id = countries.co_id + ON _s13.anything_us_country_id = countries.co_id ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_snowflake.sql b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_snowflake.sql index 32f0db70a..7aa3fc849 100644 --- a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_snowflake.sql +++ b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_snowflake.sql @@ -36,23 +36,23 @@ WITH _t2 AS ( ON _s5.in_device_id = devices.de_id GROUP BY 1 -), _s11 AS ( +), _t5 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM _t2 - GROUP BY - 1 -), _s13 AS ( - SELECT - users.us_country_id, - COUNT(*) AS n_rows, - SUM(_s11.n_rows) AS sum_n_rows + ANY_VALUE(users.us_country_id) AS anything_us_country_id, + COUNT(_s11.in_device_id) AS count_in_device_id FROM main.users AS users JOIN main.devices AS devices ON devices.de_owner_id = users.us_id - LEFT JOIN _s11 AS _s11 + LEFT JOIN _t2 AS _s11 ON _s11.in_device_id = devices.de_id + GROUP BY + devices.de_id +), _s13 AS ( + SELECT + anything_us_country_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t5 GROUP BY 1 ) @@ -67,6 +67,6 @@ JOIN _s3 AS _s3 JOIN _s7 AS _s7 ON _s7.de_purchase_country_id = countries.co_id LEFT JOIN _s13 AS _s13 - ON _s13.us_country_id = countries.co_id + ON _s13.anything_us_country_id = countries.co_id ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_sqlite.sql b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_sqlite.sql index d33b848ea..390e36aa8 100644 --- a/tests/test_sql_refsols/technograph_country_incident_rate_analysis_sqlite.sql +++ b/tests/test_sql_refsols/technograph_country_incident_rate_analysis_sqlite.sql @@ -36,23 +36,23 @@ WITH _t2 AS ( ON _s5.in_device_id = devices.de_id GROUP BY 1 -), _s11 AS ( +), _t5 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM _t2 - GROUP BY - 1 -), _s13 AS ( - SELECT - users.us_country_id, - COUNT(*) AS n_rows, - SUM(_s11.n_rows) AS sum_n_rows + MAX(users.us_country_id) AS anything_us_country_id, + COUNT(_s11.in_device_id) AS count_in_device_id FROM main.users AS users JOIN main.devices AS devices ON devices.de_owner_id = users.us_id - LEFT JOIN _s11 AS _s11 + LEFT JOIN _t2 AS _s11 ON _s11.in_device_id = devices.de_id + GROUP BY + devices.de_id +), _s13 AS ( + SELECT + anything_us_country_id, + COUNT(*) AS n_rows, + SUM(count_in_device_id) AS sum_n_rows + FROM _t5 GROUP BY 1 ) @@ -67,6 +67,6 @@ JOIN _s3 AS _s3 JOIN _s7 AS _s7 ON _s7.de_purchase_country_id = countries.co_id LEFT JOIN _s13 AS _s13 - ON _s13.us_country_id = countries.co_id + ON _s13.anything_us_country_id = countries.co_id ORDER BY 1 diff --git a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_ansi.sql b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_ansi.sql index e1ae95db5..44211d2ed 100644 --- a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_ansi.sql +++ b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_ansi.sql @@ -1,20 +1,20 @@ -WITH _s3 AS ( +WITH _t2 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.incidents + ANY_VALUE(devices.de_production_country_id) AS anything_de_production_country_id, + COUNT(incidents.in_device_id) AS count_in_device_id + FROM main.devices AS devices + JOIN main.products AS products + ON devices.de_product_id = products.pr_id AND products.pr_name = 'Sun-Set' + LEFT JOIN main.incidents AS incidents + ON devices.de_id = incidents.in_device_id GROUP BY - 1 + devices.de_id ), _s5 AS ( SELECT - COALESCE(SUM(_s3.n_rows), 0) AS sum_n_incidents, - devices.de_production_country_id, + COALESCE(SUM(count_in_device_id), 0) AS sum_n_incidents, + anything_de_production_country_id, COUNT(*) AS n_rows - FROM main.devices AS devices - JOIN main.products AS products - ON devices.de_product_id = products.pr_id AND products.pr_name = 'Sun-Set' - LEFT JOIN _s3 AS _s3 - ON _s3.in_device_id = devices.de_id + FROM _t2 GROUP BY 2 ) @@ -23,6 +23,6 @@ SELECT ROUND(COALESCE(_s5.sum_n_incidents, 0) / COALESCE(_s5.n_rows, 0), 2) AS ir FROM main.countries AS countries LEFT JOIN _s5 AS _s5 - ON _s5.de_production_country_id = countries.co_id + ON _s5.anything_de_production_country_id = countries.co_id ORDER BY 1 diff --git a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_mysql.sql b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_mysql.sql index e0eb772d3..e9909a422 100644 --- a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_mysql.sql +++ b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_mysql.sql @@ -1,20 +1,20 @@ -WITH _s3 AS ( +WITH _t2 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.INCIDENTS + ANY_VALUE(DEVICES.de_production_country_id) AS anything_de_production_country_id, + COUNT(INCIDENTS.in_device_id) AS count_in_device_id + FROM main.DEVICES AS DEVICES + JOIN main.PRODUCTS AS PRODUCTS + ON DEVICES.de_product_id = PRODUCTS.pr_id AND PRODUCTS.pr_name = 'Sun-Set' + LEFT JOIN main.INCIDENTS AS INCIDENTS + ON DEVICES.de_id = INCIDENTS.in_device_id GROUP BY - 1 + DEVICES.de_id ), _s5 AS ( SELECT - COALESCE(SUM(_s3.n_rows), 0) AS sum_n_incidents, - DEVICES.de_production_country_id, + COALESCE(SUM(count_in_device_id), 0) AS sum_n_incidents, + anything_de_production_country_id, COUNT(*) AS n_rows - FROM main.DEVICES AS DEVICES - JOIN main.PRODUCTS AS PRODUCTS - ON DEVICES.de_product_id = PRODUCTS.pr_id AND PRODUCTS.pr_name = 'Sun-Set' - LEFT JOIN _s3 AS _s3 - ON DEVICES.de_id = _s3.in_device_id + FROM _t2 GROUP BY 2 ) @@ -23,6 +23,6 @@ SELECT ROUND(COALESCE(_s5.sum_n_incidents, 0) / COALESCE(_s5.n_rows, 0), 2) AS ir FROM main.COUNTRIES AS COUNTRIES LEFT JOIN _s5 AS _s5 - ON COUNTRIES.co_id = _s5.de_production_country_id + ON COUNTRIES.co_id = _s5.anything_de_production_country_id ORDER BY 1 diff --git a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_postgres.sql b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_postgres.sql index 762d308b6..f4f1602c9 100644 --- a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_postgres.sql +++ b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_postgres.sql @@ -1,20 +1,20 @@ -WITH _s3 AS ( +WITH _t2 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.incidents + MAX(devices.de_production_country_id) AS anything_de_production_country_id, + COUNT(incidents.in_device_id) AS count_in_device_id + FROM main.devices AS devices + JOIN main.products AS products + ON devices.de_product_id = products.pr_id AND products.pr_name = 'Sun-Set' + LEFT JOIN main.incidents AS incidents + ON devices.de_id = incidents.in_device_id GROUP BY - 1 + devices.de_id ), _s5 AS ( SELECT - COALESCE(SUM(_s3.n_rows), 0) AS sum_n_incidents, - devices.de_production_country_id, + COALESCE(SUM(count_in_device_id), 0) AS sum_n_incidents, + anything_de_production_country_id, COUNT(*) AS n_rows - FROM main.devices AS devices - JOIN main.products AS products - ON devices.de_product_id = products.pr_id AND products.pr_name = 'Sun-Set' - LEFT JOIN _s3 AS _s3 - ON _s3.in_device_id = devices.de_id + FROM _t2 GROUP BY 2 ) @@ -26,6 +26,6 @@ SELECT ) AS ir FROM main.countries AS countries LEFT JOIN _s5 AS _s5 - ON _s5.de_production_country_id = countries.co_id + ON _s5.anything_de_production_country_id = countries.co_id ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_snowflake.sql b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_snowflake.sql index d96e02613..70ee512ec 100644 --- a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_snowflake.sql +++ b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_snowflake.sql @@ -1,20 +1,20 @@ -WITH _s3 AS ( +WITH _t2 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.incidents + ANY_VALUE(devices.de_production_country_id) AS anything_de_production_country_id, + COUNT(incidents.in_device_id) AS count_in_device_id + FROM main.devices AS devices + JOIN main.products AS products + ON devices.de_product_id = products.pr_id AND products.pr_name = 'Sun-Set' + LEFT JOIN main.incidents AS incidents + ON devices.de_id = incidents.in_device_id GROUP BY - 1 + devices.de_id ), _s5 AS ( SELECT - COALESCE(SUM(_s3.n_rows), 0) AS sum_n_incidents, - devices.de_production_country_id, + COALESCE(SUM(count_in_device_id), 0) AS sum_n_incidents, + anything_de_production_country_id, COUNT(*) AS n_rows - FROM main.devices AS devices - JOIN main.products AS products - ON devices.de_product_id = products.pr_id AND products.pr_name = 'Sun-Set' - LEFT JOIN _s3 AS _s3 - ON _s3.in_device_id = devices.de_id + FROM _t2 GROUP BY 2 ) @@ -23,6 +23,6 @@ SELECT ROUND(COALESCE(_s5.sum_n_incidents, 0) / COALESCE(_s5.n_rows, 0), 2) AS ir FROM main.countries AS countries LEFT JOIN _s5 AS _s5 - ON _s5.de_production_country_id = countries.co_id + ON _s5.anything_de_production_country_id = countries.co_id ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_sqlite.sql b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_sqlite.sql index ebc28a12e..53eab184f 100644 --- a/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_sqlite.sql +++ b/tests/test_sql_refsols/technograph_error_rate_sun_set_by_factory_country_sqlite.sql @@ -1,20 +1,20 @@ -WITH _s3 AS ( +WITH _t2 AS ( SELECT - in_device_id, - COUNT(*) AS n_rows - FROM main.incidents + MAX(devices.de_production_country_id) AS anything_de_production_country_id, + COUNT(incidents.in_device_id) AS count_in_device_id + FROM main.devices AS devices + JOIN main.products AS products + ON devices.de_product_id = products.pr_id AND products.pr_name = 'Sun-Set' + LEFT JOIN main.incidents AS incidents + ON devices.de_id = incidents.in_device_id GROUP BY - 1 + devices.de_id ), _s5 AS ( SELECT - COALESCE(SUM(_s3.n_rows), 0) AS sum_n_incidents, - devices.de_production_country_id, + COALESCE(SUM(count_in_device_id), 0) AS sum_n_incidents, + anything_de_production_country_id, COUNT(*) AS n_rows - FROM main.devices AS devices - JOIN main.products AS products - ON devices.de_product_id = products.pr_id AND products.pr_name = 'Sun-Set' - LEFT JOIN _s3 AS _s3 - ON _s3.in_device_id = devices.de_id + FROM _t2 GROUP BY 2 ) @@ -23,6 +23,6 @@ SELECT ROUND(CAST(COALESCE(_s5.sum_n_incidents, 0) AS REAL) / COALESCE(_s5.n_rows, 0), 2) AS ir FROM main.countries AS countries LEFT JOIN _s5 AS _s5 - ON _s5.de_production_country_id = countries.co_id + ON _s5.anything_de_production_country_id = countries.co_id ORDER BY 1 diff --git a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_ansi.sql b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_ansi.sql index ea57003fc..bec8c788b 100644 --- a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_ansi.sql +++ b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_ansi.sql @@ -59,6 +59,6 @@ SELECT COALESCE(sum_n_rows, 0) AS incidents FROM _t1 WHERE - NOT sum_expr_3 IS NULL AND sum_expr_3 > 0 + NOT sum_expr_3 IS NULL AND sum_expr_3 <> 0 ORDER BY 1 diff --git a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_mysql.sql b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_mysql.sql index 91ff1b10e..4c248c546 100644 --- a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_mysql.sql +++ b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_mysql.sql @@ -59,6 +59,6 @@ SELECT COALESCE(sum_n_rows, 0) AS incidents FROM _t1 WHERE - NOT sum_expr_3 IS NULL AND sum_expr_3 > 0 + NOT sum_expr_3 IS NULL AND sum_expr_3 <> 0 ORDER BY 1 diff --git a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_postgres.sql b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_postgres.sql index d2d15d49b..03f872de7 100644 --- a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_postgres.sql +++ b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_postgres.sql @@ -59,6 +59,6 @@ SELECT COALESCE(sum_n_rows, 0) AS incidents FROM _t1 WHERE - NOT sum_expr_3 IS NULL AND sum_expr_3 > 0 + NOT sum_expr_3 IS NULL AND sum_expr_3 <> 0 ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_snowflake.sql b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_snowflake.sql index 14aa8b03c..4c5b0ee35 100644 --- a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_snowflake.sql +++ b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_snowflake.sql @@ -59,6 +59,6 @@ SELECT COALESCE(sum_n_rows, 0) AS incidents FROM _t1 WHERE - NOT sum_expr_3 IS NULL AND sum_expr_3 > 0 + NOT sum_expr_3 IS NULL AND sum_expr_3 <> 0 ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_sqlite.sql b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_sqlite.sql index e7079307e..256921e47 100644 --- a/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_sqlite.sql +++ b/tests/test_sql_refsols/technograph_year_cumulative_incident_rate_overall_sqlite.sql @@ -59,6 +59,6 @@ SELECT COALESCE(sum_n_rows, 0) AS incidents FROM _t1 WHERE - NOT sum_expr_3 IS NULL AND sum_expr_3 > 0 + NOT sum_expr_3 IS NULL AND sum_expr_3 <> 0 ORDER BY 1 diff --git a/tests/test_sql_refsols/tpch_q12_snowflake.sql b/tests/test_sql_refsols/tpch_q12_snowflake.sql index b02a4f3ff..cde94662f 100644 --- a/tests/test_sql_refsols/tpch_q12_snowflake.sql +++ b/tests/test_sql_refsols/tpch_q12_snowflake.sql @@ -1,7 +1,7 @@ SELECT lineitem.l_shipmode AS L_SHIPMODE, - COALESCE(COUNT_IF(orders.o_orderpriority IN ('1-URGENT', '2-HIGH')), 0) AS HIGH_LINE_COUNT, - COALESCE(COUNT_IF(NOT orders.o_orderpriority IN ('1-URGENT', '2-HIGH')), 0) AS LOW_LINE_COUNT + COUNT_IF(orders.o_orderpriority IN ('1-URGENT', '2-HIGH')) AS HIGH_LINE_COUNT, + COUNT_IF(NOT orders.o_orderpriority IN ('1-URGENT', '2-HIGH')) AS LOW_LINE_COUNT FROM tpch.lineitem AS lineitem JOIN tpch.orders AS orders ON lineitem.l_orderkey = orders.o_orderkey diff --git a/tests/test_sql_refsols/tpch_q15_ansi.sql b/tests/test_sql_refsols/tpch_q15_ansi.sql index cc9bc9485..cc48d214f 100644 --- a/tests/test_sql_refsols/tpch_q15_ansi.sql +++ b/tests/test_sql_refsols/tpch_q15_ansi.sql @@ -8,22 +8,19 @@ WITH _t3 AS ( WHERE l_shipdate < CAST('1996-04-01' AS DATE) AND l_shipdate >= CAST('1996-01-01' AS DATE) -), _s1 AS ( +), _t1 AS ( SELECT - l_suppkey, SUM(l_extendedprice * ( 1 - l_discount )) AS sum_expr FROM _t3 GROUP BY - 1 -), _s2 AS ( + l_suppkey +), _s0 AS ( SELECT - MAX(COALESCE(_s1.sum_expr, 0)) AS max_total_revenue - FROM tpch.supplier AS supplier - JOIN _s1 AS _s1 - ON _s1.l_suppkey = supplier.s_suppkey -), _s5 AS ( + MAX(COALESCE(sum_expr, 0)) AS max_total_revenue + FROM _t1 +), _s3 AS ( SELECT l_suppkey, SUM(l_extendedprice * ( @@ -38,11 +35,11 @@ SELECT supplier.s_name AS S_NAME, supplier.s_address AS S_ADDRESS, supplier.s_phone AS S_PHONE, - COALESCE(_s5.sum_expr, 0) AS TOTAL_REVENUE -FROM _s2 AS _s2 + COALESCE(_s3.sum_expr, 0) AS TOTAL_REVENUE +FROM _s0 AS _s0 CROSS JOIN tpch.supplier AS supplier -JOIN _s5 AS _s5 - ON _s2.max_total_revenue = COALESCE(_s5.sum_expr, 0) - AND _s5.l_suppkey = supplier.s_suppkey +JOIN _s3 AS _s3 + ON _s0.max_total_revenue = COALESCE(_s3.sum_expr, 0) + AND _s3.l_suppkey = supplier.s_suppkey ORDER BY 1 diff --git a/tests/test_sql_refsols/tpch_q15_mysql.sql b/tests/test_sql_refsols/tpch_q15_mysql.sql index da971edde..4ee343695 100644 --- a/tests/test_sql_refsols/tpch_q15_mysql.sql +++ b/tests/test_sql_refsols/tpch_q15_mysql.sql @@ -8,22 +8,19 @@ WITH _t3 AS ( WHERE l_shipdate < CAST('1996-04-01' AS DATE) AND l_shipdate >= CAST('1996-01-01' AS DATE) -), _s1 AS ( +), _t1 AS ( SELECT - l_suppkey, SUM(l_extendedprice * ( 1 - l_discount )) AS sum_expr FROM _t3 GROUP BY - 1 -), _s2 AS ( + l_suppkey +), _s0 AS ( SELECT - MAX(COALESCE(_s1.sum_expr, 0)) AS max_total_revenue - FROM tpch.SUPPLIER AS SUPPLIER - JOIN _s1 AS _s1 - ON SUPPLIER.s_suppkey = _s1.l_suppkey -), _s5 AS ( + MAX(COALESCE(sum_expr, 0)) AS max_total_revenue + FROM _t1 +), _s3 AS ( SELECT l_suppkey, SUM(l_extendedprice * ( @@ -38,11 +35,11 @@ SELECT SUPPLIER.s_name AS S_NAME, SUPPLIER.s_address AS S_ADDRESS, SUPPLIER.s_phone AS S_PHONE, - COALESCE(_s5.sum_expr, 0) AS TOTAL_REVENUE -FROM _s2 AS _s2 + COALESCE(_s3.sum_expr, 0) AS TOTAL_REVENUE +FROM _s0 AS _s0 CROSS JOIN tpch.SUPPLIER AS SUPPLIER -JOIN _s5 AS _s5 - ON SUPPLIER.s_suppkey = _s5.l_suppkey - AND _s2.max_total_revenue = COALESCE(_s5.sum_expr, 0) +JOIN _s3 AS _s3 + ON SUPPLIER.s_suppkey = _s3.l_suppkey + AND _s0.max_total_revenue = COALESCE(_s3.sum_expr, 0) ORDER BY 1 diff --git a/tests/test_sql_refsols/tpch_q15_postgres.sql b/tests/test_sql_refsols/tpch_q15_postgres.sql index 8537c8662..5481d24fd 100644 --- a/tests/test_sql_refsols/tpch_q15_postgres.sql +++ b/tests/test_sql_refsols/tpch_q15_postgres.sql @@ -8,22 +8,19 @@ WITH _t3 AS ( WHERE l_shipdate < CAST('1996-04-01' AS DATE) AND l_shipdate >= CAST('1996-01-01' AS DATE) -), _s1 AS ( +), _t1 AS ( SELECT - l_suppkey, SUM(l_extendedprice * ( 1 - l_discount )) AS sum_expr FROM _t3 GROUP BY - 1 -), _s2 AS ( + l_suppkey +), _s0 AS ( SELECT - MAX(COALESCE(_s1.sum_expr, 0)) AS max_total_revenue - FROM tpch.supplier AS supplier - JOIN _s1 AS _s1 - ON _s1.l_suppkey = supplier.s_suppkey -), _s5 AS ( + MAX(COALESCE(sum_expr, 0)) AS max_total_revenue + FROM _t1 +), _s3 AS ( SELECT l_suppkey, SUM(l_extendedprice * ( @@ -38,11 +35,11 @@ SELECT supplier.s_name AS S_NAME, supplier.s_address AS S_ADDRESS, supplier.s_phone AS S_PHONE, - COALESCE(_s5.sum_expr, 0) AS TOTAL_REVENUE -FROM _s2 AS _s2 + COALESCE(_s3.sum_expr, 0) AS TOTAL_REVENUE +FROM _s0 AS _s0 CROSS JOIN tpch.supplier AS supplier -JOIN _s5 AS _s5 - ON _s2.max_total_revenue = COALESCE(_s5.sum_expr, 0) - AND _s5.l_suppkey = supplier.s_suppkey +JOIN _s3 AS _s3 + ON _s0.max_total_revenue = COALESCE(_s3.sum_expr, 0) + AND _s3.l_suppkey = supplier.s_suppkey ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/tpch_q15_snowflake.sql b/tests/test_sql_refsols/tpch_q15_snowflake.sql index 8537c8662..5481d24fd 100644 --- a/tests/test_sql_refsols/tpch_q15_snowflake.sql +++ b/tests/test_sql_refsols/tpch_q15_snowflake.sql @@ -8,22 +8,19 @@ WITH _t3 AS ( WHERE l_shipdate < CAST('1996-04-01' AS DATE) AND l_shipdate >= CAST('1996-01-01' AS DATE) -), _s1 AS ( +), _t1 AS ( SELECT - l_suppkey, SUM(l_extendedprice * ( 1 - l_discount )) AS sum_expr FROM _t3 GROUP BY - 1 -), _s2 AS ( + l_suppkey +), _s0 AS ( SELECT - MAX(COALESCE(_s1.sum_expr, 0)) AS max_total_revenue - FROM tpch.supplier AS supplier - JOIN _s1 AS _s1 - ON _s1.l_suppkey = supplier.s_suppkey -), _s5 AS ( + MAX(COALESCE(sum_expr, 0)) AS max_total_revenue + FROM _t1 +), _s3 AS ( SELECT l_suppkey, SUM(l_extendedprice * ( @@ -38,11 +35,11 @@ SELECT supplier.s_name AS S_NAME, supplier.s_address AS S_ADDRESS, supplier.s_phone AS S_PHONE, - COALESCE(_s5.sum_expr, 0) AS TOTAL_REVENUE -FROM _s2 AS _s2 + COALESCE(_s3.sum_expr, 0) AS TOTAL_REVENUE +FROM _s0 AS _s0 CROSS JOIN tpch.supplier AS supplier -JOIN _s5 AS _s5 - ON _s2.max_total_revenue = COALESCE(_s5.sum_expr, 0) - AND _s5.l_suppkey = supplier.s_suppkey +JOIN _s3 AS _s3 + ON _s0.max_total_revenue = COALESCE(_s3.sum_expr, 0) + AND _s3.l_suppkey = supplier.s_suppkey ORDER BY 1 NULLS FIRST diff --git a/tests/test_sql_refsols/tpch_q15_sqlite.sql b/tests/test_sql_refsols/tpch_q15_sqlite.sql index 24d23d69e..fa41139ae 100644 --- a/tests/test_sql_refsols/tpch_q15_sqlite.sql +++ b/tests/test_sql_refsols/tpch_q15_sqlite.sql @@ -7,22 +7,19 @@ WITH _t3 AS ( FROM tpch.lineitem WHERE l_shipdate < '1996-04-01' AND l_shipdate >= '1996-01-01' -), _s1 AS ( +), _t1 AS ( SELECT - l_suppkey, SUM(l_extendedprice * ( 1 - l_discount )) AS sum_expr FROM _t3 GROUP BY - 1 -), _s2 AS ( + l_suppkey +), _s0 AS ( SELECT - MAX(COALESCE(_s1.sum_expr, 0)) AS max_total_revenue - FROM tpch.supplier AS supplier - JOIN _s1 AS _s1 - ON _s1.l_suppkey = supplier.s_suppkey -), _s5 AS ( + MAX(COALESCE(sum_expr, 0)) AS max_total_revenue + FROM _t1 +), _s3 AS ( SELECT l_suppkey, SUM(l_extendedprice * ( @@ -37,11 +34,11 @@ SELECT supplier.s_name AS S_NAME, supplier.s_address AS S_ADDRESS, supplier.s_phone AS S_PHONE, - COALESCE(_s5.sum_expr, 0) AS TOTAL_REVENUE -FROM _s2 AS _s2 + COALESCE(_s3.sum_expr, 0) AS TOTAL_REVENUE +FROM _s0 AS _s0 CROSS JOIN tpch.supplier AS supplier -JOIN _s5 AS _s5 - ON _s2.max_total_revenue = COALESCE(_s5.sum_expr, 0) - AND _s5.l_suppkey = supplier.s_suppkey +JOIN _s3 AS _s3 + ON _s0.max_total_revenue = COALESCE(_s3.sum_expr, 0) + AND _s3.l_suppkey = supplier.s_suppkey ORDER BY 1 diff --git a/tests/test_sql_refsols/tpch_q20_ansi.sql b/tests/test_sql_refsols/tpch_q20_ansi.sql index 1cf44ebb8..090832727 100644 --- a/tests/test_sql_refsols/tpch_q20_ansi.sql +++ b/tests/test_sql_refsols/tpch_q20_ansi.sql @@ -1,39 +1,31 @@ -WITH _s3 AS ( +WITH _s5 AS ( SELECT - l_partkey, - SUM(l_quantity) AS sum_l_quantity - FROM tpch.lineitem - WHERE - EXTRACT(YEAR FROM CAST(l_shipdate AS DATETIME)) = 1994 - GROUP BY - 1 -), _s5 AS ( - SELECT - part.p_partkey, - _s3.sum_l_quantity + lineitem.l_partkey, + SUM(lineitem.l_quantity) AS sum_l_quantity FROM tpch.part AS part - JOIN _s3 AS _s3 - ON _s3.l_partkey = part.p_partkey + JOIN tpch.lineitem AS lineitem + ON EXTRACT(YEAR FROM CAST(lineitem.l_shipdate AS DATETIME)) = 1994 + AND lineitem.l_partkey = part.p_partkey WHERE part.p_name LIKE 'forest%' -), _s7 AS ( - SELECT DISTINCT - partsupp.ps_suppkey - FROM tpch.partsupp AS partsupp - JOIN _s5 AS _s5 - ON _s5.p_partkey = partsupp.ps_partkey - AND partsupp.ps_availqty > ( - 0.5 * COALESCE(_s5.sum_l_quantity, 0) - ) + GROUP BY + 1 ) SELECT - supplier.s_name AS S_NAME, - supplier.s_address AS S_ADDRESS + ANY_VALUE(supplier.s_name) AS S_NAME, + ANY_VALUE(supplier.s_address) AS S_ADDRESS FROM tpch.supplier AS supplier JOIN tpch.nation AS nation ON nation.n_name = 'CANADA' AND nation.n_nationkey = supplier.s_nationkey -JOIN _s7 AS _s7 - ON _s7.ps_suppkey = supplier.s_suppkey +JOIN tpch.partsupp AS partsupp + ON partsupp.ps_suppkey = supplier.s_suppkey +JOIN _s5 AS _s5 + ON _s5.l_partkey = partsupp.ps_partkey + AND partsupp.ps_availqty > ( + 0.5 * COALESCE(_s5.sum_l_quantity, 0) + ) +GROUP BY + partsupp.ps_suppkey ORDER BY 1 LIMIT 10 diff --git a/tests/test_sql_refsols/tpch_q20_mysql.sql b/tests/test_sql_refsols/tpch_q20_mysql.sql index 7705ccd05..fb35009f6 100644 --- a/tests/test_sql_refsols/tpch_q20_mysql.sql +++ b/tests/test_sql_refsols/tpch_q20_mysql.sql @@ -1,39 +1,31 @@ -WITH _s3 AS ( +WITH _s5 AS ( SELECT - l_partkey, - SUM(l_quantity) AS sum_l_quantity - FROM tpch.LINEITEM - WHERE - EXTRACT(YEAR FROM CAST(l_shipdate AS DATETIME)) = 1994 - GROUP BY - 1 -), _s5 AS ( - SELECT - PART.p_partkey, - _s3.sum_l_quantity + LINEITEM.l_partkey, + SUM(LINEITEM.l_quantity) AS sum_l_quantity FROM tpch.PART AS PART - JOIN _s3 AS _s3 - ON PART.p_partkey = _s3.l_partkey + JOIN tpch.LINEITEM AS LINEITEM + ON EXTRACT(YEAR FROM CAST(LINEITEM.l_shipdate AS DATETIME)) = 1994 + AND LINEITEM.l_partkey = PART.p_partkey WHERE PART.p_name LIKE 'forest%' -), _s7 AS ( - SELECT DISTINCT - PARTSUPP.ps_suppkey - FROM tpch.PARTSUPP AS PARTSUPP - JOIN _s5 AS _s5 - ON PARTSUPP.ps_availqty > ( - 0.5 * COALESCE(_s5.sum_l_quantity, 0) - ) - AND PARTSUPP.ps_partkey = _s5.p_partkey + GROUP BY + 1 ) SELECT - SUPPLIER.s_name COLLATE utf8mb4_bin AS S_NAME, - SUPPLIER.s_address AS S_ADDRESS + ANY_VALUE(SUPPLIER.s_name) COLLATE utf8mb4_bin AS S_NAME, + ANY_VALUE(SUPPLIER.s_address) AS S_ADDRESS FROM tpch.SUPPLIER AS SUPPLIER JOIN tpch.NATION AS NATION ON NATION.n_name = 'CANADA' AND NATION.n_nationkey = SUPPLIER.s_nationkey -JOIN _s7 AS _s7 - ON SUPPLIER.s_suppkey = _s7.ps_suppkey +JOIN tpch.PARTSUPP AS PARTSUPP + ON PARTSUPP.ps_suppkey = SUPPLIER.s_suppkey +JOIN _s5 AS _s5 + ON PARTSUPP.ps_availqty > ( + 0.5 * COALESCE(_s5.sum_l_quantity, 0) + ) + AND PARTSUPP.ps_partkey = _s5.l_partkey +GROUP BY + PARTSUPP.ps_suppkey ORDER BY 1 LIMIT 10 diff --git a/tests/test_sql_refsols/tpch_q20_postgres.sql b/tests/test_sql_refsols/tpch_q20_postgres.sql index bfd924a91..8da59668e 100644 --- a/tests/test_sql_refsols/tpch_q20_postgres.sql +++ b/tests/test_sql_refsols/tpch_q20_postgres.sql @@ -1,39 +1,31 @@ -WITH _s3 AS ( +WITH _s5 AS ( SELECT - l_partkey, - SUM(l_quantity) AS sum_l_quantity - FROM tpch.lineitem - WHERE - EXTRACT(YEAR FROM CAST(l_shipdate AS TIMESTAMP)) = 1994 - GROUP BY - 1 -), _s5 AS ( - SELECT - part.p_partkey, - _s3.sum_l_quantity + lineitem.l_partkey, + SUM(lineitem.l_quantity) AS sum_l_quantity FROM tpch.part AS part - JOIN _s3 AS _s3 - ON _s3.l_partkey = part.p_partkey + JOIN tpch.lineitem AS lineitem + ON EXTRACT(YEAR FROM CAST(lineitem.l_shipdate AS TIMESTAMP)) = 1994 + AND lineitem.l_partkey = part.p_partkey WHERE part.p_name LIKE 'forest%' -), _s7 AS ( - SELECT DISTINCT - partsupp.ps_suppkey - FROM tpch.partsupp AS partsupp - JOIN _s5 AS _s5 - ON _s5.p_partkey = partsupp.ps_partkey - AND partsupp.ps_availqty > ( - 0.5 * COALESCE(_s5.sum_l_quantity, 0) - ) + GROUP BY + 1 ) SELECT - supplier.s_name AS S_NAME, - supplier.s_address AS S_ADDRESS + MAX(supplier.s_name) AS S_NAME, + MAX(supplier.s_address) AS S_ADDRESS FROM tpch.supplier AS supplier JOIN tpch.nation AS nation ON nation.n_name = 'CANADA' AND nation.n_nationkey = supplier.s_nationkey -JOIN _s7 AS _s7 - ON _s7.ps_suppkey = supplier.s_suppkey +JOIN tpch.partsupp AS partsupp + ON partsupp.ps_suppkey = supplier.s_suppkey +JOIN _s5 AS _s5 + ON _s5.l_partkey = partsupp.ps_partkey + AND partsupp.ps_availqty > ( + 0.5 * COALESCE(_s5.sum_l_quantity, 0) + ) +GROUP BY + partsupp.ps_suppkey ORDER BY 1 NULLS FIRST LIMIT 10 diff --git a/tests/test_sql_refsols/tpch_q20_snowflake.sql b/tests/test_sql_refsols/tpch_q20_snowflake.sql index 22d85f1d2..ec5447f59 100644 --- a/tests/test_sql_refsols/tpch_q20_snowflake.sql +++ b/tests/test_sql_refsols/tpch_q20_snowflake.sql @@ -1,39 +1,31 @@ -WITH _s3 AS ( +WITH _s5 AS ( SELECT - l_partkey, - SUM(l_quantity) AS sum_l_quantity - FROM tpch.lineitem - WHERE - YEAR(CAST(l_shipdate AS TIMESTAMP)) = 1994 - GROUP BY - 1 -), _s5 AS ( - SELECT - part.p_partkey, - _s3.sum_l_quantity + lineitem.l_partkey, + SUM(lineitem.l_quantity) AS sum_l_quantity FROM tpch.part AS part - JOIN _s3 AS _s3 - ON _s3.l_partkey = part.p_partkey + JOIN tpch.lineitem AS lineitem + ON YEAR(CAST(lineitem.l_shipdate AS TIMESTAMP)) = 1994 + AND lineitem.l_partkey = part.p_partkey WHERE STARTSWITH(part.p_name, 'forest') -), _s7 AS ( - SELECT DISTINCT - partsupp.ps_suppkey - FROM tpch.partsupp AS partsupp - JOIN _s5 AS _s5 - ON _s5.p_partkey = partsupp.ps_partkey - AND partsupp.ps_availqty > ( - 0.5 * COALESCE(_s5.sum_l_quantity, 0) - ) + GROUP BY + 1 ) SELECT - supplier.s_name AS S_NAME, - supplier.s_address AS S_ADDRESS + ANY_VALUE(supplier.s_name) AS S_NAME, + ANY_VALUE(supplier.s_address) AS S_ADDRESS FROM tpch.supplier AS supplier JOIN tpch.nation AS nation ON nation.n_name = 'CANADA' AND nation.n_nationkey = supplier.s_nationkey -JOIN _s7 AS _s7 - ON _s7.ps_suppkey = supplier.s_suppkey +JOIN tpch.partsupp AS partsupp + ON partsupp.ps_suppkey = supplier.s_suppkey +JOIN _s5 AS _s5 + ON _s5.l_partkey = partsupp.ps_partkey + AND partsupp.ps_availqty > ( + 0.5 * COALESCE(_s5.sum_l_quantity, 0) + ) +GROUP BY + partsupp.ps_suppkey ORDER BY 1 NULLS FIRST LIMIT 10 diff --git a/tests/test_sql_refsols/tpch_q20_sqlite.sql b/tests/test_sql_refsols/tpch_q20_sqlite.sql index c553dc004..065135776 100644 --- a/tests/test_sql_refsols/tpch_q20_sqlite.sql +++ b/tests/test_sql_refsols/tpch_q20_sqlite.sql @@ -1,39 +1,31 @@ -WITH _s3 AS ( +WITH _s5 AS ( SELECT - l_partkey, - SUM(l_quantity) AS sum_l_quantity - FROM tpch.lineitem - WHERE - CAST(STRFTIME('%Y', l_shipdate) AS INTEGER) = 1994 - GROUP BY - 1 -), _s5 AS ( - SELECT - part.p_partkey, - _s3.sum_l_quantity + lineitem.l_partkey, + SUM(lineitem.l_quantity) AS sum_l_quantity FROM tpch.part AS part - JOIN _s3 AS _s3 - ON _s3.l_partkey = part.p_partkey + JOIN tpch.lineitem AS lineitem + ON CAST(STRFTIME('%Y', lineitem.l_shipdate) AS INTEGER) = 1994 + AND lineitem.l_partkey = part.p_partkey WHERE part.p_name LIKE 'forest%' -), _s7 AS ( - SELECT DISTINCT - partsupp.ps_suppkey - FROM tpch.partsupp AS partsupp - JOIN _s5 AS _s5 - ON _s5.p_partkey = partsupp.ps_partkey - AND partsupp.ps_availqty > ( - 0.5 * COALESCE(_s5.sum_l_quantity, 0) - ) + GROUP BY + 1 ) SELECT - supplier.s_name AS S_NAME, - supplier.s_address AS S_ADDRESS + MAX(supplier.s_name) AS S_NAME, + MAX(supplier.s_address) AS S_ADDRESS FROM tpch.supplier AS supplier JOIN tpch.nation AS nation ON nation.n_name = 'CANADA' AND nation.n_nationkey = supplier.s_nationkey -JOIN _s7 AS _s7 - ON _s7.ps_suppkey = supplier.s_suppkey +JOIN tpch.partsupp AS partsupp + ON partsupp.ps_suppkey = supplier.s_suppkey +JOIN _s5 AS _s5 + ON _s5.l_partkey = partsupp.ps_partkey + AND partsupp.ps_availqty > ( + 0.5 * COALESCE(_s5.sum_l_quantity, 0) + ) +GROUP BY + partsupp.ps_suppkey ORDER BY 1 LIMIT 10 diff --git a/tests/test_sql_refsols/tpch_q21_ansi.sql b/tests/test_sql_refsols/tpch_q21_ansi.sql index d6d5ad4c5..a53a1e9b5 100644 --- a/tests/test_sql_refsols/tpch_q21_ansi.sql +++ b/tests/test_sql_refsols/tpch_q21_ansi.sql @@ -38,8 +38,7 @@ WITH _t5 AS ( AND lineitem.l_orderkey = orders.o_orderkey ), _s13 AS ( SELECT - _t3.anything_l_suppkey, - COUNT(*) AS n_rows + _t3.anything_l_suppkey FROM _t3 AS _t3 JOIN _s11 AS _s11 ON _s11.l_linenumber = _t3.l_linenumber @@ -47,17 +46,17 @@ WITH _t5 AS ( AND _s11.o_orderkey = _t3.o_orderkey WHERE _t3.anything_o_orderstatus = 'F' - GROUP BY - 1 ) SELECT - supplier.s_name AS S_NAME, - COALESCE(_s13.n_rows, 0) AS NUMWAIT + ANY_VALUE(supplier.s_name) AS S_NAME, + COUNT(_s13.anything_l_suppkey) AS NUMWAIT FROM tpch.supplier AS supplier JOIN tpch.nation AS nation ON nation.n_name = 'SAUDI ARABIA' AND nation.n_nationkey = supplier.s_nationkey LEFT JOIN _s13 AS _s13 ON _s13.anything_l_suppkey = supplier.s_suppkey +GROUP BY + supplier.s_suppkey ORDER BY 2 DESC, 1 diff --git a/tests/test_sql_refsols/tpch_q21_mysql.sql b/tests/test_sql_refsols/tpch_q21_mysql.sql index d96bf2842..302c196ca 100644 --- a/tests/test_sql_refsols/tpch_q21_mysql.sql +++ b/tests/test_sql_refsols/tpch_q21_mysql.sql @@ -42,8 +42,7 @@ WITH _t5 AS ( 3 ), _s13 AS ( SELECT - _t3.anything_l_suppkey, - COUNT(*) AS n_rows + _t3.anything_l_suppkey FROM _t3 AS _t3 LEFT JOIN _u_0 AS _u_0 ON _t3.l_linenumber = _u_0._u_1 @@ -51,17 +50,17 @@ WITH _t5 AS ( AND _t3.o_orderkey = _u_0._u_3 WHERE _t3.anything_o_orderstatus = 'F' AND _u_0._u_1 IS NULL - GROUP BY - 1 ) SELECT - SUPPLIER.s_name COLLATE utf8mb4_bin AS S_NAME, - COALESCE(_s13.n_rows, 0) AS NUMWAIT + ANY_VALUE(SUPPLIER.s_name) COLLATE utf8mb4_bin AS S_NAME, + COUNT(_s13.anything_l_suppkey) AS NUMWAIT FROM tpch.SUPPLIER AS SUPPLIER JOIN tpch.NATION AS NATION ON NATION.n_name = 'SAUDI ARABIA' AND NATION.n_nationkey = SUPPLIER.s_nationkey LEFT JOIN _s13 AS _s13 ON SUPPLIER.s_suppkey = _s13.anything_l_suppkey +GROUP BY + SUPPLIER.s_suppkey ORDER BY 2 DESC, 1 diff --git a/tests/test_sql_refsols/tpch_q21_postgres.sql b/tests/test_sql_refsols/tpch_q21_postgres.sql index a69ae973d..79c4527cd 100644 --- a/tests/test_sql_refsols/tpch_q21_postgres.sql +++ b/tests/test_sql_refsols/tpch_q21_postgres.sql @@ -42,8 +42,7 @@ WITH _t5 AS ( 3 ), _s13 AS ( SELECT - _t3.anything_l_suppkey, - COUNT(*) AS n_rows + _t3.anything_l_suppkey FROM _t3 AS _t3 LEFT JOIN _u_0 AS _u_0 ON _t3.l_linenumber = _u_0._u_1 @@ -51,17 +50,17 @@ WITH _t5 AS ( AND _t3.o_orderkey = _u_0._u_3 WHERE _t3.anything_o_orderstatus = 'F' AND _u_0._u_1 IS NULL - GROUP BY - 1 ) SELECT - supplier.s_name AS S_NAME, - COALESCE(_s13.n_rows, 0) AS NUMWAIT + MAX(supplier.s_name) AS S_NAME, + COUNT(_s13.anything_l_suppkey) AS NUMWAIT FROM tpch.supplier AS supplier JOIN tpch.nation AS nation ON nation.n_name = 'SAUDI ARABIA' AND nation.n_nationkey = supplier.s_nationkey LEFT JOIN _s13 AS _s13 ON _s13.anything_l_suppkey = supplier.s_suppkey +GROUP BY + supplier.s_suppkey ORDER BY 2 DESC NULLS LAST, 1 NULLS FIRST diff --git a/tests/test_sql_refsols/tpch_q21_snowflake.sql b/tests/test_sql_refsols/tpch_q21_snowflake.sql index 8ee67cd23..aa6a0445b 100644 --- a/tests/test_sql_refsols/tpch_q21_snowflake.sql +++ b/tests/test_sql_refsols/tpch_q21_snowflake.sql @@ -42,8 +42,7 @@ WITH _t5 AS ( 3 ), _s13 AS ( SELECT - _t3.anything_l_suppkey, - COUNT(*) AS n_rows + _t3.anything_l_suppkey FROM _t3 AS _t3 LEFT JOIN _u_0 AS _u_0 ON _t3.l_linenumber = _u_0._u_1 @@ -51,17 +50,17 @@ WITH _t5 AS ( AND _t3.o_orderkey = _u_0._u_3 WHERE _t3.anything_o_orderstatus = 'F' AND _u_0._u_1 IS NULL - GROUP BY - 1 ) SELECT - supplier.s_name AS S_NAME, - COALESCE(_s13.n_rows, 0) AS NUMWAIT + ANY_VALUE(supplier.s_name) AS S_NAME, + COUNT(_s13.anything_l_suppkey) AS NUMWAIT FROM tpch.supplier AS supplier JOIN tpch.nation AS nation ON nation.n_name = 'SAUDI ARABIA' AND nation.n_nationkey = supplier.s_nationkey LEFT JOIN _s13 AS _s13 ON _s13.anything_l_suppkey = supplier.s_suppkey +GROUP BY + supplier.s_suppkey ORDER BY 2 DESC NULLS LAST, 1 NULLS FIRST diff --git a/tests/test_sql_refsols/tpch_q21_sqlite.sql b/tests/test_sql_refsols/tpch_q21_sqlite.sql index 012796bc0..c5ceb7d67 100644 --- a/tests/test_sql_refsols/tpch_q21_sqlite.sql +++ b/tests/test_sql_refsols/tpch_q21_sqlite.sql @@ -42,8 +42,7 @@ WITH _t5 AS ( 3 ), _s13 AS ( SELECT - _t3.anything_l_suppkey, - COUNT(*) AS n_rows + _t3.anything_l_suppkey FROM _t3 AS _t3 LEFT JOIN _u_0 AS _u_0 ON _t3.l_linenumber = _u_0._u_1 @@ -51,17 +50,17 @@ WITH _t5 AS ( AND _t3.o_orderkey = _u_0._u_3 WHERE _t3.anything_o_orderstatus = 'F' AND _u_0._u_1 IS NULL - GROUP BY - 1 ) SELECT - supplier.s_name AS S_NAME, - COALESCE(_s13.n_rows, 0) AS NUMWAIT + MAX(supplier.s_name) AS S_NAME, + COUNT(_s13.anything_l_suppkey) AS NUMWAIT FROM tpch.supplier AS supplier JOIN tpch.nation AS nation ON nation.n_name = 'SAUDI ARABIA' AND nation.n_nationkey = supplier.s_nationkey LEFT JOIN _s13 AS _s13 ON _s13.anything_l_suppkey = supplier.s_suppkey +GROUP BY + supplier.s_suppkey ORDER BY 2 DESC, 1 diff --git a/tests/test_sql_refsols/tpch_q22_ansi.sql b/tests/test_sql_refsols/tpch_q22_ansi.sql index 807ca5707..04ca82b32 100644 --- a/tests/test_sql_refsols/tpch_q22_ansi.sql +++ b/tests/test_sql_refsols/tpch_q22_ansi.sql @@ -5,13 +5,6 @@ WITH _s0 AS ( WHERE SUBSTRING(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17') AND c_acctbal > 0.0 -), _s3 AS ( - SELECT - o_custkey, - COUNT(*) AS n_rows - FROM tpch.orders - GROUP BY - 1 ) SELECT SUBSTRING(customer.c_phone, 1, 2) AS CNTRY_CODE, @@ -21,10 +14,8 @@ FROM _s0 AS _s0 JOIN tpch.customer AS customer ON SUBSTRING(customer.c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17') AND _s0.avg_c_acctbal < customer.c_acctbal -LEFT JOIN _s3 AS _s3 - ON _s3.o_custkey = customer.c_custkey -WHERE - _s3.n_rows = 0 OR _s3.n_rows IS NULL +JOIN tpch.orders AS orders + ON customer.c_custkey = orders.o_custkey GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/tpch_q22_mysql.sql b/tests/test_sql_refsols/tpch_q22_mysql.sql index 2f44d9b27..66a16f143 100644 --- a/tests/test_sql_refsols/tpch_q22_mysql.sql +++ b/tests/test_sql_refsols/tpch_q22_mysql.sql @@ -5,10 +5,9 @@ WITH _s0 AS ( WHERE c_acctbal > 0.0 AND SUBSTRING(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17') -), _s3 AS ( +), _u_0 AS ( SELECT - o_custkey, - COUNT(*) AS n_rows + o_custkey AS _u_1 FROM tpch.ORDERS GROUP BY 1 @@ -21,10 +20,10 @@ FROM _s0 AS _s0 JOIN tpch.CUSTOMER AS CUSTOMER ON CUSTOMER.c_acctbal > _s0.avg_c_acctbal AND SUBSTRING(CUSTOMER.c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17') -LEFT JOIN _s3 AS _s3 - ON CUSTOMER.c_custkey = _s3.o_custkey +LEFT JOIN _u_0 AS _u_0 + ON CUSTOMER.c_custkey = _u_0._u_1 WHERE - _s3.n_rows = 0 OR _s3.n_rows IS NULL + _u_0._u_1 IS NULL GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/tpch_q22_postgres.sql b/tests/test_sql_refsols/tpch_q22_postgres.sql index b881feea5..c34da6644 100644 --- a/tests/test_sql_refsols/tpch_q22_postgres.sql +++ b/tests/test_sql_refsols/tpch_q22_postgres.sql @@ -5,10 +5,9 @@ WITH _s0 AS ( WHERE SUBSTRING(c_phone FROM 1 FOR 2) IN ('13', '31', '23', '29', '30', '18', '17') AND c_acctbal > 0.0 -), _s3 AS ( +), _u_0 AS ( SELECT - o_custkey, - COUNT(*) AS n_rows + o_custkey AS _u_1 FROM tpch.orders GROUP BY 1 @@ -21,10 +20,10 @@ FROM _s0 AS _s0 JOIN tpch.customer AS customer ON SUBSTRING(customer.c_phone FROM 1 FOR 2) IN ('13', '31', '23', '29', '30', '18', '17') AND _s0.avg_c_acctbal < customer.c_acctbal -LEFT JOIN _s3 AS _s3 - ON _s3.o_custkey = customer.c_custkey +LEFT JOIN _u_0 AS _u_0 + ON _u_0._u_1 = customer.c_custkey WHERE - _s3.n_rows = 0 OR _s3.n_rows IS NULL + _u_0._u_1 IS NULL GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/tpch_q22_snowflake.sql b/tests/test_sql_refsols/tpch_q22_snowflake.sql index 96ff00430..8f8901a3c 100644 --- a/tests/test_sql_refsols/tpch_q22_snowflake.sql +++ b/tests/test_sql_refsols/tpch_q22_snowflake.sql @@ -5,10 +5,9 @@ WITH _s0 AS ( WHERE SUBSTRING(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17') AND c_acctbal > 0.0 -), _s3 AS ( +), _u_0 AS ( SELECT - o_custkey, - COUNT(*) AS n_rows + o_custkey AS _u_1 FROM tpch.orders GROUP BY 1 @@ -21,10 +20,10 @@ FROM _s0 AS _s0 JOIN tpch.customer AS customer ON SUBSTRING(customer.c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17') AND _s0.avg_c_acctbal < customer.c_acctbal -LEFT JOIN _s3 AS _s3 - ON _s3.o_custkey = customer.c_custkey +LEFT JOIN _u_0 AS _u_0 + ON _u_0._u_1 = customer.c_custkey WHERE - _s3.n_rows = 0 OR _s3.n_rows IS NULL + _u_0._u_1 IS NULL GROUP BY 1 ORDER BY diff --git a/tests/test_sql_refsols/tpch_q22_sqlite.sql b/tests/test_sql_refsols/tpch_q22_sqlite.sql index 807ca5707..ac8ce5c6b 100644 --- a/tests/test_sql_refsols/tpch_q22_sqlite.sql +++ b/tests/test_sql_refsols/tpch_q22_sqlite.sql @@ -5,10 +5,9 @@ WITH _s0 AS ( WHERE SUBSTRING(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17') AND c_acctbal > 0.0 -), _s3 AS ( +), _u_0 AS ( SELECT - o_custkey, - COUNT(*) AS n_rows + o_custkey AS _u_1 FROM tpch.orders GROUP BY 1 @@ -21,10 +20,10 @@ FROM _s0 AS _s0 JOIN tpch.customer AS customer ON SUBSTRING(customer.c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17') AND _s0.avg_c_acctbal < customer.c_acctbal -LEFT JOIN _s3 AS _s3 - ON _s3.o_custkey = customer.c_custkey +LEFT JOIN _u_0 AS _u_0 + ON _u_0._u_1 = customer.c_custkey WHERE - _s3.n_rows = 0 OR _s3.n_rows IS NULL + _u_0._u_1 IS NULL GROUP BY 1 ORDER BY diff --git a/tests/test_unqualified_node.py b/tests/test_unqualified_node.py index 5d4b504da..5f2347d3e 100644 --- a/tests/test_unqualified_node.py +++ b/tests/test_unqualified_node.py @@ -478,7 +478,7 @@ def test_unqualified_to_string( ), pytest.param( impl_tpch_q22, - "TPCH.CALCULATE(global_avg_balance=AVG(customers.CALCULATE(cntry_code=SLICE(phone, None, 2, None)).WHERE(ISIN(cntry_code, ['13', '31', '23', '29', '30', '18', '17'])).WHERE((account_balance > 0.0)).account_balance)).customers.CALCULATE(cntry_code=SLICE(phone, None, 2, None)).WHERE(((ISIN(cntry_code, ['13', '31', '23', '29', '30', '18', '17']) & (account_balance > global_avg_balance)) & (COUNT(orders) == 0))).PARTITION(name='countries', by=(cntry_code)).CALCULATE(CNTRY_CODE=cntry_code, NUM_CUSTS=COUNT(customers), TOTACCTBAL=SUM(customers.account_balance)).ORDER_BY(CNTRY_CODE.ASC(na_pos='first'))", + "TPCH.CALCULATE(global_avg_balance=AVG(customers.CALCULATE(cntry_code=SLICE(phone, None, 2, None)).WHERE(ISIN(cntry_code, ['13', '31', '23', '29', '30', '18', '17'])).WHERE((account_balance > 0.0)).account_balance)).customers.CALCULATE(cntry_code=SLICE(phone, None, 2, None)).WHERE(((ISIN(cntry_code, ['13', '31', '23', '29', '30', '18', '17']) & (account_balance > global_avg_balance)) & HASNOT(orders))).PARTITION(name='countries', by=(cntry_code)).CALCULATE(CNTRY_CODE=cntry_code, NUM_CUSTS=COUNT(customers), TOTACCTBAL=SUM(customers.account_balance)).ORDER_BY(CNTRY_CODE.ASC(na_pos='first'))", id="tpch_q22", ), pytest.param(