SQLiteは、自己完結型で埋め込み可能なトランザクションレス、サーバレス、ゼロ設定のSQLデータベースエンジンを実装した、オープンソース、マルチプラットフォーム、フリーおよびスモールのCライブラリです。これは、世界で最も使用されているSQLデータベースエンジンです。
機能の概要
主な機能には、独立型、アトミック、耐久性と一貫性のあるトランザクションのサポート、SQL92実装、データベースファイルをコンピュータ間で自由に共有でき、最大2テラバイトのデータベース、ギガバイトサイズのブロブと文字列のサポート、小さなコードフットプリント使いやすい、非常にシンプルなAPI(Application Programming Interface)と同じように機能します。
さらに、SQLiteは初期構成や管理を必要とせず、開発者はアプリケーションファイル形式を使用するのに最適で、外部依存関係がなく、 TCL(Tool Command Language)バインディング、包括的なドキュメントなどがあります。
他の多くのプログラミング言語のバインディングは、別途入手できます。そのソースコードはよくコメントされており、SQLiteデータベースの管理に使用するオフセットから設計されたスタンドアロンのCLI(Command-Line Interface)クライアントが付属しています。
私はそれを何のために使うことができますか?
SQLiteデータベースエンジンは、個人的にも商業目的でも使用できます。 SQLiteの推奨される用途には、ガジェット用のデータベース、ウェブサイトデータベース、エンタープライズRDBMS(リレーショナルデータベース管理システム)のスタンドイン、アプリケーションファイル形式などがあります。
フードとサポートされているOS
SQLiteディストリビューションには、SQLiteデータベースの管理に使用できるスタンドアロンのコマンドラインアクセスプログラム(sqlite)が付属しています。これはSQLiteライブラリの使用例です。これはANSI-Cプログラミング言語で書かれています。
サポートされているデスクトップオペレーティングシステムには、GNU / Linux、Mac OS X、Microsoft Windowsがあります。サポートされているモバイルオペレーティングシステムには、AndroidとiOSがあります。これは、32ビットと64ビットの両方のハードウェアプラットフォームで正常にテストされており、他のOSとの移植が容易です。
このリリースの新機能:
このリリースのハイライトには、PostgreSQLスタイルのUPSERTのサポートと、特にORDER BY LIMITクエリのパフォーマンスの向上が含まれています。
バージョンの新機能:
利用可能な場合、F2FSファイルシステムのアトミック書き込み機能を利用して、トランザクションオーバーヘッドを大幅に削減します。これには現在、SQLITE_ENABLE_BATCH_ATOMIC_WRITEコンパイル時オプションが必要です。
ATTACHおよびDETACHコマンドがトランザクション内で動作するようにします。
PRIMARY KEYに正確に1つの列が含まれている場合は、WITHOUT ROWID仮想表を書き込み可能にします。
"fsync()"は、 WALリセットでヘッダーが書き込まれた後に発生するエラーは、チェックポイントの同期設定を使用するようになりました。これは、 "fullfsync"コマンドを使用することを意味します。 PRAGMA checkpoint_fullfsyncがオンに設定されている場合は、
sqlite3_sourceid()関数は、ソースコードがバージョン管理にチェックインされているものから変更されたかどうかを検出しようと試み、修正がある場合、バージョンハッシュの最後の4文字は "alt1"または「alt2」を含む。目的は、偶発的および/または不注意な編集を検出することです。偽造者はこの機能を無効にすることができます。
右側に集約クエリを持つCREATE TABLE ASステートメントの列名のデコクルークを改善しました。
より少ない「stat()」は、 UNIX VFSによって発行されたシステムコール。
LIKE最適化を強化し、ESCAPE句を使用するようにしました。
クエリプランナは、クエリフラットナーの最適化を使用するのではなく、コルーチンを使用してFROM句サブクエリを実装するようになりました。サブクエリのためのコルーチンの使用のサポートは、もはや無効にすることはできません。
仮想テーブルのxBestIndexメソッドに!=、IS、IS NOT、NOT NULL、およびIS NULL制約に関する情報を渡します。
最終改行文字がない場合、入力の最後の行を受け入れるようにCSV仮想テーブルを拡張しました。
まれに使用される "スクラッチ"メモリアロケータ。可能な場合に大量のメモリ割り当てを避けるべきであるというヒントを与えるSQLITE_CONFIG_SMALL_MALLOC設定に置き換えてください。
既存のユニオン仮想テーブル拡張にswarm仮想テーブルを追加しました。
データベースファイルのページに直接アクセスするためのsqlite_dbpage仮想テーブルが追加されました。ソースコードはアセンブルに組み込まれ、-DSQLITE_ENABLE_DBPAGE_VTABコンパイル時オプションを使用してアクティブ化されます。新しいタイプのfts5vocab仮想テーブルを追加する - "インスタンス" FTS5フルテキストインデックスへの直接アクセスを可能な最低レベルで提供します。
いくつかの古いノートパソコンのFirefoxで問題を引き起こしていたので、Windows VFSのrand_s()への呼び出しを削除してください。
コマンドラインシェルへのsrc / shell.cソースコードはバージョン管理下にありません。このファイルはビルドプロセスの一部として生成されるようになりました。
その他のマイクロ最適化により、CPU使用率は約2.1%低下します。
バグの修正:
OSSFuzzが発見した欠陥のあるassert()ステートメントを修正しました。チケットcb91bf4290c211d
sqlite3_result_pointer()で不明瞭なメモリリークを修正しました。チケット7486aa54b968e9b
クエリプランナの実行が終了するまで、スキーマのリセットを延期することにより、使用後にエラーが発生する可能性を回避します。チケットbe436a7f4587ce5
COLLATEが正しければ、ORDER BYまたはGROUP BYを最適化するために式の索引のみを使用してください。チケットe20dd54ab0e4383
index-on-expressionの式が実際に定数であるときに発生していたアサーションフォルトを修正しました。チケットaa98619ad08ddca
PRAGMA reverse_unordered_selectsの後に発生する可能性のあるアサーション・フォルトを修正しました。チケットcb91bf4290c211d
INまたはEXISTSサブクエリでテーブル値関数を使用するクエリで発生する可能性のあるセグメンテーションを修正しました。チケットb899b6042f97f5
特定の恐ろしい共通テーブル式をコンパイルするときに潜在的な整数オーバーフローの問題を修正しました。これはOSSFuzzによって発見された別の問題でした。チェックイン6ee8cb6ae5。
Google Project ZeroのNatalie Silvanovichによって検出された問題で、破損したデータベースファイルを照会する際に潜在的な範囲外の読み取りを修正しました。チェックイン04925dee41a21f。
バージョン3.20.1の新機能:
バージョン3.20.1のパッチリリースでは、まれなメモリリークを修正するために、sqlite3_result_pointer()インターフェイスの2行のコードが変更されています。
バージョン3.9.2の新機能:
SQLiteバージョン3.9.2は、2つの不明なバグを修正するパッチリリースです。
バージョン3.8.9の新機能:
このリリースの新機能には、PRAGMA index_xinfoコマンド、sqlite3_status64()インターフェイス、およびコマンドラインシェルの ".dbinfo"コマンドが含まれます。
バージョン3.8.8.2の新機能:
3.8.8.2のパッチリリースでは、軽微な問題が修正されています。ログがリセットされて新しいコンテンツが含まれていなくても、sqlite3_wal_checkpoint(TRUNCATE)操作で常に先読みログが切り捨てられます。これがバグ修正か新しい機能かどうかは不明です。
このようなものは、通常は定期的に予定されている次のリリースに入るのが普通ですが、急いでSQLiteの著名ユーザーが変更を必要としたので、このパッチを介して急いでくださいました。
実際にsqlite3_wal_checkpoint(TRUNCATE)の動作を強化する必要がない限り、アップグレードする必要はありません。
バージョン3.8.8.1の新機能:
ORDER BY句、LIMIT句、および結果セットに約60以上の列を含むクエリで、出力が間違った順序で表示される原因となるバージョン3.8.4以降のソートロジックの不具合を修正しました。 。チケットf97c4637102a3ae72b79。
SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
sqlite3.cのSHA1:33987fb50dcc09f1429a653d6b47672f5a96f19e
バージョン3.8.8の新機能:
新機能:別のプロセスによってデータベースファイルが変更されたかどうかを判断するために使用できるPRAGMA data_versionコマンドが追加されました。
sqlite3_wal_checkpoint_v2()インタフェースにSQLITE_CHECKPOINT_TRUNCATEオプションを追加し、対応するPRAGMA wal_checkpointの拡張機能を追加しました。
sqlite3_stmt_scanstatus()インターフェイスが追加されました.SQLITE_ENABLE_STMT_SCANSTATUSを使用してコンパイルした場合にのみ使用できます。
sqlite3_table_column_metadata()は、WITHOUT ROWIDテーブルで正しく動作し、カラム名パラメータがNULLの場合にテーブルの存在をチェックするように拡張されています。現在、SQLITE_ENABLE_COLUMN_METADATAコンパイル時オプションを必要とせずに、デフォルトでビルドにもインターフェイスが含まれています。
SQLITE_ENABLE_API_ARMORコンパイル時オプションが追加されました。
SQLITE_REVERSE_UNORDERED_SELECTSコンパイル時オプションが追加されました。
SQLITE_SORTER_PMASZコンパイル時オプションとSQLITE_CONFIG_PMASZ開始時オプションが追加されました。
sqlite3_config()にSQLite_CONFIG_PCACHE_HDRSZオプションを追加しました。これにより、アプリケーションがSQLITE_CONFIG_PAGECACHEで使用する適切なメモリ量を簡単に判断できるようになりました。VALUES句の行数は、SQLITE_LIMIT_COMPOUND_SELECTによって制限されなくなりました。
再帰的にSQLを評価するeval()SQL関数を実装するeval.c loadable拡張を追加しました。
パフォーマンスの向上:
bツリー全体のパフォーマンスを3.2%向上させるために必要なmemcpy()操作の数を減らします。
スキップスキャン最適化のコスト見積もりの改善。
自動索引最適化では、適切な場合に部分索引を生成できるようになりました。
バグの修正:
ジャーナルファイルを切り捨てた直後にfsync()を呼び出すことにより、 "PRAGMA journal_mode = TRUNCATE"を使用して電力損失後の耐久性を確保してください。
問合せプランナは、LEFT JOINの右側の表のどの列も、その列にNOT NULL制約があってもNULLになることを認識します。これらのケースでは、NULLテストを最適化しようとしないでください。チケット6f2222d550f5b0ee7edの修正。
DISTINCT演算子が降順索引を使用して実装されていても、ORDER BYが行を昇順に配置するようにしてください。チケットc5ea805691bfc4204b1cb9eを修正しました。
一部のスレッドが接続を開いたり閉じたりしている共有キャッシュモードで、多数のスレッドを実行しているときにストレス下で発生する可能性があるデータ競合を修正しました。
american fuzzy lopで見つかった不明瞭なクラッシュバグを修正しました。チケットa59ae93ee990a55。
-O3でコンパイルしたときにR-Tree拡張が不正確な結果を計算する原因となったGCCオプティマイザバグ(MacOS 10.7のgcc 4.2.1)を回避してください。
その他の変更:
-DHAVE_STRCHRNULLコンパイル時オプションを使用して特に有効にしない限り、strchrnul()Cライブラリルーチンの使用を無効にします。
likelihood()、likely()、unlikely()SQLヒント関数の有効性と精度を向上させました。
SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
sqlite3.cのSHA1:91aea4cc722371d58aae3d22e94d2a4165276905
バージョン3.8.7.4の新機能:
このリリースでは、3.8.7.3パッチの変更に必要なミューテックスの追加が修正されましたが、誤って省略されました。内部SQLiteテストではミューテックスは必要ありませんでしたが、Firefoxはそれがなくてもクラッシュします。ミューテックスがもう一度見逃されないように、テストケースが追加されました。
バージョン3.8.7.3の新機能:
バグフィックス:キャッシュされたKeyInfoオブジェクト(アプリケーションには見えない内部抽象化)が共有キャッシュモードで動作していて、同じ共有キャッシュ上の他のデータベース接続を継続して開いたままいくつかのデータベース接続を頻繁に閉じて再オープンすると、チケットe4a18565a36884b00edf。
バグ修正:LEFT JOINの右側の表にある列は、その列にNOT NULL制約があってもNULLになることがあることを認識してください。列がNULLにならないと想定した最適化を適用しないでください。チケット6f2222d550f5b0ee7ed。
SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
sqlite3.cのSHA1:3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
バージョン3.8.7.2の新機能:
このリリースの主な理由は、ROLLBACKコマンドを拡張して、ROLLBACKがスキーマを変更しない限り、同じデータベース接続でクエリを実行し続けることができるようにすることです。 SQLiteの以前のすべてのバージョンでは、ROLLBACKによって保留中のクエリが直ちに停止し、SQLITE_ABORTまたはSQLITE_ABORT_ROLLBACKが返されます。 ROLLBACKがデータベース・スキーマを変更した場合でも保留中の問合せは中止されますが、このパッチ・リリース時点では、スキーマが変更されていない場合でも問合せは実行を継続できます。
ROLLBACK拡張機能に加えて、このパッチリリースには、3つの不明なバグの修正も含まれています。
バージョン3.8.7.1の新機能:
このバグ修正リリースの主な理由は、ALTER TABLE ADD COLUMNを使用して追加されたテーブルの最後にあるフィールドの値を更新する際の問題に対処することです。この問題1は、3.8.7リリースで初めて登場しました。
3.8.7のリリースでは、Androidビルドが標準Cライブラリのstrchrnul()関数を使用しようとしましたが、その関数はAndroidでは使用できませんでした。 Androidビルドは、問題を回避するために-DHAVE_STRCHRNUL = 0を追加する必要がありました。このパッチはそれを修正して、Androidのビルドは変更せずに動作するはずです。
PRAGMA journal_mode = TRUNCATEの操作が拡張され、PRAGMA synchronous = FULLのときにジャーナル・ファイルを切り捨てた後にfsync()を呼び出すようになりました。これはコミット直後に停電が発生した場合のトランザクションの耐久性を維持するのに役立ちます。
最後に、VIEW上でのUPDATEとDELETEの実行に関連する長年にわたる不明瞭な問題が修正されました。
バージョン3.8.7の新機能:
以前のリリースからの変更点のほとんどは、SQLiteを少し速く実行できるように設計されたマイクロ最適化です。個々の最適化はそれぞれ、パフォーマンスに与える影響はわずかです。しかし、その改善が足りない。 Linux上でcachegrindを使用し、gcc 4.8.1およびx64 Linuxでコンパイルされた、よく定義された作業負荷(SQLite開発者が標準的なアプリケーション作業負荷のプロキシとして使用する)で測定した場合、現在のリリースでは20%以前のリリースと同じ数のCPUサイクル。 Cachegrindは実際のCPUではなく、測定に使用されるワークロードはプロキシだけです。だからあなたのパフォーマンスは変わるかもしれません。現実世界のアプリケーションで測定され、報告された改善の約半分が見込まれます。 10%は20%以下ですが、それでもかなり良いと思います。このリリースには、符号付き32ビット長のパラメータの代わりに符号なし64ビットを持つ新しいC言語インターフェイスセットが含まれています。新しいAPIは新しい機能を提供しません。しかし、整数オーバーフローの脆弱性に対してより耐性のあるアプリケーションを書く方が簡単です。
今回のリリースでは、複数のスレッドを使用して大規模なソート操作を支援できる新しいソート機能も含まれています。 (ソート操作は、ORDER BYおよび/またはGROUP BY句を実装するために必要な場合があり、ほとんどの場合、CREATE INDEXには常に必要です。)マルチスレッドソーターはデフォルトでオフになっており、PRAGMA threads SQLコマンドを使用して有効にする必要があります。マルチスレッドソーターは、大規模なソートで高速なリアルタイムパフォーマンスを提供しますが、CPUサイクルとエネルギー消費量も多くなります。
バージョン3.8.3.1の新機能:
SQLiteバージョン3.8.3.1では、バージョン3.8.1、3.8.2、および3.8.3に存在するバグが修正され、有効な行が省略される可能性があります。これらのバージョンからのアップグレードが推奨されます。
この問題は、SQLiteがSQLITE_ENABLE_STAT3またはSQLITE_ENABLE_STAT4のコンパイル時オプションでコンパイルされた場合にのみ発生します。その場合、問合せに次のような式を含むWHERE句があるとします。
WHERE(expr1 OR expr2 OR ... OR exprN)および列IS NOT NULL
expr1からexprNのすべてがインデックスでの使用に適している場合、クエリの計画中にSQLiteが誤って "カラムがNOT NULL"という用語を "カラム> NULL"に変換する可能性があります。しかし、後者は決して真ではないので、クエリは行を返さないでしょう。
バージョン3.8.3の新機能:
共通テーブル式とWITH句のサポートが追加されました。printf()SQL関数を追加しました。
sqlite3_create_function()および関連するインターフェイスの4番目の引数にオプションのビットとしてSQLITE_DETERMINISTICを追加しました。アプリケーションに、定数引数を持つときに内部ループから取り除くことができる新しい関数を作成する機能を提供します。
トランザクションの開始時に返されたSQLITE_READONLY_DBMOVEDエラーコードを追加して、基礎となるデータベースファイルの名前が変更されたか、SQLiteの下から移動されたことを示します。
ATTACHのfilename引数に、関数呼び出しやサブクエリを含む任意の式を許可します。
VALUES句は、SELECT文が有効な任意の場所で使用できるようにします。
N == 0で起動したときにsqlite3_randomness(N、P)が使用するPRNGを再入力します。 unix上でfork()の後で自動的に再シードされます。
spellfix1仮想表を拡張して、ROWIDによって効率的に検索できるようにします。
パフォーマンスの向上。
EXPLAINの実行時のVDBEバイトコード表示のコメントの改善。
"%token_class"ディレクティブをLEMONパーサジェネレータに追加し、それを使って文法を単純化します。OpenBSDが危険と考えるCライブラリ関数を呼び出さないように、LEMONのソースコードを変更してください。 (例:sprintf)。
バグ修正:コマンドラインシェルのCSVインポート機能で、エスケープされた二重引用符がCRLN行の末尾にあるときにフィールドを終了しないでください。
SQLITE_SOURCE_ID: "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
sqlite3.cのSHA1:98a07da78f71b0275e8d9c510486877adc31dbee
コメントが見つかりません