summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/ansisql.py10
-rw-r--r--lib/sqlalchemy/databases/oracle.py13
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