summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2005-10-22 23:25:06 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2005-10-22 23:25:06 +0000
commitdbf38046eb69d3de25828650af2a403ddff4eb9d (patch)
treefb782e61e6e011ab998af04b2d7bcf70bba4ac1a
parentf313c15e5f61c78bc1ed0cc8deb47e0e652848c6 (diff)
downloadsqlalchemy-dbf38046eb69d3de25828650af2a403ddff4eb9d.tar.gz
oid oid oid orderby lala
-rw-r--r--lib/sqlalchemy/mapper.py3
-rw-r--r--lib/sqlalchemy/schema.py8
-rw-r--r--lib/sqlalchemy/sql.py13
-rw-r--r--test/mapper.py2
-rw-r--r--test/tables.py4
5 files changed, 20 insertions, 10 deletions
diff --git a/lib/sqlalchemy/mapper.py b/lib/sqlalchemy/mapper.py
index 5e39e10f6..c41c5edb0 100644
--- a/lib/sqlalchemy/mapper.py
+++ b/lib/sqlalchemy/mapper.py
@@ -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)
diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py
index 47db789f4..68593e810 100644
--- a/lib/sqlalchemy/schema.py
+++ b/lib/sqlalchemy/schema.py
@@ -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)
diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py
index b2272541d..bcb02efa4 100644
--- a/lib/sqlalchemy/sql.py
+++ b/lib/sqlalchemy/sql.py
@@ -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)
diff --git a/test/mapper.py b/test/mapper.py
index 02b476c2d..f53c9bcfb 100644
--- a/test/mapper.py
+++ b/test/mapper.py
@@ -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'}])},
diff --git a/test/tables.py b/test/tables.py
index 845077716..1c9cf5297 100644
--- a/test/tables.py
+++ b/test/tables.py
@@ -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':