Here you can see the full list of changes between each SQLAlchemy-Continuum release.
- Remove generated changes attribute from version classes. This attribute can be accessed through transaction.changes
- Added smart primary key type inspection for user class (#86, courtesy of mattupstate)
- Added support for self-referential version relationship reflection (#88, courtesy of dtheodor)
- Fixed One-To-Many version relationship handling (#82, courtesy of dtheodor)
- Fixed Many-To-Many version relationship handling (#83, courtesy of dtheodor)
- Fixed inclusion and exclusion of aliased columns
- Removed automatic exclusion of auto-assigned datetime columns and tsvector columns (explicit is better than implicit)
- Made FlaskPlugin accepts overriding of current_user_id_factory and remote_addr_factory
- Fixed identifier quoting in trigger syncing
- Fixed native versioning trigger syncing
- Added Python 3.4 to test suite
- Added optional native trigger based versioning for PostgreSQL dialect
- Added create_models option
- Added count_versions utility function
- Fixed custom transaction column name handling with models using joined table inheritance
- Fixed subquery strategy support for models using joined table inheritance
- Fixed savepoint handling
- Fixed version model building when no versioned models were found (previously threw AttributeError)
- Replaced plugin template methods before_create_tx_object and after_create_tx_object with transaction_args to better cope with native versioning
- Added __repr__ for Operations class
- Fixed an issue where assigning unmodified object's attributes in user defined before flush listener would raise TypeError in UnitOfWork
- Allowed easier overriding of PropertyModTracker column creation
- Rewrote join table inheritance handling schematics (now working with SA 0.9.6)
- SQLAlchemy-Utils dependency updated to 0.26.5
- Fixed an issue where deleting an object with deferred columns would throw ObjectDeletedError.
- Made viewonly relationships with association tables not register the association table to versioning manager registry.
- Added __repr__ for Transaction class, issue #59
- Made transaction_cls of VersioningManager configurable.
- Removed generic relationships from transaction class to versioned classes.
- Removed generic relationships from transaction changes class to versioned classes.
- Removed relation_naming_function (no longer needed)
- Moved get_bind to SQLAlchemy-Utils
- Removed inflection package from dependencies (no longer needed)
- SQLAlchemy-Utils dependency updated to 0.26.2
- Added order_by mapper arg ignoring for version class reflection if other than string argument is used
- Added support for customizing the User class which the Transaction class should have relationship to (issue #53)
- Changed get_versioning_manager to throw ClassNotVersioned exception if first argument is not a versioned class
- Fixed relationship reflection from versioned classes to non versioned classes (issue #52)
- SQLAlchemy-Utils dependency updated to 0.25.4
- Fixed many-to-many unit of work inspection when using engine bind instead of collection bind
- Fixed various issues if primary key aliases were used in declarative models
- Fixed an issue where association versioning would not work with custom transaction column name
- SQLAlchemy-Utils dependency updated to 0.25.3
- Added support for concrete inheritance
- Added order_by mapper arg reflection to version classes
- Added support for column_prefix mapper arg
- Made model builder copy inheritance mapper args to version classes from parent classes
- Fixed end transaction id setting for join table inheritance classes. Now end transaction id is set explicitly to all tables in inheritance hierarchy.
- Fixed single table inheritance handling
- Added some schema tools to help migrating between different plugins and versioning strategies
- Added remove_versioning utility function, see issue #45
- Added order_by transaction_id default to versions relationship
- Fixed PropertyModTrackerPlugin association table handling.
- Fixed get_bind schematics (Flask-SQLAlchemy integration wasn't working)
- Fixed a bug where committing a session without objects would result in KeyError
- SQLAlchemy dependency updated to 0.9.4
- Added new plugin architecture
- Added ActivityPlugin
- Naming conventions change: History -> Version (to be consistent throughout Continuum)
- Naming convention change: TransactionLog -> Transaction
- Rewritten reflected relationship model for version classes. Only dynamic relationships are now reflected as dynamic relationships. Other relationships return either lists or scalars.
- One-To-One relationship support for reflected version class relationships
- Removed tx_context context manager. Transaction objects can now be created manually and user has direct access to the parameters of this object.
- Removed tx_meta context manager. Transaction meta objects can now be created explicitly.
- Fixed association reverting when the relationship uses uselist=False
- Fixed one-to-many directed relationship reverting when the relationship uses uselist=False
- Fixed many-to-many relationship handling when multiple links were created during the same transaction
- Added indexes to operation_type, transaction_id and end_transaction_id columns of version classes
- Deprecated extensions
- SQLAlchemy-Utils dependency updated to 0.25.0
- Fixed version next / previous handling
- SQLAlchemy dependency updated to 0.9.3
- Fixed column onupdate to history table reflection (issue #47)
- Fixed MySQL support (issue #36)
- Added SQLite and MySQL to testing matrix
- Added vacuum function
- Validity versioning strategy
- Changeset supports custom transaction column names
- Reify -> Revert
- Fixed revert to support class level column exclusion
- Ability to track property modifications
- New configuration options: track_property_modifications and modified_flag_suffix
- Only autoincremented columns marked as autoincrement=False for history tables. This enables alembic migrations to generate without annoying explicit autoincrement=False args.
- Custom database schema support added
- TSVectorType columns not versioned by default (in order to avoid massive version histories)
- Full MySQL and SQLite support added
- Fixed UnitOfWork changed entities handling (now checks only for versioned attributes not all object attributes)
- Fixed UnitOfWork TransactionMeta object creation (now checks if actual modifications were made)
- Fixed MySQL history table primary key generation (autoincrement=False now forced for transaction_id column)
- Added support for SQLAlchemy-i18n
- Added database independent transaction meta parameter handling (formerly supported postgres only)
- Smarter is_modified handling for UnitOfWork (now understands excluded properties)
- Fixed FlaskVersioningManager schematics when working outside of request context (again)
- Added possibility to use custom UnitOfWork class
- Fixed FlaskVersioningManager schematics when working outside of request context
- Fixed is_auto_assigned_date_column (again)
- Moved some core utility functions to SQLAlchemy-Utils
- Fixed is_auto_assigned_date_column
- Inflection added to requirements
- Removed Versioned base class (adding __versioned__ attribute and calling make_versioned() is sufficient for making declarative class versioned)
- DateTime columns with defaults excluded by default from history classes
- Column inclusion added as option
- Smarter changeset handling
- Improved reify() speed
- Fixed changeset when parent contains more columns than version class.
- Transaction log and transaction changes records only created if actual net changes were made during transaction.
- Removed last references for old revision versioning
- Added is_versioned utility function
- Fixed before operation listeners
- Version tables no longer have revision column
- Parent tables no longer need revision column
- Version tables primary key is now (parent table pks + transaction_id)
- Make versioned join table inherited classes support multiple consecutive flushes per transaction
- Fixed association versioning when using executemany
- Improved transaction log changed_entities schematics
- Added possibility to add lazy values in transaction context meta
- Version tables no longer generated when versioning attribute of model set to False
- Revision column not nullable in version classes
- Fixed relationship building for non-versioned classes
- Parent table primary keys remain not nullable in generated version table
- Added database agnostic versioning (no need for PostgreSQL specific triggers anymore)
- Fixed version object relationships (never worked properly in previous versions)
- New configuration option versioning allows setting the versioning on and off per child class.
- Added column exclusion
- Added improved context managing capabilities for transactions via VersioningManager.tx_context
- Removed Versioned base class, versioned objects only need to have __versioned__ defined.
- Session versioning now part of make_versioned function
- Added meta parameter in TransactionLog
- TransactionChanges model for tracking changed entities in given transaction
- Added Flask extension
- Alembic trigger syncing fixed for drop column and add column
- Alembic trigger syncing fixed
- Added support for multiple updates for same row within single transaction
- History tables have now own revision column
- Not null constraints removed from all reflected columns
- Fixed reify when parent has not null constraints
- Added support for reifying deletion
- Single table inheritance support added
- Generated operation_type column not nullable by default
- Added drop_table trigger synchronization
- Autoincrementation automatically removed from reflected primary keys
- Added identifier quoting for all column names
- Identifier quoting for create_trigger_sql
- Added alembic operations proxy class
- VersioningManager now added in __versioned__ dict of each versioned class
- Creating TransactionLog now checks if it already exists.
- Added operation_type column to version tables.
- Versioned mixin no longer holds lists of pending objects
- Added VersioningManager for more customizable versioning syntax
- Model changesets
- Fixed previous and next accessors
- Updates generate versions only if actual changes occur
- Added sanity check in all_affected_entities
- Added backref relations to TransactionLog
- Added all_affected_entities property to TransactionLog
- Renamed internal attribute __pending__ to __pending_versioned__ in order to avoid variable naming collisions.
- Better checking of model table name in scenarios where model does not have __tablename__ defined.
- Added make_versioned for more robust declaration of versioned mappers
- Added PostgreSQLAdapter class
- Made trigger procedures table specific to allow more fine-grained control.
- Added column order inspection.
- Removed foreign key dependency from version table and transaction table
- Fixed packaging
- Initial support for join table inheritance
- Initial release