Skip to content

Commit

Permalink
Upgraded pypika to 0.9.4 and adapted the queries in the tests
Browse files Browse the repository at this point in the history
  • Loading branch information
twheys committed Dec 13, 2017
1 parent 93325c8 commit d3ceacf
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 74 deletions.
24 changes: 15 additions & 9 deletions fireant/slicer/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@
from itertools import chain

import pandas as pd
from pypika import (
JoinType,
MySQLQuery,
PostgreSQLQuery,
RedshiftQuery,
)

from fireant import utils
from fireant.slicer.references import (
Delta,
DeltaPercentage,
YoY,
)
from pypika import (
JoinType,
MySQLQuery,
PostgreSQLQuery,
RedshiftQuery,
)

query_logger = logging.getLogger('fireant.query_log$')

Expand Down Expand Up @@ -222,7 +222,8 @@ def _build_data_query(self, database, table, joins, metrics, dimensions,
if pagination:
return self._add_pagination(query, pagination)

return self._add_sorting(query, list(dimensions.values()))
return self._add_sorting(query, [query.field(dkey).as_(alias)
for alias, dkey in dimensions.items()])

def _build_reference_query(self, query, database, references, table, joins, metrics, dimensions, dfilters,
mfilters, rollup, pagination):
Expand Down Expand Up @@ -280,7 +281,7 @@ def _build_reference_query(self, query, database, references, table, joins, metr
if pagination:
return self._add_pagination(wrapper_query, pagination)

return self._add_sorting(wrapper_query, [query.field(dkey) for dkey in dimensions.keys()])
return self._add_sorting(wrapper_query, [query.field(dkey).as_(alias) for alias, dkey in dimensions.items()])

def _build_dimension_query(self, table, joins, dimensions, filters, limit=None):
query = self.query_cls.from_(table).distinct()
Expand Down Expand Up @@ -358,8 +359,13 @@ def _add_sorting(query, dimensions):
def _add_pagination(query, pagination):
""" Add offset, limit and order pagination to the query """
query = query[pagination.offset: pagination.limit]
select_mapping = {s.alias:s for s in query._selects}
for key, order in pagination.order:
query = query.orderby(key, order=order)
pagination_field = select_mapping[key]
if not pagination_field:
raise Exception("Invalid metric or dimension key used for pagination: {key}"
.format(key=key))
query = query.orderby(pagination_field, order=order)
return query

@staticmethod
Expand Down
Loading

0 comments on commit d3ceacf

Please sign in to comment.