diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/ansisql.py | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/databases/oracle.py | 13 |
2 files changed, 18 insertions, 5 deletions
diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index 430027ed8..0efaf8657 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -745,13 +745,13 @@ class ANSICompiler(engine.Compiled, sql.ClauseVisitor): return text def visit_savepoint(self, savepoint_stmt): - return "SAVEPOINT %s" % self.preparer.format_savepoint(savepoint_stmt.ident) + return "SAVEPOINT %s" % self.preparer.format_savepoint(savepoint_stmt) def visit_rollback_to_savepoint(self, savepoint_stmt): - return "ROLLBACK TO SAVEPOINT %s" % self.preparer.format_savepoint(savepoint_stmt.ident) + return "ROLLBACK TO SAVEPOINT %s" % self.preparer.format_savepoint(savepoint_stmt) def visit_release_savepoint(self, savepoint_stmt): - return "RELEASE SAVEPOINT %s" % self.preparer.format_savepoint(savepoint_stmt.ident) + return "RELEASE SAVEPOINT %s" % self.preparer.format_savepoint(savepoint_stmt) def __str__(self): return self.string @@ -1052,8 +1052,8 @@ class ANSIIdentifierPreparer(object): def format_alias(self, alias, name=None): return self.__generic_obj_format(alias, name or alias.name) - def format_savepoint(self, savepoint): - return self.__generic_obj_format(savepoint, savepoint) + def format_savepoint(self, savepoint, name=None): + return self.__generic_obj_format(savepoint, name or savepoint.ident) def format_constraint(self, constraint): return self.__generic_obj_format(constraint, constraint.name) diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 9b8bb2f9e..7bbc63fba 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -280,12 +280,19 @@ class OracleDialect(ansisql.ANSIDialect): else: return "rowid" + def do_release_savepoint(self, connection, name): + # Oracle does not support RELEASE SAVEPOINT + pass + def create_execution_context(self, *args, **kwargs): return OracleExecutionContext(self, *args, **kwargs) def compiler(self, statement, bindparams, **kwargs): return OracleCompiler(self, statement, bindparams, **kwargs) + def preparer(self): + return OracleIdentifierPreparer(self) + def schemagenerator(self, *args, **kwargs): return OracleSchemaGenerator(self, *args, **kwargs) @@ -662,4 +669,10 @@ class OracleDefaultRunner(ansisql.ANSIDefaultRunner): def visit_sequence(self, seq): return self.connection.execute("SELECT " + self.dialect.identifier_preparer.format_sequence(seq) + ".nextval FROM DUAL").scalar() +class OracleIdentifierPreparer(ansisql.ANSIIdentifierPreparer): + def format_savepoint(self, savepoint): + name = re.sub(r'^_+', '', savepoint.ident) + return super(OracleIdentifierPreparer, self).format_savepoint(savepoint, name) + + dialect = OracleDialect |
