diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-08-25 20:08:52 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-08-25 20:08:52 +0000 |
commit | b48e0147ab03e267f01aa7270172905abe0867df (patch) | |
tree | 7f97f37112206e30d8a73a7c2091dda125d7cf80 /lib/sqlalchemy/dialects/oracle/base.py | |
parent | 567ea2faefe67c6ad2608855b21eb930a41c69e8 (diff) | |
download | sqlalchemy-b48e0147ab03e267f01aa7270172905abe0867df.tar.gz |
- refine oracle returning some more to use purely positional approach
Diffstat (limited to 'lib/sqlalchemy/dialects/oracle/base.py')
-rw-r--r-- | lib/sqlalchemy/dialects/oracle/base.py | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index ff1b8043d..399f90035 100644 --- a/lib/sqlalchemy/dialects/oracle/base.py +++ b/lib/sqlalchemy/dialects/oracle/base.py @@ -501,20 +501,23 @@ class OracleCompiler(compiler.SQLCompiler): def returning_clause(self, stmt, returning_cols): - def create_out_param(col, i): - bindparam = sql.outparam("ret_%d" % i, type_=col.type) - self.binds[bindparam.key] = bindparam - return self.bindparam_string(self._truncate_bindparam(bindparam)) - - columnlist = list(expression._select_iterables(returning_cols)) - - columns = [ - self._label_select_column(None, c, True, False, {}, - within_columns_clause=False) - for c in columnlist - ] - - binds = [create_out_param(c, i) for i, c in enumerate(columnlist)] + columns = [] + binds = [] + for i, column in enumerate(expression._select_iterables(returning_cols)): + if column.type._has_column_expression: + col_expr = column.type.column_expression(column) + else: + col_expr = column + outparam = sql.outparam("ret_%d" % i, type_=column.type) + self.binds[outparam.key] = outparam + binds.append(self.bindparam_string(self._truncate_bindparam(outparam))) + columns.append(self.process(col_expr, within_columns_clause=False)) + self.result_map[outparam.key] = ( + outparam.key, + (column, getattr(column, 'name', None), + getattr(column, 'key', None)), + column.type + ) return 'RETURNING ' + ', '.join(columns) + " INTO " + ", ".join(binds) |