Skip to content

Commit

Permalink
Merge 4be9fe3 into 901933b
Browse files Browse the repository at this point in the history
  • Loading branch information
twheys committed Dec 7, 2018
2 parents 901933b + 4be9fe3 commit 4e253bb
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 5 deletions.
9 changes: 7 additions & 2 deletions fireant/slicer/queries/builder.py
@@ -1,13 +1,15 @@
import pandas as pd
from typing import (
Dict,
Iterable,
)

import pandas as pd

from fireant.utils import (
format_dimension_key,
format_metric_key,
immutable,
repr_field_key,
)
from pypika import Order
from . import special_cases
Expand Down Expand Up @@ -240,7 +242,10 @@ def __repr__(self):
+ ["filter({})".format(repr(filter))
for filter in self._filters]
+ ["reference({})".format(repr(reference))
for reference in self._references])
for reference in self._references]
+ ["orderby({}, {})".format(repr_field_key(definition.alias),
orientation)
for (definition, orientation) in self._orders])


class DimensionChoicesQueryBuilder(QueryBuilder):
Expand Down
6 changes: 5 additions & 1 deletion fireant/slicer/queries/makers.py
Expand Up @@ -179,9 +179,13 @@ def make_slicer_query(database: Database,
if terms:
query = query.select(*terms)

select_aliases = {el.alias for el in query._selects}
for (term, orientation) in orders:
query = query.orderby(term, order=orientation)

if term.alias not in select_aliases:
query = query.select(term)

return query


Expand All @@ -202,6 +206,7 @@ def make_latest_query(database: Database,

return query


def make_terms_for_metrics(metrics):
return [metric.definition.as_(format_metric_key(metric.key))
for metric in metrics]
Expand Down Expand Up @@ -256,4 +261,3 @@ def make_orders_for_dimensions(dimensions):

return [(definition, None)
for definition in definitions]

20 changes: 18 additions & 2 deletions fireant/tests/slicer/queries/test_build_orderbys.py
@@ -1,8 +1,7 @@
from unittest import TestCase

from pypika import Order

import fireant as f
from pypika import Order
from ..mocks import slicer


Expand Down Expand Up @@ -193,3 +192,20 @@ def test_build_query_order_by_metrics_and_dimensions_with_different_orientations
'FROM "politics"."politician" '
'GROUP BY "$d$timestamp" '
'ORDER BY "$d$timestamp" ASC,"$m$votes" DESC', str(queries[0]))

def test_build_query_order_by_metric_not_in_widget(self):
queries = slicer.data \
.widget(f.DataTablesJS(slicer.metrics.votes)) \
.dimension(slicer.dimensions.timestamp) \
.orderby(slicer.metrics.wins) \
.queries

self.assertEqual(len(queries), 1)

self.assertEqual('SELECT '
'TRUNC("timestamp",\'DD\') "$d$timestamp",'
'SUM("votes") "$m$votes",'
'SUM("is_winner") "$m$wins" '
'FROM "politics"."politician" '
'GROUP BY "$d$timestamp" '
'ORDER BY "$m$wins"', str(queries[0]))
7 changes: 7 additions & 0 deletions fireant/utils.py
Expand Up @@ -237,3 +237,10 @@ def format_dimension_key(key):

def format_metric_key(key):
return format_key(key, 'm')


def repr_field_key(key):
field_type_symbol = key[1]
field_key = key[3:]
field_type = {'m': 'metrics', 'd': 'dimensions'}[field_type_symbol]
return 'slicer.{}.{}'.format(field_type, field_key)

0 comments on commit 4e253bb

Please sign in to comment.