Quick 13 has reached beta, bringing a substantial collection of new persistence, relationship, testing, and performance capabilities—and now it needs some real-world mileage.
New Features and Improvements
Highlights include:
- Automatic timestamps and built-in soft deletes
- New
upsert(),createAll(),replicate(), andtouch()APIs - Laravel-inspired model factories for testing
- Richer
belongsToManypivot models - New relationship helpers such as
whereBelongsTo()andwhereHasValue() - Improved entity state tracking, lifecycle hooks, and refresh-on-save support
- Better compatibility across Lucee, Adobe ColdFusion, and BoxLang
- An upgrade to qb 14
Performance Improvements
Quick 13 reduces repeated metadata, hydration, and attribute-state work on several frequently used code paths:
- Qualified-column caching reduced qualification calls from 6 to 3—a 50% reduction in the regression fixture.
- Hydration now resolves attribute bindings once per result set instead of once per row. For a 1,000-row result, that eliminates 999 repeated resolution passes.
- A bounded, process-local entity definition registry reduces repeated metadata compilation across instances of the same entity.
- Additional optimizations reduce allocations during attribute tracking, refresh queries, qualified-column lookups, and runtime attribute overlays.
Focused microbenchmarks measured the following improvements over Quick 12.0.12:
| Operation | Lucee 6.2.8.20 | Adobe ColdFusion 2021.0.23 | BoxLang 1.17.0 |
|---|---|---|---|
| Entity creation | 39.1% faster | 28.1% faster | 36.0% faster |
| Single-entity hydration | 26.9% faster | 31.5% faster | 38.2% faster |
| Hydrating 100 entities | 7.1% faster | 36.6% faster | 44.3% faster |
| Hydrating 1,000 entities | 11.3% faster | 42.5% faster | 27.2% faster |
hasMany relationship construction |
64.1% faster | 24.6% faster | 26.3% faster |
Each result is the median elapsed time from 15 samples of 50 iterations after warm-up. These figures describe reductions in repeated internal work, not equivalent reductions in total application request time. Actual improvements will vary by CFML engine, JVM, entity definition, and query shape.
Breaking Changes
As a major release, Quick 13 includes several behavior changes to review while testing:
- Quick now requires qb 14.
- Automatic timestamps are enabled by default for declared
createdDateandmodifiedDateattributes. reset()now clears the cached query builder along with entity and relationship state.- Loaded primary keys are now immutable.
- Duplicate entity property names now throw
QuickDuplicatePropertyduring initialization. - Custom casts now receive null values, and
BooleanCast@quickpreserves null instead of converting it tofalse. - Relationship getters on new entities now return null, a configured default, or an empty collection without querying the database.
- The second positional argument to
appendVirtualAttribute()is nowdefaultValue;excludeFromMementohas moved to the third argument.
See the Quick 13 Upgrade Guide for examples and upgrade instructions.
We Need You (And Your Apps)
Install the beta, check out the docs, and let us know how it runs for you. Testing existing applications, large hydration workloads, relationship-heavy queries, and custom casts would be especially valuable!