Exec

行を返さないクエリを実行します。ExecContext と同様ですが、bob.Query オブジェクトで直接動作します。

使用方法

ctx := context.Background()
db, err := bob.Open("postgres", "...")
if err != nil {
    // ...
}

q := psql.Update(...)
result, err := bob.Exec(ctx, db, q)
if err != nil {
    // ...
}

特徴

  • 簡潔な API: bob.Query オブジェクトを直接使用
  • 型安全: Bob のクエリビルダーとの統合
  • 標準的な結果: sql.Result インターフェースを返す

使用例

UPDATE クエリの実行

updateQuery := psql.Update("users").
    Set("name", psql.Arg("Updated Name")).
    Where(psql.Quote("id").EQ(psql.Arg(1)))

result, err := bob.Exec(ctx, db, updateQuery)
if err != nil {
    return err
}

rowsAffected, err := result.RowsAffected()
if err != nil {
    return err
}

fmt.Printf("Updated %d rows\n", rowsAffected)

INSERT クエリの実行

insertQuery := psql.Insert("users").
    Columns("name", "email").
    Values(psql.Arg("John Doe"), psql.Arg("john@example.com"))

result, err := bob.Exec(ctx, db, insertQuery)
if err != nil {
    return err
}

lastInsertID, err := result.LastInsertId()
if err != nil {
    return err
}

fmt.Printf("Inserted with ID: %d\n", lastInsertID)

DELETE クエリの実行

deleteQuery := psql.Delete("users").
    Where(psql.Quote("active").EQ(psql.Arg(false)))

result, err := bob.Exec(ctx, db, deleteQuery)
if err != nil {
    return err
}

rowsAffected, err := result.RowsAffected()
if err != nil {
    return err
}

fmt.Printf("Deleted %d rows\n", rowsAffected)

Exec は、データベースの状態を変更するが結果セットを返さない操作に最適です。