diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-03-23 06:17:29 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-03-23 06:17:29 +0000 |
| commit | 67afbfd8af1e57bdd26996f7c0e6b837d489929f (patch) | |
| tree | 7f0dbb39323062b0f3c49f552ebb24128e0893c8 /lib/sqlalchemy/databases | |
| parent | 0d47db421cf2230fb97a1665aca5309913385cdb (diff) | |
| download | sqlalchemy-67afbfd8af1e57bdd26996f7c0e6b837d489929f.tar.gz | |
some adjustments to oracle non-ansi join concatenation, 'row number over' syntax
Diffstat (limited to 'lib/sqlalchemy/databases')
| -rw-r--r-- | lib/sqlalchemy/databases/oracle.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 1a02448e0..c36f4546e 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -227,9 +227,9 @@ class OracleCompiler(ansisql.ANSICompiler): def visit_join(self, join): if self._use_ansi: return ansisql.ANSICompiler.visit_join(self, join) - + self.froms[join] = self.get_from_text(join.left) + ", " + self.get_from_text(join.right) - self.wheres[join] = join.onclause + self.wheres[join] = sql.and_(self.wheres.get(join.left, None), join.onclause) if join.isouter: # if outer join, push on the right side table as the current "outertable" @@ -241,6 +241,8 @@ class OracleCompiler(ansisql.ANSICompiler): join.onclause.accept_visitor(self) self._outertable = outertable + + self.visit_compound(self.wheres[join]) def visit_alias(self, alias): """oracle doesnt like 'FROM table AS alias'. is the AS standard SQL??""" @@ -250,7 +252,7 @@ class OracleCompiler(ansisql.ANSICompiler): def visit_column(self, column): if self._use_ansi: return ansisql.ANSICompiler.visit_column(self, column) - + if column.table is self._outertable: self.strings[column] = "%s.%s(+)" % (column.table.name, column.name) else: @@ -285,7 +287,11 @@ class OracleCompiler(ansisql.ANSICompiler): # to use ROW_NUMBER(), an ORDER BY is required. so here we dig in # as best we can to find some column we can order by # TODO: try to get "oid_column" to be used here - orderby = "%s.rowid ASC" % select.primary_key[0].original.table.name + if len(select.primary_key): + col = select.primary_key[0].original.table.name + else: + col = select.froms[0].name + orderby = "%s.rowid ASC" % col select.append_column(sql.ColumnClause("ROW_NUMBER() OVER (ORDER BY %s)" % orderby).label("ora_rn")) limitselect = sql.select([c for c in select.c if c.key!='ora_rn']) if select.offset is not None: |
