summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-09-30 20:00:46 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2012-09-30 20:00:46 +0000
commitbba1d01b26adb2db5b3c3fc41b94834cec5c73fc (patch)
tree8d8b78427343fe0afae089602adbea4b8bde60e2
parent0c3e2b49b99655edba28230a70622982faba7185 (diff)
downloadsqlalchemy-bba1d01b26adb2db5b3c3fc41b94834cec5c73fc.tar.gz
- [bug] The CreateIndex construct in Oracle
will now schema-qualify the name of the index to be that of the parent table. Previously this name was omitted which apparently creates the index in the default schema, rather than that of the table.
-rw-r--r--CHANGES7
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py4
-rw-r--r--lib/sqlalchemy/sql/compiler.py16
-rw-r--r--test/dialect/test_oracle.py12
4 files changed, 33 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index e3a893f34..7f871d7d4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -738,6 +738,13 @@ underneath "0.7.xx".
now defaults to STRING, UNICODE, removing
CLOB, NCLOB from the list. [ticket:2469]
+ - [bug] The CreateIndex construct in Oracle
+ will now schema-qualify the name of the index
+ to be that of the parent table. Previously this
+ name was omitted which apparently creates the
+ index in the default schema, rather than that
+ of the table.
+
- extensions
- [removed] The SQLSoup extension is removed from
SQLAlchemy, and is now an external project.
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index 399f90035..c7cc6a7f9 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -631,6 +631,10 @@ class OracleDDLCompiler(compiler.DDLCompiler):
return text
+ def visit_create_index(self, create, **kw):
+ return super(OracleDDLCompiler, self).\
+ visit_create_index(create, include_schema=True)
+
class OracleIdentifierPreparer(compiler.IdentifierPreparer):
reserved_words = set([x.lower() for x in RESERVED_WORDS])
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 1acd37f62..3b17c040c 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -1866,15 +1866,16 @@ class DDLCompiler(engine.Compiled):
return ident
- def visit_create_index(self, create):
+ def visit_create_index(self, create, include_schema=False):
index = create.element
preparer = self.preparer
text = "CREATE "
if index.unique:
text += "UNIQUE "
text += "INDEX %s ON %s (%s)" \
- % (preparer.quote(self._index_identifier(index.name),
- index.quote),
+ % (
+ self._prepared_index_name(index,
+ include_schema=include_schema),
preparer.format_table(index.table),
', '.join(preparer.quote(c.name, c.quote)
for c in index.columns))
@@ -1882,7 +1883,11 @@ class DDLCompiler(engine.Compiled):
def visit_drop_index(self, drop):
index = drop.element
- if index.table is not None and index.table.schema:
+ return "\nDROP INDEX " + self._prepared_index_name(index,
+ include_schema=True)
+
+ def _prepared_index_name(self, index, include_schema=False):
+ if include_schema and index.table is not None and index.table.schema:
schema = index.table.schema
schema_name = self.preparer.quote_schema(schema,
index.table.quote_schema)
@@ -1895,7 +1900,8 @@ class DDLCompiler(engine.Compiled):
if schema_name:
index_name = schema_name + "." + index_name
- return "\nDROP INDEX " + index_name
+ return index_name
+
def visit_add_constraint(self, create):
preparer = self.preparer
diff --git a/test/dialect/test_oracle.py b/test/dialect/test_oracle.py
index 66b27a12a..edb7be840 100644
--- a/test/dialect/test_oracle.py
+++ b/test/dialect/test_oracle.py
@@ -2,7 +2,7 @@
from sqlalchemy.testing import eq_
from sqlalchemy import *
-from sqlalchemy import types as sqltypes, exc
+from sqlalchemy import types as sqltypes, exc, schema
from sqlalchemy.sql import table, column
from sqlalchemy.testing import fixtures, AssertsExecutionResults, AssertsCompiledSQL
from sqlalchemy import testing
@@ -523,6 +523,16 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
]:
self.assert_compile(fn, expected)
+ def test_create_index_alt_schema(self):
+ m = MetaData()
+ t1 = Table('foo', m,
+ Column('x', Integer),
+ schema="alt_schema"
+ )
+ self.assert_compile(
+ schema.CreateIndex(Index("bar", t1.c.x)),
+ "CREATE INDEX alt_schema.bar ON alt_schema.foo (x)"
+ )
class CompatFlagsTest(fixtures.TestBase, AssertsCompiledSQL):
__only_on__ = 'oracle'