All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Comprehensive CHANGELOG.md for tracking changes
- Performance monitoring system with N+1 query detection
- Multi-layer caching architecture (memory, Redis, fragment, request-scoped)
- Query profiling and slow query detection
- Advanced configuration system via
CQL.configure - Support for UUID and ULID primary keys
- Optimistic locking support
- Soft delete functionality
- Query scopes for reusable query patterns
- Lifecycle callbacks (before/after validation, save, create, update, destroy)
- Comprehensive validation system
- Schema dump functionality for reverse-engineering databases
- Migration system with rollback support
- Support for Active Record, Repository, and Data Mapper patterns
- Full support for PostgreSQL, MySQL, and SQLite
- New API methods for consistency (v0.0.436+):
Query#get!- Raises exception if scalar value not found (matchesfirst!pattern)Query#where_null(field)- Explicit IS NULL condition for better clarityQuery#where_not_null(field)- Explicit IS NOT NULL condition for better clarity
- Improved error handling with detailed exception hierarchy
- Enhanced N+1 query detection with better pattern recognition
- Optimized expression builder architecture
- Modernized configuration API with smart defaults
- Improved connection pool management
- Better type safety through Crystal's type system
cascadeparameter in relation collections (usedependent: :destroyinstead)- Affects:
CollectionandManyCollectionclasses - Migration: Replace
cascade: truewithdependent: :destroy - Will be removed in: v1.0.0
- Affects:
- Unused backup code in
src/expression/expressions_backup.cr
- Connection pool configuration consistency
- Transaction rollback handling
- Error context in exception messages
- SQL injection prevention in query builder
- Parameterized query support
- Prepared statement usage by default
Current stable release with comprehensive ORM functionality.
Before (v0.x):
has_many :posts, foreign_key: :user_id, cascade: trueAfter (v1.0):
has_many :posts, foreign_key: :user_id, dependent: :destroyDependency Options:
:destroy- Destroy associated records (runs callbacks):delete_all- Delete associated records (no callbacks):nullify- Set foreign key to NULL (default):restrict- Prevent deletion if associations exist
For detailed version history, see GitHub Releases.
When adding entries to this changelog:
- Add new changes under
[Unreleased]section - Use the following categories: Added, Changed, Deprecated, Removed, Fixed, Security
- Write changes from user perspective (what changed, not how)
- Link to relevant issues/PRs when applicable
- Update migration guide for breaking changes
- Major version (X.0.0): Incompatible API changes
- Minor version (0.X.0): New functionality in backward-compatible manner
- Patch version (0.0.X): Backward-compatible bug fixes