summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/default.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/engine/default.py')
-rw-r--r--lib/sqlalchemy/engine/default.py72
1 files changed, 27 insertions, 45 deletions
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py
index bcd7a6c36..86563cd7c 100644
--- a/lib/sqlalchemy/engine/default.py
+++ b/lib/sqlalchemy/engine/default.py
@@ -157,35 +157,15 @@ class DefaultDialect(base.Dialect):
ischema = property(_get_ischema, doc="""returns an ISchema object for this engine, which allows access to information_schema tables (if supported)""")
class DefaultExecutionContext(base.ExecutionContext):
- def __init__(self, dialect, engine, connection, compiled=None, parameters=None, statement=None):
+ def __init__(self, dialect):
self.dialect = dialect
- self.engine = engine
- self.connection = connection
- self.compiled = compiled
- self.parameters = parameters
- self.statement = statement
- if compiled is not None:
- self.typemap = compiled.typemap
- self.column_labels = compiled.column_labels
- else:
- self.typemap = self.column_labels = None
- self.cursor = self.dialect.create_cursor(self.connection.connection)
-
- def proxy(self, statement=None, parameters=None):
- if statement is not None:
- self.connection._execute_compiled_impl(compiled, parameters, self)
- return self.cursor
- def pre_exec(self):
- if self.compiled is not None:
- self._process_defaults()
+ def pre_exec(self, engine, proxy, compiled, parameters):
+ self._process_defaults(engine, proxy, compiled, parameters)
- def post_exec(self):
+ def post_exec(self, engine, proxy, compiled, parameters):
pass
- def get_result_proxy(self):
- return base.ResultProxy(self.engine, self.connection, self.cursor, self, typemap=self.typemap, column_labels=self.column_labels)
-
def get_rowcount(self, cursor):
if hasattr(self, '_rowcount'):
return self._rowcount
@@ -207,16 +187,16 @@ class DefaultExecutionContext(base.ExecutionContext):
def lastrow_has_defaults(self):
return self._lastrow_has_defaults
- def set_input_sizes(self):
+ def set_input_sizes(self, cursor, parameters):
"""Given a cursor and ClauseParameters, call the appropriate
style of ``setinputsizes()`` on the cursor, using DBAPI types
from the bind parameter's ``TypeEngine`` objects.
"""
- if isinstance(self.parameters, list):
- plist = self.parameters
+ if isinstance(parameters, list):
+ plist = parameters
else:
- plist = [self.parameters]
+ plist = [parameters]
if self.dialect.positional:
inputsizes = []
for params in plist[0:1]:
@@ -225,7 +205,7 @@ class DefaultExecutionContext(base.ExecutionContext):
dbtype = typeengine.dialect_impl(self.dialect).get_dbapi_type(self.dialect.module)
if dbtype is not None:
inputsizes.append(dbtype)
- self.cursor.setinputsizes(*inputsizes)
+ cursor.setinputsizes(*inputsizes)
else:
inputsizes = {}
for params in plist[0:1]:
@@ -234,9 +214,9 @@ class DefaultExecutionContext(base.ExecutionContext):
dbtype = typeengine.dialect_impl(self.dialect).get_dbapi_type(self.dialect.module)
if dbtype is not None:
inputsizes[key] = dbtype
- self.cursor.setinputsizes(**inputsizes)
+ cursor.setinputsizes(**inputsizes)
- def _process_defaults(self):
+ def _process_defaults(self, engine, proxy, compiled, parameters):
"""``INSERT`` and ``UPDATE`` statements, when compiled, may
have additional columns added to their ``VALUES`` and ``SET``
lists corresponding to column defaults/onupdates that are
@@ -254,21 +234,23 @@ class DefaultExecutionContext(base.ExecutionContext):
statement.
"""
- if getattr(self.compiled, "isinsert", False):
- if isinstance(self.parameters, list):
- plist = self.parameters
+ if compiled is None: return
+
+ if getattr(compiled, "isinsert", False):
+ if isinstance(parameters, list):
+ plist = parameters
else:
- plist = [self.parameters]
- drunner = self.dialect.defaultrunner(self.engine, self.proxy)
+ plist = [parameters]
+ drunner = self.dialect.defaultrunner(engine, proxy)
self._lastrow_has_defaults = False
for param in plist:
last_inserted_ids = []
need_lastrowid=False
# check the "default" status of each column in the table
- for c in self.compiled.statement.table.c:
+ for c in compiled.statement.table.c:
# check if it will be populated by a SQL clause - we'll need that
# after execution.
- if c in self.compiled.inline_params:
+ if c in compiled.inline_params:
self._lastrow_has_defaults = True
if c.primary_key:
need_lastrowid = True
@@ -296,19 +278,19 @@ class DefaultExecutionContext(base.ExecutionContext):
else:
self._last_inserted_ids = last_inserted_ids
self._last_inserted_params = param
- elif getattr(self.compiled, 'isupdate', False):
- if isinstance(self.parameters, list):
- plist = self.parameters
+ elif getattr(compiled, 'isupdate', False):
+ if isinstance(parameters, list):
+ plist = parameters
else:
- plist = [self.parameters]
- drunner = self.dialect.defaultrunner(self.engine, self.proxy)
+ plist = [parameters]
+ drunner = self.dialect.defaultrunner(engine, proxy)
self._lastrow_has_defaults = False
for param in plist:
# check the "onupdate" status of each column in the table
- for c in self.compiled.statement.table.c:
+ for c in compiled.statement.table.c:
# it will be populated by a SQL clause - we'll need that
# after execution.
- if c in self.compiled.inline_params:
+ if c in compiled.inline_params:
pass
# its not in the bind parameters, and theres an "onupdate" defined for the column;
# execute it and add to bind params