5.18.00 Sep 12 2021
Important notes (changes that may break existing code)
======================================================
* Officially dropped support for pre XE7. XE8 and up is recommended.
New stuff
=========
- Added support for Delphi 11
- Added new SQL user functions to kbmMWMemSQL:
CREATEGUID() - Returns a full size unique GUID including braces.
CREATESHORTGUID() - Returns a compact unique GUID (no braces or dashes).
GETUSERNAME() - Returns username of currently logged in user.
GETCOMPUTERNAME() - Returns name of computer.
QUOTE(string[,quotechar[,endquotechar]]) - Quote a string. Default quotechar/endquotechar is "
UNQUOTE(string[,quotechar[,endquotechar]]) - Unquote a string. Default quotechar/endquotechar is "
- Added NAV(property/fieldname) function to SmartBind expressions. Provides access to
other values of the current position of a navigable bound object.
- Added HasPassedTimeMS, PassedTimeMS, PassedTimeDiffMS and DiffMS (millisec) functions
to TkbmMWTiming (kbmMWGlobal.pas) in addition to the US (microsec) variants.
- Added overridable AllocElements, FreeElements, ZeroElements, ClearElements methods to
TkbmMWLockFreeHashArray<T> and TkbmMWLockFreeHashArray2<T>, to allow for alternative storage,
like storing the array in a memory mapped file.
Changes/minor additions
=======================
- Officially dropped support for pre XE7. XE8 and up is recommended.
- Added logging of exceptions as error, if SmartBind expression excepts.
- Improved kbmMWYAML to allow for cardinal hex or octal values.
Fixes
=====
- Fixed potential null A/V when rebinding datasources/dataset in SmartBind.
- Fixed TkbmMWONFormat.DateTimeAsString in kbmMWObjectNotation to fall back to
detecting a date/time format index if no specific date nor time format is found.
5.17.00 Aug 28 2021
Important notes (changes that may break existing code)
======================================================
* Require kbmMemTable v. 7.94 or newer!
* Changed SmartBind to only set destination if the new value is different from what
is already in the destination. Old behaviour can be forced by setting property
yourbinding.AlwaysSet:=true or via 'alwaysSet:true' in expression based binding.
* Changed SpokeID from integer to Cardinal in kbmMWServerMessagingTransport.pas
New stuff
=========
- Added field mapping support in LINQ via new AsMyDataset which
returns a new developer owned instance of a dataset.
- Added new date/time format specifiers to TkbmMWDateTimeCompiledFormat:
%M3 = 2 digit month
%D2 = 2 digit day
%H2 = 2 digit hour
- Added kbmMWTXT.pas containing TkbmMWTXTStreamer. It will parse and generate
fixed format record/field based text files accoding to a specific
JSON or YAML described format.
Example:
[
{ "name": "name", "ofs": 15, "len": 80 },
{ "name": "address", "ofs": 95, "len": 40 },
{ "name": "zipcode", "ofs": 135, "len": 8 },
{ "name": "city", "ofs": 143, "len": 32 },
{ "name": "active", "ofs": 194, "type": "boolean", "len": 1, "true":" ", "false":["S","I"], "trim":"false" },
{ "name": "phone", "ofs": 195, "len": 15 },
{ "name": "fax", "ofs": 210, "len": 15 },
{ "name": "value", "ofs": 522, "type": "integer", "len": 4 },
{ "name": "date", "ofs": 538, "type": "date", "dateTimeFormat": "%Y2%M3%D2", "len": 6 },
{ "name": "number", "ofs": 564, "type": "float", "decimalCount": 2, "padChar": "0", "len": 7 },
{ "name": "email", "ofs": 600, "len": 0 }
]
Check ObjectNotation demo and LINQ demo for sample data.
- Added many new methods to kbmMWLINQ:
AsMyDataset which will return a developer owned dataset.
AsMyDataset with various mapping arguments, which will allow
for returning only specified fields under specified names.
Syntax: OldFieldName=NewFieldName;....
AsOn with various mapping arguments for field names. See above.
UsingTXT which will take a TXT JSON definition in the AFields argument.
It will parse fixed format text fields using some default settings.
If more detailed settings are needed, use UsingON and provide
the result from a TkbmMWTXTStreamer.
- Updated TkbmMWONFormat in kbmMWObjectNotation.pas to support multiple (max 10) variations
of text representing boolean false/true, Null, INF+ and INF-
- Improved TkbmMWStringBuilder with many variations of two new functions:
Overwrite, Insert, which allows updating existing content, and auto
size the buffer if the overwrite or insert is outside existing buffer size.
Changes/minor additions
=======================
- Improved datasource binding to fall back to binding to the datasource instance itself
rather than its records, when the binding member is not a field name.
- Added OnAttemptAutoBind event to TkbmMWBindings instance. Can be used for
ignoring specific properties or instances while attempting to autobind.
- Added anonymous function argument to AutoBind which will allow
filtering which instances and properties should be autobound.
- Added overloaded PeerSubscribingFor method to be used instead of providing
-1 as SpokeID in original PeerSubscribingFor, which now only takes a cardinal.
- Added overloaded AllSubscriptionsFor method to be used instead of providing
-1 as SpokeID in original AllSubscriptionsFor, which now only takes a cardinal.
- Added Trunc to TkbmMWDateTime which returns an integer Delphi style datetime value.
- Added mwsloExceptOnValueError option to kbmMWSQLite connection pool. If specified, value
conversion errors will not be silently ignored.
- Improved Use.AsType<T> to support T being an interface as well as an object/class.
Fixes
=====
- Changed SpokeID from integer to Cardinal in kbmMWServerMessagingTransport.pas
- Introduced some FPC compiler support changes. It still do not support FPC.
- Fixed bug premature freeing data in a LinqStage which was marked as shared or not owned.