oid oid oid orderby lala

This commit is contained in:
Mike Bayer
2005-10-22 23:25:06 +00:00
parent f313c15e5f
commit dbf38046eb
5 changed files with 20 additions and 10 deletions
+3
View File
@@ -486,6 +486,7 @@ class Mapper(object):
def _compile(self, whereclause = None, order_by = None, **options):
statement = sql.select([self.table], whereclause, order_by = order_by)
statement.order_by(self.primarytable.rowid_column)
# plugin point
for key, value in self.props.iteritems():
value.setup(key, statement, **options)
@@ -1024,8 +1025,10 @@ class EagerLoader(PropertyLoader):
print self.target.name
print str(self.primaryjoin)
statement._outerjoin = sql.outerjoin(towrap, self.secondary, self.primaryjoin).outerjoin(self.target, self.secondaryjoin)
statement.order_by(self.secondary.rowid_column)
else:
statement._outerjoin = towrap.outerjoin(self.target, self.primaryjoin)
statement.order_by(self.target.rowid_column)
statement.append_from(statement._outerjoin)
statement.append_column(self.target)
+5 -3
View File
@@ -124,6 +124,7 @@ class Column(SchemaItem):
self.key = kwargs.get('key', name)
self.primary_key = kwargs.get('primary_key', False)
self.nullable = kwargs.get('nullable', not self.primary_key)
self.hidden = kwargs.get('hidden', False)
self.foreign_key = None
self.sequence = None
self._orig = None
@@ -132,9 +133,10 @@ class Column(SchemaItem):
engine = property(lambda s: s.table.engine)
def _set_parent(self, table):
table.columns[self.key] = self
if self.primary_key:
table.primary_keys.append(self)
if not self.hidden:
table.columns[self.key] = self
if self.primary_key:
table.primary_keys.append(self)
self.table = table
if self.table.engine is not None:
self.type = self.table.engine.type_descriptor(self.type)
+9 -4
View File
@@ -509,7 +509,8 @@ class Join(Selectable):
# TODO: if no onclause, do NATURAL JOIN
self.onclause = onclause
self.isouter = isouter
self.rowid_column = self.left.rowid_column
primary_keys = property (lambda self: [c for c in self.left.columns if c.primary_key] + [c for c in self.right.columns if c.primary_key])
@@ -550,6 +551,7 @@ class Alias(Selectable):
self.name = alias
self.id = self.name
self.count = 0
self.rowid_column = self.selectable.rowid_column._make_proxy(self)
for co in selectable.columns:
co._make_proxy(self)
@@ -622,9 +624,8 @@ class TableImpl(Selectable):
def __init__(self, table):
self.table = table
self.id = self.table.name
self.rowid_column = schema.Column(self.table.engine.rowid_column_name(), types.Integer)
self.rowid_column = schema.Column(self.table.engine.rowid_column_name(), types.Integer, hidden=True)
self.rowid_column._set_parent(table)
del self.table.c[self.rowid_column.key]
def get_from_text(self):
return self.table.name
@@ -772,7 +773,11 @@ class Select(Selectable):
visitor.visit_select(self)
def order_by(self, *clauses):
self.append_clause("ORDER BY", ClauseList(*clauses))
if not hasattr(self, 'order_by_clause'):
self.order_by_clause = ClauseList(*clauses)
self.append_clause("ORDER BY", self.order_by_clause)
else:
self.order_by_clause.clauses += clauses
def select(self, whereclauses = None, **params):
return select([self], whereclauses, **params)
+1 -1
View File
@@ -308,7 +308,7 @@ class EagerTest(MapperSuperTest):
m = mapper(Item, items, properties = dict(
keywords = relation(Keyword, keywords, itemkeywords, lazy = False),
))
l = m.select(order_by=[items.c.item_id, keywords.c.keyword_id])
l = m.select()
self.assert_result(l, Item,
{'item_id' : 1, 'keywords' : (Keyword, [{'keyword_id' : 2}, {'keyword_id' : 4}, {'keyword_id' : 6}])},
{'item_id' : 2, 'keywords' : (Keyword, [{'keyword_id' : 2, 'name':'red'}, {'keyword_id' : 7, 'name':'square'}, {'keyword_id' : 5, 'name':'small'}])},
+2 -2
View File
@@ -10,8 +10,8 @@ __ALL__ = ['db', 'users', 'addresses', 'orders', 'orderitems', 'keywords', 'item
ECHO = testbase.echo
#DBTYPE = 'sqlite_memory'
DBTYPE = 'postgres'
DBTYPE = 'sqlite_memory'
#DBTYPE = 'postgres'
#DBTYPE = 'sqlite_file'
if DBTYPE == 'sqlite_memory':