summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-03-29 16:31:31 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-03-29 16:31:31 +0000
commit6a1970e978bea1fc4a95b17f69ce0af65d424806 (patch)
tree2dc5c105fc6d551012714dac4cafe7de08b5ba96 /lib/sqlalchemy
parent4fef0a23a175e64475955a67dd557347cc99f19a (diff)
downloadsqlalchemy-6a1970e978bea1fc4a95b17f69ce0af65d424806.tar.gz
turned starargs conversion to a decorator, per jek's advice. select().order_by()/group_by() already take *args.
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/query.py14
-rw-r--r--lib/sqlalchemy/util.py16
2 files changed, 17 insertions, 13 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 8c0f1335d..1d4b24e0c 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -529,24 +529,26 @@ class Query(object):
q = self._no_statement("order_by")
if self._aliases_tail:
- criterion = [expression._literal_as_text(o) for o in util.starargs_as_list(*criterion)]
+ criterion = [expression._literal_as_text(o) for o in criterion]
criterion = self._aliases_tail.adapt_list(criterion)
if q._order_by is False:
- q._order_by = util.starargs_as_list(*criterion)
+ q._order_by = criterion
else:
- q._order_by = q._order_by + util.starargs_as_list(*criterion)
+ q._order_by = q._order_by + criterion
return q
-
+ order_by = util.array_as_starargs_decorator(order_by)
+
def group_by(self, *criterion):
"""apply one or more GROUP BY criterion to the query and return the newly resulting ``Query``"""
q = self._no_statement("group_by")
if q._group_by is False:
- q._group_by = util.starargs_as_list(*criterion)
+ q._group_by = criterion
else:
- q._group_by = q._group_by + util.starargs_as_list(*criterion)
+ q._group_by = q._group_by + criterion
return q
+ group_by = util.array_as_starargs_decorator(group_by)
def having(self, criterion):
"""apply a HAVING criterion to the query and return the newly resulting ``Query``."""
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py
index 6919d1557..26b6dbe9a 100644
--- a/lib/sqlalchemy/util.py
+++ b/lib/sqlalchemy/util.py
@@ -188,15 +188,17 @@ def to_list(x, default=None):
else:
return x
-def starargs_as_list(*args):
- """interpret the given *args as either a list of *args,
- or detect if it's a single list and return that.
+def array_as_starargs_decorator(func):
+ """Interpret a single positional array argument as
+ *args for the decorated method.
"""
- if len(args) == 1:
- return to_list(args[0], [])
- else:
- return list(args)
+ def starargs_as_list(self, *args, **kwargs):
+ if len(args) == 1:
+ return func(self, *to_list(args[0], []), **kwargs)
+ else:
+ return func(self, *args, **kwargs)
+ return starargs_as_list
def to_set(x):
if x is None: