From 705f308452b0741747c27ee4edcd75f2ec0e6ae8 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 1 Jan 2006 21:08:22 +0000 Subject: rowid_column becomes more like the "order by column". 'default_ordering' flag sent to create_engine enables whether or not the rowid_column on a Table will be None or not. mappers/relations will by default use the rowid_column for ordering if its not None, else theres no default ordering. still should better define 'default_ordering'/'rowid_column' relationship since its a little kludgy. --- lib/sqlalchemy/sql.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'lib/sqlalchemy/sql.py') diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 79af19cc0..65246cdf2 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -904,10 +904,25 @@ class TableImpl(FromClause): def __init__(self, table): self.table = table self.id = self.table.name - self._rowid_column = schema.Column(self.table.engine.rowid_column_name(), sqltypes.Integer, hidden=True) - self._rowid_column._set_parent(table) - - rowid_column = property(lambda s: s._rowid_column) + + def _rowid_col(self): + if not self.table.engine.default_ordering: + return None + + if not hasattr(self, '_rowid_column'): + if self.table.engine.rowid_column_name() is not None: + self._rowid_column = schema.Column(self.table.engine.rowid_column_name(), sqltypes.Integer, hidden=True) + self._rowid_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._rowid_column = schema.Column(c.name, c.type, hidden=True) + self._rowid_column._set_parent(self.table) + return self._rowid_column + + rowid_column = property(_rowid_col) engine = property(lambda s: s.table.engine) columns = property(lambda self: self.table.columns) -- cgit v1.2.1