Release Notes

Thong Nguyen edited this page Jul 28, 2018 · 14 revisions

1.8.0

28 July 2018

  • Major bug fix release
  • Better support for conditions and and selects involving aggregate calls on recursively related objects projected off recursively related object collections
  • Fixed some object sometimes returned multiple times if using Include() with related object collections
  • Fixed sometimes less objects than expected are returned when Skip/Take is used in combination with Include() with related object collections
  • General improvements to Include() support
  • Added overloads to RelatedDataAccessObjects.Items() method - support loading from a new query if eager loaded items aren't available

1.7.2

  • Support adding SizeConstraints directly on enums as defaults for properties of that enum type

1.7.1

  • Support multiple sed-style transforms within NamingTransformsConfiguration configs by using semicolons to separate s-commands.

1.7.0

  • Support for non-abstract DataAccessModel definitions and support for getters on RelatedDataAccessObjects properties
  • NamingTransformsConfiguration for Index, ForeignKey, PrimaryKey and DefaultValue constraint names now only apply if a non-empty name is not defined by the user otherwise the user-provided name is left-as-is
  • DefaultDefaultValueConstraintName now uses def_ prefix rather than _def suffix
  • Added support for easier direct SQL execution via Shaolinq.DirectAccess.Sql.DataAccessModelExtensions
  • Added support for declaring indexes at the class level rather than property level to make it less verbose to declare composite indexes
  • Switch to semantic versioning

1.5.1.1300

  • Optimisations in Commit
  • Expose exception information (if any) in DataAccessModelHookSubmitContext
  • Fix bug where default value of non-server-side-generated primary keys is not set

1.5.0.1295

  • Fix NullReferenceExceptions sometimes get raised from FormatCommand when there is a server side exception

1.5.0.1285

  • Support async IDataAccessModelHook. Breaking change as you must implement both async and sync callbacks
  • Remove support for using Include directly on DataAccessObject (use standard Include on IQueryable)

1.3.1.1240

  • Fixed bug 'Invalid attempt to Read when reader is closed' bug when using MySQL 6.10 connector
  • Added support for SQL Server on Linux

1.3.1.1208

  • Fixed IDataAccessModelHook.Read(DataAccessObject) not working

1.3.1.1207

  • Detailed exception message when ValueRequired and DefaultValue attributes are used on the same property.

1.3.1.1206

  • Fix ValueRequiredAttribute on non-nullable properties should prevent default value constraints from being outputted on the corresponding column.

1.3.1.1205

  • Updated package dependencies

1.3.1.1204

  • DataAccessModelConfiguration.ValueTypesAutoImplicitDefault no longer has an effect on nullable value types attributed with ValueRequired. Nullable value types now treated like reference types when applying SQL semantics.

1.3.1.1198

  • Support using DateTime properties (Year, Month, Day etc) on user defined types that are convertible to DateTime
  • SQL Server: Support server side DateTime Year, Month, Day, Hour etc properties
  • Fixed property default value value sometimes not being outputted in SQL DDL even though DataAccessModelConfiguration.HasExplicitDefaultValue is set to true

1.3.1.1195

  • Fix symbol packages

1.3.1.1193

  • Fixed support for implicit joins used within OrderBy and ThenBy selectors

1.3.1.1171

  • Minor bug fixes

1.3.1.1165

  • Added Import methods to DataAccessScope.

1.3.1.1162

  • Generated assemblies now are attributed with the GeneratedAssemblyAttribute to indicate they are generated by Shaolinq.
  • DataAccessModelAssemblyBuilder now invalidates cached assembly if any referenced assembly versions have changed.

1.3.1.1160

  • Minor performance improvements
  • Added DateTimeKind option to Sqlite provider

1.3.1.1155

  • Minor bug fixes

1.3.1.1151

  • Minor fixes to implicit joins when accessing DAO persisted members via an generic type with an interface constraint

1.3.1.1148

  • Support custom types that are convertible to Shaolinq integral types
  • Added InterfaceAccessNormalizer to fix problem referencing implicitly included objects via an interface type (directly or via a constrained generic type) instead of via the actual DataAccessObject type
  • Added support for server-side DateTime.AddYears

