diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-09-30 16:26:52 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-09-30 16:26:52 +0000 |
| commit | 8a1706b494e5e164ea584dc4a573fa0873482dc7 (patch) | |
| tree | 37fe5a3b5e2f1b1fbb50a131af6908d8d20e6536 /lib | |
| parent | 7242a617cf749c5e43f192fd3a854237d3215623 (diff) | |
| download | sqlalchemy-8a1706b494e5e164ea584dc4a573fa0873482dc7.tar.gz | |
- fixed condition that occurred during reflection when a primary key
column was explciitly overridden, where the PrimaryKeyConstraint would
get both the reflected and the programmatic column doubled up
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/schema.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/util.py | 5 |
3 files changed, 16 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index fd912e617..af54f6df8 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -343,6 +343,10 @@ class Mapper(object): except KeyError: l = self.pks_by_table.setdefault(t, util.OrderedSet()) for k in t.primary_key: + #if k.key not in t.c and k._label not in t.c: + # this is a condition that was occurring when table reflection was doubling up primary keys + # that were overridden in the Table constructor + # raise exceptions.AssertionError("Column " + str(k) + " not located in the column set of table " + str(t)) l.add(k) if len(self.pks_by_table[self.mapped_table]) == 0: @@ -392,6 +396,7 @@ class Mapper(object): self.__log("adding ColumnProperty %s" % (column.key)) elif isinstance(prop, ColumnProperty): prop.columns.append(column) + self.__log("appending to existing ColumnProperty %s" % (column.key)) else: if not self.allow_column_override: raise exceptions.ArgumentError("WARNING: column '%s' not being added due to property '%s'. Specify 'allow_column_override=True' to mapper() to ignore this condition." % (column.key, repr(prop))) diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 3dab1f867..72109379d 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -440,6 +440,8 @@ class Column(SchemaItem, sql.ColumnClause): else: return self.name return self.name + else: + return self.name def _derived_metadata(self): return self.table.metadata @@ -764,6 +766,10 @@ class PrimaryKeyConstraint(Constraint): def accept_schema_visitor(self, visitor): visitor.visit_primary_key_constraint(self) def append(self, col): + # TODO: change "columns" to a key-sensitive set ? + for c in self.columns: + if c.key == col.key: + self.columns.remove(c) self.columns.append(col) col.primary_key=True def copy(self): diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index 3664b8e6d..91e295435 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -102,6 +102,11 @@ class OrderedProperties(object): raise AttributeError(key) def __contains__(self, key): return key in self.__data + def get(self, key, default=None): + if self.has_key(key): + return self[key] + else: + return default def keys(self): return self.__data.keys() def has_key(self, key): |
