summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/schema.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-08-11 15:52:28 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2017-08-14 01:18:06 -0400
commit1a990ee33239aa275567cb926a5b421b2087294b (patch)
treeedc023629e1f82a2d66e2a5ab6320681a0e91810 /lib/sqlalchemy/sql/schema.py
parente331da58a6d136aff824b43312424083090a7c90 (diff)
downloadsqlalchemy-1a990ee33239aa275567cb926a5b421b2087294b.tar.gz
Ensure Oracle index w/ col DESC etc. is reflected
Fixed bug where an index reflected under Oracle with an expression like "column DESC" would not be returned, if the table also had no primary key, as a result of logic that attempts to filter out the index implicitly added by Oracle onto the primary key columns. Reworked the "filter out the primary key index" logic in oracle get_indexes() to be clearer. This changeset also adds an internal check to ColumnCollection to accomodate for the case of a column being added twice, as well as adding a private _table argument to Index such that reflection can specify the Table explicitly. The _table argument can become part of public API in a later revision or release if needed. Change-Id: I745711e03b3e450b7f31185fc70e10d3823063fa Fixes: #4042
Diffstat (limited to 'lib/sqlalchemy/sql/schema.py')
-rw-r--r--lib/sqlalchemy/sql/schema.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py
index 9b73eca63..7a78a715f 100644
--- a/lib/sqlalchemy/sql/schema.py
+++ b/lib/sqlalchemy/sql/schema.py
@@ -3402,7 +3402,7 @@ class Index(DialectKWArgs, ColumnCollectionMixin, SchemaItem):
documented arguments.
"""
- self.table = None
+ self.table = table = None
columns = []
processed_expressions = []
@@ -3417,12 +3417,21 @@ class Index(DialectKWArgs, ColumnCollectionMixin, SchemaItem):
self.unique = kw.pop('unique', False)
if 'info' in kw:
self.info = kw.pop('info')
+
+ # TODO: consider "table" argument being public, but for
+ # the purpose of the fix here, it starts as private.
+ if '_table' in kw:
+ table = kw.pop('_table')
+
self._validate_dialect_kwargs(kw)
# will call _set_parent() if table-bound column
# objects are present
ColumnCollectionMixin.__init__(self, *columns)
+ if table is not None:
+ self._set_parent(table)
+
def _set_parent(self, table):
ColumnCollectionMixin._set_parent(self, table)