summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-05-09 23:58:30 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-05-09 23:58:30 +0000
commitd3621ae961a869c6bdb68dc8738bb732d5b00dc1 (patch)
tree44e74c9448322ead4058ccaec38bf9715f3858bc /lib/sqlalchemy/orm
parent6935add67eab74a2e64d86667059f7f0e476a6a5 (diff)
downloadsqlalchemy-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.py12
-rw-r--r--lib/sqlalchemy/orm/properties.py2
-rw-r--r--lib/sqlalchemy/orm/query.py21
-rw-r--r--lib/sqlalchemy/orm/strategies.py15
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