1.3.0.1144

  • Added support for specifying custom SqlDataTypeProvider via SqlDataTypeProvider.SqlDataTypeProvider
  • Added support for defining additional SqlDataTypes on the default provider by configuring SqlDatabaseContextInfo.SqlDataTypes

@ 1.3.0.1141

  • Throw UniqueConstraintException for both unique constraints and unique index errors in SQL provider (was only handling constraints and not indexes)
  • Better support for explicit ConnectionStrings in SQLite provider
  • Improved generated assembly caching
  • Added better expression parsing support for ComputedMember and IndexAttribute.Condition.
  • Improved clustered index support in SQL Server
  • Fixed reflection emit error when outputting default decimal values

2.1.0.1111

  • Support conditional/partial indexes using IndexAttribute.Condition
  • Added IDataAccessModelHook.CreateGuid overload that takes PropertyDescriptor
  • New DataAccessModelConfiguration AlwaysSubmitDefaultValues setting
  • Add support for DataAccessModel hooks
  • Support Configuration option ValueTypesAutoImplicitDefault value type so they don't get given default values on instantiation of the parent DAO unless a value is specified using DefaultValueAttribute. Attempts to commit incomplete objects result in a MissingPropertyValueException.
  • Fixed bug where including properties using a lambda over a generic type class or function type fails
  • Support explicit naming of foreign keys via NamingTransformsConfiguration
  • Support explicit naming of primary keys via NamingTransformsConfiguration
  • SqlServerProvider: Don't add NOT NULL conditions on index columns if index is not unique
  • Support disabling foreign key constraints on DAO properties and BackReferences via ForeignObjectConstraintAttribute.Disabled
  • Added UniqueNullIndexAnsiComplianceFixerClassicBehaviour
  • Improved performance DataAccessModel.BuildDataAccessModel(Type)
  • Added better support for explicitly setting identity columns.
  • Added AutoIncrementAttribute.ValidateExpression support allowing declarative skipping of autoincrement values.
  • Fix bug where TransactionContext for null transactions (before most outer DataAccessScope) could be replaced with TransactionContexts from inner scopes.
  • Various other transaction and async related fixes
  • Fix ambient TransactionContext sometimes not being disposed (like on initialisation of DataAccessModel)
  • Changed TransactionContext to have to be acquired in a using statement in order to be created. Transactioncontext.GetCurrent() will only return non-null if there is already a current transaction. Fixes leaky ambient DataAccessObjectDataContexts.
  • RewriteAsync now validates manually written async methods to make sure they're not calling sync methods when async equivalents are available.
  • RewriteAsync now supports searching all types for a matching extension method that can be used for async (rather than just the type that defined the non-async method).
  • Added more connection configuration properties to Postgres (KeepAlive, others)
  • AsyncRewriter improvements
  • Fixed InvalidCastException when saving a property using a predicated deflated references where the referenced type is not the same as the property container type.
  • Fixed OrderBy sometimes ignored with some queries (e.g. GroupBy)
  • Added SumAsync(selector) method for decimal and decimal?
  • Fix potential exception when projecting structs
  • Fixed potential memory leak when querying with similarly structured queries with different constant values
  • Fixed ForUpdate not working when using Aggregates after ForUpdate is applied
  • Added SumAsync(Decimal) support
  • Fixed exception when using Enums with no declared values
  • Fixed Insert/Update of predicated deflated references

1.2.0.1053-rc1

  • [BREAKING_CHANGE] Changed handling of value type properties so that they don't get given default values on instantiation of the parent DAO unless a value is specified using DefaultValueAttribute. Attempts to commit incomplete objects result in a MissingPropertyValueException.

