Driftの使い方
クエリの作成方法について
db.statement開始メソッド
でStatementを作って、そこからクエリを指定する。
StatementにはUpdate, Instert, Delete、Simple, JoinedSelectがある。
それぞれのStatementは下記のそれぞれのメソッドで開始する
db.into() // InstertStatementを開始
db.update() // UpdateStatementを開始
db.delete() // DeleteStatementを開始
db.select() // SimpleSelectStatementを開始
db.selectOnly() // JoinedSelectStatementを開始
statement開始メソッドには引数にテーブルを渡す。テーブルもdbが情報として持っていて、それを使う。
db.into(db.users) // Usersテーブルの情報を渡している。他も一緒。
クエリの発行方法について
Statementをwhereメソッドなどで定義したあと、そのメソッドを発行するには、Statementに応じた発行メソッドを使う。
(db.into()).insert();
(db.update()).replace();
(db.delete()).go();
(db.select()).get();
driftライブラリ: replaceメソッドの日本語解説
役割
この replace メソッドは、Flutterで使用するデータベースライブラリ「drift」の一部です。データベース内に存在する古いレコードを置き換えるために使用し、以下のような動作をします:
更新対象の特定: entityに指定した主キーと一致する既存レコードのみを更新対象にします。
NULL値の扱い: entityに指定されたフィールドが NULL (または absent) の場合、データベースのフィールドがデフォルト値を持っているときはデフォルト値を設定します。デフォルト値がない場合、フィールドはNULLに設定されます。
実行の制御: dontExecute を trueにすると、データベース操作は実行せず、検証のみが行われます。
返り値
Future<bool>: データベースの行が更新された場合は true、更新されなかった場合は false を返します。
比較
writeメソッドとの違い: writeは where による絞り込みを行わず、NULL値は無視して更新します。
InsertStatement.insert(orReplace: true)との違い: insertは既存レコードがない場合に新規レコードを作成する点が異なります。
..が二つ続くのはcascading notation
というもので、dartの機能。
メソッドの返り値を無視して、元のオブジェクトに対してメソッドを発行できる。
下記の二つは同値。
// カスケード演算子を使用しないコード
var obj = MyObject();
obj.color("red");
obj.font("mono");
// カスケード演算子を使用するコード
var obj = MyObject()..color("red")..font("mono");