お父さんはB、またはSQLiteのシンプルできちんとしたコード生成でできます

画像



間もなく、11月4日と5日に、データ分析C ++開発者向けSQLコースの新しいストリームを開始します。特にその開始のために、便利なツールの概要を含むこの翻訳をFacebookEngineeringブログから準備しました。



SQLiteは広く使用されていますが、十分にテストされ、サポートされているデータアクセスレイヤーを作成することは、せいぜい困難な場合があります。多くのコマンドは、列が追加されるたびに数十のシーケンス番号を変更する必要をなくすために、ある種のコード生成を使用しますが、このアプローチではエラーが発生します。CQL to CG / SQLコンパイラを使用すると、大きなクエリを含む複雑なストアドプロシージャを作成できます。構文ヘルパーと強力な型指定の組み合わせにより、これらのプロシージャの取得と格納がはるかに簡単になります。言語での強力な入力と優れたユニットテストのためのツールの組み合わせにより、非常に複雑なロジックでも正しいという確信を得ることができます。






それは何ですか



CG / SQLは、人気のあるSQLiteライブラリのコード生成システムであり、開発者はストアードプロシージャをTransact-SQL(T-SQL)バリアントで記述し、SQLiteAPIを使用してC操作を実行するCコードにコンパイルできます。CG / SQLを使用すると、エンジニアは、既存のメソッドで必要な手動のコードレビューなしで、大きなクエリを使用して複雑なストアドプロシージャを作成できます。



システム全体には、スキーマの管理と更新、ストアドプロシージャのテストコードの生成、プロシージャのクエリプランの取得、JavaやObjective-Cなどの他の言語からのストアドプロシージャとの対話のための機能も含まれています。JSON出力により、コードの解析またはフロントエンドが可能になります。パッケージには、広範な言語とシステムのドキュメントが含まれています。



ツールの機能



CQLコンパイラはほとんどの汚い仕事をします。スキーマとプロシージャを読み取り、SQLiteランタイムの問題を防ぐように設計された、何百ものコンパイルエラーを含む厳密に型指定された言語を提供します。コンパイラは、変数のデータタイプとスキーマタイプを注意深く監視し、null可能な列をnull不可能な出力変数に割り当てようとするなどの不整合を報告します。それ以外の場合は、SQLiteAPIが一貫して正しく使用されるようにします。



生成されたコードは常に戻りコードをチェックし、SQLiteとの間でデータをバインドまたは読み取るときに、常に正しいシーケンス番号と列タイプを使用します。これはまさに、正しく入手して維持するのが難しいことです。さらに、スキーマアノテーションを使用すると、システムは、データベースを以前のバージョンのスキーマから現在のバージョンに更新するストアドプロシージャを自動的に作成できます。これを可能にするために、数十のチェックが実行されます。



プロシージャの注釈を使用して、スキーマフラグメントを作成し、そのスキーマにデータを挿入するためのテストコードを維持することを示すこともできます。このアプローチにより、ほとんど手間をかけずに手順をテストでき、展開されているシステムに依存しません。同様に、これらのツールは、コンパイル時にクエリプランをチェックするスキーマを作成できます。



なぜこれが必要なのですか?



SQLiteは広く使用されていますが、十分にテストされ、サポートされているデータアクセスレイヤーを作成することは、せいぜい困難な場合があります。多くのコマンドは、列が追加されるたびに数十のシーケンス番号を変更する必要をなくすために、ある種のコード生成を使用しますが、このアプローチではエラーが発生します。 CQL to CG / SQLコンパイラを使用すると、大きなクエリを含む複雑なストアドプロシージャを作成できます。構文ヘルパーと強力な型指定の組み合わせにより、これらのプロシージャの取得と格納がはるかに簡単になります。言語での強力な入力と優れたユニットテストのためのツールの組み合わせにより、非常に複雑なロジックでも正しいという確信を得ることができます。構文ヘルパーは安全なコードを正規のSQLに変換するため、エンジニアが書くコードは少なくなりますが、コードはより正確で、どこでも実行されます。例を見てみましょう:



create procedure insert_a_row(like your_table)
begin
  insert into your_table from arguments;
end;


このコードは、任意のテーブル(ここではyour_table)に挿入するためのプロシージャを作成します。その引数は、まさにテーブルの列です。列を忘れないでください。何十もの引数を間違った順序で配置しないでください。構成は簡潔で堅牢であるため、エンジニアはコードのすべてのビットを手動でチェックしなくても、コードを簡単に生成できます。



Githubの



CG / SQL CG / SQLは確かに便利ですが、HABR割引プロモーションコードはそれほど便利ではありません。バナーに示されている割引にさらに10%が追加されます。



画像








おすすめ記事






All Articles