更新履歴
[1.1.5] - 2026-09-26
🚀 高速化
- モデル登録時にフィールド別の値変換器と更新の検証経路を準備します。2万行の変換を比較したローカル測定中央値は0.194秒から0.166秒になりました(基本型・日時・リストを含むモデル)。
- 型情報の解析を繰り返さないようにし、1万行取得のローカル測定中央値が同期版で0.098秒から0.068秒、非同期版で0.108秒から0.074秒になりました。
LIMITとOFFSETをSQLパラメータに変更しました。1,000回のページング検索のローカル測定中央値は0.0341秒から0.0315秒になりました。__inの使われないJSON変換を削除しました。整数1,000件の条件を500回生成するローカル測定では0.138秒から0.091秒になりました。
🐞 修正
- ドキュメント用依存関係の既知脆弱性を解消し、任意依存の
cryptographyをPython 3.10以上の修正版に限定しました。 - 非同期キャンセル後も実行中のSQLite呼び出しを保護し、開いたトランザクションをロールバックするようにしました。同期版でも割り込み時にロールバックします。
update()が更新値を検証し、独自バリデータやモデル設定がある場合は対象行をトランザクション内で検証するようにしました。- 既存テーブルとモデルの列、型、主キー、NULL制約、全文検索対象列が異なる場合、
register()でSchemaMismatchErrorを送出するようにしました。 - 既存テーブルへ全文検索を追加した場合、登録済みの行も検索できるようにしました。
📚 ドキュメント
- エラー/例外ガイド、バックアップ例、必要列だけの取得、非同期の一括取得、続き位置ページングの説明を更新しました。
⚠️ 互換性
- Python 3.9では
encryption・all・devextrasからcryptographyをインストールしません。コアのPython 3.9対応は継続します。 - 無効な部分更新はPydanticの
ValidationError、互換性のないテーブルの登録はSchemaMismatchErrorを送出します。モデル変更時はテーブルを明示的に移行してください。
[1.1.4] - 2026-06-22
🐞 修正
- SQLite識別子をSQL生成前に検証し、複合インデックスに未知のフィールドが含まれる場合は拒否するようにしました。
- 未対応の生SQL断片を文字列フィルタとして渡した場合、SQLへ素通しせず
QueryValidationErrorを送出するようにしました。 - 非同期版のクエリ検証を同期版と揃え、未知フィールド検証とモデル定義に基づくフィルタ値シリアライズを追加しました。
- 非同期版で
date/datetime/list/dictのフィルタが正しく動くようにしました。 __inの通常ケースを修正し、空コレクションは0件一致として扱うようにしました。offsetのみを指定した場合もSQLiteで有効な無制限LIMIT句を生成するようにしました。limit/offsetで負数、小数、真偽値、文字列を拒否するよう検証を厳格化しました。insert_many()に異なるモデル型が混在した場合、明確にTypeErrorを送出するようにしました。- 読み取り処理と接続終了を既存ロックで直列化し、実行中のクエリと
close()が競合しないようにしました。 vacuum()と非同期版のexecute_raw()を既存ロックで保護しました。
🧪 テスト
- 危険な文字列フィルタ、非同期版のフィールド検証、シリアライズ対象フィルタ値、
__in、offset単独指定、ページネーション型検証、混在モデル一括挿入の回帰テストを追加しました。
📚 ドキュメント
- APSW 全機能アクセスに向けた段階的な実装計画を追加しました。
⚠️ 互換性
- 文字列フィルタは
"age > 10"や"name = 'Alice'"のような単純比較のみサポートします。複雑な条件はage__gte=10のようなキーワードフィルタ、または明示的な raw SQL を使ってください。 - コアパッケージのPython 3.9対応は維持します。ただし、一部の開発・オプション依存関係はPython 3.9向けに最新のセキュリティ修正版ホイールを提供していません。信頼できない入力を扱う場合、
speed・encryption・devextrasはPython 3.10以上で利用してください。
[1.1.1] - 2026-05-16
🚀 追加
- 明示的トランザクション: 手動でトランザクションを制御するための
atomic()コンテキストマネージャをNyanSQLiteに、async with atomic()をNyanSQLiteAIOに追加しました。 - 入れ子構造のトランザクション: ネスト(入れ子)された
atomic()ブロックのサポートを追加しました。
🔄 変更
- スレッドセーフ:
NyanSQLiteでthreading.RLockを使用するように変更し、スレッド安全性を向上させました。 - 非同期安全性:
NyanSQLiteAIOにおいて、atomic()使用時のデッドロックを防ぐためにリエントラントな非同期ロックを実装しました。
[1.1.0] - 2026-05-16
🚀 追加
- 非同期サポート:
NyanSQLiteAIOクラスによるasyncioの完全サポート。 - パフォーマンス向上:
asyncio.to_thread内での効率的な行処理により、読み取り操作を最適化。 - ドキュメント更新: 非同期利用に関する日英のドキュメントを追加。
🔄 変更
NyanSQLiteAIOのquery,select,searchメソッドの内部最適化。- 同期版
NyanSQLiteクラスにおいて、読み取り操作のロック保持時間を最小化。
[1.0.1] - 2026-05-15
🐞 修正
- 軽微なバグ修正とパフォーマンスの改善。
[1.0.0] - 2026-05-15
🚀 追加
- Pydantic v2 対応: Pydanticモデルをそのままデータベーススキーマとして利用可能。
- Djangoライクなクエリ構文:
__gte,__in,__likeなどの直感的なフィルタリングをサポート。 - FTS5 全文検索: SQLiteのFTS5拡張を利用した高速な全文検索機能。
- 自動インデックス管理:
Indexed[T]やUniqueIndexed[T]アノテーションによるB-treeインデックスの自動生成。 - 複合インデックス: Pydanticの
Fieldメタデータを介したCompositeIndexのサポート。 - 透過的な型処理:
dictやlistなどの複雑な型を自動的にJSONとしてシリアライズ/デシリアライズ。 - WALモードのサポート: パフォーマンスと並行性の向上のため、デフォルトでWAL(Write-Ahead Logging)モードを有効化。
- コンテキストマネージャ対応:
with構文による自動的なコネクション終了処理。
🔄 変更
- NyanSQLite の初期公開リリース。