Insert
SQLのINSERT文はgenorm.Insert関数を用いて実行できます。
genorm.Insert関数で始まり、DoまたはDoCtxで終わる必要がありますが、それ以外の順番は入れ替えても問題ありません。ただし、同一のメソッドチェーン内で2度ValuesやFieldを実行した場合、実行時にDoやDoCtxがクエリを実行せずにエラーを返します。
例
// INSERT INTO `users` (`id`, `name`, `created_at`) VALUES ({{uuid.New()}}, "name", {{time.Now()}})
affectedRows, err := genorm.
    Insert(orm.User()).
    Values(&orm.UserTable{
        ID: uuid.New(),
        Name: genorm.Wrap("name"),
        CreatedAt: genorm.Wrap(time.Now()),
    }).
    Do(db)
// INSERT INTO `users` (`id`, `name`) VALUES ({{uuid.New()}}, "name")
affectedRows, err := genorm.
    Insert(orm.User()).
    Fields(user.ID, user.Name).
    Values(&orm.UserTable{
        ID: uuid.New(),
        Name: genorm.Wrap("name"),
    }).
    Do(db)
// INSERT INTO `users` (`id`, `name`, `created_at`) VALUES ({{uuid.New()}}, "name", {{time.Now()}})
affectedRows, err := genorm.
    Insert(orm.User()).
    Values(&orm.UserTable{
        ID: uuid.New(),
        Name: genorm.Wrap("name"),
        CreatedAt: genorm.Wrap(time.Now()),
    }).
    DoCtx(context.Background(), db)
Insert
INSERT文を発行するメソッドチェーンを開始する関数です。第一引数にCLIにより生成されたテーブルを受け取ります。INSERT文はJoinされたテーブルに対しては実行できないため、Joinされたテーブルは与えられません。
Fields(optional)
INSERTの対象のカラムを指定します。デフォルトではテーブルの全てのカラムがINSERTの対象となります。
Values(required)
INSERTする値を指定します。メソッドチェーンがDoやDoCtxで終了する前にちょうど1回呼び出す必要があります。FieldsでINSERTの対象となっていないカラムに値が入っていた場合は無視されます。
Do
クエリを実行し、メソッドチェーンを終了します。引数には*sql.DB/*sql.Txを含むgenorm.DBinterfaceを満たす値を受け取り、これを使用してクエリを実行します。
DoCtx
クエリを実行し、メソッドチェーンを終了します。第二引数には*sql.DB/*sql.Txを含むgenorm.DBinterfaceを満たす値を受け取り、これを使用してクエリを実行します。また、第一引数でcontext.Contextを受け取ります。contextがキャンセルされるとデータベースとのコネクションが解放され、無駄なコネクションの使用を防げます。