Skip to content

更新履歴 ​

[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・dev extrasから 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・dev extrasは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 の初期公開リリース。