diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-03-29 23:57:22 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-03-29 23:57:22 +0000 |
commit | 6b7bd8fb1575ce47d221e8c9a9cc579abc271c92 (patch) | |
tree | f363cefadbc4373db562bf6fb66563c323e1c1fe /lib/sqlalchemy/engine/default.py | |
parent | 740733f41080da1913a574e018731b9d6c3e4816 (diff) | |
download | sqlalchemy-6b7bd8fb1575ce47d221e8c9a9cc579abc271c92.tar.gz |
current progress with exec branch
Diffstat (limited to 'lib/sqlalchemy/engine/default.py')
-rw-r--r-- | lib/sqlalchemy/engine/default.py | 72 |
1 files changed, 45 insertions, 27 deletions
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 86563cd7c..bcd7a6c36 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -157,15 +157,35 @@ 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): + def __init__(self, dialect, engine, connection, compiled=None, parameters=None, statement=None): 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, engine, proxy, compiled, parameters): - self._process_defaults(engine, proxy, compiled, parameters) + def pre_exec(self): + if self.compiled is not None: + self._process_defaults() - def post_exec(self, engine, proxy, compiled, parameters): + def post_exec(self): 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 @@ -187,16 +207,16 @@ class DefaultExecutionContext(base.ExecutionContext): def lastrow_has_defaults(self): return self._lastrow_has_defaults - def set_input_sizes(self, cursor, parameters): + def set_input_sizes(self): """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(parameters, list): - plist = parameters + if isinstance(self.parameters, list): + plist = self.parameters else: - plist = [parameters] + plist = [self.parameters] if self.dialect.positional: inputsizes = [] for params in plist[0:1]: @@ -205,7 +225,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) - cursor.setinputsizes(*inputsizes) + self.cursor.setinputsizes(*inputsizes) else: inputsizes = {} for params in plist[0:1]: @@ -214,9 +234,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 - cursor.setinputsizes(**inputsizes) + self.cursor.setinputsizes(**inputsizes) - def _process_defaults(self, engine, proxy, compiled, parameters): + def _process_defaults(self): """``INSERT`` and ``UPDATE`` statements, when compiled, may have additional columns added to their ``VALUES`` and ``SET`` lists corresponding to column defaults/onupdates that are @@ -234,23 +254,21 @@ class DefaultExecutionContext(base.ExecutionContext): statement. """ - if compiled is None: return - - if getattr(compiled, "isinsert", False): - if isinstance(parameters, list): - plist = parameters + if getattr(self.compiled, "isinsert", False): + if isinstance(self.parameters, list): + plist = self.parameters else: - plist = [parameters] - drunner = self.dialect.defaultrunner(engine, proxy) + plist = [self.parameters] + drunner = self.dialect.defaultrunner(self.engine, self.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 compiled.statement.table.c: + for c in self.compiled.statement.table.c: # check if it will be populated by a SQL clause - we'll need that # after execution. - if c in compiled.inline_params: + if c in self.compiled.inline_params: self._lastrow_has_defaults = True if c.primary_key: need_lastrowid = True @@ -278,19 +296,19 @@ class DefaultExecutionContext(base.ExecutionContext): else: self._last_inserted_ids = last_inserted_ids self._last_inserted_params = param - elif getattr(compiled, 'isupdate', False): - if isinstance(parameters, list): - plist = parameters + elif getattr(self.compiled, 'isupdate', False): + if isinstance(self.parameters, list): + plist = self.parameters else: - plist = [parameters] - drunner = self.dialect.defaultrunner(engine, proxy) + plist = [self.parameters] + drunner = self.dialect.defaultrunner(self.engine, self.proxy) self._lastrow_has_defaults = False for param in plist: # check the "onupdate" status of each column in the table - for c in compiled.statement.table.c: + for c in self.compiled.statement.table.c: # it will be populated by a SQL clause - we'll need that # after execution. - if c in compiled.inline_params: + if c in self.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 |