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)
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)
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
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)
# 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])
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)
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
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)
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'}])},
ECHO = testbase.echo
-#DBTYPE = 'sqlite_memory'
-DBTYPE = 'postgres'
+DBTYPE = 'sqlite_memory'
+#DBTYPE = 'postgres'
#DBTYPE = 'sqlite_file'
if DBTYPE == 'sqlite_memory':