SELECT count(*), flavor
FROM coffees
- WHERE time BETWEEN
+ WHERE (coffees.time BETWEEN
{dtf}
- AND {dtt}
+ AND {dtt})
GROUP BY flavor
"""
elif q == "get_drinkers_of":
if isinstance(b, tuple) or isinstance(b, list):
assert len(b) > 0
- f = f"WHERE flavor = '{b[0]}'"
+ f = f"WHERE (flavor = '{b[0]}'"
for i in b[1:]:
f += f" OR flavor = '{i}'"
+ f += ")"
else:
assert b != ""
f = f"WHERE flavor = '{b}'"
return f"""
SELECT count(*), users.name FROM coffees
- LEFT JOIN identifiers on coffees.id = identifiers.userid
- LEFT JOIN users on identifiers.userid = users.id
+ INNER JOIN identifiers on coffees.id = identifiers.id
+ INNER JOIN users on identifiers.userid = users.id
{f}
- AND coffees.time BETWEEN
+ AND (coffees.time BETWEEN
{dtf}
- AND {dtt}
- GROUP BY identifiers.userid
+ AND {dtt})
+ GROUP BY users.id
"""
top.sort(key=lambda x: (x[1], x[0]), reverse=True)
return tuple(top)
- def getTopMateDrinkers(self):
+ def get_top_mate_drinkers(self):
"""Return list of pairs of name, count for Mate drinkers."""
users = {}
que = Q("get_drinkers_of", "Club-Mate 0,5 l")
top.sort(key=lambda x: (x[1], x[0]), reverse=True)
return tuple(top)
- def getDrunkSum(self, *args, **kwargs):
+ def get_drunk_sum(self, flavor, dtf, dtt):
"""Return list of drunken ``flavor`` from ``dtf`` to ``dtt``.
Keyword arguments:
dtf -- Date and time *from*.
dtt -- Date and time *to*.
"""
- assert ((len(args) == 3 and len(kwargs) == 0)
- or (len(args) == 0 and len(kwargs) == 3))
- if args:
- flavor = args[0]
- dtf = args[1]
- dtt = args[2]
- elif kwargs:
- flavor = kwargs["flavor"]
- dtf = kwargs["dtf"]
- dtt = kwargs["dtt"]
que = Q("get_drinkers_of", flavor.split(";"), (dtf, dtt))
drunk = []
for (cnt, un) in self.cur.execute(que):
drunk.append((un, cnt))
return tuple(drunk)
- def getDrunkList(self, *args, **kwargs):
+ def get_drunk_list(self, flavor, dtf, dtt):
"""Return dict of lists of drunken ``flavor`` from ``dtf`` to ``dtt``.
Keyword arguments:
dtf -- Date and time *from*.
dtt -- Date and time *to*.
"""
- assert ((len(args) == 3 and len(kwargs) == 0)
- or (len(args) == 0 and len(kwargs) == 3))
- if args:
- flavor = args[0]
- dtf = args[1]
- dtt = args[2]
- elif kwargs:
- flavor = kwargs["flavor"]
- dtf = kwargs["dtf"]
- dtt = kwargs["dtt"]
flavors = flavor.split(";")
drunk = {}
i = 0