From 5a6895471fb6bf9afe9bdf017f1fa2c6246ae303 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 6 Sep 2013 21:39:36 -0400 Subject: - 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. --- lib/sqlalchemy/orm/mapper.py | 5 +++-- lib/sqlalchemy/orm/persistence.py | 9 +++++---- lib/sqlalchemy/orm/strategies.py | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) (limited to 'lib/sqlalchemy') 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, -- cgit v1.2.1