1.1.1.1044

  • Fixed bug where including properties using a lambda over a generic type class or function type fails
  • Support explicit naming of foreign keys via NamingTransformsConfiguration
  • Support explicit naming of primary keys via NamingTransformsConfiguration
  • SqlServerProvider: Don't add NOT NULL conditions on index columns if index is not unique
  • Support disabling foreign key constraints on DAO properties and BackReferences via ForeignObjectConstraintAttribute.Disabled
  • Added UniqueNullIndexAnsiComplianceFixerClassicBehaviour
  • Improved performance DataAccessModel.BuildDataAccessModel(Type)
  • Added better support for explicitly setting identity columns.
  • Added AutoIncrementAttribute.ValidateExpression support allowing declarative skipping of autoincrement values.
  • Fix bug where TransactionContext for null transactions (before most outer DataAccessScope) could be replaced with TransactionContexts from inner scopes.
  • Various other transaction and async related fixes
  • Fix ambient TransactionContext sometimes not being disposed (like on initialisation of DataAccessModel)
  • Changed TransactionContext to have to be acquired in a using statement in order to be created. Transactioncontext.GetCurrent() will only return non-null if there is already a current transaction. Fixes leaky ambient DataAccessObjectDataContexts.
  • RewriteAsync now validates manually written async methods to make sure they're not calling sync methods when async equivalents are available.
  • RewriteAsync now supports searching all types for a matching extension method that can be used for async (rather than just the type that defined the non-async method).
  • Added more connection configuration properties to Postgres (KeepAlive, others)

-- Previous --

  • AsyncRewriter improvements
  • Fixed InvalidCastException when saving a property using a predicated deflated references where the referenced type is not the same as the property container type.
  • Fixed OrderBy sometimes ignored with some queries (e.g. GroupBy)
  • Added SumAsync(selector) method for decimal and decimal?
  • Fix potential exception when projecting structs
  • Fixed potential memory leak when querying with similarly structured queries with different constant values
  • Fixed ForUpdate not working when using Aggregates after ForUpdate is applied
  • Added SumAsync(Decimal) support
  • Fixed exception when using Enums with no declared values
  • Fixed Insert/Update of predicated deflated references

1.0.1.842-rc

  • Fix DefaultIfEmpty() not returning singleton list for when DefaultIfEmpty is the final expression in a query (as opposed to a join or aggregate call being the last)
  • Bug fixes to nested orderby/groupby queries being incorrectly optimised in some cases
  • ComputedExpressions support referencing types without namespaces if they are specified as referenced types in config
  • Fix combined DISTINCT TOP/TAKE support for SQL Server
  • Support DeflatedPredicated references including single trip updates and referencing of such objects.
  • New Roslyn based generation of SqlExpressionComparer and SqlExpressionHasher.
  • Support ProjectionExpression caching
  • Fixed bug where ToListAsync() would erase any included collections on return
  • Support UNION and UNION ALL support (Queryable.Union and Queryable.Concat)
  • Removed requirement for DataAccessObjects and PersistedMembers to be abstract
  • ComputedMember language/parser improvements
  • Added support for Queryable.All queries
  • Added async versions of Queryable.Any and Queryable.All queries
  • Added predicate versions of Single, SingleOrDefault, First, FirstOrDefault
  • Support Delete and Delete(predicate) on all compatible Queryables (not just DataAccessObjects)
  • Support GetReference on objects where primary key values are provided using related computed member values
  • Added SumAsync, AverageAsync, MinAsync, MaxAsync methods
  • Better async support when using DataAccessScope
  • Better support for CompleteAsync
  • Functional async support for Postgres
  • Using AsyncRewriter to generate async methods
  • Fixed some nested projection with GroupBy bugs
  • Added DataAccessScope for async commit support
  • Support Include on collections without TransactionScope
  • Lots of Include collection fixes
  • Support joins with multiple join conditions using anonymous types either side of join 'equals'
  • Fixed memory leaks related to lambda projector cache
  • Full support for using Include() on RelatedDataAccessObject properties (collections) including recursive Includes within the collection values.
  • Better/more-complete support for GroupJoins
  • Support for SelectMany returning RelatedDataAccessObjects (Queryable) collections
  • Much improved support/implementation for aggregates and DefaultIfEmpty
  • Improved GroupBy and nested select/projection query support
  • Support implicit joins in many more places that take selectors/predicates such as Queryable.First, Queryable.Single, Queryable.Min, Queryable.Max, Queryable.Count etc.
  • Support join conditions that require implicit joins to resolve
  • Support DataAccessObjects with custom primary keys (inherited from Shaolinq.DataAccessObject instead of Shaolinq.DataAccessObject{T})
  • Support SelectForUpdate, WhereForUpdate on IQueryable
  • Fixed deadlocks in some async calls
  • Fixed inline call to a function returning IQueryable inside a query sometimes fails
  • TransactionContext optimisations
  • Fixed compiled projector lambda cache sometimes not caching due to a bug in SqlExpressionComparer
  • Various async fixes
  • Added NamingTransforms to DataAccessModelConfiguration
  • Fix objects with DAO primary keys using references and anonymous types
  • Better in-scope object caching performance
  • DAO primary keys mostly working with tests

