diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2005-12-12 01:44:58 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2005-12-12 01:44:58 +0000 |
| commit | 8ed282c3c2eb087f8be662644a703caa7249a227 (patch) | |
| tree | 7c0a82ce747452af26b68824476af901f9358c31 /lib/sqlalchemy | |
| parent | 69ad2955bdb33eb45939a01d95bcff240a2d9fb6 (diff) | |
| download | sqlalchemy-8ed282c3c2eb087f8be662644a703caa7249a227.tar.gz | |
added 'order_by' property to mapper constructor
added 'no_sort' property to mapper _compile method to disable all ordering
mapper _compile will not use its internal order_by if the given statement has an orderby
lazyloader order_by used standalone when loading via mapper
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/mapping/mapper.py | 21 | ||||
| -rw-r--r-- | lib/sqlalchemy/mapping/properties.py | 2 |
2 files changed, 18 insertions, 5 deletions
diff --git a/lib/sqlalchemy/mapping/mapper.py b/lib/sqlalchemy/mapping/mapper.py index 53c8a5b73..390bfbd48 100644 --- a/lib/sqlalchemy/mapping/mapper.py +++ b/lib/sqlalchemy/mapping/mapper.py @@ -40,6 +40,7 @@ class Mapper(object): inherits = None, inherit_condition = None, extension = None, + order_by = False, **kwargs): self.copyargs = { @@ -51,7 +52,8 @@ class Mapper(object): 'is_primary':False, 'inherits':inherits, 'inherit_condition':inherit_condition, - 'extension':extension + 'extension':extension, + 'order_by':order_by } if extension is None: @@ -61,6 +63,7 @@ class Mapper(object): self.hashkey = hashkey self.class_ = class_ self.is_primary = is_primary + self.order_by = order_by if not issubclass(class_, object): raise "Class '%s' is not a new-style class" % class_.__name__ @@ -455,6 +458,15 @@ class Mapper(object): ) def _compile(self, whereclause = None, **kwargs): + no_sort = kwargs.pop('no_sort', False) or (self.order_by is None) + if not no_sort: + if self.order_by: + order_by = self.order_by + else: + order_by = self.table.rowid_column + else: + order_by = None + if self._should_nest(**kwargs): s2 = sql.select(self.table.primary_key, whereclause, use_labels=True, **kwargs) if not kwargs.get('distinct', False): @@ -466,11 +478,12 @@ class Mapper(object): statement = sql.select([self.table], sql.and_(*crit), use_labels=True) if kwargs.has_key('order_by'): statement.order_by(*kwargs['order_by']) - statement.order_by(self.table.rowid_column) + else: + statement.order_by(order_by) else: statement = sql.select([self.table], whereclause, use_labels=True, **kwargs) - if not kwargs.get('distinct', False): - statement.order_by(self.table.rowid_column) + if not kwargs.get('distinct', False) and order_by is not None and kwargs.get('order_by', None) is None: + statement.order_by(order_by) # plugin point # give all the attached properties a chance to modify the query diff --git a/lib/sqlalchemy/mapping/properties.py b/lib/sqlalchemy/mapping/properties.py index 08897f2e6..f8e2b1b1f 100644 --- a/lib/sqlalchemy/mapping/properties.py +++ b/lib/sqlalchemy/mapping/properties.py @@ -502,7 +502,7 @@ class LazyLoader(PropertyLoader): elif self.secondary is not None: order_by = [self.secondary.rowid_column] else: - order_by = [] + order_by = None result = self.mapper.select(self.lazywhere, order_by=order_by, params=params) else: result = [] |
