CHANGELOG
[1.1.4] - 2026-06-22
🐞 Fixed
- Validated all generated SQLite identifiers and rejected unknown composite-index fields before constructing schema SQL.
- Hardened string filters so unsupported raw SQL fragments now raise
QueryValidationErrorinstead of being passed through to SQL. - Aligned async query validation with the sync implementation, including unknown-field checks and model-aware filter value serialization.
- Fixed async filtering for
date,datetime,list, anddictvalues. - Fixed
__inhandling so normal lists/tuples/sets work consistently and empty collections return no rows. - Fixed offset-only pagination by emitting SQLite's required unlimited
LIMITclause. - Tightened
limit/offsetvalidation to reject negative values, floats, booleans, and strings. - Added a clear
TypeErrorwheninsert_many()receives mixed model types. - Serialized reads and connection shutdown with the existing locks so
close()cannot race active queries. - Protected
vacuum()and asyncexecute_raw()with the existing connection locks.
🧪 Tests
- Added regression tests for unsafe string filters, async field validation, serialized filter values,
__in, offset-only pagination, strict pagination types, and mixed-model bulk inserts.
📚 Docs
- Added an APSW full-access implementation plan.
⚠️ Compatibility
- String filters now support only simple comparisons such as
"age > 10"or"name = 'Alice'". Use keyword filters such asage__gte=10for advanced filtering. - Python 3.9 remains supported for the core package. Some optional and development dependencies cannot provide their latest security-fixed wheels on Python 3.9; use Python 3.10+ for the
speed,encryption, anddevextras when processing untrusted input.
[1.1.1] - 2026-05-16
🚀 Added
- Explicit Transactions: Added
atomic()context manager toNyanSQLiteandasync with atomic()toNyanSQLiteAIOfor manual transaction control. - Nested Transactions: Added support for nested
atomic()blocks.
🔄 Changed
- Thread Safety: Improved thread safety by switching to
threading.RLockinNyanSQLite. - Async Safety: Implemented re-entrant async lock in
NyanSQLiteAIOto prevent deadlocks when usingatomic().
[1.1.0] - 2026-05-16
🚀 Added
- Asynchronous Support: Full support for
asyncioviaNyanSQLiteAIOclass. - Improved Performance: Optimized read operations by minimizing thread context switching and processing rows efficiently in
asyncio.to_thread. - Documentation Updates: Added English and Japanese documentation for asynchronous usage.
🔄 Changed
- Internal optimization for
query,select, andsearchmethods inNyanSQLiteAIO. - Optimized read operations in synchronous
NyanSQLiteclass by minimizing lock duration.
[1.0.1] - 2026-05-15
🐞 Fixed
- Minor bug fixes and performance improvements.
[1.0.0] - 2026-05-15
🚀 Added
- Pydantic v2 support: Models can be used directly as database schemas.
- Django-like Query Syntax: Support for intuitive filtering such as
__gte,__in,__like, etc. - FTS5 Full-Text Search: Fast full-text search capabilities using SQLite's FTS5 extension.
- Automatic Index Management: B-tree indexes are automatically created using
Indexed[T]andUniqueIndexed[T]annotations. - Composite Indexes: Support for
CompositeIndexvia Pydantic'sFieldextra metadata. - Transparent Type Handling: Automatically handles complex types like
dictandlistby serializing them to JSON. - WAL Mode Support: Write-Ahead Logging is enabled by default for better performance and concurrency.
- Context Manager Support:
NyanSQLitecan be used as a context manager for automatic connection closing.
🔄 Changed
- Initial public release of NyanSQLite.