summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/databases/oracle.py13
-rw-r--r--lib/sqlalchemy/engine/default.py28
-rw-r--r--lib/sqlalchemy/sql/compiler.py30
3 files changed, 39 insertions, 32 deletions
diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py
index 0197900a5..4def88afa 100644
--- a/lib/sqlalchemy/databases/oracle.py
+++ b/lib/sqlalchemy/databases/oracle.py
@@ -204,8 +204,10 @@ class OracleExecutionContext(default.DefaultExecutionContext):
if self.dialect.auto_setinputsizes:
self.set_input_sizes()
if self.compiled_parameters is not None and len(self.compiled_parameters) == 1:
- for key in self.compiled_parameters[0]:
- (bindparam, name, value) = self.compiled_parameters[0].get_parameter(key)
+ for key in self.compiled.binds:
+ bindparam = self.compiled.binds[key]
+ name = self.compiled.bind_names[bindparam]
+ value = self.compiled_parameters[0][name]
if bindparam.isoutparam:
dbtype = bindparam.type.dialect_impl(self.dialect).get_dbapi_type(self.dialect.dbapi)
if not hasattr(self, 'out_parameters'):
@@ -216,9 +218,10 @@ class OracleExecutionContext(default.DefaultExecutionContext):
def get_result_proxy(self):
if hasattr(self, 'out_parameters'):
if self.compiled_parameters is not None and len(self.compiled_parameters) == 1:
- for k in self.out_parameters:
- type = self.compiled_parameters[0].get_type(k)
- self.out_parameters[k] = type.dialect_impl(self.dialect).result_processor(self.dialect)(self.out_parameters[k].getvalue())
+ for bind, name in self.compiled.bind_names.iteritems():
+ if name in self.out_parameters:
+ type = bind.type
+ self.out_parameters[name] = type.dialect_impl(self.dialect).result_processor(self.dialect)(self.out_parameters[name].getvalue())
else:
for k in self.out_parameters:
self.out_parameters[k] = self.out_parameters[k].getvalue()
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py
index 771ca06f9..198f6742b 100644
--- a/lib/sqlalchemy/engine/default.py
+++ b/lib/sqlalchemy/engine/default.py
@@ -311,24 +311,26 @@ class DefaultExecutionContext(base.ExecutionContext):
from the bind parameter's ``TypeEngine`` objects.
"""
- plist = self.compiled_parameters
+ types = dict([
+ (self.compiled.bind_names[bindparam], bindparam.type)
+ for bindparam in self.compiled.bind_names
+ ])
+
if self.dialect.positional:
inputsizes = []
- for params in plist[0:1]:
- for key in params.positional:
- typeengine = params.get_type(key)
- dbtype = typeengine.dialect_impl(self.dialect).get_dbapi_type(self.dialect.dbapi)
- if dbtype is not None:
- inputsizes.append(dbtype)
+ for key in self.compiled.positiontup:
+ typeengine = types[key]
+ dbtype = typeengine.dialect_impl(self.dialect).get_dbapi_type(self.dialect.dbapi)
+ if dbtype is not None:
+ inputsizes.append(dbtype)
self.cursor.setinputsizes(*inputsizes)
else:
inputsizes = {}
- for params in plist[0:1]:
- for key in params.keys():
- typeengine = params.get_type(key)
- dbtype = typeengine.dialect_impl(self.dialect).get_dbapi_type(self.dialect.dbapi)
- if dbtype is not None:
- inputsizes[key.encode(self.dialect.encoding)] = dbtype
+ for key in self.compiled.bind_names.values():
+ typeengine = types[key]
+ dbtype = typeengine.dialect_impl(self.dialect).get_dbapi_type(self.dialect.dbapi)
+ if dbtype is not None:
+ inputsizes[key.encode(self.dialect.encoding)] = dbtype
self.cursor.setinputsizes(**inputsizes)
def __process_defaults(self):
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index ef66ffd5a..9c8a6f56e 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -235,22 +235,24 @@ class DefaultCompiler(engine.Compiled):
# for this column which is used to translate result set values
self.typemap.setdefault(name.lower(), column.type)
self.column_labels.setdefault(column._label, name.lower())
-
- if column.table is None or not column.table.named_with_column():
- return self.preparer.format_column(column, name=name)
- else:
- if column.table.oid_column is column:
- n = self.dialect.oid_column_name(column)
- if n is not None:
- return "%s.%s" % (self.preparer.format_table(column.table, use_schema=False, name=ANONYMOUS_LABEL.sub(self._process_anon, column.table.name)), n)
- elif len(column.table.primary_key) != 0:
- pk = list(column.table.primary_key)[0]
- pkname = (pk.is_literal and name or self._truncated_identifier("colident", pk.name))
- return self.preparer.format_column_with_table(list(column.table.primary_key)[0], column_name=pkname, table_name=ANONYMOUS_LABEL.sub(self._process_anon, column.table.name))
+
+ if column._is_oid:
+ n = self.dialect.oid_column_name(column)
+ if n is not None:
+ if column.table is None or not column.table.named_with_column():
+ return self.preparer.format_column(column, name=n)
else:
- return None
+ return "%s.%s" % (self.preparer.format_table(column.table, use_schema=False, name=ANONYMOUS_LABEL.sub(self._process_anon, column.table.name)), n)
+ elif len(column.table.primary_key) != 0:
+ pk = list(column.table.primary_key)[0]
+ pkname = (pk.is_literal and name or self._truncated_identifier("colident", pk.name))
+ return self.preparer.format_column_with_table(list(column.table.primary_key)[0], column_name=pkname, table_name=ANONYMOUS_LABEL.sub(self._process_anon, column.table.name))
else:
- return self.preparer.format_column_with_table(column, column_name=name, table_name=ANONYMOUS_LABEL.sub(self._process_anon, column.table.name))
+ return None
+ elif column.table is None or not column.table.named_with_column():
+ return self.preparer.format_column(column, name=name)
+ else:
+ return self.preparer.format_column_with_table(column, column_name=name, table_name=ANONYMOUS_LABEL.sub(self._process_anon, column.table.name))
def visit_fromclause(self, fromclause, **kwargs):