]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
oid oid oid orderby lala
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Oct 2005 23:25:06 +0000 (23:25 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Oct 2005 23:25:06 +0000 (23:25 +0000)
lib/sqlalchemy/mapper.py
lib/sqlalchemy/schema.py
lib/sqlalchemy/sql.py
test/mapper.py
test/tables.py

index 5e39e10f6ee50cb4433dfeea56c51155e33bdc31..c41c5edb019a3ddc899d474779c9bb62252726da 100644 (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)
index 47db789f4b1a10c384ae670271f883b0390fb809..68593e810b49cd3ff8a56efc513e3f77fb9f6103 100644 (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)
index b2272541d1e58b60190c835e028efb13d9f52cc1..bcb02efa498b85b4dc104c8546c24dda5ad4d195 100644 (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)
index 02b476c2d4c61f24c854f2145ee6ee7a2e09f081..f53c9bcfb6f32c40a2b3d1caeb029e0dcee90edc 100644 (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'}])},
index 845077716cfa24191189707d3e39d0fb30a221bf..1c9cf52973123421cb3bcf5e732a4be25dc0b9a1 100644 (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':