LLBLGen Pro Team
The Hague, The Netherlands
We shipped v5.4 RTM of LLBLGen Pro! This release is a free upgrade for everyone with an active subscription. It comes packed with a lot of small changes and tweaks, among them much faster code generation and a much compacter generated codebase for our own runtime framework.
See below for the list of changes and new features.
Major changes / fixes / new features
- PostgreSQL 10.x is now a supported database.
- Support for PostgreSQL 10 identity fields has been added: in the PostgreSQL driver, designer and DDL SQL templates.
- Addition of the CliSyncWithDatabase commandline tool, which is the re-incarnation of the CliRefresher for v5.x: it allows you to refresh catalogs (sync with a database) on the command line. Like with the CliGenerator, it requires a valid license to operate.
- The code generator now caches regular expressions it's using and is optimized overall. It now offers faster template interpretation/execution (2x-3x faster code generation as in previous versions)
Minor changes / fixes / new features
- The setting Code Generation -> Clean up vs net projects has been removed, as the setting is required to be set to true always and there's no advantage to ever have this setting set to false.
- When a perform rule in a code generation task resolves to false (so the task is skipped), the remark in the log is no longer a warning, but has been changed into a normal remark.
- SQL Server connection strings no longer contain 'packagesize' directives as the default value used isn't in sync with some defaults in the various .NET versions. This change means it now falls back on the default the .NET framework used is using.
- When adding an entity to a derived model by right-clicking the entity and there's just one derived model in the project, it's automatically preselected in the selector dialog.
- DTO/DocDB class models: the vs project files for .NET full no longer refer to a non-existing 'Properties' folder.
- DTO class models: the projection func creation method now has a user code region so you can add additional projection fields to the projection.
- TemplateBindingsViewer: When the templatebindings file is chosen in the combobox, the focus is automatically moved to the list of file bindings so scrolling with the mousewheel doesn't accidentally scroll the combobox but automatically scrolls the list of bindings.
- It's now possible to generate DDL SQL scripts for a selection of catalogs instead of all catalogs in a database: select one or more catalogs in the project explorer or catalog explorer and select the DDL SQL script command you want to run from the context menu: the catalogs selected are now used for generating the scripts, the non-selected catalogs are not taken into account.
- Several elements in the project explorer now offer edit actions for themselves, their mappings and their settings. For instance right-clicking a Field allows you to immediately go to that field's mappings in the entity mappings tab or to its settings on the Code Generation Info tab of the entity's editor. This provides an easy way to navigate from elements in the project explorer to their editors and detailed information.
- Adding an entity with a value-typed field to a derived model as a new derived element now correctly unrolls the valuetyped field as a nested derived element.
- The search/replace dialog for the text-editor is now embedded in the tab, like VS and Rider do: a panel with the search controls is opening when the user presses Ctrl-F and is closed when the user presses ESC or clicks the close button.
- When tabbing away from the TemplateBindingsViewer or the PresetViewer and back, the control which had the focus is remembered, so when coming back to the still open templatebindings viewer tab or preset viewer tab, the focus is set on the control that had focus when you tabbed away.
- If a project file contains multiple mappings for a single element to the same type of target for the same database (e.g. an entity is mapped onto two tables), the designer will report an error and list each mapping as suggestion to be removed.
- Copying a TypedList with relationships into the same project now no longer creates dummy m:n relationships which could make the project unloadable
LLBLGen Pro Runtime Framework
- Generated code is now much smaller, especially for Adapter. This leads to faster compilation times and faster code generation times (on top of the faster code generator in v5.4). A lot of code has been moved to the base classes EntityBase and EntityBase2. These changes have no negative memory impact nor performance impact, in fact memory consumption in prefetch paths is slightly better now.
- The PlainSQL API now has a feature to perform implicit conversions of types, meaning a value of type T1 in the resultset can be implicitly converted to type T2 in the projection class, if an implicit conversion is defined for T1 and T2 (e.g. short to int)
- Poco Typed List fetch methods in Linq and QuerySpec now have an optional query argument to be used as the root query, allowing you to specify a richer query than the generated query for the typed list.
- PostgreSQL 10.x is now a supported database, which includes support for the new Identity fields in PostgreSQL 10.x
- Empty methods for Field-mapped-onto-related-field event handlers are now avoided and code is less verbose
- UnitOfWork and UnitOfWork2 now have a property IsEmpty which returns true if no work is scheduled in the unit of work instance. This property is also implemented in the interface IUnitOfWorkCore.
- PostgreSql: the query generated for directly deleting entities using a join with another table now no longer uses non-ansi joins but uses a proper ansi-join using correlated subquery.
- When fetching prefetch paths with a paging query, the runtime now automatically switches over to parametrized IN clauses for the prefetch path sub paths, no matter the value for the ParameterizedPrefetchPathThreshold. This avoids that all rows in the target of a sub path node are fetched and filtered on the client. This is now also done if a limit is specified for the root node and no paging is performed, the runtime in that situation now also picks the parameterized route.
- The PostgreSQL DQE now uses the RETURNING clause to return sequenced fields in an insert query instead of a separate scalar query which used a separate roundtrip; each insert query is always one roundtrip, even if there are sequenced fields involved.
- SelfServicing: DeleteMulti/UpdateMulti and async variants are now virtual.
- Using FetchProjection<T>(retrievalQuery) or FetchQuery<T>(plainSqlString) where T is a valuetype like Int32 or a system type like string, the query would fail in previous versions but will now succeed with returning a list of values (the values of the first column in the resultset), all typed T.