diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-09-06 21:39:36 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-09-06 21:39:36 -0400 |
| commit | 5a6895471fb6bf9afe9bdf017f1fa2c6246ae303 (patch) | |
| tree | 5c14811273d5b2e328a59e323593535bfa112b86 /lib/sqlalchemy | |
| parent | e8167548429b9d4937caaa09740ffe9bdab1ef61 (diff) | |
| download | sqlalchemy-5a6895471fb6bf9afe9bdf017f1fa2c6246ae303.tar.gz | |
- modify what we did in [ticket:2793] so that we can also set the
version id programmatically outside of the generator. using this system,
we can also leave the version id alone.
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/persistence.py | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 3 |
3 files changed, 10 insertions, 7 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 30b5ffc79..4336c191d 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -459,8 +459,9 @@ class Mapper(_InspectionAttr): def generate_version(version): return next_version - Alternatively, server-side versioning functions such as triggers - may be used as well, by specifying the value ``False``. + Alternatively, server-side versioning functions such as triggers, + or programmatic versioning schemes outside of the version id generator + may be used, by specifying the value ``False``. Please see :ref:`server_side_version_counter` for a discussion of important points when using this option. diff --git a/lib/sqlalchemy/orm/persistence.py b/lib/sqlalchemy/orm/persistence.py index 042186179..ccdd6e81e 100644 --- a/lib/sqlalchemy/orm/persistence.py +++ b/lib/sqlalchemy/orm/persistence.py @@ -248,10 +248,10 @@ def _collect_insert_commands(base_mapper, uowtransaction, table, has_all_pks = True has_all_defaults = True for col in mapper._cols_by_table[table]: - if col is mapper.version_id_col: - if mapper.version_id_generator is not False: - val = mapper.version_id_generator(None) - params[col.key] = val + if col is mapper.version_id_col and \ + mapper.version_id_generator is not False: + val = mapper.version_id_generator(None) + params[col.key] = val else: # pull straight from the dict for # pending objects @@ -417,6 +417,7 @@ def _collect_post_update_commands(base_mapper, uowtransaction, table, mapper._get_state_attr_by_column( state, state_dict, col) + elif col in post_update_cols: prop = mapper._columntoproperty[col] history = attributes.get_state_history( diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 63b7d7c0b..761e6b999 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -133,7 +133,8 @@ class ColumnLoader(LoaderStrategy): coltype = self.columns[0].type # TODO: check all columns ? check for foreign key as well? active_history = self.parent_property.active_history or \ - self.columns[0].primary_key + self.columns[0].primary_key or \ + mapper.version_id_col in set(self.columns) _register_attribute(self, mapper, useobject=False, compare_function=coltype.compare_values, |
