v2.2: Winform fixes and Query Improvements
Published by marco on
The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.
Highlights
- Lots of bug fixes and improvements for the Winform UI and German translations with the release of Punchclock on this version. (QNO-5162, QNO-5159, QNO-5158, QNO-5157, QNO-5156, QNO-5140, QNO-5155, QNO-5145, QNO-5111, QNO-5107, QNO-5106, QNO-5104, QNO-5015)
DateTimeExtensions.GetDayOfWeek()
had a leap-day bug (QNO-5051)- Fixed how the hash code for
GenericObjects
is calculated, which fixes sorting issues in grids, specifically for non-persisted or transient objects (QNO-5137) - Improvements to the
IAccessControl
API for getting groups and users and testing membership (QNO-5133) Add support for query aliases (e.g. for joining the same table multiple times) (QNO-531) This changes the API surface only minimally. Applications can pass an
alias
when calling theJoin
method, as shown below,query.Join(Metadata.Project.Deputy, alias: "deputy")
You can find more examples of aliased queries in the
TestAliasedQuery()
,TestJoinAliasedTables()
,TestJoinChildTwice()
defined in theQueryTests
testing fixture.- Add a standalone
IQueryAnalyzer
for optimizations and in-memory mini-drivers (QNO-4830)
Breaking changes
ISchemaManager
has been removed. Instead, you should retrieve the interface you were looking for from the IOC. The possible interfaces you might need areIImportHandler
,IMappingBuilder
,IPlanBuilder
orISchemaCommandFactory
.ISchemaManagerSettings.GetAuthorized()
has been moved toISchemaManagerAuthorizer
.- The hash-code fix for
GenericObjects
may have an effect on the way your application sorts objects.The
IParticipantManager
(base interface ofIAccessControl
) no longer has a single method calledGetGroups(IParticipant)
. This method was previously used to get the groups to which a user belongs and the child groups of a given group. This confusing double duty for the API led to an incorrect implementation for both usages. Instead, there are now two methods:IEnumerable<IGroup> GetGroups(IUser user)
: Gets the groups for the given userIEnumerable<IGroup> GetChildGroups(IGroup group)
: Gets the child groups for the given group
The old method has been removed from the interface because (A) it never worked correctly anyway and (B) it conflicts with the new API.