Select

SQLのSELECT文はgenorm.Select関数またはgenorm.Pluck関数を用いて実行できます。

genorm.Select関数で始まり、GetGetCtxGetAllGetAllCtxのいずれかで終わる必要がありますが、それ以外の順番は入れ替えても問題ありません。ただし、同一のメソッドチェーン内で2度OrderBy以外の同じメソッドを実行した場合、実行時にGetGetCtxGetAllGetAllCtxがクエリを実行せずにエラーを返します。

// SELECT `id`, `name`, `created_at` FROM `users`
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    GetAll(db)

// SELECT `id`, `name`, `created_at` FROM `users`
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    GetAllCtx(context.Background(), db)

// SELECT `id`, `name`, `created_at` FROM `users` WHERE `id` = {{uuid.New()}}
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    Where(genorm.EqLit(user.IDExpr, uuid.New())).
    GetAll(db)

// SELECT `name`, `created_at` FROM `users`
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    Fields(user.Name, user.CreatedAt).
    GetAll(db)

// SELECT `id`, `name`, `created_at` FROM `users` LIMIT 1
// userValue: orm.UserTable
userValue, err := genorm.
    Select(orm.User()).
    Get(db)

// SELECT `id`, `name`, `created_at` FROM `users` LIMIT 1
// userValue: orm.UserTable
userValue, err := genorm.
    Select(orm.User()).
    GetCtx(context.Background(), db)

// SELECT `id`, `name`, `created_at` FROM `users` ORDER BY `created_at` DESC
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    OrderBy(genorm.Desc, user.CreatedAt).
    GetAll(db)

// SELECT `id`, `name`, `created_at` FROM `users` ORDER BY `created_at` DESC, `id` ASC
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    OrderBy(genorm.Desc, user.CreatedAt).
    OrderBy(genorm.Asc, user.ID).
    GetAll(db)

// SELECT DISTINCT `id`, `name`, `created_at` FROM `users`
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    Distinct().
    GetAll(db)

// SELECT `id`, `name`, `created_at` FROM `users` LIMIT 5 OFFSET 3
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    Limit(5).
    Offset(3).
    GetAll(db)

// SELECT `name` FROM `users` GROUP BY `name` HAVING COUNT(`id`) > 10
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    Fields(user.Name).
    GroupBy(user.Name).
    Having(genorm.GtLit(genorm.Count(user.IDExpr, false), genorm.Wrap(int64(10)))).
    GetAll(db)

// SELECT `id`, `name`, `created_at` FROM `users` FOR UPDATE
// userValues: []orm.UserTable
userValues, err := genorm.
    Select(orm.User()).
    Lock(genorm.ForUpdate).
    GetAll(db)

// SELECT `id` FROM `users`
// userIDs: []uuid.UUID
userIDs, err := genorm.
    Pluck(orm.User(), user.IDExpr).
    GetAll(db)

// SELECT `id` FROM `users` LIMIT 1
// userID: uuid.UUID
userID, err := genorm.
    Pluck(orm.User(), user.IDExpr).
    Get(db)

// SELECT `users`.`name`, `messages`.`content` FROM `users` INNER JOIN `messages` ON `users`.`id` = `messages`.`user_id`
// messageUserValues: []orm.MessageUserTable
userID := orm.MessageUserParseExpr(user.ID)
userName := orm.MessageUserParse(user.Name)
messageUserID := orm.MessageUserParseExpr(message.UserID)
messageContent := orm.MessageUserParse(message.Content)
messageUserValues, err := genorm.
    Select(orm.User().
        Message().Join(genorm.Eq(userID, messageUserID))).
    Fields(userName, messageContent).
    GetAll(db)

Select

SELECT文を発行するメソッドチェーンを開始する関数です。第1引数にCLIにより生成されたテーブルを受け取ります。

Pluck

SELECT文を発行するメソッドチェーンを開始する関数です。第1引数にCLIにより生成されたテーブルを受け取ります。また、第2引数でSELECT対象のカラムを受け取ります。

Fields(optional)

SELECTの対象のカラムを指定します。デフォルトではテーブルの全てのカラムがSELECTの対象となります。Pluckの場合、メソッドチェーン開始時に対象のカラムが指定されているため、使用できません。

Distinct(optional)

SELECT文にDISTINCTを設定します。

Where(optional)

SELECT文にWHERE句を設定します。第1引数にGo言語でのboolに対応するexpressionを受け取ります。

Lock(optional)

SELECT文にFOR UPDATEFOR SHAREを設定します。第1引数にはgenorm.ForUpdateまたはgenorm.ForShareを受け取り、それぞれFOR UPDATEFOR SHAREが設定されます。現在、テーブル指定でのロックやNO WAITSKIP LOCKEDなどの詳細な設定はサポートしていません。

GetAll

クエリを実行し、メソッドチェーンを終了します。引数には*sql.DB/*sql.Txを含むgenorm.DBinterfaceを満たす値を受け取り、これを使用してクエリを実行します。

GetAllCtx

クエリを実行し、メソッドチェーンを終了します。第二引数には*sql.DB/*sql.Txを含むgenorm.DBinterfaceを満たす値を受け取り、これを使用してクエリを実行します。また、第一引数でcontext.Contextを受け取ります。contextがキャンセルされるとデータベースとのコネクションが解放され、無駄なコネクションの使用を防げます。

Get

クエリを実行し、メソッドチェーンを終了します。引数には*sql.DB/*sql.Txを含むgenorm.DBinterfaceを満たす値を受け取り、これを使用してクエリを実行します。

1レコードのみを取得する際に使用し、自動でLIMIT 1がつきます。このため、Limitメソッドと同時に使用することはできず、Limitメソッドがメソッドチェーンで既に使用されている場合にはエラーを返します。

レコードが見つからなかった場合、genorm.ErrRecordNotFoundエラーを返します。

GetCtx

クエリを実行し、メソッドチェーンを終了します。第二引数には*sql.DB/*sql.Txを含むgenorm.DBinterfaceを満たす値を受け取り、これを使用してクエリを実行します。また、第一引数でcontext.Contextを受け取ります。contextがキャンセルされるとデータベースとのコネクションが解放され、無駄なコネクションの使用を防げます。

1レコードのみを取得する際に使用し、自動でLIMIT 1がつきます。このため、Limitメソッドと同時に使用することはできず、Limitメソッドがメソッドチェーンで既に使用されている場合にはエラーを返します。

レコードが見つからなかった場合、genorm.ErrRecordNotFoundエラーを返します。

results matching ""

    No results matching ""