diff --git a/build-common/NHibernate.props b/build-common/NHibernate.props
index b64e967c1fd..edcd0a44a65 100644
--- a/build-common/NHibernate.props
+++ b/build-common/NHibernate.props
@@ -3,7 +3,7 @@
500
- Alpha1
+ $(VersionMajor).$(VersionMinor).$(VersionPatch)$(VersionMajor).$(VersionMinor).0.0
diff --git a/build-common/common.xml b/build-common/common.xml
index 9277f51a803..d5ef65da5db 100644
--- a/build-common/common.xml
+++ b/build-common/common.xml
@@ -35,7 +35,7 @@
-
+
diff --git a/default.build b/default.build
index 9f38e2ad55e..948e47e0f48 100644
--- a/default.build
+++ b/default.build
@@ -190,8 +190,11 @@
+
+
+
diff --git a/doc/reference/modules/architecture.xml b/doc/reference/modules/architecture.xml
index b23e00fcb98..59daa5f7944 100644
--- a/doc/reference/modules/architecture.xml
+++ b/doc/reference/modules/architecture.xml
@@ -132,8 +132,8 @@
(Optional) A factory for ADO.NET connections and commands. Abstracts application
- from the concrete vendor-specific implementations of IDbConnection
- and IDbCommand. Not exposed to application, but can be
+ from the concrete vendor-specific implementations of DbConnection
+ and DbCommand. Not exposed to application, but can be
extended/implemented by the developer.
diff --git a/doc/reference/modules/basic_mapping.xml b/doc/reference/modules/basic_mapping.xml
index 75a6eb62ef6..8eb60bcc77a 100644
--- a/doc/reference/modules/basic_mapping.xml
+++ b/doc/reference/modules/basic_mapping.xml
@@ -106,9 +106,8 @@
-
-
-
+
Unfortunately, you can't use hilo when supplying your own
- IDbConnection to NHibernate. NHibernate must be able to
+ DbConnection to NHibernate. NHibernate must be able to
fetch the "hi" value in a new transaction.
@@ -1198,9 +1197,11 @@
- Version numbers may be of type Int64, Int32,
+ Version may be of type Int64, Int32,
Int16, Ticks, Timestamp,
- or TimeSpan (or their nullable counterparts in .NET 2.0).
+ TimeSpan, datetimeoffset, ... (or their nullable
+ counterparts in .NET 2.0). Any type implementing IVersionType is
+ usable as a version.
@@ -1433,7 +1434,11 @@
attribute. (For example, to distinguish between NHibernateUtil.DateTime and
NHibernateUtil.Timestamp, or to specify a custom type.)
-
+
+
+ See also .
+
+
The access attribute lets you control how NHibernate will access
the value of the property at runtime. The value of the access attribute should
@@ -2584,8 +2589,10 @@
The basic types may be roughly categorized into three groups - System.ValueType
types, System.Object types, and System.Object types for large objects. Just like
- the .NET Types, columns for System.ValueType types can not store null values
- and System.Object types can store null values.
+ Columns for System.ValueType types can handle null values only if the entity property is properly
+ typed with a Nullable<T>. Otherwise null will be replaced by the default
+ value for the type when reading, and when be overwritten by it when persisting the entity, potentially leading to
+ phantom updates.
System.ValueType Mapping Types
@@ -2643,7 +2650,7 @@
Default when no type attribute specified. Does no
- more ignore milliseconds since NHibernate v5.0.
+ longer ignore fractional seconds since NHibernate v5.0.
@@ -2652,7 +2659,10 @@
DbType.DateTime / DbType.DateTime2
- type="DateTimeNoMs" must be specified. Ignores milliseconds.
+
+ type="DateTimeNoMs" must be specified. Ignores fractional seconds.
+ Available since NHibernate v5.0.
+ DateTime2
@@ -2727,7 +2737,7 @@
type="LocalDateTime" must be specified. Ensures the
DateTimeKind is set to DateTimeKind.Local.
Throws if set with a date having another kind.
- Does no more ignore milliseconds since NHibernate v5.0.
+ Does no longer ignore fractional seconds since NHibernate v5.0.
@@ -2738,7 +2748,8 @@
type="LocalDateTimeNoMs" must be specified. Similar to
- type="LocalDateTime" but ignores milliseconds.
+ LocalDateTime but ignores fractional seconds.
+ Available since NHibernate v5.0.
@@ -2829,7 +2840,7 @@
Ensures the DateTimeKind is set to DateTimeKind.Utc.
Throws if set with a date having another kind.
- Does no more ignore milliseconds since NHibernate v5.0.
+ Does no longer ignore fractional seconds since NHibernate v5.0.
@@ -2840,7 +2851,8 @@
type="UtcDateTimeNoMs" must be specified. Similar to
- type="LocalDateTime" but ignores milliseconds.
+ UtcDateTime but ignores fractional seconds.
+ Available since NHibernate v5.0.
@@ -3251,7 +3263,7 @@
NHibernate's schema evolution tools, to provide the ability to fully define
a user schema within the NHibernate mapping files. Although designed specifically
for creating and dropping things like triggers or stored procedures, really any
- SQL command that can be run via a IDbCommand.ExecuteNonQuery()
+ SQL command that can be run via a DbCommand.ExecuteNonQuery()
method is valid here (ALTERs, INSERTS, etc). There are essentially two modes for
defining auxiliary database objects.
diff --git a/doc/reference/modules/configuration.xml b/doc/reference/modules/configuration.xml
index 72947b9af9e..42b479810ab 100644
--- a/doc/reference/modules/configuration.xml
+++ b/doc/reference/modules/configuration.xml
@@ -115,8 +115,8 @@ Configuration cfg = new Configuration()
obtain ADO.NET connections wherever it pleases:
-
@@ -291,7 +291,7 @@ ISession session = sessions.OpenSession(conn);
command_timeout
- Specify the default timeout of IDbCommands
+ Specify the default timeout of DbCommands
generated by NHibernate.
diff --git a/doc/reference/modules/example_parentchild.xml b/doc/reference/modules/example_parentchild.xml
index fe450e9c6ba..2876ed5eed0 100644
--- a/doc/reference/modules/example_parentchild.xml
+++ b/doc/reference/modules/example_parentchild.xml
@@ -342,8 +342,7 @@ session.Flush();]]>
and OnSave() as follows.
-
-
These given Set parameters are used to bind the given values to the
? query placeholders (which map to input
- parameters of an ADO.NET IDbCommand). Just
+ parameters of an ADO.NET DbCommand). Just
as in ADO.NET, you should use this binding mechanism in preference to string
manipulation.
diff --git a/doc/reference/modules/query_linq.xml b/doc/reference/modules/query_linq.xml
index a89ddf7764b..26123ad9a53 100644
--- a/doc/reference/modules/query_linq.xml
+++ b/doc/reference/modules/query_linq.xml
@@ -428,7 +428,7 @@ using NHibernate.Linq;]]>
At that point, all defined future results are evaluated in one single round-trip to database.
cats =
+IFutureEnumerable cats =
session.Query()
.Where(c => c.Color == "black")
.ToFuture();
@@ -436,7 +436,7 @@ IFutureValue catCount =
session.Query()
.ToFutureValue(q => q.Count());
// Execute them
-foreach(Cat cat in cats)
+foreach(Cat cat in cats.GetEnumerable())
{
// Do something
}
@@ -447,7 +447,9 @@ if (catCount.Value > 10)
]]>
In above example, accessing catCount.Value does not trigger a round-trip to database:
- it has been evaluated with cats enumeration.
+ it has been evaluated with cats.GetEnumerable() call. If instead
+ catCount.Value was accessed first, it would have executed both future and
+ cats.GetEnumerable() would have not trigger a round-trip to database.
@@ -482,6 +484,7 @@ IList oldCats =
oldCatsQuery
.FetchMany(c => c.AnotherCollection)
.ToFuture()
+ .GetEnumerable()
.ToList();]]>
diff --git a/doc/reference/modules/query_queryover.xml b/doc/reference/modules/query_queryover.xml
index adbe6b81531..9beab8431f5 100644
--- a/doc/reference/modules/query_queryover.xml
+++ b/doc/reference/modules/query_queryover.xml
@@ -337,9 +337,9 @@ IList catReport =
In addition to projecting properties, there are extension methods to allow certain common dialect-registered
- functions to be applied. For example you can write the following to extract just the year part of a date:
+ functions to be applied. For example you can write the following to get 3 letters named people.
- p.BirthDate.YearPart() == 1971)]]>
+ p.FirstName.StrLength() == 3)]]>
The functions can also be used inside projections:
diff --git a/doc/reference/modules/query_sql.xml b/doc/reference/modules/query_sql.xml
index e778b2c4a99..d353e51a500 100644
--- a/doc/reference/modules/query_sql.xml
+++ b/doc/reference/modules/query_sql.xml
@@ -588,7 +588,7 @@ var pusList = query.SetString("name", "Pus%").List();]]>
The procedure must return a result set. NHibernate will
- use IDbCommand.ExecuteReader() to obtain
+ use DbCommand.ExecuteReader() to obtain
the results.
@@ -657,7 +657,7 @@ var pusList = query.SetString("name", "Pus%").List();]]>
The stored procedures are by default required to affect the same number
of rows as NHibernate-generated SQL would. NHibernate uses
- IDbCommand.ExecuteNonQuery to retrieve the number of rows
+ DbCommand.ExecuteNonQuery to retrieve the number of rows
affected. This check can be disabled by using check="none"
attribute in sql-insert element.
diff --git a/doc/reference/modules/quickstart.xml b/doc/reference/modules/quickstart.xml
index ee75ba405ea..008da449f1f 100644
--- a/doc/reference/modules/quickstart.xml
+++ b/doc/reference/modules/quickstart.xml
@@ -411,7 +411,7 @@ finally
NHibernate also offers an object-oriented query by criteria API
that can be used to formulate type-safe queries, and the Hibernate Query Language (HQL),
which is an easy to learn and powerful object-oriented extension to SQL.
- NHibernate of course uses IDbCommands and parameter binding for all
+ NHibernate of course uses DbCommands and parameter binding for all
SQL communication with the database. You may also use NHibernate's direct SQL query
feature or get a plain ADO.NET connection from an ISession in rare
cases.
diff --git a/releasenotes.txt b/releasenotes.txt
index 9d994357dbd..eaa08828ad9 100644
--- a/releasenotes.txt
+++ b/releasenotes.txt
@@ -1,3 +1,268 @@
+Build 5.0.0
+=============================
+
+** Highlights
+ * IO bound methods have gained an async counterpart. Not intended for parallelism, make sure to await each
+ call before further interacting with a session and its queries.
+ * Strongly typed DML operation (insert/update/delete) are now available as Linq extensions on queryables.
+ * Entities collections can be queried with .AsQueryable() Linq extension without being fully loaded.
+ * Reference documentation has been curated and completed, notably with a Linq section.
+ http://nhibernate.info/doc/nhibernate-reference/index.html
+
+** Known BREAKING CHANGES from NH4.1.1.GA to 5.0.0
+
+ NHibernate now targets .Net 4.6.1.
+
+ Remotion.Linq and Antlr3 libraries are no more merged in the NHibernate library,
+ and must be deployed along NHibernate library. (NuGet will reference them.)
+
+ Classes and members which were flagged as obsolete in the NHibernate 4.x series have been dropped.
+ Prior to upgrading, fix any obsolete warning according to its message. See NH-4075 and NH-3684 for a list.
+
+ ##### Possible Breaking Changes #####
+ * All members exposing some System.Data types have been changed for the corresponding System.Data.Common
+ types. (IDbCommand => DbCommand, ...)
+ * The Date NHibernate type will no more replace by null values below its base value (which was year 1753).
+ Its base value is now DateTime.MinValue. Its configuration parameter is obsolete.
+ * NHibernate type DateTimeType, which is the default for a .Net DateTime, does no longer cut fractional
+ seconds. Use DateTimeNoMsType if you wish to have fractional seconds cut. It applies to its Local/Utc
+ counterparts too.
+ * LocalDateTimeType and UtcDateTimeType do no more accept being set with a value having a non-matching kind,
+ they throw instead.
+ * DbTimestamp will now round the retrieved value according to Dialect.TimestampResolutionInTicks.
+ * When an object typed property is mapped to a NHibernate timestamp, setting an invalid object in the
+ property will now throw at flush instead of replacing it with DateTime.Now.
+ * Decimal type registration now correctly handles maximal precision. For most dialects, it is 28, matching
+ the .Net limit. Values in mappings above maximal precision will be reduced to maximal precision.
+ * Default cast types do no more resolve string to 255 length and decimal to its default precision/scale for
+ the dialect. They resolve to 4000 length string and (28, 10) precision/scale decimals by default, and are
+ trimmed down according to dialect. Those defaults can be overridden with query.default_cast_length,
+ query.default_cast_precision and query.default_cast_scale settings.
+ * Transaction scopes handling has undergone a major rework. See NH-4011 for full details.
+ ** More transaction promotion to distributed may occur if you use the "flush on commit" feature with
+ transaction scopes. Explicitly flush your session instead. Ensure it does not occur by disabling
+ transaction.use_connection_on_system_events setting.
+ ** After transaction events no more allow using the connection when they are raised from a scope
+ completion.
+ ** Connection enlistment in an ambient transaction is now enforced by NHibernate by default.
+ ** The connection releasing is no more directly triggered by a scope completion, but by later
+ interactions with the session.
+ * AdoNetWithDistributedTransactionFactory has been renamed AdoNetWithSystemTransactionFactory.
+ * Subcriteria.UniqueResult for value types now return default(T) when result is null, as was
+ already doing CriteriaImpl.UniqueResult.
+ * AliasToBeanResultTransformer property/field resolution logic has changed for supporting members
+ which names differ only by case. See NH-3693 last comments for details.
+ * Linq extension methods marked with attribute LinqExtensionMethod will no more be evaluated
+ in-memory prior to query execution when they do not depend on query results, but will always be
+ translated to their corresponding SQL call. This can be changed with a parameter of the attribute.
+ * Linq Query methods are now native members of ISession and IStatelessSession instead of being
+ extension methods.
+ * Linq provider now use Remotion.Linq v2, which may break Linq provider extensions, mainly due to names
+ changes. See https://github.com/nhibernate/nhibernate-core/pull/568 changes to test files for examples.
+ * NHibernate Linq internals have undergone some minor changes which may break custom Linq providers due
+ to method signature changes and additional methods to implement.
+ * IMapping interface has an additional Dialect member. ISessionFactoryImplementor has lost it, since it
+ gains it back through IMapping.
+ * IDriver.ExpandQueryParameters and DriverBase.CloneParameter take an additional argument.
+ * NullableType, its descendent (notably all PrimitiveType) and IUserType value getters and setters now
+ take the session as an argument. This should mainly impact custom types implementors.
+ * EmitUtil is now internal and has been cleaned of unused members.
+ * ContraintOrderedTableKeyColumnClosure has been renamed ConstraintOrderedTableKeyColumnClosure.
+ * enabledFilter parameter has been removed from IProjection.ToSqlString and ICriterion.ToSqlString methods.
+ * Proxy factory and proxy cache now use TypeInfo instead of System.Type. This should be transparent for
+ most users.
+ * Exceptions which were based on ApplicationException are now based on Exception: HibernateException,
+ ParserException and AssertionFailure. The logger factory which could throw a bare ApplicationException
+ now throws an InstantiationException instead.
+ * ThreadSafeDictionary class has been removed. Use System.Collections.Concurrent.ConcurrentDictionary
+ instead.
+ * Entity mode switching capability, which had never been fully implemented, is dropped.
+ * BytecodeProviderImpl, intended for .Net Framework 1 and broken, is dropped.
+ * Sessions concrete classes constructors have been changed. (It is not expected for them to be used
+ directly.)
+ * Obsolete setting interceptors.beforetransactioncompletion_ignore_exceptions is dropped.
+ * SQL Server 2008+ dialects now use datetime2 instead of datetime for all date-time types, including
+ timestamp. This can be reverted with sql_types.keep_datetime setting.
+ * SQL Server 2008+ timestamp resolution is now 100ns in accordance with datetime2 capabilities, down from
+ 10ms previously. This can be reverted with sql_types.keep_datetime setting.
+ * Oracle 9g+ dialects now use timestamp(7) for all date time types, instead of timestamp(4).
+ * Oracle 9g+ timestamp resolution is now 100ns in accordance with timestamp(7) capabilities, down from
+ 100µs previously.
+ * Oracle: Hbm2dll will no-more choose N- prefixed types for typing Unicode string columns by default.
+ This can be changed with oracle.use_n_prefixed_types_for_unicode setting, which will furthermore
+ control DbCommand parameters typing accordingly. See NH-4062.
+ * SqlServerCe: the id generator "native" will now resolve as table-hilo instead of identity.
+ * Firebird: timestamp resolution is now 1ms.
+ * PostgreSQL: if Npgsql v3 or later is used, time DbParameters will be fetched as TimeSpan instead of
+ DateTime.
+ * DB2 & Oracle lite: decimal type registration was hardcoding precision as 19 and was using length as
+ scale. It now uses precision and scale from mapping when specified, and disregards length.
+ * Ingres & Sybase ASA: decimal type registration was hardcoding precision as 18 and was using length as
+ scale. It now uses precision and scale from mapping when specified, and disregards length.
+ * ODBC: String parameter length will no more be specified by the OdbcDriver.
+
+
+Release notes - NHibernate - Version 5.0.0
+
+** Sub-task
+ * [NH-3956] - Native SQL query plan may get wrong plan
+ * [NH-3957] - Second level query cache may yields wrong cache entry
+ * [NH-4001] - Remove ThreadSafeDictionary
+
+
+
+
+** Bug
+ * [NH-926] - Identity insert fails with SQL Ce dialect and aggressive connection release mode.
+ * [NH-1752] - NHibernate Date type converts to NULL
+ * [NH-1904] - Protected properties and public properties cannot have the same name with different case
+ * [NH-2029] - filter-def's use-many-to-one=false should take ON into consideration
+ * [NH-2145] - AssertionFailure exception at ISession.Save
+ * [NH-2176] - Consecutive TransactionScopes cannot be used in same NHibernate session
+ * [NH-2238] - "DTC transaction prepare phase failed" when UPDATE:ing in a promoted TransactionScope
+ * [NH-2241] - Batch Insert using stateless session when using second level cache throws exception when unable to determine transient status
+ * [NH-2928] - Connections can only be closed after the Transaction is completed
+ * [NH-3023] - Deadlocks may cause connection pool corruption when in a distributed transaction
+ * [NH-3078] - TimeAsTimeSpanType issue when using Sybase Advantage Database
+ * [NH-3100] - Problem in use if condition for nullable boolean in linq to NHibernate
+ * [NH-3114] - Collection inside Component cannot be mapped to a different table
+ * [NH-3227] - InvalidOperationException in AbstractBatcher when distributed transaction is aborted
+ * [NH-3247] - Char value gets 'cached' in Where-queries
+ * [NH-3374] - Session.Merge throws InvalidCastException when using a Lazy bytes[] property
+ * [NH-3600] - ISession.Save returns wrong Id
+ * [NH-3665] - FirstOrDefault() broken since 3.3.4 and 3.4.0
+ * [NH-3693] - AliasToBeanResultTransformerFixture fails under Firebird
+ * [NH-3755] - Proxy exception for multiple joined-subclass
+ * [NH-3757] - Dynamic entity mapped with entity-name cannot have a component of a fixed class
+ * [NH-3793] - Attribute entity-name on is ignored, causing mapping exception
+ * [NH-3845] - OfType fails with polymorphism
+ * [NH-3850] - .Count(), .Any() and other aggregates return only first result on polymorphic queries
+ * [NH-3885] - ThreadSafeDictionary is not threadsafe
+ * [NH-3889] - Coalesce on entity in sub-select causes incorrect SQL
+ * [NH-3895] - Problem with DateTime fractional seconds on ODBC for MS SQL Server
+ * [NH-3911] - Reflection Optimizer tries to cast values to getter type in setter
+ * [NH-3913] - Component has bag of child components. Child property mapping ignored
+ * [NH-3931] - Invalid order of child inserts when using TPH inheritance
+ * [NH-3946] - Linq where "is base class" doesn't get subclasses
+ * [NH-3948] - CheckAndUpdateSessionStatus() called twice in CreateFilter method inside SessionImpl class
+ * [NH-3950] - FutureValue fails on Linq queries defining a PostExecuteTransformer
+ * [NH-3954] - Dynamic proxy cache may yield a wrong proxy
+ * [NH-3955] - Unreliable Equals implementation
+ * [NH-3961] - Invalid date parameter format with nullables and MappedAs
+ * [NH-3966] - Missing command set dispose in batchers
+ * [NH-3968] - Distributed transaction cannot be committed because AdoNetWithDistributedTransactionFactory tries to write data by using locked sqlConnection
+ * [NH-3969] - Firebird: TimestampResolutionInTicks should be 1ms
+ * [NH-3977] - Thread safety weaknesses of MapBasedSessionContext
+ * [NH-3981] - CollectionHelper.DictionaryEquals throws
+ * [NH-3985] - ObjectDisposedException is thrown when using a child session after having previously disposed of another child session.
+ * [NH-3998] - SqlServer CE: "The column aliases must be unique" exception is thrown in some tests
+ * [NH-4013] - SqlClientBatchingBatcher CloseCommands contract violated
+ * [NH-4022] - MsSql2012Dialect: Invalid drop sequence statement
+ * [NH-4024] - ODBC failures with time
+ * [NH-4027] - Missing disposals of enumerators
+ * [NH-4035] - Teardown failure should not prevent cleanup
+ * [NH-4038] - Mapping a TimeSpan in a collection component mapping maps as a BIGINT
+ * [NH-4046] - Default length too short for variable length types with SAP Anywhere / ASE
+ * [NH-4077] - Possible race condition in ActionQueue.ExecuteActions
+ * [NH-4083] - ODBC nvarchar parameter corruption
+ * [NH-4084] - DbTimestamp cause stale update exception
+ * [NH-4086] - TimeType may lose fractional seconds
+ * [NH-4088] - Dialect.GetCastTypeName is buggy
+ * [NH-4090] - Prepare SQL fails with time parameters and SQL Server 2008+
+ * [NH-4091] - SQL Server CE allocates too much memory with blob and sql prepare
+
+** New Feature
+ * [NH-1530] - Add support for XmlDocType and XDocType for Oracle
+ * [NH-2319] - IQueryable support for persistent collections
+ * [NH-3488] - Strongly Typed Updates and Deletes
+ * [NH-3771] - Implement setting to enable Batch Update with Optimistic Locking control
+ * [NH-3905] - Support async: Blocking IO leads to ThreadPool starvation and limits scalability
+ * [NH-3934] - Add methods WhereNot(ICriterion) and AndNot(ICriterion) in QueryOver
+ * [NH-3951] - Support .All() result operator
+ * [NH-3996] - Postgres: add support for XmlDocType and XDocType
+ * [NH-4009] - Allow marking a Linq extension as db only
+ * [NH-4017] - Handle Time parameter conversion for newer Npgsql
+ * [NH-4018] - Port AutoJoinTransaction feature
+ * [NH-4028] - Support inconclusive tests in result comparison
+ * [NH-4031] - Add an AsyncLocalSessionContext
+ * [NH-4032] - Supports multiple factories with ThreadStaticSessionContext
+ * [NH-4062] - Properly handle Oracle Unicode support dual model
+
+** Task
+ * [NH-3683] - Fix Compilation Warnings
+ * [NH-3958] - Reference documentation: missing types
+ * [NH-3959] - Fix documentation typos
+ * [NH-3999] - Document effect of quoted identifier on case sensitivity
+ * [NH-4000] - Release 5.0
+ * [NH-4004] - Restrict tests running on SQL CE
+ * [NH-4051] - Replace System.Linq.Dynamic with System.Linq.Dynamic.Core in tests
+ * [NH-4057] - Fix tests for MySql
+ * [NH-4058] - Fix Oracle managed failing tests
+ * [NH-4063] - Fix ODBC failing tests
+
+** Improvement
+ * [NH-1851] - Mapping a TimeSpan as TimeAsTimeSpan for MySQL
+ * [NH-2444] - Document linq provider
+ * [NH-3094] - Linq does not support unary plus and unary minus operators
+ * [NH-3370] - Remove warning about "NHibernate.Type.CustomType -- the custom type * is not serializable"
+ * [NH-3386] - Linq OrderBy NewID()
+ * [NH-3431] - Replace System.Data with System.Data.Common
+ * [NH-3578] - Subcriteria.UniqueResult for value types should return default(T), same as CriteriaImpl.UniqueResult when result is null
+ * [NH-3669] - Query should be instance method of ISession
+ * [NH-3723] - Some tests are failing when log level set to DEBUG
+ * [NH-3744] - Fixed spelling of ContraintOrderedTableKeyColumnClosure method
+ * [NH-3750] - Use NuGet to refer to Remotion.Linq (unmerge ReMotion.Linq)
+ * [NH-3877] - Target .NET 4.6.1
+ * [NH-3900] - Upgrade to Nunit 3.x
+ * [NH-3919] - Clean up and harmonize datetime types with regards to different dialects
+ * [NH-3927] - Switch to SemVer version scheme
+ * [NH-3932] - Merge() may fire unnecessary updates if collection and version mapping exists
+ * [NH-3943] - Use NuGet to reference packages instead of local copies
+ * [NH-3944] - Upgrade to ReLinq 2
+ * [NH-3945] - Update to Antlr 3.5.1
+ * [NH-3952] - Cleanup EnumerableHelper usage
+ * [NH-3962] - Build with MSBuild Tools 2017 (15)
+ * [NH-3963] - More explicit error on MappedAs invalid usage.
+ * [NH-3964] - Refactor reflection patterns
+ * [NH-3970] - TestCase base class: avoid hiding test failure on tear-down
+ * [NH-3973] - Remove enabledFilter parameter from IProjection.ToSqlString and ICriterion.ToSqlString methods
+ * [NH-3975] - Synchronize some features dialect support properties
+ * [NH-3978] - Extract IDatabaseMetadata from DatabaseMetadata
+ * [NH-3987] - Re-implement NhQueryable options
+ * [NH-3988] - Replace ApplicationException base class with just Exception
+ * [NH-3990] - Upgrade to VS2017 Project structure
+ * [NH-3993] - Component Element Customizer Missing ability to map non-public parents and composite element relations
+ * [NH-3997] - SqlServer CE: Make native generator to be TableHiLoGenerator
+ * [NH-4003] - Refactor session constructor
+ * [NH-4010] - Visual Studio launcher still launches 2015
+ * [NH-4014] - Update SQLite assembly for tests
+ * [NH-4015] - Update Npgsql driver and enable DTC for it in tests
+ * [NH-4019] - Pass assembly into log4net functions
+ * [NH-4020] - Use TypeBuilder.CreateTypeInfo()
+ * [NH-4021] - Track all opened session in tests
+ * [NH-4023] - Pass ISessionImplementor to all value setters and getters of nullable types
+ * [NH-4026] - Update Firebird driver and use server in tests
+ * [NH-4030] - Cleanup and xml doc of Linq Future extension
+ * [NH-4033] - Update MySql connector used in tests
+ * [NH-4034] - Flush all sessions participating in a transaction
+ * [NH-4043] - Complete keyword registration needs done in dialects.
+ * [NH-4049] - EmitUtil can be cleaned up
+ * [NH-4050] - Use Task.Run instead of BeginInvoke in tests
+ * [NH-4052] - Collect schema validation exceptions
+ * [NH-4064] - Unmerge Antrl3.Runtime
+ * [NH-4073] - Replace NHibernate.Web.Example with modern version
+ * [NH-4076] - Do not resurrect session
+
+** Remove Feature
+ * [NH-3684] - Remove