Changelog
September 16, 2026 · View on GitHub
All notable changes to Bold for Delphi will be documented in this file.
The format is based on Keep a Changelog.
[Unreleased]
[26.9.1] - 2026-09-16
Added
- Win64 packages for Delphi 12 and 13 in the DPM specification. DPM derives the
platforms a package supports from its build and design entries rather than from
targetPlatforms, so declaring Win64 there is whatdpm install -platforms=Win64needed (#87) - An OCL workbench demo, and a Database menu that lets the demos switch engine with their preconditions checked first
- A generated class reference converted from the Bold 4.0 help file
- A README for every example, recording which ones no longer run as shipped
- Conway gained a usable interface: load, save, draw and help
Fixed
- Bold's HTTP transport sends and receives its payload as bytes rather than characters, so non-ASCII content survives the round trip (#99)
- An invalid
TBoldObjectListcast incxGridBoldSupportUnitthat crashed any DevExpress grid bound to a list of types - Conway no longer crashes on a board containing blank lines
- The ASP demo client's main form, which had been a byte-for-byte copy of the data module's form since the 2020 source release and could not open
Changed
- The ASP example is ported off IBX to FireDAC with SQLite, so it builds with nothing installed; its README now documents hosting the ISAPI extension under IIS
- The OCL Explorer is ported off DevExpress onto
TBoldGrid, taking the executable from 26.7 MB to 10.6 MB - The GUI uses Segoe UI 9 pt throughout
- Releases ship the Win32 design BPLs only, with the reasoning recorded in the release checklist (#87)
- Bold is listed on the TMS Smart Setup community registry; installing with Smart Setup and with DPM is documented (#87)
- Documentation is consolidated: ROADMAP.md is the single roadmap, CHANGELOG.md is included into the docs site rather than duplicated, and the landing page explains what Bold is for
[26.9.0] - 2026-09-06
Added
collect(role)evaluates in the persistence layer:TBSS_collectis implemented and installed, soself.child->collect(parent)and the implicitself.child.parenttranslate to SQL instead of falling back to in-memory evaluation (#96)IBoldDatabase.ReleaseAnotherDatabaseConnectionreleases a connection obtained fromCreateAnotherDatabaseConnection(#92)- The UniDAC adapter tests compile through a stub-unit
DebugUniDACbuild configuration, so UniDAC is never required; they run on SQL Server and SQLite, against the vendored UniDAC 10.4 on Delphi 12 or UniDAC 11 on Delphi 13 (#89) - Adapter-neutral persistence scenario tests run on every adapter (#88, #80, #89); end-to-end tests drive
TBoldDbCopyand the database validator threads (#92, #93, #94) BOLD_TEST_ENGINEselects the test database engine without editingUnitTest.ini;UnitTest\run_matrix.ps1runs the adapter x engine matrix (FireDAC and UniDAC on SQLite and SQL Server) with one summary tableUnitTest\sync_gui_dpr.ps1generates the GUI runner's unit list from the console runner, so TestInsight runs the whole suite (#84)- DPM package specification, packed and published to the public feed at https://delphi.dev as
bero.BoldForDelphifor Delphi 11, 12 and 13, plus a Boss manifest and a release checklist (#87) - TMS Smart Setup definition (
tmsbuild.yaml) andversion.txt, sotms install bero.boldfordelphibuilds and registers the design package for Delphi 11, 12 and 13; submitted to the community registry (#87)
Fixed
- Data corruption on FireDAC: with
MultiRowInsertLimit = 1,PMCreatewrote the second new object's attribute values into the third and later objects saved in oneUpdateDatabase, because the per-row reset cleared a parameter snapshot instead of the query's real parameters (#88) UseBatchQuerieswas broken on both FireDAC and UniDAC (#80); it is now refused on engines where batching is unverified instead of failing at run time (#95)- Undo: the redo value space was orphaned when undoing a block with no changes, and
DoUndoInTransactionused a block after freeing it (#86) - UniDAC: cached queries leaked when a connection wrapper was destroyed (#90);
CreateAnotherDatabaseConnectioncreated aTUniConnectionnobody freed (#91);GetDatabaseErrorraised its own exception for providers without an error-code table, hiding the real database error (#98) TBoldDbCopyand the database validator dropped the extra connection wrappers they obtained (#92); validator worker threads were never freed (#93)TBoldDbCopyfailed silently on FireDAC:Prepareran before the parameter types were known, worker exceptions were swallowed, the row-count query leaked; failures are now logged and reported throughErrors(#94)FetchFromClassListfetched every invalid single link of the other-end class one by one, oneSELECTeach, when deriving a multilink from a current class extent; it now falls back to the single database query and leaves invalid members alone (#97)- The design packages could not be installed from the IDE after
LIBSUFFIX AUTO: a leftover LIB version in the project files made the IDE look fordclBold370.30.bplwhile the compiler produceddclBold370.bpl(#87) - The two ignored
FetchRefetchtests are rehabilitated and pin the classicDbFetchOwningMemberpath; the suite has no ignored tests (#83) - Three
TestBoldOclEvaluationtests assumed the creation order of unsaved objects in a class extent; they sort first - The Delphi 11.3 design package was built without a version resource: its Debug/Win32 configuration overrode
VerInfo_IncludeVerInfoto false - The 26.8.1 Delphi 12.3 package had lost
NoObjectSpaceTransactionsagain (the define restored for #85 was dropped by the version-stamping commit the same day); all three packages now declare it in the same project group (#85)
Changed
- Design packages are named by compiler through
LIBSUFFIX AUTO(dclBold280.bpl,dclBold290.bpl,dclBold370.bpl); the Delphi 12.1 CE package project is retired (#87) CanEvaluateInPSanswers True forcollect(role), where it previously answered False on every engine (#43, #96)- Test suite at 2182 tests (2182 passing, 0 ignored, 0 failed); code coverage 58.5%
[26.8.1] - 2026-08-16
Added
- Parameterized ID-list SQL for SQL Server:
MaxParamsInIdListraised to 500 (#75), multilink fetch andPMDeleteuse parameterized lists with explicitParamCheck(#76), and IN-lists are padded to fixed bucket sizes so the plan cache is reused (#77) - Bound parameter values are now written with the SQL log, rendering NULL as
NULLand blob payloads as a placeholder; an optional UnitLog-backed sink is selected by the newBOLD_LegacyLog/BOLD_UnitLogdefines inBold.inc(#82) IBoldQuerygainsParamCountandParam[](#82)- Unit-level helpers
GetSharedString/GetSharedAnsiStringinBoldSharedStrings, andBoldNamesEqual/BoldAnsiEqual/BoldStrAnsiEqualinBoldUtils(#82) - Benchmarks for id-list SQL covering bucket collapse and the plan-cache bound (#79)
- First test coverage for
EmbeddedSingleLinksstamping on theDbFetchOwningMemberpath (#83) setup-tests.ps1andUnitTest/README.mdto make first-time setup work without hunting for dependencies
Fixed
- Orphaned read transactions on the shared connection:
Cleardid not close, so releasing a query to the cache left its transaction open, andExecSQL/Opendiscarded ownership of a transaction the query itself had started. Row locks then blocked other work until the connection was recycled. Fixed for both UniDAC and FireDAC (#81) SetEmptyValueleft null non-nullable attributes null and raised on valuesets (#74)SubscribeToHandleno longer dereferences a variable list rebuilt during teardown (#61)- The Delphi 12.3 design-time package had lost
NoObjectSpaceTransactions, compiling a differentTBoldSysteminterface than the other three packages (#85) UnitTestGUIproject could not build: missingCode\Mainin the unit search path (#84)- Documentation named Delphi 13 as Athens instead of Florence, pointed at package folders that never existed (
packages/Delphi30/), and advertised a seven-month-old release as current
Changed
- Release tags follow Year.Month.build with no zero padding, so they parse as semantic versions for dependency managers such as Boss
- Both test runners compile the default configuration; the
Attracsdefine was removed fromUnitTestGUI.dprojso console and GUI runs test the same code (#84) - Version information normalized to 26.8.1.0 across all four design-time package projects, which had drifted to four different values
- Test suite at 2165 tests (2163 passing, 2 ignored)
[26.8.0] - 2026-08-03
Added
- 7 XML roundtrip tests for OLW node streaming (NodeList, Operation, TypeNode, ListCoercion, Member, Literals, OclCondition)
- 5 XML roundtrip tests for BoldCondition streaming (28.7% → 99.4% coverage)
Fixed
- 4 memory leaks in OLW XML streamer
ReadObjectmethods —CreateObjectallocated internal lists that were orphaned whenReadObjectoverwrote field pointers (#34) - Add try-finally blocks for Bindings cleanup in
TBoldXMLOCLConditionStreamer - Standardize Pascal casing and fix method name typo
- Correct field name casing from
flisttofListinTBoldOLWNodeList
[26.1.0] - 2026-01-06
Added
- Oracle Database Support: Full Oracle support in Bold core persistence mappers (#10)
AsObjectListhelper forTBoldAbstractListHandle(#17)- Codecov.io integration for code coverage tracking
- PowerShell scripts for unit tests and coverage
Changed
- Refactored code to reduce duplication with extracted helper methods (#13, #15, #18, #19):
IsValidIdentifier,SetPersistenceTaggedValue,EnsureConstraintListAndAddFreePublisherInstance,EnsurePublisher,BuildWCFOrQueryWithOperatorInitializeIndirectLinkFields,InitializeDirectLinkFields,InitializeTimestampFieldsSystemHasDirtyObjects,DoPreChangeIfNeeded
- Removed C++ support from
BoldUMLModelValidator(#16) - Refactored
TBANumeric.GetStringRepresentationto extract common logic (#19) - Refactored
TBABlobvalidation (#14) - Code coverage improved from 28% to 40%
Fixed
- Missing
Result :=inTBABlobImageJPEG/BMP.GetStringRepresentation(#20) - String columns ignoring
AllowNullwhen usingEmptyStringMarker(#11) - 64-bit
ACCESS_VIOLATIONin grid and edit controls (#9)
[25.12.1] - 2025-12-30
Added
- SQLite database support for MasterDetail demo
- Firebird database support for MasterDetail demo
- PostgreSQL database support for MasterDetail demo
- CHANGELOG.md with version history
Changed
- Use
NativeIntinstead ofIntegerfor TList-derived Items properties (fixes W1075 warnings) - Simplified versioning: removed BoldVersionInfo.pas, version now in dproj only
Fixed
- FireDAC SQLite catalog issue causing "near '.': syntax error"
- DateTime field handling for SQLite (stores as TEXT in ISO 8601 format)
- VendorHome changed to VendorLib for FireDAC connections
[25.12.0] - 2025-12-22
Added
- Delphi 13 Support: Full support for Delphi 13 (packages in
Delphi30folder) - MasterDetail Demo: Comprehensive example with configurable database persistence
- Quick Start Guide: New documentation at
quickstart.md - Roadmap: Project roadmap at
ROADMAP.md - About Dialog: Bold history and version info in IDE menu
- Model Editor Enhancements:
- Save and Generate All plugin
- Save prompt on close
- TextHint support in TBoldEdit
- Logging System: Interface-based logging with pluggable sinks
- LogBridge Example: Demonstrates logging integration
- XML Persistence: Support for XML-based data storage
- HTML Documentation: Modern documentation for examples
Changed
- Source files reorganized into categorized subfolders
- Use relative paths instead of environment variables
- Converted all source files to UTF-8
- Split
maan_UndoRedo.pasinto smaller unit files - Removed CLX support from BoldEnvironment
- Simplified BoldGUIDUtils to use
TGUID.NewGuid.ToString
Removed
- Deprecated database adapters moved to
Source/Deprecated/(ADO, BDE, DBExpress, Advantage, SQLDirect) - C++Builder specific code
- Unused BoldMath unit (use
System.Mathinstead) - Duplicate functions from BoldUtils that exist in modern Delphi RTL
- Unused COM handles files
- Unused example projects (OLLE)
Fixed
- Duplicate entries in
TBoldObjectList.InternalAddNew(#33) - Prevent manual modification of class lists (#33)
- Package compilation errors for Delphi 11.3, 12.1, 12.3
- Compiler warnings in various units
- Deprecated
TThread.Resume/Suspendwarnings - Memory leak in test infrastructure
[25.10.0] - 2025-11-01
Added
- DUnitX Test Framework: Migration from legacy DUnit
- Code Coverage: DelphiCodeCoverage integration (28% coverage achieved)
- Unit Tests:
- BoldSystem tests (creation, members, DefaultSystem)
- BoldUtils tests
- BoldGUIDUtils tests
- FireDAC interface tests
- Persistence tests
- RTModel tests
- Test Infrastructure: Configurable database support for tests
Changed
- Ported legacy DUnit tests to DUnitX
- Consolidated test code structure
Removed
- Legacy test Framework folder
[4.0.1.0] - 2004-04-01
Notes
- Original release by Boldsoft AB
- Open-sourced by Embarcadero in 2020 under MIT license
- Base version for community development
Version Numbering
- Community versions:
YY.MM.patch(e.g., 25.12.0) - Original version: 4.0.1.0 (Boldsoft release)