1.0.0.469-rc

  • Better in-scope object caching performance

v 1.0.0.465-rc

  • Changed SQL Server string support to use NVARCHAR. Added 'max' CHAR and VARCHAR support
  • Fix ExpressionInterpreter handling of ConvertExpression
  • Better join support
  • Fixed blob (byte[]) support
  • Removed dependency on log4net
  • Better join/groupjoin support
  • Removed need for Shaolinq.Postgres.Shared assembly
  • Various other fixes
  • Made ConnectionTimeout and CommandTimeout optional (uses defaults)
  • Added BackendTimeouts option for Postgres provider
  • Improved performance dramatically by replacing LambdaExpression.Compile with new interpreter and caching compiler

0.9.1.426

  • Fixed bugs with nullable enums with VS2015 compiler

Previous Versions:

  • Fixed bug when using pure interface DataModels and DataAccessObjects

  • Add support for using Equals, ReferenceEquals and CompareTo rather than == operator.

  • Support AutoIncrement on non-primary key properties

  • Support unordered object commits (without the need for explicit flushes) when using databases that don't support for deferrability

  • Allow direct configuration with connection strings

  • Fixed sometimes queries failing if referencing a primary key on a DAO property

  • Fixed Any function sometimes not working

  • Allow DAO types to be defined in other assemblies

  • SQL server provider now always disables enlistment

  • Switch to using ConfigurationManager for configs

  • Added TransactionScopeFactory

  • Removed dependency on EF

  • Support for ConnectionString rather than pure object or XML configuration

  • Added Azure friendly DeleteDatabaseDropsTablesOnly option for SqlServer

  • Added Azure friendly DisabledForeignKeyContext

  • Support OrderBy in sub-queries on SQL server

  • Support for projecting IGrouping when aggregates are both used and not used.

  • Added support for Queryable.Any

  • Simplified ObjectState logic

  • Fixed bug to do with OrderBy and GroupBy in the same query

  • Fixed GroupBy aggregate bug

  • Better support for booleans and decimals in SQL Server

  • Fixed setting null on deflated object properties doesn't the commit update to the DB.

  • Fixed some sometimes unnecessary UPDATE statements executed following INSERT.

  • Fixed left/right joins using DefaultIfEmpty ignored/swallowed in Mono.

  • Fixed implicit joins in selects sometimes not working when working with explicit Linq joins.

  • Native TimeSpan (interval) support for Postgres providers.

  • Fixed negate (-ve) operation not support in Sql92QueryFormatter

  • Fixed nullable enums on Postgres

  • Added DateTime.Add method support.

  • Fixed comparing DAOs and DAO properties to null sometimes not working.

  • Improved Include() support. Can now include off DAOs that are on projected anonymous types.

  • Added base non-generic DataAccessObject class.

  • Added ObjectAlreadyExistsException for more specific UniqueConstraintException cases.

  • OrderBy and GroupBy now support properties that are are defined on related objects (joins are made automatically/implicitly)

  • Better unified cross-provider exceptions for failed unique constraints and when setting related objects that are missing or undefined objects

  • Fixed implicit join in Where lost when a Select follow.

  • Sqlite provider now converts composite primary keys with more than one auto-increment to a single primary key with a unique constraint across all the composites.

  • DataAccessObjects now has GetReference

  • DataAccessObjects GetByPrimaryKey and GetManyByPrimaryKey now support composite and complex primary keys

  • Support for Include() inside select and on IQueryable.

  • Support for Include() when selecting related objects on objects.

  • Improved composite GetByPrimaryKey support in DataAccessObjects collections.

  • Support recursive Include()

  • Support implicit (recursive) joins when predicating or selecting on related objects

  • Composite primary keys made up of objects are now supported.

  • Improved performance

  • Fixed non-aggregate count. Now uses EXISTS where possible

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.