From d1f05cbaa369d74c75a9eb3eb74e8718bc30f137 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 2 Jan 2006 05:40:37 +0000 Subject: [PATCH] broke apart deafult ordering into oid or primary key. a DB that has no oids will have a None oid_column attribute. --- lib/sqlalchemy/sql.py | 17 +++++++---------- test/mapper.py | 8 ++++---- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 3012708fe5..51b1b51f91 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -487,8 +487,10 @@ class FromClause(Selectable): def default_order_by(self): if not self.engine.default_ordering: return None - else: + elif self.oid_column is not None: return [self.oid_column] + else: + return self.primary_key def hash_key(self): return "FromClause(%s, %s)" % (repr(self.id), repr(self.from_name)) def accept_visitor(self, visitor): @@ -664,8 +666,6 @@ class BinaryClause(ClauseElement, CompareMixin): self.left = self.right self.right = c - - class Join(FromClause): # TODO: put "using" + "natural" concepts in here and make "onclause" optional def __init__(self, left, right, onclause=None, isouter = False, allcols = True): @@ -911,23 +911,20 @@ class TableImpl(FromClause): self.id = self.table.name def _oid_col(self): + # OID remains a little hackish so far if not hasattr(self, '_oid_column'): if self.table.engine.oid_column_name() is not None: self._oid_column = schema.Column(self.table.engine.oid_column_name(), sqltypes.Integer, hidden=True) self._oid_column._set_parent(self.table) else: - if len(self.table.primary_key) > 0: - c = self.table.primary_key[0] - else: - c = self.table.columns[self.table.columns.keys()[0]] - self._oid_column = schema.Column(c.name, c.type, hidden=True) - self._oid_column._set_parent(self.table) + self._oid_column = None return self._oid_column oid_column = property(_oid_col) engine = property(lambda s: s.table.engine) columns = property(lambda self: self.table.columns) - + primary_key = property(lambda self:self.table.primary_key) + def _get_col_by_original(self, column): try: col = self.columns[column.key] diff --git a/test/mapper.py b/test/mapper.py index b3df100408..72c062016a 100644 --- a/test/mapper.py +++ b/test/mapper.py @@ -237,7 +237,7 @@ class DeferredTest(MapperSuperTest): print o2.description self.assert_sql(db, go, [ - ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.oid_column.key, {}), + ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}), ("SELECT orders.description AS orders_description FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3}) ]) @@ -265,7 +265,7 @@ class DeferredTest(MapperSuperTest): o2 = l[2] print o2.opened, o2.description, o2.userident self.assert_sql(db, go, [ - ("SELECT orders.order_id AS orders_order_id FROM orders ORDER BY orders.%s" % orders.oid_column.key, {}), + ("SELECT orders.order_id AS orders_order_id FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}), ("SELECT orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3}) ]) @@ -277,7 +277,7 @@ class DeferredTest(MapperSuperTest): l = m2.select() print l[2].user_id self.assert_sql(db, go, [ - ("SELECT orders.order_id AS orders_order_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.oid_column.key, {}), + ("SELECT orders.order_id AS orders_order_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}), ("SELECT orders.user_id AS orders_user_id FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3}) ]) objectstore.clear() @@ -287,7 +287,7 @@ class DeferredTest(MapperSuperTest): l = m3.select() print l[3].user_id self.assert_sql(db, go, [ - ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.oid_column.key, {}), + ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}), ]) def testdeepoptions(self): -- 2.47.2