entc/select: add selection api

Summary: Pull Request resolved: https://github.com/facebookincubator/ent/pull/27

Reviewed By: alexsn

Differential Revision: D17164536

fbshipit-source-id: f5caa80b05aff1ef8ec30d7a53256b00380d018c
This commit is contained in:
Ariel Mashraki
2019-09-04 07:12:55 -07:00
committed by Facebook Github Bot
parent c95a00c4ce
commit 9ab0a28ffe
38 changed files with 4934 additions and 120 deletions

View File

@@ -269,6 +269,25 @@ func (cq *CityQuery) GroupBy(field string, fields ...string) *CityGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Name string `json:"name,omitempty"`
// }
//
// client.City.Query().
// Select(city.FieldName).
// Scan(ctx, &v)
//
func (cq *CityQuery) Select(field string, fields ...string) *CitySelect {
selector := &CitySelect{config: cq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = cq.sqlQuery()
return selector
}
func (cq *CityQuery) sqlAll(ctx context.Context) ([]*City, error) {
rows := &sql.Rows{}
selector := cq.sqlQuery()
@@ -355,7 +374,7 @@ func (cq *CityQuery) sqlQuery() *sql.Selector {
return selector
}
// CityQuery is the builder for group-by City entities.
// CityGroupBy is the builder for group-by City entities.
type CityGroupBy struct {
config
fields []string
@@ -485,3 +504,122 @@ func (cgb *CityGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(cgb.fields...)
}
// CitySelect is the builder for select fields of City entities.
type CitySelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (cs *CitySelect) Scan(ctx context.Context, v interface{}) error {
return cs.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (cs *CitySelect) ScanX(ctx context.Context, v interface{}) {
if err := cs.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (cs *CitySelect) Strings(ctx context.Context) ([]string, error) {
if len(cs.fields) > 1 {
return nil, errors.New("ent: CitySelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := cs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (cs *CitySelect) StringsX(ctx context.Context) []string {
v, err := cs.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (cs *CitySelect) Ints(ctx context.Context) ([]int, error) {
if len(cs.fields) > 1 {
return nil, errors.New("ent: CitySelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := cs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (cs *CitySelect) IntsX(ctx context.Context) []int {
v, err := cs.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (cs *CitySelect) Float64s(ctx context.Context) ([]float64, error) {
if len(cs.fields) > 1 {
return nil, errors.New("ent: CitySelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := cs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (cs *CitySelect) Float64sX(ctx context.Context) []float64 {
v, err := cs.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (cs *CitySelect) Bools(ctx context.Context) ([]bool, error) {
if len(cs.fields) > 1 {
return nil, errors.New("ent: CitySelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := cs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (cs *CitySelect) BoolsX(ctx context.Context) []bool {
v, err := cs.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (cs *CitySelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := cs.sqlQuery().Query()
if err := cs.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (cs *CitySelect) sqlQuery() sql.Querier {
view := "city_view"
return sql.Select(cs.fields...).From(cs.sql.As(view))
}

View File

@@ -269,6 +269,25 @@ func (sq *StreetQuery) GroupBy(field string, fields ...string) *StreetGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Name string `json:"name,omitempty"`
// }
//
// client.Street.Query().
// Select(street.FieldName).
// Scan(ctx, &v)
//
func (sq *StreetQuery) Select(field string, fields ...string) *StreetSelect {
selector := &StreetSelect{config: sq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = sq.sqlQuery()
return selector
}
func (sq *StreetQuery) sqlAll(ctx context.Context) ([]*Street, error) {
rows := &sql.Rows{}
selector := sq.sqlQuery()
@@ -355,7 +374,7 @@ func (sq *StreetQuery) sqlQuery() *sql.Selector {
return selector
}
// StreetQuery is the builder for group-by Street entities.
// StreetGroupBy is the builder for group-by Street entities.
type StreetGroupBy struct {
config
fields []string
@@ -485,3 +504,122 @@ func (sgb *StreetGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(sgb.fields...)
}
// StreetSelect is the builder for select fields of Street entities.
type StreetSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (ss *StreetSelect) Scan(ctx context.Context, v interface{}) error {
return ss.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (ss *StreetSelect) ScanX(ctx context.Context, v interface{}) {
if err := ss.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (ss *StreetSelect) Strings(ctx context.Context) ([]string, error) {
if len(ss.fields) > 1 {
return nil, errors.New("ent: StreetSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := ss.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (ss *StreetSelect) StringsX(ctx context.Context) []string {
v, err := ss.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (ss *StreetSelect) Ints(ctx context.Context) ([]int, error) {
if len(ss.fields) > 1 {
return nil, errors.New("ent: StreetSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := ss.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (ss *StreetSelect) IntsX(ctx context.Context) []int {
v, err := ss.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (ss *StreetSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(ss.fields) > 1 {
return nil, errors.New("ent: StreetSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := ss.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (ss *StreetSelect) Float64sX(ctx context.Context) []float64 {
v, err := ss.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (ss *StreetSelect) Bools(ctx context.Context) ([]bool, error) {
if len(ss.fields) > 1 {
return nil, errors.New("ent: StreetSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := ss.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (ss *StreetSelect) BoolsX(ctx context.Context) []bool {
v, err := ss.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (ss *StreetSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := ss.sqlQuery().Query()
if err := ss.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (ss *StreetSelect) sqlQuery() sql.Querier {
view := "street_view"
return sql.Select(ss.fields...).From(ss.sql.As(view))
}

View File

@@ -274,6 +274,25 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Name string `json:"name,omitempty"`
// }
//
// client.Group.Query().
// Select(group.FieldName).
// Scan(ctx, &v)
//
func (gq *GroupQuery) Select(field string, fields ...string) *GroupSelect {
selector := &GroupSelect{config: gq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = gq.sqlQuery()
return selector
}
func (gq *GroupQuery) sqlAll(ctx context.Context) ([]*Group, error) {
rows := &sql.Rows{}
selector := gq.sqlQuery()
@@ -360,7 +379,7 @@ func (gq *GroupQuery) sqlQuery() *sql.Selector {
return selector
}
// GroupQuery is the builder for group-by Group entities.
// GroupGroupBy is the builder for group-by Group entities.
type GroupGroupBy struct {
config
fields []string
@@ -490,3 +509,122 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ggb.fields...)
}
// GroupSelect is the builder for select fields of Group entities.
type GroupSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (gs *GroupSelect) Scan(ctx context.Context, v interface{}) error {
return gs.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (gs *GroupSelect) ScanX(ctx context.Context, v interface{}) {
if err := gs.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (gs *GroupSelect) Strings(ctx context.Context) ([]string, error) {
if len(gs.fields) > 1 {
return nil, errors.New("ent: GroupSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := gs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (gs *GroupSelect) StringsX(ctx context.Context) []string {
v, err := gs.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (gs *GroupSelect) Ints(ctx context.Context) ([]int, error) {
if len(gs.fields) > 1 {
return nil, errors.New("ent: GroupSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := gs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (gs *GroupSelect) IntsX(ctx context.Context) []int {
v, err := gs.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (gs *GroupSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(gs.fields) > 1 {
return nil, errors.New("ent: GroupSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := gs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (gs *GroupSelect) Float64sX(ctx context.Context) []float64 {
v, err := gs.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (gs *GroupSelect) Bools(ctx context.Context) ([]bool, error) {
if len(gs.fields) > 1 {
return nil, errors.New("ent: GroupSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := gs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (gs *GroupSelect) BoolsX(ctx context.Context) []bool {
v, err := gs.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := gs.sqlQuery().Query()
if err := gs.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (gs *GroupSelect) sqlQuery() sql.Querier {
view := "group_view"
return sql.Select(gs.fields...).From(gs.sql.As(view))
}

View File

@@ -274,6 +274,25 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Age int `json:"age,omitempty"`
// }
//
// client.User.Query().
// Select(user.FieldAge).
// Scan(ctx, &v)
//
func (uq *UserQuery) Select(field string, fields ...string) *UserSelect {
selector := &UserSelect{config: uq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = uq.sqlQuery()
return selector
}
func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
rows := &sql.Rows{}
selector := uq.sqlQuery()
@@ -360,7 +379,7 @@ func (uq *UserQuery) sqlQuery() *sql.Selector {
return selector
}
// UserQuery is the builder for group-by User entities.
// UserGroupBy is the builder for group-by User entities.
type UserGroupBy struct {
config
fields []string
@@ -490,3 +509,122 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ugb.fields...)
}
// UserSelect is the builder for select fields of User entities.
type UserSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (us *UserSelect) Scan(ctx context.Context, v interface{}) error {
return us.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (us *UserSelect) ScanX(ctx context.Context, v interface{}) {
if err := us.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (us *UserSelect) Strings(ctx context.Context) ([]string, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (us *UserSelect) StringsX(ctx context.Context) []string {
v, err := us.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (us *UserSelect) Ints(ctx context.Context) ([]int, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (us *UserSelect) IntsX(ctx context.Context) []int {
v, err := us.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (us *UserSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (us *UserSelect) Float64sX(ctx context.Context) []float64 {
v, err := us.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (us *UserSelect) Bools(ctx context.Context) ([]bool, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (us *UserSelect) BoolsX(ctx context.Context) []bool {
v, err := us.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := us.sqlQuery().Query()
if err := us.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (us *UserSelect) sqlQuery() sql.Querier {
view := "user_view"
return sql.Select(us.fields...).From(us.sql.As(view))
}

View File

@@ -273,6 +273,25 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Age int `json:"age,omitempty"`
// }
//
// client.User.Query().
// Select(user.FieldAge).
// Scan(ctx, &v)
//
func (uq *UserQuery) Select(field string, fields ...string) *UserSelect {
selector := &UserSelect{config: uq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = uq.sqlQuery()
return selector
}
func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
rows := &sql.Rows{}
selector := uq.sqlQuery()
@@ -359,7 +378,7 @@ func (uq *UserQuery) sqlQuery() *sql.Selector {
return selector
}
// UserQuery is the builder for group-by User entities.
// UserGroupBy is the builder for group-by User entities.
type UserGroupBy struct {
config
fields []string
@@ -489,3 +508,122 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ugb.fields...)
}
// UserSelect is the builder for select fields of User entities.
type UserSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (us *UserSelect) Scan(ctx context.Context, v interface{}) error {
return us.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (us *UserSelect) ScanX(ctx context.Context, v interface{}) {
if err := us.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (us *UserSelect) Strings(ctx context.Context) ([]string, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (us *UserSelect) StringsX(ctx context.Context) []string {
v, err := us.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (us *UserSelect) Ints(ctx context.Context) ([]int, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (us *UserSelect) IntsX(ctx context.Context) []int {
v, err := us.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (us *UserSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (us *UserSelect) Float64sX(ctx context.Context) []float64 {
v, err := us.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (us *UserSelect) Bools(ctx context.Context) ([]bool, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (us *UserSelect) BoolsX(ctx context.Context) []bool {
v, err := us.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := us.sqlQuery().Query()
if err := us.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (us *UserSelect) sqlQuery() sql.Querier {
view := "user_view"
return sql.Select(us.fields...).From(us.sql.As(view))
}

View File

@@ -291,6 +291,25 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Age int `json:"age,omitempty"`
// }
//
// client.User.Query().
// Select(user.FieldAge).
// Scan(ctx, &v)
//
func (uq *UserQuery) Select(field string, fields ...string) *UserSelect {
selector := &UserSelect{config: uq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = uq.sqlQuery()
return selector
}
func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
rows := &sql.Rows{}
selector := uq.sqlQuery()
@@ -377,7 +396,7 @@ func (uq *UserQuery) sqlQuery() *sql.Selector {
return selector
}
// UserQuery is the builder for group-by User entities.
// UserGroupBy is the builder for group-by User entities.
type UserGroupBy struct {
config
fields []string
@@ -507,3 +526,122 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ugb.fields...)
}
// UserSelect is the builder for select fields of User entities.
type UserSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (us *UserSelect) Scan(ctx context.Context, v interface{}) error {
return us.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (us *UserSelect) ScanX(ctx context.Context, v interface{}) {
if err := us.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (us *UserSelect) Strings(ctx context.Context) ([]string, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (us *UserSelect) StringsX(ctx context.Context) []string {
v, err := us.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (us *UserSelect) Ints(ctx context.Context) ([]int, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (us *UserSelect) IntsX(ctx context.Context) []int {
v, err := us.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (us *UserSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (us *UserSelect) Float64sX(ctx context.Context) []float64 {
v, err := us.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (us *UserSelect) Bools(ctx context.Context) ([]bool, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (us *UserSelect) BoolsX(ctx context.Context) []bool {
v, err := us.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := us.sqlQuery().Query()
if err := us.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (us *UserSelect) sqlQuery() sql.Querier {
view := "user_view"
return sql.Select(us.fields...).From(us.sql.As(view))
}

View File

@@ -269,6 +269,25 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Name string `json:"name,omitempty"`
// }
//
// client.Pet.Query().
// Select(pet.FieldName).
// Scan(ctx, &v)
//
func (pq *PetQuery) Select(field string, fields ...string) *PetSelect {
selector := &PetSelect{config: pq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = pq.sqlQuery()
return selector
}
func (pq *PetQuery) sqlAll(ctx context.Context) ([]*Pet, error) {
rows := &sql.Rows{}
selector := pq.sqlQuery()
@@ -355,7 +374,7 @@ func (pq *PetQuery) sqlQuery() *sql.Selector {
return selector
}
// PetQuery is the builder for group-by Pet entities.
// PetGroupBy is the builder for group-by Pet entities.
type PetGroupBy struct {
config
fields []string
@@ -485,3 +504,122 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(pgb.fields...)
}
// PetSelect is the builder for select fields of Pet entities.
type PetSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (ps *PetSelect) Scan(ctx context.Context, v interface{}) error {
return ps.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (ps *PetSelect) ScanX(ctx context.Context, v interface{}) {
if err := ps.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (ps *PetSelect) Strings(ctx context.Context) ([]string, error) {
if len(ps.fields) > 1 {
return nil, errors.New("ent: PetSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := ps.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (ps *PetSelect) StringsX(ctx context.Context) []string {
v, err := ps.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (ps *PetSelect) Ints(ctx context.Context) ([]int, error) {
if len(ps.fields) > 1 {
return nil, errors.New("ent: PetSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := ps.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (ps *PetSelect) IntsX(ctx context.Context) []int {
v, err := ps.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (ps *PetSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(ps.fields) > 1 {
return nil, errors.New("ent: PetSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := ps.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (ps *PetSelect) Float64sX(ctx context.Context) []float64 {
v, err := ps.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (ps *PetSelect) Bools(ctx context.Context) ([]bool, error) {
if len(ps.fields) > 1 {
return nil, errors.New("ent: PetSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := ps.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (ps *PetSelect) BoolsX(ctx context.Context) []bool {
v, err := ps.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := ps.sqlQuery().Query()
if err := ps.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (ps *PetSelect) sqlQuery() sql.Querier {
view := "pet_view"
return sql.Select(ps.fields...).From(ps.sql.As(view))
}

View File

@@ -269,6 +269,25 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Age int `json:"age,omitempty"`
// }
//
// client.User.Query().
// Select(user.FieldAge).
// Scan(ctx, &v)
//
func (uq *UserQuery) Select(field string, fields ...string) *UserSelect {
selector := &UserSelect{config: uq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = uq.sqlQuery()
return selector
}
func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
rows := &sql.Rows{}
selector := uq.sqlQuery()
@@ -355,7 +374,7 @@ func (uq *UserQuery) sqlQuery() *sql.Selector {
return selector
}
// UserQuery is the builder for group-by User entities.
// UserGroupBy is the builder for group-by User entities.
type UserGroupBy struct {
config
fields []string
@@ -485,3 +504,122 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ugb.fields...)
}
// UserSelect is the builder for select fields of User entities.
type UserSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (us *UserSelect) Scan(ctx context.Context, v interface{}) error {
return us.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (us *UserSelect) ScanX(ctx context.Context, v interface{}) {
if err := us.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (us *UserSelect) Strings(ctx context.Context) ([]string, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (us *UserSelect) StringsX(ctx context.Context) []string {
v, err := us.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (us *UserSelect) Ints(ctx context.Context) ([]int, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (us *UserSelect) IntsX(ctx context.Context) []int {
v, err := us.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (us *UserSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (us *UserSelect) Float64sX(ctx context.Context) []float64 {
v, err := us.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (us *UserSelect) Bools(ctx context.Context) ([]bool, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (us *UserSelect) BoolsX(ctx context.Context) []bool {
v, err := us.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := us.sqlQuery().Query()
if err := us.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (us *UserSelect) sqlQuery() sql.Querier {
view := "user_view"
return sql.Select(us.fields...).From(us.sql.As(view))
}

View File

@@ -281,6 +281,25 @@ func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Value int `json:"value,omitempty"`
// }
//
// client.Node.Query().
// Select(node.FieldValue).
// Scan(ctx, &v)
//
func (nq *NodeQuery) Select(field string, fields ...string) *NodeSelect {
selector := &NodeSelect{config: nq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = nq.sqlQuery()
return selector
}
func (nq *NodeQuery) sqlAll(ctx context.Context) ([]*Node, error) {
rows := &sql.Rows{}
selector := nq.sqlQuery()
@@ -367,7 +386,7 @@ func (nq *NodeQuery) sqlQuery() *sql.Selector {
return selector
}
// NodeQuery is the builder for group-by Node entities.
// NodeGroupBy is the builder for group-by Node entities.
type NodeGroupBy struct {
config
fields []string
@@ -497,3 +516,122 @@ func (ngb *NodeGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ngb.fields...)
}
// NodeSelect is the builder for select fields of Node entities.
type NodeSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (ns *NodeSelect) Scan(ctx context.Context, v interface{}) error {
return ns.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (ns *NodeSelect) ScanX(ctx context.Context, v interface{}) {
if err := ns.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (ns *NodeSelect) Strings(ctx context.Context) ([]string, error) {
if len(ns.fields) > 1 {
return nil, errors.New("ent: NodeSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := ns.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (ns *NodeSelect) StringsX(ctx context.Context) []string {
v, err := ns.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (ns *NodeSelect) Ints(ctx context.Context) ([]int, error) {
if len(ns.fields) > 1 {
return nil, errors.New("ent: NodeSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := ns.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (ns *NodeSelect) IntsX(ctx context.Context) []int {
v, err := ns.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (ns *NodeSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(ns.fields) > 1 {
return nil, errors.New("ent: NodeSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := ns.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (ns *NodeSelect) Float64sX(ctx context.Context) []float64 {
v, err := ns.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (ns *NodeSelect) Bools(ctx context.Context) ([]bool, error) {
if len(ns.fields) > 1 {
return nil, errors.New("ent: NodeSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := ns.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (ns *NodeSelect) BoolsX(ctx context.Context) []bool {
v, err := ns.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (ns *NodeSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := ns.sqlQuery().Query()
if err := ns.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (ns *NodeSelect) sqlQuery() sql.Querier {
view := "node_view"
return sql.Select(ns.fields...).From(ns.sql.As(view))
}

View File

@@ -269,6 +269,25 @@ func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Expired time.Time `json:"expired,omitempty"`
// }
//
// client.Card.Query().
// Select(card.FieldExpired).
// Scan(ctx, &v)
//
func (cq *CardQuery) Select(field string, fields ...string) *CardSelect {
selector := &CardSelect{config: cq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = cq.sqlQuery()
return selector
}
func (cq *CardQuery) sqlAll(ctx context.Context) ([]*Card, error) {
rows := &sql.Rows{}
selector := cq.sqlQuery()
@@ -355,7 +374,7 @@ func (cq *CardQuery) sqlQuery() *sql.Selector {
return selector
}
// CardQuery is the builder for group-by Card entities.
// CardGroupBy is the builder for group-by Card entities.
type CardGroupBy struct {
config
fields []string
@@ -485,3 +504,122 @@ func (cgb *CardGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(cgb.fields...)
}
// CardSelect is the builder for select fields of Card entities.
type CardSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (cs *CardSelect) Scan(ctx context.Context, v interface{}) error {
return cs.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (cs *CardSelect) ScanX(ctx context.Context, v interface{}) {
if err := cs.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (cs *CardSelect) Strings(ctx context.Context) ([]string, error) {
if len(cs.fields) > 1 {
return nil, errors.New("ent: CardSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := cs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (cs *CardSelect) StringsX(ctx context.Context) []string {
v, err := cs.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (cs *CardSelect) Ints(ctx context.Context) ([]int, error) {
if len(cs.fields) > 1 {
return nil, errors.New("ent: CardSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := cs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (cs *CardSelect) IntsX(ctx context.Context) []int {
v, err := cs.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (cs *CardSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(cs.fields) > 1 {
return nil, errors.New("ent: CardSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := cs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (cs *CardSelect) Float64sX(ctx context.Context) []float64 {
v, err := cs.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (cs *CardSelect) Bools(ctx context.Context) ([]bool, error) {
if len(cs.fields) > 1 {
return nil, errors.New("ent: CardSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := cs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (cs *CardSelect) BoolsX(ctx context.Context) []bool {
v, err := cs.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (cs *CardSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := cs.sqlQuery().Query()
if err := cs.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (cs *CardSelect) sqlQuery() sql.Querier {
view := "card_view"
return sql.Select(cs.fields...).From(cs.sql.As(view))
}

View File

@@ -269,6 +269,25 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Age int `json:"age,omitempty"`
// }
//
// client.User.Query().
// Select(user.FieldAge).
// Scan(ctx, &v)
//
func (uq *UserQuery) Select(field string, fields ...string) *UserSelect {
selector := &UserSelect{config: uq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = uq.sqlQuery()
return selector
}
func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
rows := &sql.Rows{}
selector := uq.sqlQuery()
@@ -355,7 +374,7 @@ func (uq *UserQuery) sqlQuery() *sql.Selector {
return selector
}
// UserQuery is the builder for group-by User entities.
// UserGroupBy is the builder for group-by User entities.
type UserGroupBy struct {
config
fields []string
@@ -485,3 +504,122 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ugb.fields...)
}
// UserSelect is the builder for select fields of User entities.
type UserSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (us *UserSelect) Scan(ctx context.Context, v interface{}) error {
return us.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (us *UserSelect) ScanX(ctx context.Context, v interface{}) {
if err := us.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (us *UserSelect) Strings(ctx context.Context) ([]string, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (us *UserSelect) StringsX(ctx context.Context) []string {
v, err := us.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (us *UserSelect) Ints(ctx context.Context) ([]int, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (us *UserSelect) IntsX(ctx context.Context) []int {
v, err := us.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (us *UserSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (us *UserSelect) Float64sX(ctx context.Context) []float64 {
v, err := us.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (us *UserSelect) Bools(ctx context.Context) ([]bool, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (us *UserSelect) BoolsX(ctx context.Context) []bool {
v, err := us.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := us.sqlQuery().Query()
if err := us.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (us *UserSelect) sqlQuery() sql.Querier {
view := "user_view"
return sql.Select(us.fields...).From(us.sql.As(view))
}

View File

@@ -268,6 +268,25 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Age int `json:"age,omitempty"`
// }
//
// client.User.Query().
// Select(user.FieldAge).
// Scan(ctx, &v)
//
func (uq *UserQuery) Select(field string, fields ...string) *UserSelect {
selector := &UserSelect{config: uq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = uq.sqlQuery()
return selector
}
func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
rows := &sql.Rows{}
selector := uq.sqlQuery()
@@ -354,7 +373,7 @@ func (uq *UserQuery) sqlQuery() *sql.Selector {
return selector
}
// UserQuery is the builder for group-by User entities.
// UserGroupBy is the builder for group-by User entities.
type UserGroupBy struct {
config
fields []string
@@ -484,3 +503,122 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ugb.fields...)
}
// UserSelect is the builder for select fields of User entities.
type UserSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (us *UserSelect) Scan(ctx context.Context, v interface{}) error {
return us.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (us *UserSelect) ScanX(ctx context.Context, v interface{}) {
if err := us.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (us *UserSelect) Strings(ctx context.Context) ([]string, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (us *UserSelect) StringsX(ctx context.Context) []string {
v, err := us.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (us *UserSelect) Ints(ctx context.Context) ([]int, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (us *UserSelect) IntsX(ctx context.Context) []int {
v, err := us.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (us *UserSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (us *UserSelect) Float64sX(ctx context.Context) []float64 {
v, err := us.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (us *UserSelect) Bools(ctx context.Context) ([]bool, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (us *UserSelect) BoolsX(ctx context.Context) []bool {
v, err := us.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := us.sqlQuery().Query()
if err := us.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (us *UserSelect) sqlQuery() sql.Querier {
view := "user_view"
return sql.Select(us.fields...).From(us.sql.As(view))
}

View File

@@ -281,6 +281,25 @@ func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Value int `json:"value,omitempty"`
// }
//
// client.Node.Query().
// Select(node.FieldValue).
// Scan(ctx, &v)
//
func (nq *NodeQuery) Select(field string, fields ...string) *NodeSelect {
selector := &NodeSelect{config: nq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = nq.sqlQuery()
return selector
}
func (nq *NodeQuery) sqlAll(ctx context.Context) ([]*Node, error) {
rows := &sql.Rows{}
selector := nq.sqlQuery()
@@ -367,7 +386,7 @@ func (nq *NodeQuery) sqlQuery() *sql.Selector {
return selector
}
// NodeQuery is the builder for group-by Node entities.
// NodeGroupBy is the builder for group-by Node entities.
type NodeGroupBy struct {
config
fields []string
@@ -497,3 +516,122 @@ func (ngb *NodeGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ngb.fields...)
}
// NodeSelect is the builder for select fields of Node entities.
type NodeSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (ns *NodeSelect) Scan(ctx context.Context, v interface{}) error {
return ns.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (ns *NodeSelect) ScanX(ctx context.Context, v interface{}) {
if err := ns.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (ns *NodeSelect) Strings(ctx context.Context) ([]string, error) {
if len(ns.fields) > 1 {
return nil, errors.New("ent: NodeSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := ns.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (ns *NodeSelect) StringsX(ctx context.Context) []string {
v, err := ns.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (ns *NodeSelect) Ints(ctx context.Context) ([]int, error) {
if len(ns.fields) > 1 {
return nil, errors.New("ent: NodeSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := ns.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (ns *NodeSelect) IntsX(ctx context.Context) []int {
v, err := ns.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (ns *NodeSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(ns.fields) > 1 {
return nil, errors.New("ent: NodeSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := ns.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (ns *NodeSelect) Float64sX(ctx context.Context) []float64 {
v, err := ns.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (ns *NodeSelect) Bools(ctx context.Context) ([]bool, error) {
if len(ns.fields) > 1 {
return nil, errors.New("ent: NodeSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := ns.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (ns *NodeSelect) BoolsX(ctx context.Context) []bool {
v, err := ns.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (ns *NodeSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := ns.sqlQuery().Query()
if err := ns.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (ns *NodeSelect) sqlQuery() sql.Querier {
view := "node_view"
return sql.Select(ns.fields...).From(ns.sql.As(view))
}

View File

@@ -287,6 +287,25 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Name string `json:"name,omitempty"`
// }
//
// client.Group.Query().
// Select(group.FieldName).
// Scan(ctx, &v)
//
func (gq *GroupQuery) Select(field string, fields ...string) *GroupSelect {
selector := &GroupSelect{config: gq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = gq.sqlQuery()
return selector
}
func (gq *GroupQuery) sqlAll(ctx context.Context) ([]*Group, error) {
rows := &sql.Rows{}
selector := gq.sqlQuery()
@@ -373,7 +392,7 @@ func (gq *GroupQuery) sqlQuery() *sql.Selector {
return selector
}
// GroupQuery is the builder for group-by Group entities.
// GroupGroupBy is the builder for group-by Group entities.
type GroupGroupBy struct {
config
fields []string
@@ -503,3 +522,122 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ggb.fields...)
}
// GroupSelect is the builder for select fields of Group entities.
type GroupSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (gs *GroupSelect) Scan(ctx context.Context, v interface{}) error {
return gs.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (gs *GroupSelect) ScanX(ctx context.Context, v interface{}) {
if err := gs.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (gs *GroupSelect) Strings(ctx context.Context) ([]string, error) {
if len(gs.fields) > 1 {
return nil, errors.New("ent: GroupSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := gs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (gs *GroupSelect) StringsX(ctx context.Context) []string {
v, err := gs.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (gs *GroupSelect) Ints(ctx context.Context) ([]int, error) {
if len(gs.fields) > 1 {
return nil, errors.New("ent: GroupSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := gs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (gs *GroupSelect) IntsX(ctx context.Context) []int {
v, err := gs.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (gs *GroupSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(gs.fields) > 1 {
return nil, errors.New("ent: GroupSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := gs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (gs *GroupSelect) Float64sX(ctx context.Context) []float64 {
v, err := gs.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (gs *GroupSelect) Bools(ctx context.Context) ([]bool, error) {
if len(gs.fields) > 1 {
return nil, errors.New("ent: GroupSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := gs.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (gs *GroupSelect) BoolsX(ctx context.Context) []bool {
v, err := gs.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := gs.sqlQuery().Query()
if err := gs.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (gs *GroupSelect) sqlQuery() sql.Querier {
view := "group_view"
return sql.Select(gs.fields...).From(gs.sql.As(view))
}

View File

@@ -287,6 +287,25 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Name string `json:"name,omitempty"`
// }
//
// client.Pet.Query().
// Select(pet.FieldName).
// Scan(ctx, &v)
//
func (pq *PetQuery) Select(field string, fields ...string) *PetSelect {
selector := &PetSelect{config: pq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = pq.sqlQuery()
return selector
}
func (pq *PetQuery) sqlAll(ctx context.Context) ([]*Pet, error) {
rows := &sql.Rows{}
selector := pq.sqlQuery()
@@ -373,7 +392,7 @@ func (pq *PetQuery) sqlQuery() *sql.Selector {
return selector
}
// PetQuery is the builder for group-by Pet entities.
// PetGroupBy is the builder for group-by Pet entities.
type PetGroupBy struct {
config
fields []string
@@ -503,3 +522,122 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(pgb.fields...)
}
// PetSelect is the builder for select fields of Pet entities.
type PetSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (ps *PetSelect) Scan(ctx context.Context, v interface{}) error {
return ps.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (ps *PetSelect) ScanX(ctx context.Context, v interface{}) {
if err := ps.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (ps *PetSelect) Strings(ctx context.Context) ([]string, error) {
if len(ps.fields) > 1 {
return nil, errors.New("ent: PetSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := ps.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (ps *PetSelect) StringsX(ctx context.Context) []string {
v, err := ps.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (ps *PetSelect) Ints(ctx context.Context) ([]int, error) {
if len(ps.fields) > 1 {
return nil, errors.New("ent: PetSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := ps.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (ps *PetSelect) IntsX(ctx context.Context) []int {
v, err := ps.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (ps *PetSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(ps.fields) > 1 {
return nil, errors.New("ent: PetSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := ps.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (ps *PetSelect) Float64sX(ctx context.Context) []float64 {
v, err := ps.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (ps *PetSelect) Bools(ctx context.Context) ([]bool, error) {
if len(ps.fields) > 1 {
return nil, errors.New("ent: PetSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := ps.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (ps *PetSelect) BoolsX(ctx context.Context) []bool {
v, err := ps.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := ps.sqlQuery().Query()
if err := ps.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (ps *PetSelect) sqlQuery() sql.Querier {
view := "pet_view"
return sql.Select(ps.fields...).From(ps.sql.As(view))
}

View File

@@ -319,6 +319,25 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy {
return group
}
// Select one or more fields from the given query.
//
// Example:
//
// var v []struct {
// Age int `json:"age,omitempty"`
// }
//
// client.User.Query().
// Select(user.FieldAge).
// Scan(ctx, &v)
//
func (uq *UserQuery) Select(field string, fields ...string) *UserSelect {
selector := &UserSelect{config: uq.config}
selector.fields = append([]string{field}, fields...)
selector.sql = uq.sqlQuery()
return selector
}
func (uq *UserQuery) sqlAll(ctx context.Context) ([]*User, error) {
rows := &sql.Rows{}
selector := uq.sqlQuery()
@@ -405,7 +424,7 @@ func (uq *UserQuery) sqlQuery() *sql.Selector {
return selector
}
// UserQuery is the builder for group-by User entities.
// UserGroupBy is the builder for group-by User entities.
type UserGroupBy struct {
config
fields []string
@@ -535,3 +554,122 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector {
}
return selector.Select(columns...).GroupBy(ugb.fields...)
}
// UserSelect is the builder for select fields of User entities.
type UserSelect struct {
config
fields []string
// intermediate queries.
sql *sql.Selector
}
// Scan applies the selector query and scan the result into the given value.
func (us *UserSelect) Scan(ctx context.Context, v interface{}) error {
return us.sqlScan(ctx, v)
}
// ScanX is like Scan, but panics if an error occurs.
func (us *UserSelect) ScanX(ctx context.Context, v interface{}) {
if err := us.Scan(ctx, v); err != nil {
panic(err)
}
}
// Strings returns list of strings from selector. It is only allowed when selecting one field.
func (us *UserSelect) Strings(ctx context.Context) ([]string, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Strings is not achievable when selecting more than 1 field")
}
var v []string
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// StringsX is like Strings, but panics if an error occurs.
func (us *UserSelect) StringsX(ctx context.Context) []string {
v, err := us.Strings(ctx)
if err != nil {
panic(err)
}
return v
}
// Ints returns list of ints from selector. It is only allowed when selecting one field.
func (us *UserSelect) Ints(ctx context.Context) ([]int, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Ints is not achievable when selecting more than 1 field")
}
var v []int
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// IntsX is like Ints, but panics if an error occurs.
func (us *UserSelect) IntsX(ctx context.Context) []int {
v, err := us.Ints(ctx)
if err != nil {
panic(err)
}
return v
}
// Float64s returns list of float64s from selector. It is only allowed when selecting one field.
func (us *UserSelect) Float64s(ctx context.Context) ([]float64, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Float64s is not achievable when selecting more than 1 field")
}
var v []float64
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// Float64sX is like Float64s, but panics if an error occurs.
func (us *UserSelect) Float64sX(ctx context.Context) []float64 {
v, err := us.Float64s(ctx)
if err != nil {
panic(err)
}
return v
}
// Bools returns list of bools from selector. It is only allowed when selecting one field.
func (us *UserSelect) Bools(ctx context.Context) ([]bool, error) {
if len(us.fields) > 1 {
return nil, errors.New("ent: UserSelect.Bools is not achievable when selecting more than 1 field")
}
var v []bool
if err := us.Scan(ctx, &v); err != nil {
return nil, err
}
return v, nil
}
// BoolsX is like Bools, but panics if an error occurs.
func (us *UserSelect) BoolsX(ctx context.Context) []bool {
v, err := us.Bools(ctx)
if err != nil {
panic(err)
}
return v
}
func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error {
rows := &sql.Rows{}
query, args := us.sqlQuery().Query()
if err := us.driver.Query(ctx, query, args, rows); err != nil {
return err
}
defer rows.Close()
return sql.ScanSlice(rows, v)
}
func (us *UserSelect) sqlQuery() sql.Querier {
view := "user_view"
return sql.Select(us.fields...).From(us.sql.As(view))
}