diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-05-09 23:58:30 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-05-09 23:58:30 +0000 |
| commit | d3621ae961a869c6bdb68dc8738bb732d5b00dc1 (patch) | |
| tree | 44e74c9448322ead4058ccaec38bf9715f3858bc /lib/sqlalchemy/orm | |
| parent | 6935add67eab74a2e64d86667059f7f0e476a6a5 (diff) | |
| download | sqlalchemy-d3621ae961a869c6bdb68dc8738bb732d5b00dc1.tar.gz | |
- fixed a fairly critical bug in clause adaption/corresponding column in conjunction with annotations
- implicit order by is removed, modified many tests to explicitly set ordering, probably many more to go
once it hits the buildbot.
Diffstat (limited to 'lib/sqlalchemy/orm')
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 12 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/properties.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 21 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 15 |
4 files changed, 20 insertions, 30 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index f8cf4e6ed..234f33905 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -111,7 +111,12 @@ class Mapper(object): self.entity_name = entity_name self.primary_key_argument = primary_key self.non_primary = non_primary - self.order_by = order_by + + if order_by: + self.order_by = util.to_list(order_by) + else: + self.order_by = order_by + self.always_refresh = always_refresh self.version_id_col = version_id_col self.concrete = concrete @@ -460,8 +465,9 @@ class Mapper(object): for mapper in self.iterate_to_root(): util.reset_cached(mapper, '_equivalent_columns') - if self.order_by is False: + if self.order_by is False and not self.concrete and self.inherits.order_by is not False: self.order_by = self.inherits.order_by + self.polymorphic_map = self.inherits.polymorphic_map self.batch = self.inherits.batch self.inherits._inheriting_mappers.add(self) @@ -489,7 +495,7 @@ class Mapper(object): raise sa_exc.ArgumentError("Mapper '%s' specifies a polymorphic_identity of '%s', but no mapper in it's hierarchy specifies the 'polymorphic_on' column argument" % (str(self), self.polymorphic_identity)) self.polymorphic_map[self.polymorphic_identity] = self self._identity_class = self.class_ - + if self.mapped_table is None: raise sa_exc.ArgumentError("Mapper '%s' does not have a mapped_table specified. (Are you using the return value of table.create()? It no longer has a return value.)" % str(self)) diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index fc2e90189..7f0353d49 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -521,7 +521,7 @@ class PropertyLoader(StrategizedProperty): self.target = self.mapper.mapped_table self.table = self.mapper.mapped_table - + if self.cascade.delete_orphan: if self.parent.class_ is self.mapper.class_: raise sa_exc.ArgumentError("In relationship '%s', can't establish 'delete-orphan' cascade " diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index e39287b77..31d85b15a 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -1274,7 +1274,7 @@ class Query(object): context.adapter = sql_util.ColumnAdapter(inner, equivs) statement = sql.select([inner] + context.secondary_columns, for_update=for_update, use_labels=labels) - + from_clause = inner for eager_join in eager_joins: # EagerLoader places a 'stop_on' attribute on the join, @@ -1443,19 +1443,12 @@ class _MapperEntity(_QueryEntity): adapter = self._get_entity_clauses(query, context) - if self.primary_entity: - if context.order_by is False: - # the "default" ORDER BY use case applies only to "mapper zero". the "from clause" default should - # go away in 0.5 (or...maybe 0.6). - if self.mapper.order_by: - context.order_by = self.mapper.order_by - elif context.from_clause: - context.order_by = context.from_clause.default_order_by() - else: - context.order_by = self.selectable.default_order_by() - if context.order_by and adapter: - context.order_by = adapter.adapt_list(util.to_list(context.order_by)) - + if context.order_by is False and self.mapper.order_by: + context.order_by = self.mapper.order_by + + if context.order_by and adapter: + context.order_by = adapter.adapt_list(util.to_list(context.order_by)) + for value in self.mapper._iterate_polymorphic_properties(self._with_polymorphic): if query._only_load_props and value.key not in query._only_load_props: continue diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 8ae3042a6..660ed35a8 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -476,11 +476,9 @@ class LoadLazyAttribute(object): if self.options: q = q._conditional_options(*self.options) return q.get(ident) - - if prop.order_by is not False: + + if prop.order_by: q = q.order_by(prop.order_by) - elif prop.secondary is not None and prop.secondary.default_order_by() is not None: - q = q.order_by(prop.secondary.default_order_by()) if self.options: q = q._conditional_options(*self.options) @@ -605,14 +603,7 @@ class EagerLoader(AbstractRelationLoader): col = adapter.columns[col] context.primary_columns.append(col) - if self.parent_property.order_by is False: - if self.parent_property.secondaryjoin: - default_order_by = eagerjoin.left.right.default_order_by() - else: - default_order_by = eagerjoin.right.default_order_by() - if default_order_by: - context.eager_order_by += default_order_by - elif self.parent_property.order_by: + if self.parent_property.order_by: context.eager_order_by += eagerjoin._target_adapter.copy_and_process(util.to_list(self.parent_property.order_by)) return clauses |
