예제 #1
0
    def result(self, context: TelRootContext) -> TelQueryResult:
        result = self._value.result(context)

        data_source_formula_templates = []

        value_phase = self._value.phase(context)
        if value_phase == self._phase:
            return result

        if value_phase in [TelPhase.dimension_data_source, TelPhase.any]:
            if self.used_taxons(context).has_some():
                if not self._cached_label:
                    self._cached_label = context.new_label

                assert 1 == len(self._value.return_data_sources(context))

                data_source = cast(
                    str, next(ds for ds in list(self._value.return_data_sources(context)) if ds is not None)
                )

                sql = literal_column(safe_quote_identifier(self._cached_label, context.husky_dialect))
                data_source_formula_templates.append(
                    SqlFormulaTemplate(
                        SqlTemplate(compile_query(result.sql, context.husky_dialect)),
                        cast(str, self._cached_label),
                        data_source,
                        cast(Set[str], self._value.template_slugs(context)),
                    )
                )
                template = sql
            else:
                sql = result.sql
                template = result.template

            label = self._cached_label or result.label

            if not self._value.invalid_value(context):
                return TelQueryResult(
                    sql=sql,
                    dialect=context.husky_dialect,
                    aggregations=result.aggregations,
                    dimension_formulas=result.dimension_formulas,
                    data_source_formula_templates=data_source_formula_templates + result.data_source_formula_templates,
                    label=label,
                    exclude_slugs=result.exclude_slugs,
                    template=template,
                )
            else:
                return TelQueryResult(
                    sql,
                    dialect=context.husky_dialect,
                    data_source_formula_templates=data_source_formula_templates,
                    label=label,
                )
        else:
            raise RuntimeError(f'Cannot move to {self._phase} phase from {value_phase}')
예제 #2
0
    def result(self, context: TelRootContext) -> TelQueryResult:
        result = self._value.result(context)

        dimension_formulas = []

        value_phase = self._value.phase(context)
        if value_phase == self._phase:
            return result

        if value_phase in [TelPhase.dimension, TelPhase.any]:
            if self.used_taxons(context).has_some():
                if not self._label and not self._cached_label:
                    self._cached_label = context.new_label

                dimension_formulas.append(
                    PreFormula(
                        result.sql,
                        cast(str, self._label or self._cached_label),
                        # no aggregations are performed in Dimension Builder
                        AggregationDefinition(type=AggregationType.not_set),
                    )
                )
                sql = literal_column(safe_quote_identifier(self._label or self._cached_label, context.husky_dialect))
                template = sql
            else:
                sql = result.sql
                template = result.template

            label = self._label or self._cached_label or result.label

            if not self._value.invalid_value(context):
                return TelQueryResult(
                    sql=sql,
                    dialect=context.husky_dialect,
                    aggregations=result.aggregations,
                    dimension_formulas=dimension_formulas + result.dimension_formulas,
                    data_source_formula_templates=result.data_source_formula_templates,
                    override_mappings=result.override_mappings,
                    label=label,
                    exclude_slugs=result.exclude_slugs,
                    template=template,
                )
            else:
                return TelQueryResult(
                    sql, dialect=context.husky_dialect, dimension_formulas=dimension_formulas, label=label
                )
        else:
            raise RuntimeError(f'Cannot move to {self._phase} phase from {value_phase}')
예제 #3
0
    def result(self, context: TelRootContext) -> TelQueryResult:
        left_result = self._left.result(context)
        right_result = self._right.result(context)

        sql, template = result_with_template(self._sql, left=left_result, right=right_result)

        return TelQueryResult.merge(sql, context.husky_dialect, left_result, right_result, template=template)
 def result(self, context: TelRootContext) -> TelQueryResult:
     sql_expression = literal_column(
         context.tel_dialect.model.taxon_sql_accessor(
             context.husky_context,
             prefix_with_virtual_data_source(context.tel_dialect.virtual_data_source, self._slug),
             False,
             context.tel_dialect,
         )
     )
     return TelQueryResult(sql_expression, context.husky_dialect)
예제 #5
0
    def result(self, context: TelRootContext) -> TelQueryResult:
        taxon = self._taxon

        if self._calculation_expr:
            return self._calculation_expr.result(context)
        else:
            if context.is_benchmark and self._taxon and not self._taxon.is_dimension:
                column_name = f'comparison@{self._slug}'
            else:
                column_name = self._slug

            # Set correct result phase based on the taxon we just got.
            if taxon and TaxonTypeEnum.metric.value == taxon.taxon_type:
                sql = literal_column(safe_quote_identifier(column_name, context.husky_dialect))
            else:
                if self._namespace:
                    sql = literal_column(f'${{{self._slug}}}')
                else:
                    sql = literal_column(safe_quote_identifier(column_name, context.husky_dialect))

            return TelQueryResult(sql, dialect=context.husky_dialect)
예제 #6
0
 def result(self, context: TelRootContext) -> TelQueryResult:
     if self._value.invalid_value(context):
         return TelQueryResult(null(), dialect=context.husky_dialect)
     else:
         return self._value.result(context)
예제 #7
0
 def result(self, context: TelRootContext) -> TelQueryResult:
     return TelQueryResult(true() if self._value else false(), dialect=context.husky_dialect)
예제 #8
0
 def result(self, context: TelRootContext) -> TelQueryResult:
     return TelQueryResult(literal(self._value, String()), dialect=context.husky_dialect)
 def result(self, context: TelRootContext) -> TelQueryResult:
     column_name = f'{safe_quote_identifier(context.tel_dialect.unique_object_name, context.husky_dialect)}.{quote_identifier(self._name, context.husky_dialect)}'
     return TelQueryResult(literal_column(column_name), context.husky_dialect)