diff --git a/entc/gen/template/base.tmpl b/entc/gen/template/base.tmpl index 10e84aa76a..7de996dd6f 100644 --- a/entc/gen/template/base.tmpl +++ b/entc/gen/template/base.tmpl @@ -190,6 +190,72 @@ func IsConstraintError(err error) bool { return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func (context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +{{ range $t := primitives }} + {{ $plural := pascal $t | plural }} + // {{ $plural }} returns list of {{ plural $t }} from a selector. It is only allowed when selecting one field. + func (s *selector) {{ $plural }}(ctx context.Context) ([]{{ $t }}, error) { + if len(*s.flds) > 1 { + return nil, errors.New("{{ $pkg }}: {{ $plural }} is not achievable when selecting more than 1 field") + } + var v []{{ $t }} + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil + } + + // {{ $plural }}X is like {{ $plural }}, but panics if an error occurs. + func (s *selector) {{ $plural }}X(ctx context.Context) []{{ $t }} { + v, err := s.{{ $plural }}(ctx) + if err != nil { + panic(err) + } + return v + } + + {{ $singular := pascal $t -}} + // {{ $singular }} returns a single {{ $t }} from a selector. It is only allowed when selecting one field. + func (s *selector) {{ $singular }}(ctx context.Context) (_ {{ $t }}, err error) { + var v []{{ $t }} + if v, err = s.{{ $plural }}(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("{{ $pkg }}: {{ $plural }} returned %d results when one was expected", len(v)) + } + return + } + + // {{ $singular }}X is like {{ $singular }}, but panics if an error occurs. + func (s *selector) {{ $singular }}X(ctx context.Context) {{ $t }} { + v, err := s.{{ $singular }}(ctx) + if err != nil { + panic(err) + } + return v + } +{{ end }} + {{/* expand error types and global helpers. */}} {{ $tmpl = printf "dialect/%s/errors" $.Storage }} {{ if hasTemplate $tmpl }} diff --git a/entc/gen/template/builder/query.tmpl b/entc/gen/template/builder/query.tmpl index af29229490..68fa4c7e30 100644 --- a/entc/gen/template/builder/query.tmpl +++ b/entc/gen/template/builder/query.tmpl @@ -324,15 +324,17 @@ func ({{ $receiver }} *{{ $builder }}) Clone() *{{ $builder }} { // {{- end }} func ({{ $receiver }} *{{ $builder }}) GroupBy(field string, fields ...string) *{{ $groupBuilder }} { - group := &{{ $groupBuilder }}{config: {{ $receiver }}.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev {{ $.Storage.Builder }}, err error) { + grbuild := &{{ $groupBuilder }}{config: {{ $receiver }}.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev {{ $.Storage.Builder }}, err error) { if err := {{ $receiver }}.prepareQuery(ctx); err != nil { return nil, err } return {{ $receiver }}.{{ $.Storage }}Query(ctx), nil } - return group + grbuild.label = {{ $.Package }}.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } {{ $selectBuilder := pascal $.Name | printf "%sSelect" }} @@ -355,7 +357,10 @@ func ({{ $receiver }} *{{ $builder }}) GroupBy(field string, fields ...string) * {{- end }} func ({{ $receiver }} *{{ $builder }}) Select(fields ...string) *{{ $selectBuilder }} { {{ $receiver }}.fields = append({{ $receiver }}.fields, fields...) - return &{{ $selectBuilder }}{ {{ $builder }}: {{ $receiver }} } + selbuild := &{{ $selectBuilder }}{ {{ $builder }}: {{ $receiver }} } + selbuild.label = {{ $.Package }}.Label + selbuild.flds, selbuild.scan = &{{ $receiver }}.fields, selbuild.Scan + return selbuild } func ({{ $receiver }} *{{ $builder }}) prepareQuery(ctx context.Context) error { @@ -405,6 +410,7 @@ func ({{ $receiver }} *{{ $builder }}) prepareQuery(ctx context.Context) error { // {{ $groupBuilder }} is the group-by builder for {{ $.Name }} entities. type {{ $groupBuilder }} struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -428,66 +434,6 @@ func ({{ $groupReceiver }} *{{ $groupBuilder }}) Scan(ctx context.Context, v int return {{ $groupReceiver }}.{{ $.Storage }}Scan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func ({{ $groupReceiver }} *{{ $groupBuilder }}) ScanX(ctx context.Context, v interface{}) { - if err := {{ $groupReceiver }}.Scan(ctx, v); err != nil { - panic(err) - } -} - -{{ range $t := primitives }} - {{ $plural := pascal $t | plural }} - // {{ $plural }} returns list of {{ plural $t }} from group-by. - // It is only allowed when executing a group-by query with one field. - func ({{ $groupReceiver }} *{{ $groupBuilder }}) {{ $plural }}(ctx context.Context) ([]{{ $t }}, error) { - if len({{ $groupReceiver }}.fields) > 1 { - return nil, errors.New("{{ $pkg }}: {{ $groupBuilder }}.{{ $plural }} is not achievable when grouping more than 1 field") - } - var v []{{ $t }} - if err := {{ $groupReceiver }}.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil - } - - // {{ $plural }}X is like {{ $plural }}, but panics if an error occurs. - func ({{ $groupReceiver }} *{{ $groupBuilder }}) {{ $plural }}X(ctx context.Context) []{{ $t }} { - v, err := {{ $groupReceiver }}.{{ $plural }}(ctx) - if err != nil { - panic(err) - } - return v - } - - {{ $singular := pascal $t -}} - // {{ $singular }} returns a single {{ $t }} from a group-by query. - // It is only allowed when executing a group-by query with one field. - func ({{ $groupReceiver }} *{{ $groupBuilder }}) {{ $singular }}(ctx context.Context) (_ {{ $t }}, err error) { - var v []{{ $t }} - if v, err = {{ $groupReceiver }}.{{ $plural }}(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{ {{ $.Package }}.Label} - default: - err = fmt.Errorf("{{ $pkg }}: {{ $groupBuilder }}.{{ $plural }} returned %d results when one was expected", len(v)) - } - return - } - - // {{ $singular }}X is like {{ $singular }}, but panics if an error occurs. - func ({{ $groupReceiver }} *{{ $groupBuilder }}) {{ $singular }}X(ctx context.Context) {{ $t }} { - v, err := {{ $groupReceiver }}.{{ $singular }}(ctx) - if err != nil { - panic(err) - } - return v - } -{{ end }} - {{ with extend $ "Builder" $groupBuilder }} {{ $tmpl := printf "dialect/%s/group" $.Storage }} {{ xtemplate $tmpl . }} @@ -500,11 +446,11 @@ func ({{ $groupReceiver }} *{{ $groupBuilder }}) ScanX(ctx context.Context, v in // {{ $selectBuilder }} is the builder for selecting fields of {{ pascal $.Name }} entities. type {{ $selectBuilder }} struct { *{{ $builder }} + selector // intermediate query (i.e. traversal path). {{ $.Storage }} {{ $.Storage.Builder }} } - // Scan applies the selector query and scans the result into the given value. func ({{ $selectReceiver }} *{{ $selectBuilder }}) Scan(ctx context.Context, v interface{}) error { if err := {{ $selectReceiver }}.prepareQuery(ctx); err != nil { @@ -514,64 +460,6 @@ func ({{ $selectReceiver }} *{{ $selectBuilder }}) Scan(ctx context.Context, v i return {{ $selectReceiver }}.{{ $.Storage }}Scan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func ({{ $selectReceiver }} *{{ $selectBuilder }}) ScanX(ctx context.Context, v interface{}) { - if err := {{ $selectReceiver }}.Scan(ctx, v); err != nil { - panic(err) - } -} - -{{ range $t := primitives }} - {{ $plural := pascal $t | plural }} - // {{ $plural }} returns list of {{ plural $t }} from a selector. It is only allowed when selecting one field. - func ({{ $selectReceiver }} *{{ $selectBuilder }}) {{ $plural }}(ctx context.Context) ([]{{ $t }}, error) { - if len({{ $selectReceiver }}.fields) > 1 { - return nil, errors.New("{{ $pkg }}: {{ $selectBuilder }}.{{ $plural }} is not achievable when selecting more than 1 field") - } - var v []{{ $t }} - if err := {{ $selectReceiver }}.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil - } - - // {{ $plural }}X is like {{ $plural }}, but panics if an error occurs. - func ({{ $selectReceiver }} *{{ $selectBuilder }}) {{ $plural }}X(ctx context.Context) []{{ $t }} { - v, err := {{ $selectReceiver }}.{{ $plural }}(ctx) - if err != nil { - panic(err) - } - return v - } - - {{ $singular := pascal $t -}} - // {{ $singular }} returns a single {{ $t }} from a selector. It is only allowed when selecting one field. - func ({{ $selectReceiver }} *{{ $selectBuilder }}) {{ $singular }}(ctx context.Context) (_ {{ $t }}, err error) { - var v []{{ $t }} - if v, err = {{ $selectReceiver }}.{{ $plural }}(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{ {{ $.Package }}.Label} - default: - err = fmt.Errorf("{{ $pkg }}: {{ $selectBuilder }}.{{ $plural }} returned %d results when one was expected", len(v)) - } - return - } - - // {{ $singular }}X is like {{ $singular }}, but panics if an error occurs. - func ({{ $selectReceiver }} *{{ $selectBuilder }}) {{ $singular }}X(ctx context.Context) {{ $t }} { - v, err := {{ $selectReceiver }}.{{ $singular }}(ctx) - if err != nil { - panic(err) - } - return v - } -{{ end }} - {{ with extend $ "Builder" $selectBuilder }} {{ $tmpl := printf "dialect/%s/select" $.Storage }} {{ xtemplate $tmpl . }} diff --git a/entc/integration/cascadelete/ent/comment_query.go b/entc/integration/cascadelete/ent/comment_query.go index 03079df0cf..1a9b199cf6 100644 --- a/entc/integration/cascadelete/ent/comment_query.go +++ b/entc/integration/cascadelete/ent/comment_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -305,15 +304,17 @@ func (cq *CommentQuery) WithPost(opts ...func(*PostQuery)) *CommentQuery { // Scan(ctx, &v) // func (cq *CommentQuery) GroupBy(field string, fields ...string) *CommentGroupBy { - group := &CommentGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CommentGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = comment.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -331,7 +332,10 @@ func (cq *CommentQuery) GroupBy(field string, fields ...string) *CommentGroupBy // func (cq *CommentQuery) Select(fields ...string) *CommentSelect { cq.fields = append(cq.fields, fields...) - return &CommentSelect{CommentQuery: cq} + selbuild := &CommentSelect{CommentQuery: cq} + selbuild.label = comment.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CommentQuery) prepareQuery(ctx context.Context) error { @@ -507,6 +511,7 @@ func (cq *CommentQuery) sqlQuery(ctx context.Context) *sql.Selector { // CommentGroupBy is the group-by builder for Comment entities. type CommentGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -530,209 +535,6 @@ func (cgb *CommentGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CommentGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CommentGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CommentGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CommentGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CommentGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CommentGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CommentGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CommentGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CommentGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CommentGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !comment.ValidColumn(f) { @@ -774,6 +576,7 @@ func (cgb *CommentGroupBy) sqlQuery() *sql.Selector { // CommentSelect is the builder for selecting fields of Comment entities. type CommentSelect struct { *CommentQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -787,201 +590,6 @@ func (cs *CommentSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CommentSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CommentSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CommentSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CommentSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CommentSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CommentSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/cascadelete/ent/ent.go b/entc/integration/cascadelete/ent/ent.go index a7948b85f2..b47983685c 100644 --- a/entc/integration/cascadelete/ent/ent.go +++ b/entc/integration/cascadelete/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -265,3 +266,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/cascadelete/ent/post_query.go b/entc/integration/cascadelete/ent/post_query.go index 120b01fcf4..a30e3fde3b 100644 --- a/entc/integration/cascadelete/ent/post_query.go +++ b/entc/integration/cascadelete/ent/post_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -342,15 +341,17 @@ func (pq *PostQuery) WithComments(opts ...func(*CommentQuery)) *PostQuery { // Scan(ctx, &v) // func (pq *PostQuery) GroupBy(field string, fields ...string) *PostGroupBy { - group := &PostGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PostGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = post.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +369,10 @@ func (pq *PostQuery) GroupBy(field string, fields ...string) *PostGroupBy { // func (pq *PostQuery) Select(fields ...string) *PostSelect { pq.fields = append(pq.fields, fields...) - return &PostSelect{PostQuery: pq} + selbuild := &PostSelect{PostQuery: pq} + selbuild.label = post.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PostQuery) prepareQuery(ctx context.Context) error { @@ -570,6 +574,7 @@ func (pq *PostQuery) sqlQuery(ctx context.Context) *sql.Selector { // PostGroupBy is the group-by builder for Post entities. type PostGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -593,209 +598,6 @@ func (pgb *PostGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PostGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PostGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PostGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PostGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PostGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PostGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PostGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PostGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PostGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PostGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PostGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PostGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PostGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PostGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !post.ValidColumn(f) { @@ -837,6 +639,7 @@ func (pgb *PostGroupBy) sqlQuery() *sql.Selector { // PostSelect is the builder for selecting fields of Post entities. type PostSelect struct { *PostQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -850,201 +653,6 @@ func (ps *PostSelect) Scan(ctx context.Context, v interface{}) error { return ps.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ps *PostSelect) ScanX(ctx context.Context, v interface{}) { - if err := ps.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Strings(ctx context.Context) ([]string, error) { - if len(ps.fields) > 1 { - return nil, errors.New("ent: PostSelect.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 *PostSelect) StringsX(ctx context.Context) []string { - v, err := ps.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PostSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Ints(ctx context.Context) ([]int, error) { - if len(ps.fields) > 1 { - return nil, errors.New("ent: PostSelect.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 *PostSelect) IntsX(ctx context.Context) []int { - v, err := ps.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PostSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ps.fields) > 1 { - return nil, errors.New("ent: PostSelect.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 *PostSelect) Float64sX(ctx context.Context) []float64 { - v, err := ps.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PostSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ps.fields) > 1 { - return nil, errors.New("ent: PostSelect.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 *PostSelect) BoolsX(ctx context.Context) []bool { - v, err := ps.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PostSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PostSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/entc/integration/cascadelete/ent/user_query.go b/entc/integration/cascadelete/ent/user_query.go index ca94983b55..2684df952e 100644 --- a/entc/integration/cascadelete/ent/user_query.go +++ b/entc/integration/cascadelete/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (uq *UserQuery) WithPosts(opts ...func(*PostQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -507,6 +511,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -530,209 +535,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -774,6 +576,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -787,201 +590,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/config/ent/ent.go b/entc/integration/config/ent/ent.go index 66d42ead88..2f900602da 100644 --- a/entc/integration/config/ent/ent.go +++ b/entc/integration/config/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/config/ent/user_query.go b/entc/integration/config/ent/user_query.go index 7c9890922c..7596b7e6e4 100644 --- a/entc/integration/config/ent/user_query.go +++ b/entc/integration/config/ent/user_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (uq *UserQuery) Clone() *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -706,6 +508,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/customid/ent/account_query.go b/entc/integration/customid/ent/account_query.go index d5e1c896a3..980df8090a 100644 --- a/entc/integration/customid/ent/account_query.go +++ b/entc/integration/customid/ent/account_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -307,15 +306,17 @@ func (aq *AccountQuery) WithToken(opts ...func(*TokenQuery)) *AccountQuery { // Scan(ctx, &v) // func (aq *AccountQuery) GroupBy(field string, fields ...string) *AccountGroupBy { - group := &AccountGroupBy{config: aq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &AccountGroupBy{config: aq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := aq.prepareQuery(ctx); err != nil { return nil, err } return aq.sqlQuery(ctx), nil } - return group + grbuild.label = account.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -333,7 +334,10 @@ func (aq *AccountQuery) GroupBy(field string, fields ...string) *AccountGroupBy // func (aq *AccountQuery) Select(fields ...string) *AccountSelect { aq.fields = append(aq.fields, fields...) - return &AccountSelect{AccountQuery: aq} + selbuild := &AccountSelect{AccountQuery: aq} + selbuild.label = account.Label + selbuild.flds, selbuild.scan = &aq.fields, selbuild.Scan + return selbuild } func (aq *AccountQuery) prepareQuery(ctx context.Context) error { @@ -512,6 +516,7 @@ func (aq *AccountQuery) sqlQuery(ctx context.Context) *sql.Selector { // AccountGroupBy is the group-by builder for Account entities. type AccountGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -535,209 +540,6 @@ func (agb *AccountGroupBy) Scan(ctx context.Context, v interface{}) error { return agb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (agb *AccountGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := agb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (agb *AccountGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(agb.fields) > 1 { - return nil, errors.New("ent: AccountGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := agb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (agb *AccountGroupBy) StringsX(ctx context.Context) []string { - v, err := agb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (agb *AccountGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = agb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{account.Label} - default: - err = fmt.Errorf("ent: AccountGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (agb *AccountGroupBy) StringX(ctx context.Context) string { - v, err := agb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (agb *AccountGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(agb.fields) > 1 { - return nil, errors.New("ent: AccountGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := agb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (agb *AccountGroupBy) IntsX(ctx context.Context) []int { - v, err := agb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (agb *AccountGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = agb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{account.Label} - default: - err = fmt.Errorf("ent: AccountGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (agb *AccountGroupBy) IntX(ctx context.Context) int { - v, err := agb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (agb *AccountGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(agb.fields) > 1 { - return nil, errors.New("ent: AccountGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := agb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (agb *AccountGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := agb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (agb *AccountGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = agb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{account.Label} - default: - err = fmt.Errorf("ent: AccountGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (agb *AccountGroupBy) Float64X(ctx context.Context) float64 { - v, err := agb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (agb *AccountGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(agb.fields) > 1 { - return nil, errors.New("ent: AccountGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := agb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (agb *AccountGroupBy) BoolsX(ctx context.Context) []bool { - v, err := agb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (agb *AccountGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = agb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{account.Label} - default: - err = fmt.Errorf("ent: AccountGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (agb *AccountGroupBy) BoolX(ctx context.Context) bool { - v, err := agb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (agb *AccountGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range agb.fields { if !account.ValidColumn(f) { @@ -779,6 +581,7 @@ func (agb *AccountGroupBy) sqlQuery() *sql.Selector { // AccountSelect is the builder for selecting fields of Account entities. type AccountSelect struct { *AccountQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -792,201 +595,6 @@ func (as *AccountSelect) Scan(ctx context.Context, v interface{}) error { return as.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (as *AccountSelect) ScanX(ctx context.Context, v interface{}) { - if err := as.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (as *AccountSelect) Strings(ctx context.Context) ([]string, error) { - if len(as.fields) > 1 { - return nil, errors.New("ent: AccountSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := as.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (as *AccountSelect) StringsX(ctx context.Context) []string { - v, err := as.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (as *AccountSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = as.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{account.Label} - default: - err = fmt.Errorf("ent: AccountSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (as *AccountSelect) StringX(ctx context.Context) string { - v, err := as.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (as *AccountSelect) Ints(ctx context.Context) ([]int, error) { - if len(as.fields) > 1 { - return nil, errors.New("ent: AccountSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := as.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (as *AccountSelect) IntsX(ctx context.Context) []int { - v, err := as.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (as *AccountSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = as.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{account.Label} - default: - err = fmt.Errorf("ent: AccountSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (as *AccountSelect) IntX(ctx context.Context) int { - v, err := as.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (as *AccountSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(as.fields) > 1 { - return nil, errors.New("ent: AccountSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := as.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (as *AccountSelect) Float64sX(ctx context.Context) []float64 { - v, err := as.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (as *AccountSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = as.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{account.Label} - default: - err = fmt.Errorf("ent: AccountSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (as *AccountSelect) Float64X(ctx context.Context) float64 { - v, err := as.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (as *AccountSelect) Bools(ctx context.Context) ([]bool, error) { - if len(as.fields) > 1 { - return nil, errors.New("ent: AccountSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := as.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (as *AccountSelect) BoolsX(ctx context.Context) []bool { - v, err := as.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (as *AccountSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = as.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{account.Label} - default: - err = fmt.Errorf("ent: AccountSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (as *AccountSelect) BoolX(ctx context.Context) bool { - v, err := as.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (as *AccountSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := as.sql.Query() diff --git a/entc/integration/customid/ent/blob_query.go b/entc/integration/customid/ent/blob_query.go index a41c029c5f..10d3491ee4 100644 --- a/entc/integration/customid/ent/blob_query.go +++ b/entc/integration/customid/ent/blob_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -342,15 +341,17 @@ func (bq *BlobQuery) WithLinks(opts ...func(*BlobQuery)) *BlobQuery { // Scan(ctx, &v) // func (bq *BlobQuery) GroupBy(field string, fields ...string) *BlobGroupBy { - group := &BlobGroupBy{config: bq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &BlobGroupBy{config: bq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := bq.prepareQuery(ctx); err != nil { return nil, err } return bq.sqlQuery(ctx), nil } - return group + grbuild.label = blob.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +369,10 @@ func (bq *BlobQuery) GroupBy(field string, fields ...string) *BlobGroupBy { // func (bq *BlobQuery) Select(fields ...string) *BlobSelect { bq.fields = append(bq.fields, fields...) - return &BlobSelect{BlobQuery: bq} + selbuild := &BlobSelect{BlobQuery: bq} + selbuild.label = blob.Label + selbuild.flds, selbuild.scan = &bq.fields, selbuild.Scan + return selbuild } func (bq *BlobQuery) prepareQuery(ctx context.Context) error { @@ -620,6 +624,7 @@ func (bq *BlobQuery) sqlQuery(ctx context.Context) *sql.Selector { // BlobGroupBy is the group-by builder for Blob entities. type BlobGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -643,209 +648,6 @@ func (bgb *BlobGroupBy) Scan(ctx context.Context, v interface{}) error { return bgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (bgb *BlobGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := bgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (bgb *BlobGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(bgb.fields) > 1 { - return nil, errors.New("ent: BlobGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := bgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (bgb *BlobGroupBy) StringsX(ctx context.Context) []string { - v, err := bgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (bgb *BlobGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = bgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{blob.Label} - default: - err = fmt.Errorf("ent: BlobGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (bgb *BlobGroupBy) StringX(ctx context.Context) string { - v, err := bgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (bgb *BlobGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(bgb.fields) > 1 { - return nil, errors.New("ent: BlobGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := bgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (bgb *BlobGroupBy) IntsX(ctx context.Context) []int { - v, err := bgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (bgb *BlobGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = bgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{blob.Label} - default: - err = fmt.Errorf("ent: BlobGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (bgb *BlobGroupBy) IntX(ctx context.Context) int { - v, err := bgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (bgb *BlobGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(bgb.fields) > 1 { - return nil, errors.New("ent: BlobGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := bgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (bgb *BlobGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := bgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (bgb *BlobGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = bgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{blob.Label} - default: - err = fmt.Errorf("ent: BlobGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (bgb *BlobGroupBy) Float64X(ctx context.Context) float64 { - v, err := bgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (bgb *BlobGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(bgb.fields) > 1 { - return nil, errors.New("ent: BlobGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := bgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (bgb *BlobGroupBy) BoolsX(ctx context.Context) []bool { - v, err := bgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (bgb *BlobGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = bgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{blob.Label} - default: - err = fmt.Errorf("ent: BlobGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (bgb *BlobGroupBy) BoolX(ctx context.Context) bool { - v, err := bgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (bgb *BlobGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range bgb.fields { if !blob.ValidColumn(f) { @@ -887,6 +689,7 @@ func (bgb *BlobGroupBy) sqlQuery() *sql.Selector { // BlobSelect is the builder for selecting fields of Blob entities. type BlobSelect struct { *BlobQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -900,201 +703,6 @@ func (bs *BlobSelect) Scan(ctx context.Context, v interface{}) error { return bs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (bs *BlobSelect) ScanX(ctx context.Context, v interface{}) { - if err := bs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (bs *BlobSelect) Strings(ctx context.Context) ([]string, error) { - if len(bs.fields) > 1 { - return nil, errors.New("ent: BlobSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := bs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (bs *BlobSelect) StringsX(ctx context.Context) []string { - v, err := bs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (bs *BlobSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = bs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{blob.Label} - default: - err = fmt.Errorf("ent: BlobSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (bs *BlobSelect) StringX(ctx context.Context) string { - v, err := bs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (bs *BlobSelect) Ints(ctx context.Context) ([]int, error) { - if len(bs.fields) > 1 { - return nil, errors.New("ent: BlobSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := bs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (bs *BlobSelect) IntsX(ctx context.Context) []int { - v, err := bs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (bs *BlobSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = bs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{blob.Label} - default: - err = fmt.Errorf("ent: BlobSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (bs *BlobSelect) IntX(ctx context.Context) int { - v, err := bs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (bs *BlobSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(bs.fields) > 1 { - return nil, errors.New("ent: BlobSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := bs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (bs *BlobSelect) Float64sX(ctx context.Context) []float64 { - v, err := bs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (bs *BlobSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = bs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{blob.Label} - default: - err = fmt.Errorf("ent: BlobSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (bs *BlobSelect) Float64X(ctx context.Context) float64 { - v, err := bs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (bs *BlobSelect) Bools(ctx context.Context) ([]bool, error) { - if len(bs.fields) > 1 { - return nil, errors.New("ent: BlobSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := bs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (bs *BlobSelect) BoolsX(ctx context.Context) []bool { - v, err := bs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (bs *BlobSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = bs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{blob.Label} - default: - err = fmt.Errorf("ent: BlobSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (bs *BlobSelect) BoolX(ctx context.Context) bool { - v, err := bs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (bs *BlobSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := bs.sql.Query() diff --git a/entc/integration/customid/ent/car_query.go b/entc/integration/customid/ent/car_query.go index a35bf88fa0..a4b7906355 100644 --- a/entc/integration/customid/ent/car_query.go +++ b/entc/integration/customid/ent/car_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (cq *CarQuery) WithOwner(opts ...func(*PetQuery)) *CarQuery { // Scan(ctx, &v) // func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { - group := &CarGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CarGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = car.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { // func (cq *CarQuery) Select(fields ...string) *CarSelect { cq.fields = append(cq.fields, fields...) - return &CarSelect{CarQuery: cq} + selbuild := &CarSelect{CarQuery: cq} + selbuild.label = car.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CarQuery) prepareQuery(ctx context.Context) error { @@ -518,6 +522,7 @@ func (cq *CarQuery) sqlQuery(ctx context.Context) *sql.Selector { // CarGroupBy is the group-by builder for Car entities. type CarGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -541,209 +546,6 @@ func (cgb *CarGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CarGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CarGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CarGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CarGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CarGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CarGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CarGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CarGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CarGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CarGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !car.ValidColumn(f) { @@ -785,6 +587,7 @@ func (cgb *CarGroupBy) sqlQuery() *sql.Selector { // CarSelect is the builder for selecting fields of Car entities. type CarSelect struct { *CarQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -798,201 +601,6 @@ func (cs *CarSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CarSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CarSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CarSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CarSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CarSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CarSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/customid/ent/device_query.go b/entc/integration/customid/ent/device_query.go index fb34a1206b..8e139a24e3 100644 --- a/entc/integration/customid/ent/device_query.go +++ b/entc/integration/customid/ent/device_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -330,22 +329,27 @@ func (dq *DeviceQuery) WithSessions(opts ...func(*SessionQuery)) *DeviceQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (dq *DeviceQuery) GroupBy(field string, fields ...string) *DeviceGroupBy { - group := &DeviceGroupBy{config: dq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &DeviceGroupBy{config: dq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := dq.prepareQuery(ctx); err != nil { return nil, err } return dq.sqlQuery(ctx), nil } - return group + grbuild.label = device.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (dq *DeviceQuery) Select(fields ...string) *DeviceSelect { dq.fields = append(dq.fields, fields...) - return &DeviceSelect{DeviceQuery: dq} + selbuild := &DeviceSelect{DeviceQuery: dq} + selbuild.label = device.Label + selbuild.flds, selbuild.scan = &dq.fields, selbuild.Scan + return selbuild } func (dq *DeviceQuery) prepareQuery(ctx context.Context) error { @@ -561,6 +565,7 @@ func (dq *DeviceQuery) sqlQuery(ctx context.Context) *sql.Selector { // DeviceGroupBy is the group-by builder for Device entities. type DeviceGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -584,209 +589,6 @@ func (dgb *DeviceGroupBy) Scan(ctx context.Context, v interface{}) error { return dgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (dgb *DeviceGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := dgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (dgb *DeviceGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(dgb.fields) > 1 { - return nil, errors.New("ent: DeviceGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := dgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (dgb *DeviceGroupBy) StringsX(ctx context.Context) []string { - v, err := dgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (dgb *DeviceGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = dgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{device.Label} - default: - err = fmt.Errorf("ent: DeviceGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (dgb *DeviceGroupBy) StringX(ctx context.Context) string { - v, err := dgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (dgb *DeviceGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(dgb.fields) > 1 { - return nil, errors.New("ent: DeviceGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := dgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (dgb *DeviceGroupBy) IntsX(ctx context.Context) []int { - v, err := dgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (dgb *DeviceGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = dgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{device.Label} - default: - err = fmt.Errorf("ent: DeviceGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (dgb *DeviceGroupBy) IntX(ctx context.Context) int { - v, err := dgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (dgb *DeviceGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(dgb.fields) > 1 { - return nil, errors.New("ent: DeviceGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := dgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (dgb *DeviceGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := dgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (dgb *DeviceGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = dgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{device.Label} - default: - err = fmt.Errorf("ent: DeviceGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (dgb *DeviceGroupBy) Float64X(ctx context.Context) float64 { - v, err := dgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (dgb *DeviceGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(dgb.fields) > 1 { - return nil, errors.New("ent: DeviceGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := dgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (dgb *DeviceGroupBy) BoolsX(ctx context.Context) []bool { - v, err := dgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (dgb *DeviceGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = dgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{device.Label} - default: - err = fmt.Errorf("ent: DeviceGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (dgb *DeviceGroupBy) BoolX(ctx context.Context) bool { - v, err := dgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (dgb *DeviceGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range dgb.fields { if !device.ValidColumn(f) { @@ -828,6 +630,7 @@ func (dgb *DeviceGroupBy) sqlQuery() *sql.Selector { // DeviceSelect is the builder for selecting fields of Device entities. type DeviceSelect struct { *DeviceQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -841,201 +644,6 @@ func (ds *DeviceSelect) Scan(ctx context.Context, v interface{}) error { return ds.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ds *DeviceSelect) ScanX(ctx context.Context, v interface{}) { - if err := ds.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ds *DeviceSelect) Strings(ctx context.Context) ([]string, error) { - if len(ds.fields) > 1 { - return nil, errors.New("ent: DeviceSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ds.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ds *DeviceSelect) StringsX(ctx context.Context) []string { - v, err := ds.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ds *DeviceSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ds.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{device.Label} - default: - err = fmt.Errorf("ent: DeviceSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ds *DeviceSelect) StringX(ctx context.Context) string { - v, err := ds.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ds *DeviceSelect) Ints(ctx context.Context) ([]int, error) { - if len(ds.fields) > 1 { - return nil, errors.New("ent: DeviceSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ds.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ds *DeviceSelect) IntsX(ctx context.Context) []int { - v, err := ds.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ds *DeviceSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ds.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{device.Label} - default: - err = fmt.Errorf("ent: DeviceSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ds *DeviceSelect) IntX(ctx context.Context) int { - v, err := ds.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ds *DeviceSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ds.fields) > 1 { - return nil, errors.New("ent: DeviceSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ds.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ds *DeviceSelect) Float64sX(ctx context.Context) []float64 { - v, err := ds.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ds *DeviceSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ds.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{device.Label} - default: - err = fmt.Errorf("ent: DeviceSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ds *DeviceSelect) Float64X(ctx context.Context) float64 { - v, err := ds.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ds *DeviceSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ds.fields) > 1 { - return nil, errors.New("ent: DeviceSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ds.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ds *DeviceSelect) BoolsX(ctx context.Context) []bool { - v, err := ds.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ds *DeviceSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ds.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{device.Label} - default: - err = fmt.Errorf("ent: DeviceSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ds *DeviceSelect) BoolX(ctx context.Context) bool { - v, err := ds.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ds *DeviceSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ds.sql.Query() diff --git a/entc/integration/customid/ent/doc_query.go b/entc/integration/customid/ent/doc_query.go index e3fd2b82b8..635544e96c 100644 --- a/entc/integration/customid/ent/doc_query.go +++ b/entc/integration/customid/ent/doc_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -342,15 +341,17 @@ func (dq *DocQuery) WithChildren(opts ...func(*DocQuery)) *DocQuery { // Scan(ctx, &v) // func (dq *DocQuery) GroupBy(field string, fields ...string) *DocGroupBy { - group := &DocGroupBy{config: dq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &DocGroupBy{config: dq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := dq.prepareQuery(ctx); err != nil { return nil, err } return dq.sqlQuery(ctx), nil } - return group + grbuild.label = doc.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +369,10 @@ func (dq *DocQuery) GroupBy(field string, fields ...string) *DocGroupBy { // func (dq *DocQuery) Select(fields ...string) *DocSelect { dq.fields = append(dq.fields, fields...) - return &DocSelect{DocQuery: dq} + selbuild := &DocSelect{DocQuery: dq} + selbuild.label = doc.Label + selbuild.flds, selbuild.scan = &dq.fields, selbuild.Scan + return selbuild } func (dq *DocQuery) prepareQuery(ctx context.Context) error { @@ -584,6 +588,7 @@ func (dq *DocQuery) sqlQuery(ctx context.Context) *sql.Selector { // DocGroupBy is the group-by builder for Doc entities. type DocGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -607,209 +612,6 @@ func (dgb *DocGroupBy) Scan(ctx context.Context, v interface{}) error { return dgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (dgb *DocGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := dgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (dgb *DocGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(dgb.fields) > 1 { - return nil, errors.New("ent: DocGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := dgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (dgb *DocGroupBy) StringsX(ctx context.Context) []string { - v, err := dgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (dgb *DocGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = dgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{doc.Label} - default: - err = fmt.Errorf("ent: DocGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (dgb *DocGroupBy) StringX(ctx context.Context) string { - v, err := dgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (dgb *DocGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(dgb.fields) > 1 { - return nil, errors.New("ent: DocGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := dgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (dgb *DocGroupBy) IntsX(ctx context.Context) []int { - v, err := dgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (dgb *DocGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = dgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{doc.Label} - default: - err = fmt.Errorf("ent: DocGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (dgb *DocGroupBy) IntX(ctx context.Context) int { - v, err := dgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (dgb *DocGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(dgb.fields) > 1 { - return nil, errors.New("ent: DocGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := dgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (dgb *DocGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := dgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (dgb *DocGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = dgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{doc.Label} - default: - err = fmt.Errorf("ent: DocGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (dgb *DocGroupBy) Float64X(ctx context.Context) float64 { - v, err := dgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (dgb *DocGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(dgb.fields) > 1 { - return nil, errors.New("ent: DocGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := dgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (dgb *DocGroupBy) BoolsX(ctx context.Context) []bool { - v, err := dgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (dgb *DocGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = dgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{doc.Label} - default: - err = fmt.Errorf("ent: DocGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (dgb *DocGroupBy) BoolX(ctx context.Context) bool { - v, err := dgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (dgb *DocGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range dgb.fields { if !doc.ValidColumn(f) { @@ -851,6 +653,7 @@ func (dgb *DocGroupBy) sqlQuery() *sql.Selector { // DocSelect is the builder for selecting fields of Doc entities. type DocSelect struct { *DocQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -864,201 +667,6 @@ func (ds *DocSelect) Scan(ctx context.Context, v interface{}) error { return ds.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ds *DocSelect) ScanX(ctx context.Context, v interface{}) { - if err := ds.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ds *DocSelect) Strings(ctx context.Context) ([]string, error) { - if len(ds.fields) > 1 { - return nil, errors.New("ent: DocSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ds.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ds *DocSelect) StringsX(ctx context.Context) []string { - v, err := ds.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ds *DocSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ds.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{doc.Label} - default: - err = fmt.Errorf("ent: DocSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ds *DocSelect) StringX(ctx context.Context) string { - v, err := ds.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ds *DocSelect) Ints(ctx context.Context) ([]int, error) { - if len(ds.fields) > 1 { - return nil, errors.New("ent: DocSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ds.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ds *DocSelect) IntsX(ctx context.Context) []int { - v, err := ds.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ds *DocSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ds.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{doc.Label} - default: - err = fmt.Errorf("ent: DocSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ds *DocSelect) IntX(ctx context.Context) int { - v, err := ds.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ds *DocSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ds.fields) > 1 { - return nil, errors.New("ent: DocSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ds.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ds *DocSelect) Float64sX(ctx context.Context) []float64 { - v, err := ds.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ds *DocSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ds.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{doc.Label} - default: - err = fmt.Errorf("ent: DocSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ds *DocSelect) Float64X(ctx context.Context) float64 { - v, err := ds.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ds *DocSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ds.fields) > 1 { - return nil, errors.New("ent: DocSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ds.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ds *DocSelect) BoolsX(ctx context.Context) []bool { - v, err := ds.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ds *DocSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ds.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{doc.Label} - default: - err = fmt.Errorf("ent: DocSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ds *DocSelect) BoolX(ctx context.Context) bool { - v, err := ds.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ds *DocSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ds.sql.Query() diff --git a/entc/integration/customid/ent/ent.go b/entc/integration/customid/ent/ent.go index 8a1e034356..7937569aca 100644 --- a/entc/integration/customid/ent/ent.go +++ b/entc/integration/customid/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -285,3 +286,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/customid/ent/group_query.go b/entc/integration/customid/ent/group_query.go index 65e82a6d20..1f30e7bacd 100644 --- a/entc/integration/customid/ent/group_query.go +++ b/entc/integration/customid/ent/group_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -293,22 +292,27 @@ func (gq *GroupQuery) WithUsers(opts ...func(*UserQuery)) *GroupQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -523,6 +527,7 @@ func (gq *GroupQuery) sqlQuery(ctx context.Context) *sql.Selector { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -546,209 +551,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -790,6 +592,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -803,201 +606,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/entc/integration/customid/ent/mixinid_query.go b/entc/integration/customid/ent/mixinid_query.go index 5c0e69adaa..d478d29c5e 100644 --- a/entc/integration/customid/ent/mixinid_query.go +++ b/entc/integration/customid/ent/mixinid_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -269,15 +268,17 @@ func (miq *MixinIDQuery) Clone() *MixinIDQuery { // Scan(ctx, &v) // func (miq *MixinIDQuery) GroupBy(field string, fields ...string) *MixinIDGroupBy { - group := &MixinIDGroupBy{config: miq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &MixinIDGroupBy{config: miq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := miq.prepareQuery(ctx); err != nil { return nil, err } return miq.sqlQuery(ctx), nil } - return group + grbuild.label = mixinid.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -295,7 +296,10 @@ func (miq *MixinIDQuery) GroupBy(field string, fields ...string) *MixinIDGroupBy // func (miq *MixinIDQuery) Select(fields ...string) *MixinIDSelect { miq.fields = append(miq.fields, fields...) - return &MixinIDSelect{MixinIDQuery: miq} + selbuild := &MixinIDSelect{MixinIDQuery: miq} + selbuild.label = mixinid.Label + selbuild.flds, selbuild.scan = &miq.fields, selbuild.Scan + return selbuild } func (miq *MixinIDQuery) prepareQuery(ctx context.Context) error { @@ -440,6 +444,7 @@ func (miq *MixinIDQuery) sqlQuery(ctx context.Context) *sql.Selector { // MixinIDGroupBy is the group-by builder for MixinID entities. type MixinIDGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -463,209 +468,6 @@ func (migb *MixinIDGroupBy) Scan(ctx context.Context, v interface{}) error { return migb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (migb *MixinIDGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := migb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (migb *MixinIDGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(migb.fields) > 1 { - return nil, errors.New("ent: MixinIDGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := migb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (migb *MixinIDGroupBy) StringsX(ctx context.Context) []string { - v, err := migb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (migb *MixinIDGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = migb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{mixinid.Label} - default: - err = fmt.Errorf("ent: MixinIDGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (migb *MixinIDGroupBy) StringX(ctx context.Context) string { - v, err := migb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (migb *MixinIDGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(migb.fields) > 1 { - return nil, errors.New("ent: MixinIDGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := migb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (migb *MixinIDGroupBy) IntsX(ctx context.Context) []int { - v, err := migb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (migb *MixinIDGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = migb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{mixinid.Label} - default: - err = fmt.Errorf("ent: MixinIDGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (migb *MixinIDGroupBy) IntX(ctx context.Context) int { - v, err := migb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (migb *MixinIDGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(migb.fields) > 1 { - return nil, errors.New("ent: MixinIDGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := migb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (migb *MixinIDGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := migb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (migb *MixinIDGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = migb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{mixinid.Label} - default: - err = fmt.Errorf("ent: MixinIDGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (migb *MixinIDGroupBy) Float64X(ctx context.Context) float64 { - v, err := migb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (migb *MixinIDGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(migb.fields) > 1 { - return nil, errors.New("ent: MixinIDGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := migb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (migb *MixinIDGroupBy) BoolsX(ctx context.Context) []bool { - v, err := migb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (migb *MixinIDGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = migb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{mixinid.Label} - default: - err = fmt.Errorf("ent: MixinIDGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (migb *MixinIDGroupBy) BoolX(ctx context.Context) bool { - v, err := migb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (migb *MixinIDGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range migb.fields { if !mixinid.ValidColumn(f) { @@ -707,6 +509,7 @@ func (migb *MixinIDGroupBy) sqlQuery() *sql.Selector { // MixinIDSelect is the builder for selecting fields of MixinID entities. type MixinIDSelect struct { *MixinIDQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -720,201 +523,6 @@ func (mis *MixinIDSelect) Scan(ctx context.Context, v interface{}) error { return mis.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (mis *MixinIDSelect) ScanX(ctx context.Context, v interface{}) { - if err := mis.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (mis *MixinIDSelect) Strings(ctx context.Context) ([]string, error) { - if len(mis.fields) > 1 { - return nil, errors.New("ent: MixinIDSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := mis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (mis *MixinIDSelect) StringsX(ctx context.Context) []string { - v, err := mis.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (mis *MixinIDSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = mis.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{mixinid.Label} - default: - err = fmt.Errorf("ent: MixinIDSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (mis *MixinIDSelect) StringX(ctx context.Context) string { - v, err := mis.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (mis *MixinIDSelect) Ints(ctx context.Context) ([]int, error) { - if len(mis.fields) > 1 { - return nil, errors.New("ent: MixinIDSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := mis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (mis *MixinIDSelect) IntsX(ctx context.Context) []int { - v, err := mis.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (mis *MixinIDSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = mis.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{mixinid.Label} - default: - err = fmt.Errorf("ent: MixinIDSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (mis *MixinIDSelect) IntX(ctx context.Context) int { - v, err := mis.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (mis *MixinIDSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(mis.fields) > 1 { - return nil, errors.New("ent: MixinIDSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := mis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (mis *MixinIDSelect) Float64sX(ctx context.Context) []float64 { - v, err := mis.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (mis *MixinIDSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = mis.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{mixinid.Label} - default: - err = fmt.Errorf("ent: MixinIDSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (mis *MixinIDSelect) Float64X(ctx context.Context) float64 { - v, err := mis.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (mis *MixinIDSelect) Bools(ctx context.Context) ([]bool, error) { - if len(mis.fields) > 1 { - return nil, errors.New("ent: MixinIDSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := mis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (mis *MixinIDSelect) BoolsX(ctx context.Context) []bool { - v, err := mis.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (mis *MixinIDSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = mis.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{mixinid.Label} - default: - err = fmt.Errorf("ent: MixinIDSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (mis *MixinIDSelect) BoolX(ctx context.Context) bool { - v, err := mis.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (mis *MixinIDSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := mis.sql.Query() diff --git a/entc/integration/customid/ent/note_query.go b/entc/integration/customid/ent/note_query.go index 4849926e1e..b0ae7d6454 100644 --- a/entc/integration/customid/ent/note_query.go +++ b/entc/integration/customid/ent/note_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -342,15 +341,17 @@ func (nq *NoteQuery) WithChildren(opts ...func(*NoteQuery)) *NoteQuery { // Scan(ctx, &v) // func (nq *NoteQuery) GroupBy(field string, fields ...string) *NoteGroupBy { - group := &NoteGroupBy{config: nq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &NoteGroupBy{config: nq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := nq.prepareQuery(ctx); err != nil { return nil, err } return nq.sqlQuery(ctx), nil } - return group + grbuild.label = note.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +369,10 @@ func (nq *NoteQuery) GroupBy(field string, fields ...string) *NoteGroupBy { // func (nq *NoteQuery) Select(fields ...string) *NoteSelect { nq.fields = append(nq.fields, fields...) - return &NoteSelect{NoteQuery: nq} + selbuild := &NoteSelect{NoteQuery: nq} + selbuild.label = note.Label + selbuild.flds, selbuild.scan = &nq.fields, selbuild.Scan + return selbuild } func (nq *NoteQuery) prepareQuery(ctx context.Context) error { @@ -584,6 +588,7 @@ func (nq *NoteQuery) sqlQuery(ctx context.Context) *sql.Selector { // NoteGroupBy is the group-by builder for Note entities. type NoteGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -607,209 +612,6 @@ func (ngb *NoteGroupBy) Scan(ctx context.Context, v interface{}) error { return ngb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ngb *NoteGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ngb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NoteGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NoteGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ngb *NoteGroupBy) StringsX(ctx context.Context) []string { - v, err := ngb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NoteGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ngb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{note.Label} - default: - err = fmt.Errorf("ent: NoteGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ngb *NoteGroupBy) StringX(ctx context.Context) string { - v, err := ngb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NoteGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NoteGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ngb *NoteGroupBy) IntsX(ctx context.Context) []int { - v, err := ngb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NoteGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ngb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{note.Label} - default: - err = fmt.Errorf("ent: NoteGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ngb *NoteGroupBy) IntX(ctx context.Context) int { - v, err := ngb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NoteGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NoteGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ngb *NoteGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ngb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NoteGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ngb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{note.Label} - default: - err = fmt.Errorf("ent: NoteGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ngb *NoteGroupBy) Float64X(ctx context.Context) float64 { - v, err := ngb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NoteGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NoteGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ngb *NoteGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ngb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NoteGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ngb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{note.Label} - default: - err = fmt.Errorf("ent: NoteGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ngb *NoteGroupBy) BoolX(ctx context.Context) bool { - v, err := ngb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ngb *NoteGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ngb.fields { if !note.ValidColumn(f) { @@ -851,6 +653,7 @@ func (ngb *NoteGroupBy) sqlQuery() *sql.Selector { // NoteSelect is the builder for selecting fields of Note entities. type NoteSelect struct { *NoteQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -864,201 +667,6 @@ func (ns *NoteSelect) Scan(ctx context.Context, v interface{}) error { return ns.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ns *NoteSelect) ScanX(ctx context.Context, v interface{}) { - if err := ns.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ns *NoteSelect) Strings(ctx context.Context) ([]string, error) { - if len(ns.fields) > 1 { - return nil, errors.New("ent: NoteSelect.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 *NoteSelect) StringsX(ctx context.Context) []string { - v, err := ns.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ns *NoteSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ns.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{note.Label} - default: - err = fmt.Errorf("ent: NoteSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ns *NoteSelect) StringX(ctx context.Context) string { - v, err := ns.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ns *NoteSelect) Ints(ctx context.Context) ([]int, error) { - if len(ns.fields) > 1 { - return nil, errors.New("ent: NoteSelect.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 *NoteSelect) IntsX(ctx context.Context) []int { - v, err := ns.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ns *NoteSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ns.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{note.Label} - default: - err = fmt.Errorf("ent: NoteSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ns *NoteSelect) IntX(ctx context.Context) int { - v, err := ns.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ns *NoteSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ns.fields) > 1 { - return nil, errors.New("ent: NoteSelect.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 *NoteSelect) Float64sX(ctx context.Context) []float64 { - v, err := ns.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ns *NoteSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ns.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{note.Label} - default: - err = fmt.Errorf("ent: NoteSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ns *NoteSelect) Float64X(ctx context.Context) float64 { - v, err := ns.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ns *NoteSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ns.fields) > 1 { - return nil, errors.New("ent: NoteSelect.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 *NoteSelect) BoolsX(ctx context.Context) []bool { - v, err := ns.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ns *NoteSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ns.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{note.Label} - default: - err = fmt.Errorf("ent: NoteSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ns *NoteSelect) BoolX(ctx context.Context) bool { - v, err := ns.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ns *NoteSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ns.sql.Query() diff --git a/entc/integration/customid/ent/other_query.go b/entc/integration/customid/ent/other_query.go index e97309e35e..869d07e728 100644 --- a/entc/integration/customid/ent/other_query.go +++ b/entc/integration/customid/ent/other_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -256,22 +255,27 @@ func (oq *OtherQuery) Clone() *OtherQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (oq *OtherQuery) GroupBy(field string, fields ...string) *OtherGroupBy { - group := &OtherGroupBy{config: oq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &OtherGroupBy{config: oq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := oq.prepareQuery(ctx); err != nil { return nil, err } return oq.sqlQuery(ctx), nil } - return group + grbuild.label = other.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (oq *OtherQuery) Select(fields ...string) *OtherSelect { oq.fields = append(oq.fields, fields...) - return &OtherSelect{OtherQuery: oq} + selbuild := &OtherSelect{OtherQuery: oq} + selbuild.label = other.Label + selbuild.flds, selbuild.scan = &oq.fields, selbuild.Scan + return selbuild } func (oq *OtherQuery) prepareQuery(ctx context.Context) error { @@ -416,6 +420,7 @@ func (oq *OtherQuery) sqlQuery(ctx context.Context) *sql.Selector { // OtherGroupBy is the group-by builder for Other entities. type OtherGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -439,209 +444,6 @@ func (ogb *OtherGroupBy) Scan(ctx context.Context, v interface{}) error { return ogb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ogb *OtherGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ogb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ogb *OtherGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ogb.fields) > 1 { - return nil, errors.New("ent: OtherGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ogb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ogb *OtherGroupBy) StringsX(ctx context.Context) []string { - v, err := ogb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ogb *OtherGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ogb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{other.Label} - default: - err = fmt.Errorf("ent: OtherGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ogb *OtherGroupBy) StringX(ctx context.Context) string { - v, err := ogb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ogb *OtherGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ogb.fields) > 1 { - return nil, errors.New("ent: OtherGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ogb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ogb *OtherGroupBy) IntsX(ctx context.Context) []int { - v, err := ogb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ogb *OtherGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ogb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{other.Label} - default: - err = fmt.Errorf("ent: OtherGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ogb *OtherGroupBy) IntX(ctx context.Context) int { - v, err := ogb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ogb *OtherGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ogb.fields) > 1 { - return nil, errors.New("ent: OtherGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ogb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ogb *OtherGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ogb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ogb *OtherGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ogb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{other.Label} - default: - err = fmt.Errorf("ent: OtherGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ogb *OtherGroupBy) Float64X(ctx context.Context) float64 { - v, err := ogb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ogb *OtherGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ogb.fields) > 1 { - return nil, errors.New("ent: OtherGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ogb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ogb *OtherGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ogb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ogb *OtherGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ogb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{other.Label} - default: - err = fmt.Errorf("ent: OtherGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ogb *OtherGroupBy) BoolX(ctx context.Context) bool { - v, err := ogb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ogb *OtherGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ogb.fields { if !other.ValidColumn(f) { @@ -683,6 +485,7 @@ func (ogb *OtherGroupBy) sqlQuery() *sql.Selector { // OtherSelect is the builder for selecting fields of Other entities. type OtherSelect struct { *OtherQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -696,201 +499,6 @@ func (os *OtherSelect) Scan(ctx context.Context, v interface{}) error { return os.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (os *OtherSelect) ScanX(ctx context.Context, v interface{}) { - if err := os.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (os *OtherSelect) Strings(ctx context.Context) ([]string, error) { - if len(os.fields) > 1 { - return nil, errors.New("ent: OtherSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := os.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (os *OtherSelect) StringsX(ctx context.Context) []string { - v, err := os.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (os *OtherSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = os.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{other.Label} - default: - err = fmt.Errorf("ent: OtherSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (os *OtherSelect) StringX(ctx context.Context) string { - v, err := os.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (os *OtherSelect) Ints(ctx context.Context) ([]int, error) { - if len(os.fields) > 1 { - return nil, errors.New("ent: OtherSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := os.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (os *OtherSelect) IntsX(ctx context.Context) []int { - v, err := os.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (os *OtherSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = os.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{other.Label} - default: - err = fmt.Errorf("ent: OtherSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (os *OtherSelect) IntX(ctx context.Context) int { - v, err := os.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (os *OtherSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(os.fields) > 1 { - return nil, errors.New("ent: OtherSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := os.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (os *OtherSelect) Float64sX(ctx context.Context) []float64 { - v, err := os.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (os *OtherSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = os.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{other.Label} - default: - err = fmt.Errorf("ent: OtherSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (os *OtherSelect) Float64X(ctx context.Context) float64 { - v, err := os.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (os *OtherSelect) Bools(ctx context.Context) ([]bool, error) { - if len(os.fields) > 1 { - return nil, errors.New("ent: OtherSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := os.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (os *OtherSelect) BoolsX(ctx context.Context) []bool { - v, err := os.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (os *OtherSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = os.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{other.Label} - default: - err = fmt.Errorf("ent: OtherSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (os *OtherSelect) BoolX(ctx context.Context) bool { - v, err := os.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (os *OtherSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := os.sql.Query() diff --git a/entc/integration/customid/ent/pet_query.go b/entc/integration/customid/ent/pet_query.go index 4b4bdd8517..39b59cc1c7 100644 --- a/entc/integration/customid/ent/pet_query.go +++ b/entc/integration/customid/ent/pet_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -400,22 +399,27 @@ func (pq *PetQuery) WithBestFriend(opts ...func(*PetQuery)) *PetQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -727,6 +731,7 @@ func (pq *PetQuery) sqlQuery(ctx context.Context) *sql.Selector { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -750,209 +755,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !pet.ValidColumn(f) { @@ -994,6 +796,7 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -1007,201 +810,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/entc/integration/customid/ent/session_query.go b/entc/integration/customid/ent/session_query.go index 3ae962943f..4936b00aec 100644 --- a/entc/integration/customid/ent/session_query.go +++ b/entc/integration/customid/ent/session_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -294,22 +293,27 @@ func (sq *SessionQuery) WithDevice(opts ...func(*DeviceQuery)) *SessionQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (sq *SessionQuery) GroupBy(field string, fields ...string) *SessionGroupBy { - group := &SessionGroupBy{config: sq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &SessionGroupBy{config: sq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := sq.prepareQuery(ctx); err != nil { return nil, err } return sq.sqlQuery(ctx), nil } - return group + grbuild.label = session.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (sq *SessionQuery) Select(fields ...string) *SessionSelect { sq.fields = append(sq.fields, fields...) - return &SessionSelect{SessionQuery: sq} + selbuild := &SessionSelect{SessionQuery: sq} + selbuild.label = session.Label + selbuild.flds, selbuild.scan = &sq.fields, selbuild.Scan + return selbuild } func (sq *SessionQuery) prepareQuery(ctx context.Context) error { @@ -495,6 +499,7 @@ func (sq *SessionQuery) sqlQuery(ctx context.Context) *sql.Selector { // SessionGroupBy is the group-by builder for Session entities. type SessionGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -518,209 +523,6 @@ func (sgb *SessionGroupBy) Scan(ctx context.Context, v interface{}) error { return sgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (sgb *SessionGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := sgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SessionGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SessionGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (sgb *SessionGroupBy) StringsX(ctx context.Context) []string { - v, err := sgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SessionGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = sgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{session.Label} - default: - err = fmt.Errorf("ent: SessionGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (sgb *SessionGroupBy) StringX(ctx context.Context) string { - v, err := sgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SessionGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SessionGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (sgb *SessionGroupBy) IntsX(ctx context.Context) []int { - v, err := sgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SessionGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = sgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{session.Label} - default: - err = fmt.Errorf("ent: SessionGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (sgb *SessionGroupBy) IntX(ctx context.Context) int { - v, err := sgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SessionGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SessionGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (sgb *SessionGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := sgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SessionGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = sgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{session.Label} - default: - err = fmt.Errorf("ent: SessionGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (sgb *SessionGroupBy) Float64X(ctx context.Context) float64 { - v, err := sgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SessionGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SessionGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (sgb *SessionGroupBy) BoolsX(ctx context.Context) []bool { - v, err := sgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SessionGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = sgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{session.Label} - default: - err = fmt.Errorf("ent: SessionGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (sgb *SessionGroupBy) BoolX(ctx context.Context) bool { - v, err := sgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (sgb *SessionGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range sgb.fields { if !session.ValidColumn(f) { @@ -762,6 +564,7 @@ func (sgb *SessionGroupBy) sqlQuery() *sql.Selector { // SessionSelect is the builder for selecting fields of Session entities. type SessionSelect struct { *SessionQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -775,201 +578,6 @@ func (ss *SessionSelect) Scan(ctx context.Context, v interface{}) error { return ss.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ss *SessionSelect) ScanX(ctx context.Context, v interface{}) { - if err := ss.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ss *SessionSelect) Strings(ctx context.Context) ([]string, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SessionSelect.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 *SessionSelect) StringsX(ctx context.Context) []string { - v, err := ss.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ss *SessionSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ss.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{session.Label} - default: - err = fmt.Errorf("ent: SessionSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ss *SessionSelect) StringX(ctx context.Context) string { - v, err := ss.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ss *SessionSelect) Ints(ctx context.Context) ([]int, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SessionSelect.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 *SessionSelect) IntsX(ctx context.Context) []int { - v, err := ss.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ss *SessionSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ss.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{session.Label} - default: - err = fmt.Errorf("ent: SessionSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ss *SessionSelect) IntX(ctx context.Context) int { - v, err := ss.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ss *SessionSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SessionSelect.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 *SessionSelect) Float64sX(ctx context.Context) []float64 { - v, err := ss.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ss *SessionSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ss.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{session.Label} - default: - err = fmt.Errorf("ent: SessionSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ss *SessionSelect) Float64X(ctx context.Context) float64 { - v, err := ss.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ss *SessionSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SessionSelect.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 *SessionSelect) BoolsX(ctx context.Context) []bool { - v, err := ss.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ss *SessionSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ss.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{session.Label} - default: - err = fmt.Errorf("ent: SessionSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ss *SessionSelect) BoolX(ctx context.Context) bool { - v, err := ss.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ss *SessionSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ss.sql.Query() diff --git a/entc/integration/customid/ent/token_query.go b/entc/integration/customid/ent/token_query.go index 029bc73d87..7c38e26521 100644 --- a/entc/integration/customid/ent/token_query.go +++ b/entc/integration/customid/ent/token_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -307,15 +306,17 @@ func (tq *TokenQuery) WithAccount(opts ...func(*AccountQuery)) *TokenQuery { // Scan(ctx, &v) // func (tq *TokenQuery) GroupBy(field string, fields ...string) *TokenGroupBy { - group := &TokenGroupBy{config: tq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &TokenGroupBy{config: tq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := tq.prepareQuery(ctx); err != nil { return nil, err } return tq.sqlQuery(ctx), nil } - return group + grbuild.label = token.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -333,7 +334,10 @@ func (tq *TokenQuery) GroupBy(field string, fields ...string) *TokenGroupBy { // func (tq *TokenQuery) Select(fields ...string) *TokenSelect { tq.fields = append(tq.fields, fields...) - return &TokenSelect{TokenQuery: tq} + selbuild := &TokenSelect{TokenQuery: tq} + selbuild.label = token.Label + selbuild.flds, selbuild.scan = &tq.fields, selbuild.Scan + return selbuild } func (tq *TokenQuery) prepareQuery(ctx context.Context) error { @@ -519,6 +523,7 @@ func (tq *TokenQuery) sqlQuery(ctx context.Context) *sql.Selector { // TokenGroupBy is the group-by builder for Token entities. type TokenGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -542,209 +547,6 @@ func (tgb *TokenGroupBy) Scan(ctx context.Context, v interface{}) error { return tgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (tgb *TokenGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := tgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TokenGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TokenGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (tgb *TokenGroupBy) StringsX(ctx context.Context) []string { - v, err := tgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TokenGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = tgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{token.Label} - default: - err = fmt.Errorf("ent: TokenGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (tgb *TokenGroupBy) StringX(ctx context.Context) string { - v, err := tgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TokenGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TokenGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (tgb *TokenGroupBy) IntsX(ctx context.Context) []int { - v, err := tgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TokenGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = tgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{token.Label} - default: - err = fmt.Errorf("ent: TokenGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (tgb *TokenGroupBy) IntX(ctx context.Context) int { - v, err := tgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TokenGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TokenGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (tgb *TokenGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := tgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TokenGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = tgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{token.Label} - default: - err = fmt.Errorf("ent: TokenGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (tgb *TokenGroupBy) Float64X(ctx context.Context) float64 { - v, err := tgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TokenGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TokenGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (tgb *TokenGroupBy) BoolsX(ctx context.Context) []bool { - v, err := tgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TokenGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = tgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{token.Label} - default: - err = fmt.Errorf("ent: TokenGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (tgb *TokenGroupBy) BoolX(ctx context.Context) bool { - v, err := tgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (tgb *TokenGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range tgb.fields { if !token.ValidColumn(f) { @@ -786,6 +588,7 @@ func (tgb *TokenGroupBy) sqlQuery() *sql.Selector { // TokenSelect is the builder for selecting fields of Token entities. type TokenSelect struct { *TokenQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -799,201 +602,6 @@ func (ts *TokenSelect) Scan(ctx context.Context, v interface{}) error { return ts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ts *TokenSelect) ScanX(ctx context.Context, v interface{}) { - if err := ts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ts *TokenSelect) Strings(ctx context.Context) ([]string, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TokenSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ts *TokenSelect) StringsX(ctx context.Context) []string { - v, err := ts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ts *TokenSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{token.Label} - default: - err = fmt.Errorf("ent: TokenSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ts *TokenSelect) StringX(ctx context.Context) string { - v, err := ts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ts *TokenSelect) Ints(ctx context.Context) ([]int, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TokenSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ts *TokenSelect) IntsX(ctx context.Context) []int { - v, err := ts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ts *TokenSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{token.Label} - default: - err = fmt.Errorf("ent: TokenSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ts *TokenSelect) IntX(ctx context.Context) int { - v, err := ts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ts *TokenSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TokenSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ts *TokenSelect) Float64sX(ctx context.Context) []float64 { - v, err := ts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ts *TokenSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{token.Label} - default: - err = fmt.Errorf("ent: TokenSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ts *TokenSelect) Float64X(ctx context.Context) float64 { - v, err := ts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ts *TokenSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TokenSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ts *TokenSelect) BoolsX(ctx context.Context) []bool { - v, err := ts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ts *TokenSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{token.Label} - default: - err = fmt.Errorf("ent: TokenSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ts *TokenSelect) BoolX(ctx context.Context) bool { - v, err := ts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ts *TokenSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ts.sql.Query() diff --git a/entc/integration/customid/ent/user_query.go b/entc/integration/customid/ent/user_query.go index 8cd1c6207c..8478fa2983 100644 --- a/entc/integration/customid/ent/user_query.go +++ b/entc/integration/customid/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -400,22 +399,27 @@ func (uq *UserQuery) WithPets(opts ...func(*PetQuery)) *UserQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -727,6 +731,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -750,209 +755,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -994,6 +796,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -1007,201 +810,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/edgefield/ent/car_query.go b/entc/integration/edgefield/ent/car_query.go index 88296fdcfa..13374c5e49 100644 --- a/entc/integration/edgefield/ent/car_query.go +++ b/entc/integration/edgefield/ent/car_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -307,15 +306,17 @@ func (cq *CarQuery) WithRentals(opts ...func(*RentalQuery)) *CarQuery { // Scan(ctx, &v) // func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { - group := &CarGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CarGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = car.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -333,7 +334,10 @@ func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { // func (cq *CarQuery) Select(fields ...string) *CarSelect { cq.fields = append(cq.fields, fields...) - return &CarSelect{CarQuery: cq} + selbuild := &CarSelect{CarQuery: cq} + selbuild.label = car.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CarQuery) prepareQuery(ctx context.Context) error { @@ -508,6 +512,7 @@ func (cq *CarQuery) sqlQuery(ctx context.Context) *sql.Selector { // CarGroupBy is the group-by builder for Car entities. type CarGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -531,209 +536,6 @@ func (cgb *CarGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CarGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CarGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CarGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CarGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CarGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CarGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CarGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CarGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CarGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CarGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !car.ValidColumn(f) { @@ -775,6 +577,7 @@ func (cgb *CarGroupBy) sqlQuery() *sql.Selector { // CarSelect is the builder for selecting fields of Car entities. type CarSelect struct { *CarQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -788,201 +591,6 @@ func (cs *CarSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CarSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CarSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CarSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CarSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CarSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CarSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/edgefield/ent/card_query.go b/entc/integration/edgefield/ent/card_query.go index 3cc645379b..9de5eaf0ea 100644 --- a/entc/integration/edgefield/ent/card_query.go +++ b/entc/integration/edgefield/ent/card_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -305,15 +304,17 @@ func (cq *CardQuery) WithOwner(opts ...func(*UserQuery)) *CardQuery { // Scan(ctx, &v) // func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { - group := &CardGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CardGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = card.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -331,7 +332,10 @@ func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { // func (cq *CardQuery) Select(fields ...string) *CardSelect { cq.fields = append(cq.fields, fields...) - return &CardSelect{CardQuery: cq} + selbuild := &CardSelect{CardQuery: cq} + selbuild.label = card.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CardQuery) prepareQuery(ctx context.Context) error { @@ -507,6 +511,7 @@ func (cq *CardQuery) sqlQuery(ctx context.Context) *sql.Selector { // CardGroupBy is the group-by builder for Card entities. type CardGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -530,209 +535,6 @@ func (cgb *CardGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CardGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CardGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CardGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CardGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CardGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CardGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CardGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CardGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CardGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CardGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !card.ValidColumn(f) { @@ -774,6 +576,7 @@ func (cgb *CardGroupBy) sqlQuery() *sql.Selector { // CardSelect is the builder for selecting fields of Card entities. type CardSelect struct { *CardQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -787,201 +590,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CardSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CardSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CardSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CardSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CardSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/edgefield/ent/ent.go b/entc/integration/edgefield/ent/ent.go index 1820cba41d..16299e1f31 100644 --- a/entc/integration/edgefield/ent/ent.go +++ b/entc/integration/edgefield/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -277,3 +278,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/edgefield/ent/info_query.go b/entc/integration/edgefield/ent/info_query.go index aafa7b1134..14f330db3e 100644 --- a/entc/integration/edgefield/ent/info_query.go +++ b/entc/integration/edgefield/ent/info_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -305,15 +304,17 @@ func (iq *InfoQuery) WithUser(opts ...func(*UserQuery)) *InfoQuery { // Scan(ctx, &v) // func (iq *InfoQuery) GroupBy(field string, fields ...string) *InfoGroupBy { - group := &InfoGroupBy{config: iq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &InfoGroupBy{config: iq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := iq.prepareQuery(ctx); err != nil { return nil, err } return iq.sqlQuery(ctx), nil } - return group + grbuild.label = info.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -331,7 +332,10 @@ func (iq *InfoQuery) GroupBy(field string, fields ...string) *InfoGroupBy { // func (iq *InfoQuery) Select(fields ...string) *InfoSelect { iq.fields = append(iq.fields, fields...) - return &InfoSelect{InfoQuery: iq} + selbuild := &InfoSelect{InfoQuery: iq} + selbuild.label = info.Label + selbuild.flds, selbuild.scan = &iq.fields, selbuild.Scan + return selbuild } func (iq *InfoQuery) prepareQuery(ctx context.Context) error { @@ -507,6 +511,7 @@ func (iq *InfoQuery) sqlQuery(ctx context.Context) *sql.Selector { // InfoGroupBy is the group-by builder for Info entities. type InfoGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -530,209 +535,6 @@ func (igb *InfoGroupBy) Scan(ctx context.Context, v interface{}) error { return igb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (igb *InfoGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := igb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *InfoGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: InfoGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (igb *InfoGroupBy) StringsX(ctx context.Context) []string { - v, err := igb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *InfoGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = igb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{info.Label} - default: - err = fmt.Errorf("ent: InfoGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (igb *InfoGroupBy) StringX(ctx context.Context) string { - v, err := igb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *InfoGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: InfoGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (igb *InfoGroupBy) IntsX(ctx context.Context) []int { - v, err := igb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *InfoGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = igb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{info.Label} - default: - err = fmt.Errorf("ent: InfoGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (igb *InfoGroupBy) IntX(ctx context.Context) int { - v, err := igb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *InfoGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: InfoGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (igb *InfoGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := igb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *InfoGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = igb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{info.Label} - default: - err = fmt.Errorf("ent: InfoGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (igb *InfoGroupBy) Float64X(ctx context.Context) float64 { - v, err := igb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *InfoGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: InfoGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (igb *InfoGroupBy) BoolsX(ctx context.Context) []bool { - v, err := igb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *InfoGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = igb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{info.Label} - default: - err = fmt.Errorf("ent: InfoGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (igb *InfoGroupBy) BoolX(ctx context.Context) bool { - v, err := igb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (igb *InfoGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range igb.fields { if !info.ValidColumn(f) { @@ -774,6 +576,7 @@ func (igb *InfoGroupBy) sqlQuery() *sql.Selector { // InfoSelect is the builder for selecting fields of Info entities. type InfoSelect struct { *InfoQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -787,201 +590,6 @@ func (is *InfoSelect) Scan(ctx context.Context, v interface{}) error { return is.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (is *InfoSelect) ScanX(ctx context.Context, v interface{}) { - if err := is.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (is *InfoSelect) Strings(ctx context.Context) ([]string, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: InfoSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (is *InfoSelect) StringsX(ctx context.Context) []string { - v, err := is.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (is *InfoSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = is.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{info.Label} - default: - err = fmt.Errorf("ent: InfoSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (is *InfoSelect) StringX(ctx context.Context) string { - v, err := is.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (is *InfoSelect) Ints(ctx context.Context) ([]int, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: InfoSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (is *InfoSelect) IntsX(ctx context.Context) []int { - v, err := is.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (is *InfoSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = is.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{info.Label} - default: - err = fmt.Errorf("ent: InfoSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (is *InfoSelect) IntX(ctx context.Context) int { - v, err := is.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (is *InfoSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: InfoSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (is *InfoSelect) Float64sX(ctx context.Context) []float64 { - v, err := is.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (is *InfoSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = is.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{info.Label} - default: - err = fmt.Errorf("ent: InfoSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (is *InfoSelect) Float64X(ctx context.Context) float64 { - v, err := is.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (is *InfoSelect) Bools(ctx context.Context) ([]bool, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: InfoSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (is *InfoSelect) BoolsX(ctx context.Context) []bool { - v, err := is.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (is *InfoSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = is.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{info.Label} - default: - err = fmt.Errorf("ent: InfoSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (is *InfoSelect) BoolX(ctx context.Context) bool { - v, err := is.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (is *InfoSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := is.sql.Query() diff --git a/entc/integration/edgefield/ent/metadata_query.go b/entc/integration/edgefield/ent/metadata_query.go index b3f449b940..7ca5f532d7 100644 --- a/entc/integration/edgefield/ent/metadata_query.go +++ b/entc/integration/edgefield/ent/metadata_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -376,15 +375,17 @@ func (mq *MetadataQuery) WithParent(opts ...func(*MetadataQuery)) *MetadataQuery // Scan(ctx, &v) // func (mq *MetadataQuery) GroupBy(field string, fields ...string) *MetadataGroupBy { - group := &MetadataGroupBy{config: mq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &MetadataGroupBy{config: mq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := mq.prepareQuery(ctx); err != nil { return nil, err } return mq.sqlQuery(ctx), nil } - return group + grbuild.label = metadata.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -402,7 +403,10 @@ func (mq *MetadataQuery) GroupBy(field string, fields ...string) *MetadataGroupB // func (mq *MetadataQuery) Select(fields ...string) *MetadataSelect { mq.fields = append(mq.fields, fields...) - return &MetadataSelect{MetadataQuery: mq} + selbuild := &MetadataSelect{MetadataQuery: mq} + selbuild.label = metadata.Label + selbuild.flds, selbuild.scan = &mq.fields, selbuild.Scan + return selbuild } func (mq *MetadataQuery) prepareQuery(ctx context.Context) error { @@ -631,6 +635,7 @@ func (mq *MetadataQuery) sqlQuery(ctx context.Context) *sql.Selector { // MetadataGroupBy is the group-by builder for Metadata entities. type MetadataGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -654,209 +659,6 @@ func (mgb *MetadataGroupBy) Scan(ctx context.Context, v interface{}) error { return mgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (mgb *MetadataGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := mgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (mgb *MetadataGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(mgb.fields) > 1 { - return nil, errors.New("ent: MetadataGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := mgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (mgb *MetadataGroupBy) StringsX(ctx context.Context) []string { - v, err := mgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (mgb *MetadataGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = mgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{metadata.Label} - default: - err = fmt.Errorf("ent: MetadataGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (mgb *MetadataGroupBy) StringX(ctx context.Context) string { - v, err := mgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (mgb *MetadataGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(mgb.fields) > 1 { - return nil, errors.New("ent: MetadataGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := mgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (mgb *MetadataGroupBy) IntsX(ctx context.Context) []int { - v, err := mgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (mgb *MetadataGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = mgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{metadata.Label} - default: - err = fmt.Errorf("ent: MetadataGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (mgb *MetadataGroupBy) IntX(ctx context.Context) int { - v, err := mgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (mgb *MetadataGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(mgb.fields) > 1 { - return nil, errors.New("ent: MetadataGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := mgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (mgb *MetadataGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := mgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (mgb *MetadataGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = mgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{metadata.Label} - default: - err = fmt.Errorf("ent: MetadataGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (mgb *MetadataGroupBy) Float64X(ctx context.Context) float64 { - v, err := mgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (mgb *MetadataGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(mgb.fields) > 1 { - return nil, errors.New("ent: MetadataGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := mgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (mgb *MetadataGroupBy) BoolsX(ctx context.Context) []bool { - v, err := mgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (mgb *MetadataGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = mgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{metadata.Label} - default: - err = fmt.Errorf("ent: MetadataGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (mgb *MetadataGroupBy) BoolX(ctx context.Context) bool { - v, err := mgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (mgb *MetadataGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range mgb.fields { if !metadata.ValidColumn(f) { @@ -898,6 +700,7 @@ func (mgb *MetadataGroupBy) sqlQuery() *sql.Selector { // MetadataSelect is the builder for selecting fields of Metadata entities. type MetadataSelect struct { *MetadataQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -911,201 +714,6 @@ func (ms *MetadataSelect) Scan(ctx context.Context, v interface{}) error { return ms.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ms *MetadataSelect) ScanX(ctx context.Context, v interface{}) { - if err := ms.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ms *MetadataSelect) Strings(ctx context.Context) ([]string, error) { - if len(ms.fields) > 1 { - return nil, errors.New("ent: MetadataSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ms.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ms *MetadataSelect) StringsX(ctx context.Context) []string { - v, err := ms.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ms *MetadataSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ms.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{metadata.Label} - default: - err = fmt.Errorf("ent: MetadataSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ms *MetadataSelect) StringX(ctx context.Context) string { - v, err := ms.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ms *MetadataSelect) Ints(ctx context.Context) ([]int, error) { - if len(ms.fields) > 1 { - return nil, errors.New("ent: MetadataSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ms.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ms *MetadataSelect) IntsX(ctx context.Context) []int { - v, err := ms.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ms *MetadataSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ms.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{metadata.Label} - default: - err = fmt.Errorf("ent: MetadataSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ms *MetadataSelect) IntX(ctx context.Context) int { - v, err := ms.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ms *MetadataSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ms.fields) > 1 { - return nil, errors.New("ent: MetadataSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ms.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ms *MetadataSelect) Float64sX(ctx context.Context) []float64 { - v, err := ms.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ms *MetadataSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ms.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{metadata.Label} - default: - err = fmt.Errorf("ent: MetadataSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ms *MetadataSelect) Float64X(ctx context.Context) float64 { - v, err := ms.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ms *MetadataSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ms.fields) > 1 { - return nil, errors.New("ent: MetadataSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ms.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ms *MetadataSelect) BoolsX(ctx context.Context) []bool { - v, err := ms.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ms *MetadataSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ms.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{metadata.Label} - default: - err = fmt.Errorf("ent: MetadataSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ms *MetadataSelect) BoolX(ctx context.Context) bool { - v, err := ms.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ms *MetadataSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ms.sql.Query() diff --git a/entc/integration/edgefield/ent/node_query.go b/entc/integration/edgefield/ent/node_query.go index 2b88548bad..3148566101 100644 --- a/entc/integration/edgefield/ent/node_query.go +++ b/entc/integration/edgefield/ent/node_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -340,15 +339,17 @@ func (nq *NodeQuery) WithNext(opts ...func(*NodeQuery)) *NodeQuery { // Scan(ctx, &v) // func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { - group := &NodeGroupBy{config: nq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &NodeGroupBy{config: nq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := nq.prepareQuery(ctx); err != nil { return nil, err } return nq.sqlQuery(ctx), nil } - return group + grbuild.label = node.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -366,7 +367,10 @@ func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { // func (nq *NodeQuery) Select(fields ...string) *NodeSelect { nq.fields = append(nq.fields, fields...) - return &NodeSelect{NodeQuery: nq} + selbuild := &NodeSelect{NodeQuery: nq} + selbuild.label = node.Label + selbuild.flds, selbuild.scan = &nq.fields, selbuild.Scan + return selbuild } func (nq *NodeQuery) prepareQuery(ctx context.Context) error { @@ -567,6 +571,7 @@ func (nq *NodeQuery) sqlQuery(ctx context.Context) *sql.Selector { // NodeGroupBy is the group-by builder for Node entities. type NodeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -590,209 +595,6 @@ func (ngb *NodeGroupBy) Scan(ctx context.Context, v interface{}) error { return ngb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ngb *NodeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ngb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ngb *NodeGroupBy) StringsX(ctx context.Context) []string { - v, err := ngb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ngb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ngb *NodeGroupBy) StringX(ctx context.Context) string { - v, err := ngb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ngb *NodeGroupBy) IntsX(ctx context.Context) []int { - v, err := ngb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ngb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ngb *NodeGroupBy) IntX(ctx context.Context) int { - v, err := ngb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ngb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ngb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ngb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ngb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ngb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolX(ctx context.Context) bool { - v, err := ngb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ngb *NodeGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ngb.fields { if !node.ValidColumn(f) { @@ -834,6 +636,7 @@ func (ngb *NodeGroupBy) sqlQuery() *sql.Selector { // NodeSelect is the builder for selecting fields of Node entities. type NodeSelect struct { *NodeQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -847,201 +650,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ns.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ns *NodeSelect) StringX(ctx context.Context) string { - v, err := ns.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ns.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ns *NodeSelect) IntX(ctx context.Context) int { - v, err := ns.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ns.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ns *NodeSelect) Float64X(ctx context.Context) float64 { - v, err := ns.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ns.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ns *NodeSelect) BoolX(ctx context.Context) bool { - v, err := ns.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ns *NodeSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ns.sql.Query() diff --git a/entc/integration/edgefield/ent/pet_query.go b/entc/integration/edgefield/ent/pet_query.go index 831fbd0a85..c2090ceadf 100644 --- a/entc/integration/edgefield/ent/pet_query.go +++ b/entc/integration/edgefield/ent/pet_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -305,15 +304,17 @@ func (pq *PetQuery) WithOwner(opts ...func(*UserQuery)) *PetQuery { // Scan(ctx, &v) // func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -331,7 +332,10 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { // func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -507,6 +511,7 @@ func (pq *PetQuery) sqlQuery(ctx context.Context) *sql.Selector { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -530,209 +535,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !pet.ValidColumn(f) { @@ -774,6 +576,7 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -787,201 +590,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/entc/integration/edgefield/ent/post_query.go b/entc/integration/edgefield/ent/post_query.go index 38c80db0d3..806e48aa24 100644 --- a/entc/integration/edgefield/ent/post_query.go +++ b/entc/integration/edgefield/ent/post_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -305,15 +304,17 @@ func (pq *PostQuery) WithAuthor(opts ...func(*UserQuery)) *PostQuery { // Scan(ctx, &v) // func (pq *PostQuery) GroupBy(field string, fields ...string) *PostGroupBy { - group := &PostGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PostGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = post.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -331,7 +332,10 @@ func (pq *PostQuery) GroupBy(field string, fields ...string) *PostGroupBy { // func (pq *PostQuery) Select(fields ...string) *PostSelect { pq.fields = append(pq.fields, fields...) - return &PostSelect{PostQuery: pq} + selbuild := &PostSelect{PostQuery: pq} + selbuild.label = post.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PostQuery) prepareQuery(ctx context.Context) error { @@ -510,6 +514,7 @@ func (pq *PostQuery) sqlQuery(ctx context.Context) *sql.Selector { // PostGroupBy is the group-by builder for Post entities. type PostGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -533,209 +538,6 @@ func (pgb *PostGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PostGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PostGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PostGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PostGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PostGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PostGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PostGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PostGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PostGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PostGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PostGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PostGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PostGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PostGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PostGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !post.ValidColumn(f) { @@ -777,6 +579,7 @@ func (pgb *PostGroupBy) sqlQuery() *sql.Selector { // PostSelect is the builder for selecting fields of Post entities. type PostSelect struct { *PostQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -790,201 +593,6 @@ func (ps *PostSelect) Scan(ctx context.Context, v interface{}) error { return ps.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ps *PostSelect) ScanX(ctx context.Context, v interface{}) { - if err := ps.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Strings(ctx context.Context) ([]string, error) { - if len(ps.fields) > 1 { - return nil, errors.New("ent: PostSelect.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 *PostSelect) StringsX(ctx context.Context) []string { - v, err := ps.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PostSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Ints(ctx context.Context) ([]int, error) { - if len(ps.fields) > 1 { - return nil, errors.New("ent: PostSelect.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 *PostSelect) IntsX(ctx context.Context) []int { - v, err := ps.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PostSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ps.fields) > 1 { - return nil, errors.New("ent: PostSelect.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 *PostSelect) Float64sX(ctx context.Context) []float64 { - v, err := ps.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PostSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ps.fields) > 1 { - return nil, errors.New("ent: PostSelect.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 *PostSelect) BoolsX(ctx context.Context) []bool { - v, err := ps.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PostSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{post.Label} - default: - err = fmt.Errorf("ent: PostSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PostSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PostSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/entc/integration/edgefield/ent/rental_query.go b/entc/integration/edgefield/ent/rental_query.go index 0bd27a8c7e..7e73d0f134 100644 --- a/entc/integration/edgefield/ent/rental_query.go +++ b/entc/integration/edgefield/ent/rental_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -342,15 +341,17 @@ func (rq *RentalQuery) WithCar(opts ...func(*CarQuery)) *RentalQuery { // Scan(ctx, &v) // func (rq *RentalQuery) GroupBy(field string, fields ...string) *RentalGroupBy { - group := &RentalGroupBy{config: rq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &RentalGroupBy{config: rq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := rq.prepareQuery(ctx); err != nil { return nil, err } return rq.sqlQuery(ctx), nil } - return group + grbuild.label = rental.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +369,10 @@ func (rq *RentalQuery) GroupBy(field string, fields ...string) *RentalGroupBy { // func (rq *RentalQuery) Select(fields ...string) *RentalSelect { rq.fields = append(rq.fields, fields...) - return &RentalSelect{RentalQuery: rq} + selbuild := &RentalSelect{RentalQuery: rq} + selbuild.label = rental.Label + selbuild.flds, selbuild.scan = &rq.fields, selbuild.Scan + return selbuild } func (rq *RentalQuery) prepareQuery(ctx context.Context) error { @@ -571,6 +575,7 @@ func (rq *RentalQuery) sqlQuery(ctx context.Context) *sql.Selector { // RentalGroupBy is the group-by builder for Rental entities. type RentalGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -594,209 +599,6 @@ func (rgb *RentalGroupBy) Scan(ctx context.Context, v interface{}) error { return rgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (rgb *RentalGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := rgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (rgb *RentalGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(rgb.fields) > 1 { - return nil, errors.New("ent: RentalGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := rgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (rgb *RentalGroupBy) StringsX(ctx context.Context) []string { - v, err := rgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (rgb *RentalGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = rgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{rental.Label} - default: - err = fmt.Errorf("ent: RentalGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (rgb *RentalGroupBy) StringX(ctx context.Context) string { - v, err := rgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (rgb *RentalGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(rgb.fields) > 1 { - return nil, errors.New("ent: RentalGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := rgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (rgb *RentalGroupBy) IntsX(ctx context.Context) []int { - v, err := rgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (rgb *RentalGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = rgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{rental.Label} - default: - err = fmt.Errorf("ent: RentalGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (rgb *RentalGroupBy) IntX(ctx context.Context) int { - v, err := rgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (rgb *RentalGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(rgb.fields) > 1 { - return nil, errors.New("ent: RentalGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := rgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (rgb *RentalGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := rgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (rgb *RentalGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = rgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{rental.Label} - default: - err = fmt.Errorf("ent: RentalGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (rgb *RentalGroupBy) Float64X(ctx context.Context) float64 { - v, err := rgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (rgb *RentalGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(rgb.fields) > 1 { - return nil, errors.New("ent: RentalGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := rgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (rgb *RentalGroupBy) BoolsX(ctx context.Context) []bool { - v, err := rgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (rgb *RentalGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = rgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{rental.Label} - default: - err = fmt.Errorf("ent: RentalGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (rgb *RentalGroupBy) BoolX(ctx context.Context) bool { - v, err := rgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (rgb *RentalGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range rgb.fields { if !rental.ValidColumn(f) { @@ -838,6 +640,7 @@ func (rgb *RentalGroupBy) sqlQuery() *sql.Selector { // RentalSelect is the builder for selecting fields of Rental entities. type RentalSelect struct { *RentalQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -851,201 +654,6 @@ func (rs *RentalSelect) Scan(ctx context.Context, v interface{}) error { return rs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (rs *RentalSelect) ScanX(ctx context.Context, v interface{}) { - if err := rs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (rs *RentalSelect) Strings(ctx context.Context) ([]string, error) { - if len(rs.fields) > 1 { - return nil, errors.New("ent: RentalSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := rs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (rs *RentalSelect) StringsX(ctx context.Context) []string { - v, err := rs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (rs *RentalSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = rs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{rental.Label} - default: - err = fmt.Errorf("ent: RentalSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (rs *RentalSelect) StringX(ctx context.Context) string { - v, err := rs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (rs *RentalSelect) Ints(ctx context.Context) ([]int, error) { - if len(rs.fields) > 1 { - return nil, errors.New("ent: RentalSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := rs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (rs *RentalSelect) IntsX(ctx context.Context) []int { - v, err := rs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (rs *RentalSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = rs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{rental.Label} - default: - err = fmt.Errorf("ent: RentalSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (rs *RentalSelect) IntX(ctx context.Context) int { - v, err := rs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (rs *RentalSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(rs.fields) > 1 { - return nil, errors.New("ent: RentalSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := rs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (rs *RentalSelect) Float64sX(ctx context.Context) []float64 { - v, err := rs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (rs *RentalSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = rs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{rental.Label} - default: - err = fmt.Errorf("ent: RentalSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (rs *RentalSelect) Float64X(ctx context.Context) float64 { - v, err := rs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (rs *RentalSelect) Bools(ctx context.Context) ([]bool, error) { - if len(rs.fields) > 1 { - return nil, errors.New("ent: RentalSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := rs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (rs *RentalSelect) BoolsX(ctx context.Context) []bool { - v, err := rs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (rs *RentalSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = rs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{rental.Label} - default: - err = fmt.Errorf("ent: RentalSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (rs *RentalSelect) BoolX(ctx context.Context) bool { - v, err := rs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (rs *RentalSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := rs.sql.Query() diff --git a/entc/integration/edgefield/ent/user_query.go b/entc/integration/edgefield/ent/user_query.go index 8cb4aab965..fafed2bf03 100644 --- a/entc/integration/edgefield/ent/user_query.go +++ b/entc/integration/edgefield/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -555,15 +554,17 @@ func (uq *UserQuery) WithRentals(opts ...func(*RentalQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -581,7 +582,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -938,6 +942,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -961,209 +966,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -1205,6 +1007,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -1218,201 +1021,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/ent/card_query.go b/entc/integration/ent/card_query.go index d0cef51ed5..420c20f1bf 100644 --- a/entc/integration/ent/card_query.go +++ b/entc/integration/ent/card_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -345,15 +344,17 @@ func (cq *CardQuery) WithSpec(opts ...func(*SpecQuery)) *CardQuery { // Scan(ctx, &v) // func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { - group := &CardGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CardGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = card.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -371,7 +372,10 @@ func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { // func (cq *CardQuery) Select(fields ...string) *CardSelect { cq.fields = append(cq.fields, fields...) - return &CardSelect{CardQuery: cq} + selbuild := &CardSelect{CardQuery: cq} + selbuild.label = card.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CardQuery) prepareQuery(ctx context.Context) error { @@ -664,6 +668,7 @@ func (cq *CardQuery) Modify(modifiers ...func(s *sql.Selector)) *CardSelect { // CardGroupBy is the group-by builder for Card entities. type CardGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -687,209 +692,6 @@ func (cgb *CardGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CardGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CardGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CardGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CardGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CardGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CardGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CardGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CardGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CardGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CardGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !card.ValidColumn(f) { @@ -931,6 +733,7 @@ func (cgb *CardGroupBy) sqlQuery() *sql.Selector { // CardSelect is the builder for selecting fields of Card entities. type CardSelect struct { *CardQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -944,201 +747,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CardSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CardSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CardSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CardSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CardSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/ent/comment_query.go b/entc/integration/ent/comment_query.go index 49f48a5ecf..5e246f33d6 100644 --- a/entc/integration/ent/comment_query.go +++ b/entc/integration/ent/comment_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -270,15 +269,17 @@ func (cq *CommentQuery) Clone() *CommentQuery { // Scan(ctx, &v) // func (cq *CommentQuery) GroupBy(field string, fields ...string) *CommentGroupBy { - group := &CommentGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CommentGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = comment.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -296,7 +297,10 @@ func (cq *CommentQuery) GroupBy(field string, fields ...string) *CommentGroupBy // func (cq *CommentQuery) Select(fields ...string) *CommentSelect { cq.fields = append(cq.fields, fields...) - return &CommentSelect{CommentQuery: cq} + selbuild := &CommentSelect{CommentQuery: cq} + selbuild.label = comment.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CommentQuery) prepareQuery(ctx context.Context) error { @@ -482,6 +486,7 @@ func (cq *CommentQuery) Modify(modifiers ...func(s *sql.Selector)) *CommentSelec // CommentGroupBy is the group-by builder for Comment entities. type CommentGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -505,209 +510,6 @@ func (cgb *CommentGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CommentGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CommentGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CommentGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CommentGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CommentGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CommentGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CommentGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CommentGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CommentGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CommentGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !comment.ValidColumn(f) { @@ -749,6 +551,7 @@ func (cgb *CommentGroupBy) sqlQuery() *sql.Selector { // CommentSelect is the builder for selecting fields of Comment entities. type CommentSelect struct { *CommentQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -762,201 +565,6 @@ func (cs *CommentSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CommentSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CommentSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CommentSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CommentSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CommentSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CommentSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/ent/ent.go b/entc/integration/ent/ent.go index 068a68b73a..b710573bd7 100644 --- a/entc/integration/ent/ent.go +++ b/entc/integration/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -287,3 +288,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/ent/fieldtype_query.go b/entc/integration/ent/fieldtype_query.go index 8f73dc652f..e0d79573dd 100644 --- a/entc/integration/ent/fieldtype_query.go +++ b/entc/integration/ent/fieldtype_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -271,15 +270,17 @@ func (ftq *FieldTypeQuery) Clone() *FieldTypeQuery { // Scan(ctx, &v) // func (ftq *FieldTypeQuery) GroupBy(field string, fields ...string) *FieldTypeGroupBy { - group := &FieldTypeGroupBy{config: ftq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &FieldTypeGroupBy{config: ftq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := ftq.prepareQuery(ctx); err != nil { return nil, err } return ftq.sqlQuery(ctx), nil } - return group + grbuild.label = fieldtype.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -297,7 +298,10 @@ func (ftq *FieldTypeQuery) GroupBy(field string, fields ...string) *FieldTypeGro // func (ftq *FieldTypeQuery) Select(fields ...string) *FieldTypeSelect { ftq.fields = append(ftq.fields, fields...) - return &FieldTypeSelect{FieldTypeQuery: ftq} + selbuild := &FieldTypeSelect{FieldTypeQuery: ftq} + selbuild.label = fieldtype.Label + selbuild.flds, selbuild.scan = &ftq.fields, selbuild.Scan + return selbuild } func (ftq *FieldTypeQuery) prepareQuery(ctx context.Context) error { @@ -487,6 +491,7 @@ func (ftq *FieldTypeQuery) Modify(modifiers ...func(s *sql.Selector)) *FieldType // FieldTypeGroupBy is the group-by builder for FieldType entities. type FieldTypeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -510,209 +515,6 @@ func (ftgb *FieldTypeGroupBy) Scan(ctx context.Context, v interface{}) error { return ftgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ftgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FieldTypeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) StringsX(ctx context.Context) []string { - v, err := ftgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ftgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) StringX(ctx context.Context) string { - v, err := ftgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FieldTypeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) IntsX(ctx context.Context) []int { - v, err := ftgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ftgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) IntX(ctx context.Context) int { - v, err := ftgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FieldTypeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ftgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ftgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ftgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FieldTypeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ftgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ftgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) BoolX(ctx context.Context) bool { - v, err := ftgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ftgb *FieldTypeGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ftgb.fields { if !fieldtype.ValidColumn(f) { @@ -754,6 +556,7 @@ func (ftgb *FieldTypeGroupBy) sqlQuery() *sql.Selector { // FieldTypeSelect is the builder for selecting fields of FieldType entities. type FieldTypeSelect struct { *FieldTypeQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -767,201 +570,6 @@ func (fts *FieldTypeSelect) Scan(ctx context.Context, v interface{}) error { return fts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fts *FieldTypeSelect) ScanX(ctx context.Context, v interface{}) { - if err := fts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Strings(ctx context.Context) ([]string, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FieldTypeSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fts *FieldTypeSelect) StringsX(ctx context.Context) []string { - v, err := fts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fts *FieldTypeSelect) StringX(ctx context.Context) string { - v, err := fts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Ints(ctx context.Context) ([]int, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FieldTypeSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fts *FieldTypeSelect) IntsX(ctx context.Context) []int { - v, err := fts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fts *FieldTypeSelect) IntX(ctx context.Context) int { - v, err := fts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FieldTypeSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fts *FieldTypeSelect) Float64sX(ctx context.Context) []float64 { - v, err := fts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fts *FieldTypeSelect) Float64X(ctx context.Context) float64 { - v, err := fts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Bools(ctx context.Context) ([]bool, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FieldTypeSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fts *FieldTypeSelect) BoolsX(ctx context.Context) []bool { - v, err := fts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fts *FieldTypeSelect) BoolX(ctx context.Context) bool { - v, err := fts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fts *FieldTypeSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := fts.sql.Query() diff --git a/entc/integration/ent/file_query.go b/entc/integration/ent/file_query.go index 966ef19180..6eade95653 100644 --- a/entc/integration/ent/file_query.go +++ b/entc/integration/ent/file_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -381,15 +380,17 @@ func (fq *FileQuery) WithField(opts ...func(*FieldTypeQuery)) *FileQuery { // Scan(ctx, &v) // func (fq *FileQuery) GroupBy(field string, fields ...string) *FileGroupBy { - group := &FileGroupBy{config: fq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &FileGroupBy{config: fq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := fq.prepareQuery(ctx); err != nil { return nil, err } return fq.sqlQuery(ctx), nil } - return group + grbuild.label = file.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -407,7 +408,10 @@ func (fq *FileQuery) GroupBy(field string, fields ...string) *FileGroupBy { // func (fq *FileQuery) Select(fields ...string) *FileSelect { fq.fields = append(fq.fields, fields...) - return &FileSelect{FileQuery: fq} + selbuild := &FileSelect{FileQuery: fq} + selbuild.label = file.Label + selbuild.flds, selbuild.scan = &fq.fields, selbuild.Scan + return selbuild } func (fq *FileQuery) prepareQuery(ctx context.Context) error { @@ -694,6 +698,7 @@ func (fq *FileQuery) Modify(modifiers ...func(s *sql.Selector)) *FileSelect { // FileGroupBy is the group-by builder for File entities. type FileGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -717,209 +722,6 @@ func (fgb *FileGroupBy) Scan(ctx context.Context, v interface{}) error { return fgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fgb *FileGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := fgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fgb *FileGroupBy) StringsX(ctx context.Context) []string { - v, err := fgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fgb *FileGroupBy) StringX(ctx context.Context) string { - v, err := fgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fgb *FileGroupBy) IntsX(ctx context.Context) []int { - v, err := fgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fgb *FileGroupBy) IntX(ctx context.Context) int { - v, err := fgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fgb *FileGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := fgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fgb *FileGroupBy) Float64X(ctx context.Context) float64 { - v, err := fgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fgb *FileGroupBy) BoolsX(ctx context.Context) []bool { - v, err := fgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fgb *FileGroupBy) BoolX(ctx context.Context) bool { - v, err := fgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fgb *FileGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range fgb.fields { if !file.ValidColumn(f) { @@ -961,6 +763,7 @@ func (fgb *FileGroupBy) sqlQuery() *sql.Selector { // FileSelect is the builder for selecting fields of File entities. type FileSelect struct { *FileQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -974,201 +777,6 @@ func (fs *FileSelect) Scan(ctx context.Context, v interface{}) error { return fs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fs *FileSelect) ScanX(ctx context.Context, v interface{}) { - if err := fs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Strings(ctx context.Context) ([]string, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fs *FileSelect) StringsX(ctx context.Context) []string { - v, err := fs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fs *FileSelect) StringX(ctx context.Context) string { - v, err := fs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Ints(ctx context.Context) ([]int, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fs *FileSelect) IntsX(ctx context.Context) []int { - v, err := fs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fs *FileSelect) IntX(ctx context.Context) int { - v, err := fs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fs *FileSelect) Float64sX(ctx context.Context) []float64 { - v, err := fs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fs *FileSelect) Float64X(ctx context.Context) float64 { - v, err := fs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Bools(ctx context.Context) ([]bool, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fs *FileSelect) BoolsX(ctx context.Context) []bool { - v, err := fs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fs *FileSelect) BoolX(ctx context.Context) bool { - v, err := fs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fs *FileSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := fs.sql.Query() diff --git a/entc/integration/ent/filetype_query.go b/entc/integration/ent/filetype_query.go index 82ad861245..9c7fc4223d 100644 --- a/entc/integration/ent/filetype_query.go +++ b/entc/integration/ent/filetype_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -308,15 +307,17 @@ func (ftq *FileTypeQuery) WithFiles(opts ...func(*FileQuery)) *FileTypeQuery { // Scan(ctx, &v) // func (ftq *FileTypeQuery) GroupBy(field string, fields ...string) *FileTypeGroupBy { - group := &FileTypeGroupBy{config: ftq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &FileTypeGroupBy{config: ftq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := ftq.prepareQuery(ctx); err != nil { return nil, err } return ftq.sqlQuery(ctx), nil } - return group + grbuild.label = filetype.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -334,7 +335,10 @@ func (ftq *FileTypeQuery) GroupBy(field string, fields ...string) *FileTypeGroup // func (ftq *FileTypeQuery) Select(fields ...string) *FileTypeSelect { ftq.fields = append(ftq.fields, fields...) - return &FileTypeSelect{FileTypeQuery: ftq} + selbuild := &FileTypeSelect{FileTypeQuery: ftq} + selbuild.label = filetype.Label + selbuild.flds, selbuild.scan = &ftq.fields, selbuild.Scan + return selbuild } func (ftq *FileTypeQuery) prepareQuery(ctx context.Context) error { @@ -554,6 +558,7 @@ func (ftq *FileTypeQuery) Modify(modifiers ...func(s *sql.Selector)) *FileTypeSe // FileTypeGroupBy is the group-by builder for FileType entities. type FileTypeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -577,209 +582,6 @@ func (ftgb *FileTypeGroupBy) Scan(ctx context.Context, v interface{}) error { return ftgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ftgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FileTypeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) StringsX(ctx context.Context) []string { - v, err := ftgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ftgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) StringX(ctx context.Context) string { - v, err := ftgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FileTypeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) IntsX(ctx context.Context) []int { - v, err := ftgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ftgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) IntX(ctx context.Context) int { - v, err := ftgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FileTypeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ftgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ftgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ftgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FileTypeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ftgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ftgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) BoolX(ctx context.Context) bool { - v, err := ftgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ftgb *FileTypeGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ftgb.fields { if !filetype.ValidColumn(f) { @@ -821,6 +623,7 @@ func (ftgb *FileTypeGroupBy) sqlQuery() *sql.Selector { // FileTypeSelect is the builder for selecting fields of FileType entities. type FileTypeSelect struct { *FileTypeQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -834,201 +637,6 @@ func (fts *FileTypeSelect) Scan(ctx context.Context, v interface{}) error { return fts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fts *FileTypeSelect) ScanX(ctx context.Context, v interface{}) { - if err := fts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Strings(ctx context.Context) ([]string, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FileTypeSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fts *FileTypeSelect) StringsX(ctx context.Context) []string { - v, err := fts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fts *FileTypeSelect) StringX(ctx context.Context) string { - v, err := fts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Ints(ctx context.Context) ([]int, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FileTypeSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fts *FileTypeSelect) IntsX(ctx context.Context) []int { - v, err := fts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fts *FileTypeSelect) IntX(ctx context.Context) int { - v, err := fts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FileTypeSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fts *FileTypeSelect) Float64sX(ctx context.Context) []float64 { - v, err := fts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fts *FileTypeSelect) Float64X(ctx context.Context) float64 { - v, err := fts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Bools(ctx context.Context) ([]bool, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FileTypeSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fts *FileTypeSelect) BoolsX(ctx context.Context) []bool { - v, err := fts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fts *FileTypeSelect) BoolX(ctx context.Context) bool { - v, err := fts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fts *FileTypeSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := fts.sql.Query() diff --git a/entc/integration/ent/goods_query.go b/entc/integration/ent/goods_query.go index a23e8c5bf6..37db1699e0 100644 --- a/entc/integration/ent/goods_query.go +++ b/entc/integration/ent/goods_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -257,22 +256,27 @@ func (gq *GoodsQuery) Clone() *GoodsQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (gq *GoodsQuery) GroupBy(field string, fields ...string) *GoodsGroupBy { - group := &GoodsGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GoodsGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = goods.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (gq *GoodsQuery) Select(fields ...string) *GoodsSelect { gq.fields = append(gq.fields, fields...) - return &GoodsSelect{GoodsQuery: gq} + selbuild := &GoodsSelect{GoodsQuery: gq} + selbuild.label = goods.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GoodsQuery) prepareQuery(ctx context.Context) error { @@ -458,6 +462,7 @@ func (gq *GoodsQuery) Modify(modifiers ...func(s *sql.Selector)) *GoodsSelect { // GoodsGroupBy is the group-by builder for Goods entities. type GoodsGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -481,209 +486,6 @@ func (ggb *GoodsGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GoodsGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GoodsGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GoodsGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GoodsGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GoodsGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GoodsGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GoodsGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GoodsGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GoodsGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GoodsGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GoodsGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GoodsGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GoodsGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GoodsGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !goods.ValidColumn(f) { @@ -725,6 +527,7 @@ func (ggb *GoodsGroupBy) sqlQuery() *sql.Selector { // GoodsSelect is the builder for selecting fields of Goods entities. type GoodsSelect struct { *GoodsQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -738,201 +541,6 @@ func (gs *GoodsSelect) Scan(ctx context.Context, v interface{}) error { return gs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (gs *GoodsSelect) ScanX(ctx context.Context, v interface{}) { - if err := gs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Strings(ctx context.Context) ([]string, error) { - if len(gs.fields) > 1 { - return nil, errors.New("ent: GoodsSelect.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 *GoodsSelect) StringsX(ctx context.Context) []string { - v, err := gs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GoodsSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Ints(ctx context.Context) ([]int, error) { - if len(gs.fields) > 1 { - return nil, errors.New("ent: GoodsSelect.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 *GoodsSelect) IntsX(ctx context.Context) []int { - v, err := gs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GoodsSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(gs.fields) > 1 { - return nil, errors.New("ent: GoodsSelect.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 *GoodsSelect) Float64sX(ctx context.Context) []float64 { - v, err := gs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GoodsSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Bools(ctx context.Context) ([]bool, error) { - if len(gs.fields) > 1 { - return nil, errors.New("ent: GoodsSelect.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 *GoodsSelect) BoolsX(ctx context.Context) []bool { - v, err := gs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GoodsSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GoodsSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/entc/integration/ent/group_query.go b/entc/integration/ent/group_query.go index ae745beb7d..5499a9ffba 100644 --- a/entc/integration/ent/group_query.go +++ b/entc/integration/ent/group_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -416,15 +415,17 @@ func (gq *GroupQuery) WithInfo(opts ...func(*GroupInfoQuery)) *GroupQuery { // Scan(ctx, &v) // func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -442,7 +443,10 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { // func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -795,6 +799,7 @@ func (gq *GroupQuery) Modify(modifiers ...func(s *sql.Selector)) *GroupSelect { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -818,209 +823,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -1062,6 +864,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -1075,201 +878,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/entc/integration/ent/groupinfo_query.go b/entc/integration/ent/groupinfo_query.go index 22e5b97b10..125ff24de5 100644 --- a/entc/integration/ent/groupinfo_query.go +++ b/entc/integration/ent/groupinfo_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -308,15 +307,17 @@ func (giq *GroupInfoQuery) WithGroups(opts ...func(*GroupQuery)) *GroupInfoQuery // Scan(ctx, &v) // func (giq *GroupInfoQuery) GroupBy(field string, fields ...string) *GroupInfoGroupBy { - group := &GroupInfoGroupBy{config: giq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupInfoGroupBy{config: giq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := giq.prepareQuery(ctx); err != nil { return nil, err } return giq.sqlQuery(ctx), nil } - return group + grbuild.label = groupinfo.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -334,7 +335,10 @@ func (giq *GroupInfoQuery) GroupBy(field string, fields ...string) *GroupInfoGro // func (giq *GroupInfoQuery) Select(fields ...string) *GroupInfoSelect { giq.fields = append(giq.fields, fields...) - return &GroupInfoSelect{GroupInfoQuery: giq} + selbuild := &GroupInfoSelect{GroupInfoQuery: giq} + selbuild.label = groupinfo.Label + selbuild.flds, selbuild.scan = &giq.fields, selbuild.Scan + return selbuild } func (giq *GroupInfoQuery) prepareQuery(ctx context.Context) error { @@ -554,6 +558,7 @@ func (giq *GroupInfoQuery) Modify(modifiers ...func(s *sql.Selector)) *GroupInfo // GroupInfoGroupBy is the group-by builder for GroupInfo entities. type GroupInfoGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -577,209 +582,6 @@ func (gigb *GroupInfoGroupBy) Scan(ctx context.Context, v interface{}) error { return gigb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := gigb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(gigb.fields) > 1 { - return nil, errors.New("ent: GroupInfoGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := gigb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) StringsX(ctx context.Context) []string { - v, err := gigb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gigb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) StringX(ctx context.Context) string { - v, err := gigb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(gigb.fields) > 1 { - return nil, errors.New("ent: GroupInfoGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := gigb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) IntsX(ctx context.Context) []int { - v, err := gigb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gigb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) IntX(ctx context.Context) int { - v, err := gigb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(gigb.fields) > 1 { - return nil, errors.New("ent: GroupInfoGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := gigb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := gigb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gigb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) Float64X(ctx context.Context) float64 { - v, err := gigb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(gigb.fields) > 1 { - return nil, errors.New("ent: GroupInfoGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := gigb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) BoolsX(ctx context.Context) []bool { - v, err := gigb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gigb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) BoolX(ctx context.Context) bool { - v, err := gigb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gigb *GroupInfoGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range gigb.fields { if !groupinfo.ValidColumn(f) { @@ -821,6 +623,7 @@ func (gigb *GroupInfoGroupBy) sqlQuery() *sql.Selector { // GroupInfoSelect is the builder for selecting fields of GroupInfo entities. type GroupInfoSelect struct { *GroupInfoQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -834,201 +637,6 @@ func (gis *GroupInfoSelect) Scan(ctx context.Context, v interface{}) error { return gis.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (gis *GroupInfoSelect) ScanX(ctx context.Context, v interface{}) { - if err := gis.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Strings(ctx context.Context) ([]string, error) { - if len(gis.fields) > 1 { - return nil, errors.New("ent: GroupInfoSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := gis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (gis *GroupInfoSelect) StringsX(ctx context.Context) []string { - v, err := gis.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gis.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gis *GroupInfoSelect) StringX(ctx context.Context) string { - v, err := gis.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Ints(ctx context.Context) ([]int, error) { - if len(gis.fields) > 1 { - return nil, errors.New("ent: GroupInfoSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := gis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (gis *GroupInfoSelect) IntsX(ctx context.Context) []int { - v, err := gis.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gis.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gis *GroupInfoSelect) IntX(ctx context.Context) int { - v, err := gis.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(gis.fields) > 1 { - return nil, errors.New("ent: GroupInfoSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := gis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (gis *GroupInfoSelect) Float64sX(ctx context.Context) []float64 { - v, err := gis.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gis.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gis *GroupInfoSelect) Float64X(ctx context.Context) float64 { - v, err := gis.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Bools(ctx context.Context) ([]bool, error) { - if len(gis.fields) > 1 { - return nil, errors.New("ent: GroupInfoSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := gis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (gis *GroupInfoSelect) BoolsX(ctx context.Context) []bool { - v, err := gis.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gis.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gis *GroupInfoSelect) BoolX(ctx context.Context) bool { - v, err := gis.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gis *GroupInfoSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gis.sql.Query() diff --git a/entc/integration/ent/item_query.go b/entc/integration/ent/item_query.go index 3a7f97c4d1..32fdfa76a5 100644 --- a/entc/integration/ent/item_query.go +++ b/entc/integration/ent/item_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -270,15 +269,17 @@ func (iq *ItemQuery) Clone() *ItemQuery { // Scan(ctx, &v) // func (iq *ItemQuery) GroupBy(field string, fields ...string) *ItemGroupBy { - group := &ItemGroupBy{config: iq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &ItemGroupBy{config: iq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := iq.prepareQuery(ctx); err != nil { return nil, err } return iq.sqlQuery(ctx), nil } - return group + grbuild.label = item.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -296,7 +297,10 @@ func (iq *ItemQuery) GroupBy(field string, fields ...string) *ItemGroupBy { // func (iq *ItemQuery) Select(fields ...string) *ItemSelect { iq.fields = append(iq.fields, fields...) - return &ItemSelect{ItemQuery: iq} + selbuild := &ItemSelect{ItemQuery: iq} + selbuild.label = item.Label + selbuild.flds, selbuild.scan = &iq.fields, selbuild.Scan + return selbuild } func (iq *ItemQuery) prepareQuery(ctx context.Context) error { @@ -482,6 +486,7 @@ func (iq *ItemQuery) Modify(modifiers ...func(s *sql.Selector)) *ItemSelect { // ItemGroupBy is the group-by builder for Item entities. type ItemGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -505,209 +510,6 @@ func (igb *ItemGroupBy) Scan(ctx context.Context, v interface{}) error { return igb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (igb *ItemGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := igb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: ItemGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (igb *ItemGroupBy) StringsX(ctx context.Context) []string { - v, err := igb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = igb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (igb *ItemGroupBy) StringX(ctx context.Context) string { - v, err := igb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: ItemGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (igb *ItemGroupBy) IntsX(ctx context.Context) []int { - v, err := igb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = igb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (igb *ItemGroupBy) IntX(ctx context.Context) int { - v, err := igb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: ItemGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (igb *ItemGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := igb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = igb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (igb *ItemGroupBy) Float64X(ctx context.Context) float64 { - v, err := igb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: ItemGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (igb *ItemGroupBy) BoolsX(ctx context.Context) []bool { - v, err := igb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = igb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (igb *ItemGroupBy) BoolX(ctx context.Context) bool { - v, err := igb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (igb *ItemGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range igb.fields { if !item.ValidColumn(f) { @@ -749,6 +551,7 @@ func (igb *ItemGroupBy) sqlQuery() *sql.Selector { // ItemSelect is the builder for selecting fields of Item entities. type ItemSelect struct { *ItemQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -762,201 +565,6 @@ func (is *ItemSelect) Scan(ctx context.Context, v interface{}) error { return is.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (is *ItemSelect) ScanX(ctx context.Context, v interface{}) { - if err := is.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Strings(ctx context.Context) ([]string, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: ItemSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (is *ItemSelect) StringsX(ctx context.Context) []string { - v, err := is.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = is.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (is *ItemSelect) StringX(ctx context.Context) string { - v, err := is.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Ints(ctx context.Context) ([]int, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: ItemSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (is *ItemSelect) IntsX(ctx context.Context) []int { - v, err := is.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = is.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (is *ItemSelect) IntX(ctx context.Context) int { - v, err := is.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: ItemSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (is *ItemSelect) Float64sX(ctx context.Context) []float64 { - v, err := is.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = is.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (is *ItemSelect) Float64X(ctx context.Context) float64 { - v, err := is.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Bools(ctx context.Context) ([]bool, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: ItemSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (is *ItemSelect) BoolsX(ctx context.Context) []bool { - v, err := is.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = is.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (is *ItemSelect) BoolX(ctx context.Context) bool { - v, err := is.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (is *ItemSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := is.sql.Query() diff --git a/entc/integration/ent/node_query.go b/entc/integration/ent/node_query.go index 4259ae939e..ca0a580838 100644 --- a/entc/integration/ent/node_query.go +++ b/entc/integration/ent/node_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -343,15 +342,17 @@ func (nq *NodeQuery) WithNext(opts ...func(*NodeQuery)) *NodeQuery { // Scan(ctx, &v) // func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { - group := &NodeGroupBy{config: nq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &NodeGroupBy{config: nq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := nq.prepareQuery(ctx); err != nil { return nil, err } return nq.sqlQuery(ctx), nil } - return group + grbuild.label = node.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -369,7 +370,10 @@ func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { // func (nq *NodeQuery) Select(fields ...string) *NodeSelect { nq.fields = append(nq.fields, fields...) - return &NodeSelect{NodeQuery: nq} + selbuild := &NodeSelect{NodeQuery: nq} + selbuild.label = node.Label + selbuild.flds, selbuild.scan = &nq.fields, selbuild.Scan + return selbuild } func (nq *NodeQuery) prepareQuery(ctx context.Context) error { @@ -625,6 +629,7 @@ func (nq *NodeQuery) Modify(modifiers ...func(s *sql.Selector)) *NodeSelect { // NodeGroupBy is the group-by builder for Node entities. type NodeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -648,209 +653,6 @@ func (ngb *NodeGroupBy) Scan(ctx context.Context, v interface{}) error { return ngb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ngb *NodeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ngb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ngb *NodeGroupBy) StringsX(ctx context.Context) []string { - v, err := ngb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ngb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ngb *NodeGroupBy) StringX(ctx context.Context) string { - v, err := ngb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ngb *NodeGroupBy) IntsX(ctx context.Context) []int { - v, err := ngb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ngb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ngb *NodeGroupBy) IntX(ctx context.Context) int { - v, err := ngb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ngb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ngb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ngb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ngb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ngb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolX(ctx context.Context) bool { - v, err := ngb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ngb *NodeGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ngb.fields { if !node.ValidColumn(f) { @@ -892,6 +694,7 @@ func (ngb *NodeGroupBy) sqlQuery() *sql.Selector { // NodeSelect is the builder for selecting fields of Node entities. type NodeSelect struct { *NodeQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -905,201 +708,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ns.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ns *NodeSelect) StringX(ctx context.Context) string { - v, err := ns.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ns.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ns *NodeSelect) IntX(ctx context.Context) int { - v, err := ns.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ns.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ns *NodeSelect) Float64X(ctx context.Context) float64 { - v, err := ns.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ns.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ns *NodeSelect) BoolX(ctx context.Context) bool { - v, err := ns.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ns *NodeSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ns.sql.Query() diff --git a/entc/integration/ent/pet_query.go b/entc/integration/ent/pet_query.go index 11a9406e4a..6816719bb0 100644 --- a/entc/integration/ent/pet_query.go +++ b/entc/integration/ent/pet_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -343,15 +342,17 @@ func (pq *PetQuery) WithOwner(opts ...func(*UserQuery)) *PetQuery { // Scan(ctx, &v) // func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -369,7 +370,10 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { // func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -626,6 +630,7 @@ func (pq *PetQuery) Modify(modifiers ...func(s *sql.Selector)) *PetSelect { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -649,209 +654,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !pet.ValidColumn(f) { @@ -893,6 +695,7 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -906,201 +709,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/entc/integration/ent/spec_query.go b/entc/integration/ent/spec_query.go index eacde981b6..a3f62d1b4a 100644 --- a/entc/integration/ent/spec_query.go +++ b/entc/integration/ent/spec_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -295,22 +294,27 @@ func (sq *SpecQuery) WithCard(opts ...func(*CardQuery)) *SpecQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (sq *SpecQuery) GroupBy(field string, fields ...string) *SpecGroupBy { - group := &SpecGroupBy{config: sq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &SpecGroupBy{config: sq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := sq.prepareQuery(ctx); err != nil { return nil, err } return sq.sqlQuery(ctx), nil } - return group + grbuild.label = spec.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (sq *SpecQuery) Select(fields ...string) *SpecSelect { sq.fields = append(sq.fields, fields...) - return &SpecSelect{SpecQuery: sq} + selbuild := &SpecSelect{SpecQuery: sq} + selbuild.label = spec.Label + selbuild.flds, selbuild.scan = &sq.fields, selbuild.Scan + return selbuild } func (sq *SpecQuery) prepareQuery(ctx context.Context) error { @@ -566,6 +570,7 @@ func (sq *SpecQuery) Modify(modifiers ...func(s *sql.Selector)) *SpecSelect { // SpecGroupBy is the group-by builder for Spec entities. type SpecGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -589,209 +594,6 @@ func (sgb *SpecGroupBy) Scan(ctx context.Context, v interface{}) error { return sgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (sgb *SpecGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := sgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SpecGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (sgb *SpecGroupBy) StringsX(ctx context.Context) []string { - v, err := sgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = sgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (sgb *SpecGroupBy) StringX(ctx context.Context) string { - v, err := sgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SpecGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (sgb *SpecGroupBy) IntsX(ctx context.Context) []int { - v, err := sgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = sgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (sgb *SpecGroupBy) IntX(ctx context.Context) int { - v, err := sgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SpecGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (sgb *SpecGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := sgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = sgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (sgb *SpecGroupBy) Float64X(ctx context.Context) float64 { - v, err := sgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SpecGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (sgb *SpecGroupBy) BoolsX(ctx context.Context) []bool { - v, err := sgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = sgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (sgb *SpecGroupBy) BoolX(ctx context.Context) bool { - v, err := sgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (sgb *SpecGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range sgb.fields { if !spec.ValidColumn(f) { @@ -833,6 +635,7 @@ func (sgb *SpecGroupBy) sqlQuery() *sql.Selector { // SpecSelect is the builder for selecting fields of Spec entities. type SpecSelect struct { *SpecQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -846,201 +649,6 @@ func (ss *SpecSelect) Scan(ctx context.Context, v interface{}) error { return ss.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ss *SpecSelect) ScanX(ctx context.Context, v interface{}) { - if err := ss.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Strings(ctx context.Context) ([]string, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SpecSelect.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 *SpecSelect) StringsX(ctx context.Context) []string { - v, err := ss.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ss.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ss *SpecSelect) StringX(ctx context.Context) string { - v, err := ss.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Ints(ctx context.Context) ([]int, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SpecSelect.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 *SpecSelect) IntsX(ctx context.Context) []int { - v, err := ss.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ss.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ss *SpecSelect) IntX(ctx context.Context) int { - v, err := ss.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SpecSelect.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 *SpecSelect) Float64sX(ctx context.Context) []float64 { - v, err := ss.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ss.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ss *SpecSelect) Float64X(ctx context.Context) float64 { - v, err := ss.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SpecSelect.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 *SpecSelect) BoolsX(ctx context.Context) []bool { - v, err := ss.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ss.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ss *SpecSelect) BoolX(ctx context.Context) bool { - v, err := ss.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ss *SpecSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ss.sql.Query() diff --git a/entc/integration/ent/task_query.go b/entc/integration/ent/task_query.go index c3d8fae0ee..841dd8131a 100644 --- a/entc/integration/ent/task_query.go +++ b/entc/integration/ent/task_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -271,15 +270,17 @@ func (tq *TaskQuery) Clone() *TaskQuery { // Scan(ctx, &v) // func (tq *TaskQuery) GroupBy(field string, fields ...string) *TaskGroupBy { - group := &TaskGroupBy{config: tq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &TaskGroupBy{config: tq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := tq.prepareQuery(ctx); err != nil { return nil, err } return tq.sqlQuery(ctx), nil } - return group + grbuild.label = enttask.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -297,7 +298,10 @@ func (tq *TaskQuery) GroupBy(field string, fields ...string) *TaskGroupBy { // func (tq *TaskQuery) Select(fields ...string) *TaskSelect { tq.fields = append(tq.fields, fields...) - return &TaskSelect{TaskQuery: tq} + selbuild := &TaskSelect{TaskQuery: tq} + selbuild.label = enttask.Label + selbuild.flds, selbuild.scan = &tq.fields, selbuild.Scan + return selbuild } func (tq *TaskQuery) prepareQuery(ctx context.Context) error { @@ -483,6 +487,7 @@ func (tq *TaskQuery) Modify(modifiers ...func(s *sql.Selector)) *TaskSelect { // TaskGroupBy is the group-by builder for Task entities. type TaskGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -506,209 +511,6 @@ func (tgb *TaskGroupBy) Scan(ctx context.Context, v interface{}) error { return tgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (tgb *TaskGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := tgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (tgb *TaskGroupBy) StringsX(ctx context.Context) []string { - v, err := tgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = tgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (tgb *TaskGroupBy) StringX(ctx context.Context) string { - v, err := tgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (tgb *TaskGroupBy) IntsX(ctx context.Context) []int { - v, err := tgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = tgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (tgb *TaskGroupBy) IntX(ctx context.Context) int { - v, err := tgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (tgb *TaskGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := tgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = tgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (tgb *TaskGroupBy) Float64X(ctx context.Context) float64 { - v, err := tgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (tgb *TaskGroupBy) BoolsX(ctx context.Context) []bool { - v, err := tgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = tgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (tgb *TaskGroupBy) BoolX(ctx context.Context) bool { - v, err := tgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (tgb *TaskGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range tgb.fields { if !enttask.ValidColumn(f) { @@ -750,6 +552,7 @@ func (tgb *TaskGroupBy) sqlQuery() *sql.Selector { // TaskSelect is the builder for selecting fields of Task entities. type TaskSelect struct { *TaskQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -763,201 +566,6 @@ func (ts *TaskSelect) Scan(ctx context.Context, v interface{}) error { return ts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ts *TaskSelect) ScanX(ctx context.Context, v interface{}) { - if err := ts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Strings(ctx context.Context) ([]string, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ts *TaskSelect) StringsX(ctx context.Context) []string { - v, err := ts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ts *TaskSelect) StringX(ctx context.Context) string { - v, err := ts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Ints(ctx context.Context) ([]int, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ts *TaskSelect) IntsX(ctx context.Context) []int { - v, err := ts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ts *TaskSelect) IntX(ctx context.Context) int { - v, err := ts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ts *TaskSelect) Float64sX(ctx context.Context) []float64 { - v, err := ts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ts *TaskSelect) Float64X(ctx context.Context) float64 { - v, err := ts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ts *TaskSelect) BoolsX(ctx context.Context) []bool { - v, err := ts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ts *TaskSelect) BoolX(ctx context.Context) bool { - v, err := ts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ts *TaskSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ts.sql.Query() diff --git a/entc/integration/ent/user_query.go b/entc/integration/ent/user_query.go index b2a39730e0..aa0f5f7c4a 100644 --- a/entc/integration/ent/user_query.go +++ b/entc/integration/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -662,15 +661,17 @@ func (uq *UserQuery) WithParent(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -688,7 +689,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -1357,6 +1361,7 @@ func (uq *UserQuery) Modify(modifiers ...func(s *sql.Selector)) *UserSelect { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -1380,209 +1385,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -1624,6 +1426,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -1637,201 +1440,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/gremlin/ent/card_query.go b/entc/integration/gremlin/ent/card_query.go index 834a5c1c82..ac18d78287 100644 --- a/entc/integration/gremlin/ent/card_query.go +++ b/entc/integration/gremlin/ent/card_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -326,15 +324,17 @@ func (cq *CardQuery) WithSpec(opts ...func(*SpecQuery)) *CardQuery { // Scan(ctx, &v) // func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { - group := &CardGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &CardGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.gremlinQuery(ctx), nil } - return group + grbuild.label = card.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -352,7 +352,10 @@ func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { // func (cq *CardQuery) Select(fields ...string) *CardSelect { cq.fields = append(cq.fields, fields...) - return &CardSelect{CardQuery: cq} + selbuild := &CardSelect{CardQuery: cq} + selbuild.label = card.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CardQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +442,7 @@ func (cq *CardQuery) gremlinQuery(context.Context) *dsl.Traversal { // CardGroupBy is the group-by builder for Card entities. type CardGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +466,6 @@ func (cgb *CardGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CardGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CardGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CardGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CardGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CardGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CardGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CardGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CardGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CardGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CardGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := cgb.gremlinQuery().Query() @@ -705,6 +506,7 @@ func (cgb *CardGroupBy) gremlinQuery() *dsl.Traversal { // CardSelect is the builder for selecting fields of Card entities. type CardSelect struct { *CardQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -718,201 +520,6 @@ func (cs *CardSelect) Scan(ctx context.Context, v interface{}) error { return cs.gremlinScan(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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CardSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CardSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CardSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CardSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CardSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/comment_query.go b/entc/integration/gremlin/ent/comment_query.go index 3b2f03d150..36831ec130 100644 --- a/entc/integration/gremlin/ent/comment_query.go +++ b/entc/integration/gremlin/ent/comment_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -269,15 +267,17 @@ func (cq *CommentQuery) Clone() *CommentQuery { // Scan(ctx, &v) // func (cq *CommentQuery) GroupBy(field string, fields ...string) *CommentGroupBy { - group := &CommentGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &CommentGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.gremlinQuery(ctx), nil } - return group + grbuild.label = comment.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -295,7 +295,10 @@ func (cq *CommentQuery) GroupBy(field string, fields ...string) *CommentGroupBy // func (cq *CommentQuery) Select(fields ...string) *CommentSelect { cq.fields = append(cq.fields, fields...) - return &CommentSelect{CommentQuery: cq} + selbuild := &CommentSelect{CommentQuery: cq} + selbuild.label = comment.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CommentQuery) prepareQuery(ctx context.Context) error { @@ -382,6 +385,7 @@ func (cq *CommentQuery) gremlinQuery(context.Context) *dsl.Traversal { // CommentGroupBy is the group-by builder for Comment entities. type CommentGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -405,209 +409,6 @@ func (cgb *CommentGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CommentGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CommentGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CommentGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CommentGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CommentGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CommentGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CommentGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CommentGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CommentGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CommentGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CommentGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CommentGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := cgb.gremlinQuery().Query() @@ -648,6 +449,7 @@ func (cgb *CommentGroupBy) gremlinQuery() *dsl.Traversal { // CommentSelect is the builder for selecting fields of Comment entities. type CommentSelect struct { *CommentQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -661,201 +463,6 @@ func (cs *CommentSelect) Scan(ctx context.Context, v interface{}) error { return cs.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CommentSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CommentSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CommentSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CommentSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CommentSelect.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 *CommentSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CommentSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{comment.Label} - default: - err = fmt.Errorf("ent: CommentSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CommentSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CommentSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/ent.go b/entc/integration/gremlin/ent/ent.go index 898d3bf423..35c86d6c3c 100644 --- a/entc/integration/gremlin/ent/ent.go +++ b/entc/integration/gremlin/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" "strconv" @@ -266,6 +267,208 @@ func IsConstraintError(err error) bool { return errors.As(err, &e) } +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} + // Code implements the dsl.Node interface. func (e ConstraintError) Code() (string, []interface{}) { return strconv.Quote(e.prefix() + e.msg), nil diff --git a/entc/integration/gremlin/ent/fieldtype_query.go b/entc/integration/gremlin/ent/fieldtype_query.go index 39ab1e739a..05cf6d1753 100644 --- a/entc/integration/gremlin/ent/fieldtype_query.go +++ b/entc/integration/gremlin/ent/fieldtype_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -269,15 +267,17 @@ func (ftq *FieldTypeQuery) Clone() *FieldTypeQuery { // Scan(ctx, &v) // func (ftq *FieldTypeQuery) GroupBy(field string, fields ...string) *FieldTypeGroupBy { - group := &FieldTypeGroupBy{config: ftq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &FieldTypeGroupBy{config: ftq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := ftq.prepareQuery(ctx); err != nil { return nil, err } return ftq.gremlinQuery(ctx), nil } - return group + grbuild.label = fieldtype.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -295,7 +295,10 @@ func (ftq *FieldTypeQuery) GroupBy(field string, fields ...string) *FieldTypeGro // func (ftq *FieldTypeQuery) Select(fields ...string) *FieldTypeSelect { ftq.fields = append(ftq.fields, fields...) - return &FieldTypeSelect{FieldTypeQuery: ftq} + selbuild := &FieldTypeSelect{FieldTypeQuery: ftq} + selbuild.label = fieldtype.Label + selbuild.flds, selbuild.scan = &ftq.fields, selbuild.Scan + return selbuild } func (ftq *FieldTypeQuery) prepareQuery(ctx context.Context) error { @@ -382,6 +385,7 @@ func (ftq *FieldTypeQuery) gremlinQuery(context.Context) *dsl.Traversal { // FieldTypeGroupBy is the group-by builder for FieldType entities. type FieldTypeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -405,209 +409,6 @@ func (ftgb *FieldTypeGroupBy) Scan(ctx context.Context, v interface{}) error { return ftgb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ftgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FieldTypeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) StringsX(ctx context.Context) []string { - v, err := ftgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ftgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) StringX(ctx context.Context) string { - v, err := ftgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FieldTypeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) IntsX(ctx context.Context) []int { - v, err := ftgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ftgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) IntX(ctx context.Context) int { - v, err := ftgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FieldTypeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ftgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ftgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ftgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FieldTypeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ftgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FieldTypeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ftgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ftgb *FieldTypeGroupBy) BoolX(ctx context.Context) bool { - v, err := ftgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ftgb *FieldTypeGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := ftgb.gremlinQuery().Query() @@ -648,6 +449,7 @@ func (ftgb *FieldTypeGroupBy) gremlinQuery() *dsl.Traversal { // FieldTypeSelect is the builder for selecting fields of FieldType entities. type FieldTypeSelect struct { *FieldTypeQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -661,201 +463,6 @@ func (fts *FieldTypeSelect) Scan(ctx context.Context, v interface{}) error { return fts.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fts *FieldTypeSelect) ScanX(ctx context.Context, v interface{}) { - if err := fts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Strings(ctx context.Context) ([]string, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FieldTypeSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fts *FieldTypeSelect) StringsX(ctx context.Context) []string { - v, err := fts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fts *FieldTypeSelect) StringX(ctx context.Context) string { - v, err := fts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Ints(ctx context.Context) ([]int, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FieldTypeSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fts *FieldTypeSelect) IntsX(ctx context.Context) []int { - v, err := fts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fts *FieldTypeSelect) IntX(ctx context.Context) int { - v, err := fts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FieldTypeSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fts *FieldTypeSelect) Float64sX(ctx context.Context) []float64 { - v, err := fts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fts *FieldTypeSelect) Float64X(ctx context.Context) float64 { - v, err := fts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Bools(ctx context.Context) ([]bool, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FieldTypeSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fts *FieldTypeSelect) BoolsX(ctx context.Context) []bool { - v, err := fts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (fts *FieldTypeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{fieldtype.Label} - default: - err = fmt.Errorf("ent: FieldTypeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fts *FieldTypeSelect) BoolX(ctx context.Context) bool { - v, err := fts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fts *FieldTypeSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/file_query.go b/entc/integration/gremlin/ent/file_query.go index 8c35e695c8..222f51057a 100644 --- a/entc/integration/gremlin/ent/file_query.go +++ b/entc/integration/gremlin/ent/file_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -353,15 +351,17 @@ func (fq *FileQuery) WithField(opts ...func(*FieldTypeQuery)) *FileQuery { // Scan(ctx, &v) // func (fq *FileQuery) GroupBy(field string, fields ...string) *FileGroupBy { - group := &FileGroupBy{config: fq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &FileGroupBy{config: fq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := fq.prepareQuery(ctx); err != nil { return nil, err } return fq.gremlinQuery(ctx), nil } - return group + grbuild.label = file.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -379,7 +379,10 @@ func (fq *FileQuery) GroupBy(field string, fields ...string) *FileGroupBy { // func (fq *FileQuery) Select(fields ...string) *FileSelect { fq.fields = append(fq.fields, fields...) - return &FileSelect{FileQuery: fq} + selbuild := &FileSelect{FileQuery: fq} + selbuild.label = file.Label + selbuild.flds, selbuild.scan = &fq.fields, selbuild.Scan + return selbuild } func (fq *FileQuery) prepareQuery(ctx context.Context) error { @@ -466,6 +469,7 @@ func (fq *FileQuery) gremlinQuery(context.Context) *dsl.Traversal { // FileGroupBy is the group-by builder for File entities. type FileGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -489,209 +493,6 @@ func (fgb *FileGroupBy) Scan(ctx context.Context, v interface{}) error { return fgb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fgb *FileGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := fgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fgb *FileGroupBy) StringsX(ctx context.Context) []string { - v, err := fgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fgb *FileGroupBy) StringX(ctx context.Context) string { - v, err := fgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fgb *FileGroupBy) IntsX(ctx context.Context) []int { - v, err := fgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fgb *FileGroupBy) IntX(ctx context.Context) int { - v, err := fgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fgb *FileGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := fgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fgb *FileGroupBy) Float64X(ctx context.Context) float64 { - v, err := fgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fgb *FileGroupBy) BoolsX(ctx context.Context) []bool { - v, err := fgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fgb *FileGroupBy) BoolX(ctx context.Context) bool { - v, err := fgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fgb *FileGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := fgb.gremlinQuery().Query() @@ -732,6 +533,7 @@ func (fgb *FileGroupBy) gremlinQuery() *dsl.Traversal { // FileSelect is the builder for selecting fields of File entities. type FileSelect struct { *FileQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -745,201 +547,6 @@ func (fs *FileSelect) Scan(ctx context.Context, v interface{}) error { return fs.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fs *FileSelect) ScanX(ctx context.Context, v interface{}) { - if err := fs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Strings(ctx context.Context) ([]string, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fs *FileSelect) StringsX(ctx context.Context) []string { - v, err := fs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fs *FileSelect) StringX(ctx context.Context) string { - v, err := fs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Ints(ctx context.Context) ([]int, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fs *FileSelect) IntsX(ctx context.Context) []int { - v, err := fs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fs *FileSelect) IntX(ctx context.Context) int { - v, err := fs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fs *FileSelect) Float64sX(ctx context.Context) []float64 { - v, err := fs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fs *FileSelect) Float64X(ctx context.Context) float64 { - v, err := fs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Bools(ctx context.Context) ([]bool, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fs *FileSelect) BoolsX(ctx context.Context) []bool { - v, err := fs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fs *FileSelect) BoolX(ctx context.Context) bool { - v, err := fs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fs *FileSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/filetype_query.go b/entc/integration/gremlin/ent/filetype_query.go index 52714645ff..c4b92a6af5 100644 --- a/entc/integration/gremlin/ent/filetype_query.go +++ b/entc/integration/gremlin/ent/filetype_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -297,15 +295,17 @@ func (ftq *FileTypeQuery) WithFiles(opts ...func(*FileQuery)) *FileTypeQuery { // Scan(ctx, &v) // func (ftq *FileTypeQuery) GroupBy(field string, fields ...string) *FileTypeGroupBy { - group := &FileTypeGroupBy{config: ftq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &FileTypeGroupBy{config: ftq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := ftq.prepareQuery(ctx); err != nil { return nil, err } return ftq.gremlinQuery(ctx), nil } - return group + grbuild.label = filetype.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -323,7 +323,10 @@ func (ftq *FileTypeQuery) GroupBy(field string, fields ...string) *FileTypeGroup // func (ftq *FileTypeQuery) Select(fields ...string) *FileTypeSelect { ftq.fields = append(ftq.fields, fields...) - return &FileTypeSelect{FileTypeQuery: ftq} + selbuild := &FileTypeSelect{FileTypeQuery: ftq} + selbuild.label = filetype.Label + selbuild.flds, selbuild.scan = &ftq.fields, selbuild.Scan + return selbuild } func (ftq *FileTypeQuery) prepareQuery(ctx context.Context) error { @@ -410,6 +413,7 @@ func (ftq *FileTypeQuery) gremlinQuery(context.Context) *dsl.Traversal { // FileTypeGroupBy is the group-by builder for FileType entities. type FileTypeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -433,209 +437,6 @@ func (ftgb *FileTypeGroupBy) Scan(ctx context.Context, v interface{}) error { return ftgb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ftgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FileTypeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) StringsX(ctx context.Context) []string { - v, err := ftgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ftgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) StringX(ctx context.Context) string { - v, err := ftgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FileTypeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) IntsX(ctx context.Context) []int { - v, err := ftgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ftgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) IntX(ctx context.Context) int { - v, err := ftgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FileTypeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ftgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ftgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ftgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ftgb.fields) > 1 { - return nil, errors.New("ent: FileTypeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ftgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ftgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ftgb *FileTypeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ftgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ftgb *FileTypeGroupBy) BoolX(ctx context.Context) bool { - v, err := ftgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ftgb *FileTypeGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := ftgb.gremlinQuery().Query() @@ -676,6 +477,7 @@ func (ftgb *FileTypeGroupBy) gremlinQuery() *dsl.Traversal { // FileTypeSelect is the builder for selecting fields of FileType entities. type FileTypeSelect struct { *FileTypeQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -689,201 +491,6 @@ func (fts *FileTypeSelect) Scan(ctx context.Context, v interface{}) error { return fts.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fts *FileTypeSelect) ScanX(ctx context.Context, v interface{}) { - if err := fts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Strings(ctx context.Context) ([]string, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FileTypeSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fts *FileTypeSelect) StringsX(ctx context.Context) []string { - v, err := fts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fts *FileTypeSelect) StringX(ctx context.Context) string { - v, err := fts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Ints(ctx context.Context) ([]int, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FileTypeSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fts *FileTypeSelect) IntsX(ctx context.Context) []int { - v, err := fts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fts *FileTypeSelect) IntX(ctx context.Context) int { - v, err := fts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FileTypeSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fts *FileTypeSelect) Float64sX(ctx context.Context) []float64 { - v, err := fts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fts *FileTypeSelect) Float64X(ctx context.Context) float64 { - v, err := fts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Bools(ctx context.Context) ([]bool, error) { - if len(fts.fields) > 1 { - return nil, errors.New("ent: FileTypeSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := fts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fts *FileTypeSelect) BoolsX(ctx context.Context) []bool { - v, err := fts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (fts *FileTypeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{filetype.Label} - default: - err = fmt.Errorf("ent: FileTypeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fts *FileTypeSelect) BoolX(ctx context.Context) bool { - v, err := fts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fts *FileTypeSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/goods_query.go b/entc/integration/gremlin/ent/goods_query.go index c848a461b8..f9b4e17c0e 100644 --- a/entc/integration/gremlin/ent/goods_query.go +++ b/entc/integration/gremlin/ent/goods_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -256,22 +254,27 @@ func (gq *GoodsQuery) Clone() *GoodsQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (gq *GoodsQuery) GroupBy(field string, fields ...string) *GoodsGroupBy { - group := &GoodsGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &GoodsGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.gremlinQuery(ctx), nil } - return group + grbuild.label = goods.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (gq *GoodsQuery) Select(fields ...string) *GoodsSelect { gq.fields = append(gq.fields, fields...) - return &GoodsSelect{GoodsQuery: gq} + selbuild := &GoodsSelect{GoodsQuery: gq} + selbuild.label = goods.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GoodsQuery) prepareQuery(ctx context.Context) error { @@ -358,6 +361,7 @@ func (gq *GoodsQuery) gremlinQuery(context.Context) *dsl.Traversal { // GoodsGroupBy is the group-by builder for Goods entities. type GoodsGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -381,209 +385,6 @@ func (ggb *GoodsGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GoodsGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GoodsGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GoodsGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GoodsGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GoodsGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GoodsGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GoodsGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GoodsGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GoodsGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GoodsGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GoodsGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GoodsGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GoodsGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GoodsGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GoodsGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := ggb.gremlinQuery().Query() @@ -624,6 +425,7 @@ func (ggb *GoodsGroupBy) gremlinQuery() *dsl.Traversal { // GoodsSelect is the builder for selecting fields of Goods entities. type GoodsSelect struct { *GoodsQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -637,201 +439,6 @@ func (gs *GoodsSelect) Scan(ctx context.Context, v interface{}) error { return gs.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (gs *GoodsSelect) ScanX(ctx context.Context, v interface{}) { - if err := gs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Strings(ctx context.Context) ([]string, error) { - if len(gs.fields) > 1 { - return nil, errors.New("ent: GoodsSelect.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 *GoodsSelect) StringsX(ctx context.Context) []string { - v, err := gs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GoodsSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Ints(ctx context.Context) ([]int, error) { - if len(gs.fields) > 1 { - return nil, errors.New("ent: GoodsSelect.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 *GoodsSelect) IntsX(ctx context.Context) []int { - v, err := gs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GoodsSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(gs.fields) > 1 { - return nil, errors.New("ent: GoodsSelect.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 *GoodsSelect) Float64sX(ctx context.Context) []float64 { - v, err := gs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GoodsSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Bools(ctx context.Context) ([]bool, error) { - if len(gs.fields) > 1 { - return nil, errors.New("ent: GoodsSelect.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 *GoodsSelect) BoolsX(ctx context.Context) []bool { - v, err := gs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GoodsSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{goods.Label} - default: - err = fmt.Errorf("ent: GoodsSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GoodsSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GoodsSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/group_query.go b/entc/integration/gremlin/ent/group_query.go index 9da557ae03..f03102c69c 100644 --- a/entc/integration/gremlin/ent/group_query.go +++ b/entc/integration/gremlin/ent/group_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -379,15 +377,17 @@ func (gq *GroupQuery) WithInfo(opts ...func(*GroupInfoQuery)) *GroupQuery { // Scan(ctx, &v) // func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.gremlinQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -405,7 +405,10 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { // func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -492,6 +495,7 @@ func (gq *GroupQuery) gremlinQuery(context.Context) *dsl.Traversal { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -515,209 +519,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := ggb.gremlinQuery().Query() @@ -758,6 +559,7 @@ func (ggb *GroupGroupBy) gremlinQuery() *dsl.Traversal { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -771,201 +573,6 @@ func (gs *GroupSelect) Scan(ctx context.Context, v interface{}) error { return gs.gremlinScan(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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/groupinfo_query.go b/entc/integration/gremlin/ent/groupinfo_query.go index 927763ecbe..809ce2b903 100644 --- a/entc/integration/gremlin/ent/groupinfo_query.go +++ b/entc/integration/gremlin/ent/groupinfo_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -298,15 +296,17 @@ func (giq *GroupInfoQuery) WithGroups(opts ...func(*GroupQuery)) *GroupInfoQuery // Scan(ctx, &v) // func (giq *GroupInfoQuery) GroupBy(field string, fields ...string) *GroupInfoGroupBy { - group := &GroupInfoGroupBy{config: giq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &GroupInfoGroupBy{config: giq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := giq.prepareQuery(ctx); err != nil { return nil, err } return giq.gremlinQuery(ctx), nil } - return group + grbuild.label = groupinfo.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -324,7 +324,10 @@ func (giq *GroupInfoQuery) GroupBy(field string, fields ...string) *GroupInfoGro // func (giq *GroupInfoQuery) Select(fields ...string) *GroupInfoSelect { giq.fields = append(giq.fields, fields...) - return &GroupInfoSelect{GroupInfoQuery: giq} + selbuild := &GroupInfoSelect{GroupInfoQuery: giq} + selbuild.label = groupinfo.Label + selbuild.flds, selbuild.scan = &giq.fields, selbuild.Scan + return selbuild } func (giq *GroupInfoQuery) prepareQuery(ctx context.Context) error { @@ -411,6 +414,7 @@ func (giq *GroupInfoQuery) gremlinQuery(context.Context) *dsl.Traversal { // GroupInfoGroupBy is the group-by builder for GroupInfo entities. type GroupInfoGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -434,209 +438,6 @@ func (gigb *GroupInfoGroupBy) Scan(ctx context.Context, v interface{}) error { return gigb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := gigb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(gigb.fields) > 1 { - return nil, errors.New("ent: GroupInfoGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := gigb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) StringsX(ctx context.Context) []string { - v, err := gigb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gigb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) StringX(ctx context.Context) string { - v, err := gigb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(gigb.fields) > 1 { - return nil, errors.New("ent: GroupInfoGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := gigb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) IntsX(ctx context.Context) []int { - v, err := gigb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gigb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) IntX(ctx context.Context) int { - v, err := gigb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(gigb.fields) > 1 { - return nil, errors.New("ent: GroupInfoGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := gigb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := gigb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gigb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) Float64X(ctx context.Context) float64 { - v, err := gigb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(gigb.fields) > 1 { - return nil, errors.New("ent: GroupInfoGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := gigb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) BoolsX(ctx context.Context) []bool { - v, err := gigb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (gigb *GroupInfoGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gigb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gigb *GroupInfoGroupBy) BoolX(ctx context.Context) bool { - v, err := gigb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gigb *GroupInfoGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := gigb.gremlinQuery().Query() @@ -677,6 +478,7 @@ func (gigb *GroupInfoGroupBy) gremlinQuery() *dsl.Traversal { // GroupInfoSelect is the builder for selecting fields of GroupInfo entities. type GroupInfoSelect struct { *GroupInfoQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -690,201 +492,6 @@ func (gis *GroupInfoSelect) Scan(ctx context.Context, v interface{}) error { return gis.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (gis *GroupInfoSelect) ScanX(ctx context.Context, v interface{}) { - if err := gis.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Strings(ctx context.Context) ([]string, error) { - if len(gis.fields) > 1 { - return nil, errors.New("ent: GroupInfoSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := gis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (gis *GroupInfoSelect) StringsX(ctx context.Context) []string { - v, err := gis.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gis.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gis *GroupInfoSelect) StringX(ctx context.Context) string { - v, err := gis.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Ints(ctx context.Context) ([]int, error) { - if len(gis.fields) > 1 { - return nil, errors.New("ent: GroupInfoSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := gis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (gis *GroupInfoSelect) IntsX(ctx context.Context) []int { - v, err := gis.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gis.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gis *GroupInfoSelect) IntX(ctx context.Context) int { - v, err := gis.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(gis.fields) > 1 { - return nil, errors.New("ent: GroupInfoSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := gis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (gis *GroupInfoSelect) Float64sX(ctx context.Context) []float64 { - v, err := gis.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gis.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gis *GroupInfoSelect) Float64X(ctx context.Context) float64 { - v, err := gis.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Bools(ctx context.Context) ([]bool, error) { - if len(gis.fields) > 1 { - return nil, errors.New("ent: GroupInfoSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := gis.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (gis *GroupInfoSelect) BoolsX(ctx context.Context) []bool { - v, err := gis.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gis *GroupInfoSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gis.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{groupinfo.Label} - default: - err = fmt.Errorf("ent: GroupInfoSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gis *GroupInfoSelect) BoolX(ctx context.Context) bool { - v, err := gis.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gis *GroupInfoSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/item_query.go b/entc/integration/gremlin/ent/item_query.go index 16eb160ae1..3a58ae3fc4 100644 --- a/entc/integration/gremlin/ent/item_query.go +++ b/entc/integration/gremlin/ent/item_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -269,15 +267,17 @@ func (iq *ItemQuery) Clone() *ItemQuery { // Scan(ctx, &v) // func (iq *ItemQuery) GroupBy(field string, fields ...string) *ItemGroupBy { - group := &ItemGroupBy{config: iq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &ItemGroupBy{config: iq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := iq.prepareQuery(ctx); err != nil { return nil, err } return iq.gremlinQuery(ctx), nil } - return group + grbuild.label = item.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -295,7 +295,10 @@ func (iq *ItemQuery) GroupBy(field string, fields ...string) *ItemGroupBy { // func (iq *ItemQuery) Select(fields ...string) *ItemSelect { iq.fields = append(iq.fields, fields...) - return &ItemSelect{ItemQuery: iq} + selbuild := &ItemSelect{ItemQuery: iq} + selbuild.label = item.Label + selbuild.flds, selbuild.scan = &iq.fields, selbuild.Scan + return selbuild } func (iq *ItemQuery) prepareQuery(ctx context.Context) error { @@ -382,6 +385,7 @@ func (iq *ItemQuery) gremlinQuery(context.Context) *dsl.Traversal { // ItemGroupBy is the group-by builder for Item entities. type ItemGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -405,209 +409,6 @@ func (igb *ItemGroupBy) Scan(ctx context.Context, v interface{}) error { return igb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (igb *ItemGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := igb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: ItemGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (igb *ItemGroupBy) StringsX(ctx context.Context) []string { - v, err := igb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = igb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (igb *ItemGroupBy) StringX(ctx context.Context) string { - v, err := igb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: ItemGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (igb *ItemGroupBy) IntsX(ctx context.Context) []int { - v, err := igb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = igb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (igb *ItemGroupBy) IntX(ctx context.Context) int { - v, err := igb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: ItemGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (igb *ItemGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := igb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = igb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (igb *ItemGroupBy) Float64X(ctx context.Context) float64 { - v, err := igb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(igb.fields) > 1 { - return nil, errors.New("ent: ItemGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := igb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (igb *ItemGroupBy) BoolsX(ctx context.Context) []bool { - v, err := igb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (igb *ItemGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = igb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (igb *ItemGroupBy) BoolX(ctx context.Context) bool { - v, err := igb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (igb *ItemGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := igb.gremlinQuery().Query() @@ -648,6 +449,7 @@ func (igb *ItemGroupBy) gremlinQuery() *dsl.Traversal { // ItemSelect is the builder for selecting fields of Item entities. type ItemSelect struct { *ItemQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -661,201 +463,6 @@ func (is *ItemSelect) Scan(ctx context.Context, v interface{}) error { return is.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (is *ItemSelect) ScanX(ctx context.Context, v interface{}) { - if err := is.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Strings(ctx context.Context) ([]string, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: ItemSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (is *ItemSelect) StringsX(ctx context.Context) []string { - v, err := is.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = is.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (is *ItemSelect) StringX(ctx context.Context) string { - v, err := is.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Ints(ctx context.Context) ([]int, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: ItemSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (is *ItemSelect) IntsX(ctx context.Context) []int { - v, err := is.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = is.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (is *ItemSelect) IntX(ctx context.Context) int { - v, err := is.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: ItemSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (is *ItemSelect) Float64sX(ctx context.Context) []float64 { - v, err := is.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = is.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (is *ItemSelect) Float64X(ctx context.Context) float64 { - v, err := is.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Bools(ctx context.Context) ([]bool, error) { - if len(is.fields) > 1 { - return nil, errors.New("ent: ItemSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := is.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (is *ItemSelect) BoolsX(ctx context.Context) []bool { - v, err := is.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (is *ItemSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = is.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{item.Label} - default: - err = fmt.Errorf("ent: ItemSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (is *ItemSelect) BoolX(ctx context.Context) bool { - v, err := is.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (is *ItemSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/node_query.go b/entc/integration/gremlin/ent/node_query.go index ffd957f1b8..ec317d3b6c 100644 --- a/entc/integration/gremlin/ent/node_query.go +++ b/entc/integration/gremlin/ent/node_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -324,15 +322,17 @@ func (nq *NodeQuery) WithNext(opts ...func(*NodeQuery)) *NodeQuery { // Scan(ctx, &v) // func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { - group := &NodeGroupBy{config: nq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &NodeGroupBy{config: nq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := nq.prepareQuery(ctx); err != nil { return nil, err } return nq.gremlinQuery(ctx), nil } - return group + grbuild.label = node.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -350,7 +350,10 @@ func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { // func (nq *NodeQuery) Select(fields ...string) *NodeSelect { nq.fields = append(nq.fields, fields...) - return &NodeSelect{NodeQuery: nq} + selbuild := &NodeSelect{NodeQuery: nq} + selbuild.label = node.Label + selbuild.flds, selbuild.scan = &nq.fields, selbuild.Scan + return selbuild } func (nq *NodeQuery) prepareQuery(ctx context.Context) error { @@ -437,6 +440,7 @@ func (nq *NodeQuery) gremlinQuery(context.Context) *dsl.Traversal { // NodeGroupBy is the group-by builder for Node entities. type NodeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -460,209 +464,6 @@ func (ngb *NodeGroupBy) Scan(ctx context.Context, v interface{}) error { return ngb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ngb *NodeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ngb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ngb *NodeGroupBy) StringsX(ctx context.Context) []string { - v, err := ngb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ngb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ngb *NodeGroupBy) StringX(ctx context.Context) string { - v, err := ngb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ngb *NodeGroupBy) IntsX(ctx context.Context) []int { - v, err := ngb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ngb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ngb *NodeGroupBy) IntX(ctx context.Context) int { - v, err := ngb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ngb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ngb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ngb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ngb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ngb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolX(ctx context.Context) bool { - v, err := ngb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ngb *NodeGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := ngb.gremlinQuery().Query() @@ -703,6 +504,7 @@ func (ngb *NodeGroupBy) gremlinQuery() *dsl.Traversal { // NodeSelect is the builder for selecting fields of Node entities. type NodeSelect struct { *NodeQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -716,201 +518,6 @@ func (ns *NodeSelect) Scan(ctx context.Context, v interface{}) error { return ns.gremlinScan(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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ns.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ns *NodeSelect) StringX(ctx context.Context) string { - v, err := ns.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ns.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ns *NodeSelect) IntX(ctx context.Context) int { - v, err := ns.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ns.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ns *NodeSelect) Float64X(ctx context.Context) float64 { - v, err := ns.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ns.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ns *NodeSelect) BoolX(ctx context.Context) bool { - v, err := ns.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ns *NodeSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/pet_query.go b/entc/integration/gremlin/ent/pet_query.go index b31a49c434..4d83ca8702 100644 --- a/entc/integration/gremlin/ent/pet_query.go +++ b/entc/integration/gremlin/ent/pet_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -325,15 +323,17 @@ func (pq *PetQuery) WithOwner(opts ...func(*UserQuery)) *PetQuery { // Scan(ctx, &v) // func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.gremlinQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -351,7 +351,10 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { // func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -438,6 +441,7 @@ func (pq *PetQuery) gremlinQuery(context.Context) *dsl.Traversal { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -461,209 +465,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := pgb.gremlinQuery().Query() @@ -704,6 +505,7 @@ func (pgb *PetGroupBy) gremlinQuery() *dsl.Traversal { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -717,201 +519,6 @@ func (ps *PetSelect) Scan(ctx context.Context, v interface{}) error { return ps.gremlinScan(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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/spec_query.go b/entc/integration/gremlin/ent/spec_query.go index 94878a532e..9f555649db 100644 --- a/entc/integration/gremlin/ent/spec_query.go +++ b/entc/integration/gremlin/ent/spec_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -284,22 +282,27 @@ func (sq *SpecQuery) WithCard(opts ...func(*CardQuery)) *SpecQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (sq *SpecQuery) GroupBy(field string, fields ...string) *SpecGroupBy { - group := &SpecGroupBy{config: sq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &SpecGroupBy{config: sq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := sq.prepareQuery(ctx); err != nil { return nil, err } return sq.gremlinQuery(ctx), nil } - return group + grbuild.label = spec.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (sq *SpecQuery) Select(fields ...string) *SpecSelect { sq.fields = append(sq.fields, fields...) - return &SpecSelect{SpecQuery: sq} + selbuild := &SpecSelect{SpecQuery: sq} + selbuild.label = spec.Label + selbuild.flds, selbuild.scan = &sq.fields, selbuild.Scan + return selbuild } func (sq *SpecQuery) prepareQuery(ctx context.Context) error { @@ -386,6 +389,7 @@ func (sq *SpecQuery) gremlinQuery(context.Context) *dsl.Traversal { // SpecGroupBy is the group-by builder for Spec entities. type SpecGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -409,209 +413,6 @@ func (sgb *SpecGroupBy) Scan(ctx context.Context, v interface{}) error { return sgb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (sgb *SpecGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := sgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SpecGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (sgb *SpecGroupBy) StringsX(ctx context.Context) []string { - v, err := sgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = sgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (sgb *SpecGroupBy) StringX(ctx context.Context) string { - v, err := sgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SpecGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (sgb *SpecGroupBy) IntsX(ctx context.Context) []int { - v, err := sgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = sgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (sgb *SpecGroupBy) IntX(ctx context.Context) int { - v, err := sgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SpecGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (sgb *SpecGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := sgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = sgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (sgb *SpecGroupBy) Float64X(ctx context.Context) float64 { - v, err := sgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: SpecGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (sgb *SpecGroupBy) BoolsX(ctx context.Context) []bool { - v, err := sgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *SpecGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = sgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (sgb *SpecGroupBy) BoolX(ctx context.Context) bool { - v, err := sgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (sgb *SpecGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := sgb.gremlinQuery().Query() @@ -652,6 +453,7 @@ func (sgb *SpecGroupBy) gremlinQuery() *dsl.Traversal { // SpecSelect is the builder for selecting fields of Spec entities. type SpecSelect struct { *SpecQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -665,201 +467,6 @@ func (ss *SpecSelect) Scan(ctx context.Context, v interface{}) error { return ss.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ss *SpecSelect) ScanX(ctx context.Context, v interface{}) { - if err := ss.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Strings(ctx context.Context) ([]string, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SpecSelect.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 *SpecSelect) StringsX(ctx context.Context) []string { - v, err := ss.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ss.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ss *SpecSelect) StringX(ctx context.Context) string { - v, err := ss.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Ints(ctx context.Context) ([]int, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SpecSelect.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 *SpecSelect) IntsX(ctx context.Context) []int { - v, err := ss.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ss.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ss *SpecSelect) IntX(ctx context.Context) int { - v, err := ss.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SpecSelect.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 *SpecSelect) Float64sX(ctx context.Context) []float64 { - v, err := ss.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ss.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ss *SpecSelect) Float64X(ctx context.Context) float64 { - v, err := ss.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ss.fields) > 1 { - return nil, errors.New("ent: SpecSelect.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 *SpecSelect) BoolsX(ctx context.Context) []bool { - v, err := ss.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ss *SpecSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ss.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{spec.Label} - default: - err = fmt.Errorf("ent: SpecSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ss *SpecSelect) BoolX(ctx context.Context) bool { - v, err := ss.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ss *SpecSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/task_query.go b/entc/integration/gremlin/ent/task_query.go index 270576c72d..1434db8eff 100644 --- a/entc/integration/gremlin/ent/task_query.go +++ b/entc/integration/gremlin/ent/task_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -270,15 +268,17 @@ func (tq *TaskQuery) Clone() *TaskQuery { // Scan(ctx, &v) // func (tq *TaskQuery) GroupBy(field string, fields ...string) *TaskGroupBy { - group := &TaskGroupBy{config: tq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &TaskGroupBy{config: tq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := tq.prepareQuery(ctx); err != nil { return nil, err } return tq.gremlinQuery(ctx), nil } - return group + grbuild.label = enttask.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -296,7 +296,10 @@ func (tq *TaskQuery) GroupBy(field string, fields ...string) *TaskGroupBy { // func (tq *TaskQuery) Select(fields ...string) *TaskSelect { tq.fields = append(tq.fields, fields...) - return &TaskSelect{TaskQuery: tq} + selbuild := &TaskSelect{TaskQuery: tq} + selbuild.label = enttask.Label + selbuild.flds, selbuild.scan = &tq.fields, selbuild.Scan + return selbuild } func (tq *TaskQuery) prepareQuery(ctx context.Context) error { @@ -383,6 +386,7 @@ func (tq *TaskQuery) gremlinQuery(context.Context) *dsl.Traversal { // TaskGroupBy is the group-by builder for Task entities. type TaskGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -406,209 +410,6 @@ func (tgb *TaskGroupBy) Scan(ctx context.Context, v interface{}) error { return tgb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (tgb *TaskGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := tgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (tgb *TaskGroupBy) StringsX(ctx context.Context) []string { - v, err := tgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = tgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (tgb *TaskGroupBy) StringX(ctx context.Context) string { - v, err := tgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (tgb *TaskGroupBy) IntsX(ctx context.Context) []int { - v, err := tgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = tgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (tgb *TaskGroupBy) IntX(ctx context.Context) int { - v, err := tgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (tgb *TaskGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := tgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = tgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (tgb *TaskGroupBy) Float64X(ctx context.Context) float64 { - v, err := tgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (tgb *TaskGroupBy) BoolsX(ctx context.Context) []bool { - v, err := tgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = tgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (tgb *TaskGroupBy) BoolX(ctx context.Context) bool { - v, err := tgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (tgb *TaskGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := tgb.gremlinQuery().Query() @@ -649,6 +450,7 @@ func (tgb *TaskGroupBy) gremlinQuery() *dsl.Traversal { // TaskSelect is the builder for selecting fields of Task entities. type TaskSelect struct { *TaskQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -662,201 +464,6 @@ func (ts *TaskSelect) Scan(ctx context.Context, v interface{}) error { return ts.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ts *TaskSelect) ScanX(ctx context.Context, v interface{}) { - if err := ts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Strings(ctx context.Context) ([]string, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ts *TaskSelect) StringsX(ctx context.Context) []string { - v, err := ts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ts *TaskSelect) StringX(ctx context.Context) string { - v, err := ts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Ints(ctx context.Context) ([]int, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ts *TaskSelect) IntsX(ctx context.Context) []int { - v, err := ts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ts *TaskSelect) IntX(ctx context.Context) int { - v, err := ts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ts *TaskSelect) Float64sX(ctx context.Context) []float64 { - v, err := ts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ts *TaskSelect) Float64X(ctx context.Context) float64 { - v, err := ts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ts *TaskSelect) BoolsX(ctx context.Context) []bool { - v, err := ts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{enttask.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ts *TaskSelect) BoolX(ctx context.Context) bool { - v, err := ts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ts *TaskSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/gremlin/ent/user_query.go b/entc/integration/gremlin/ent/user_query.go index 9467ce43ac..5cd7bd27c2 100644 --- a/entc/integration/gremlin/ent/user_query.go +++ b/entc/integration/gremlin/ent/user_query.go @@ -8,8 +8,6 @@ package ent import ( "context" - "errors" - "fmt" "math" "entgo.io/ent/dialect/gremlin" @@ -567,15 +565,17 @@ func (uq *UserQuery) WithParent(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *dsl.Traversal, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.gremlinQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -593,7 +593,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -680,6 +683,7 @@ func (uq *UserQuery) gremlinQuery(context.Context) *dsl.Traversal { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -703,209 +707,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.gremlinScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) gremlinScan(ctx context.Context, v interface{}) error { res := &gremlin.Response{} query, bindings := ugb.gremlinQuery().Query() @@ -946,6 +747,7 @@ func (ugb *UserGroupBy) gremlinQuery() *dsl.Traversal { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). gremlin *dsl.Traversal } @@ -959,201 +761,6 @@ func (us *UserSelect) Scan(ctx context.Context, v interface{}) error { return us.gremlinScan(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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) gremlinScan(ctx context.Context, v interface{}) error { var ( traversal *dsl.Traversal diff --git a/entc/integration/hooks/ent/card_query.go b/entc/integration/hooks/ent/card_query.go index ae9ae0f556..7278ba44d5 100644 --- a/entc/integration/hooks/ent/card_query.go +++ b/entc/integration/hooks/ent/card_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (cq *CardQuery) WithOwner(opts ...func(*UserQuery)) *CardQuery { // Scan(ctx, &v) // func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { - group := &CardGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CardGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = card.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { // func (cq *CardQuery) Select(fields ...string) *CardSelect { cq.fields = append(cq.fields, fields...) - return &CardSelect{CardQuery: cq} + selbuild := &CardSelect{CardQuery: cq} + selbuild.label = card.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CardQuery) prepareQuery(ctx context.Context) error { @@ -518,6 +522,7 @@ func (cq *CardQuery) sqlQuery(ctx context.Context) *sql.Selector { // CardGroupBy is the group-by builder for Card entities. type CardGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -541,209 +546,6 @@ func (cgb *CardGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CardGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CardGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CardGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CardGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CardGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CardGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CardGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CardGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CardGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CardGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !card.ValidColumn(f) { @@ -785,6 +587,7 @@ func (cgb *CardGroupBy) sqlQuery() *sql.Selector { // CardSelect is the builder for selecting fields of Card entities. type CardSelect struct { *CardQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -798,201 +601,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CardSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CardSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CardSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CardSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CardSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/hooks/ent/ent.go b/entc/integration/hooks/ent/ent.go index 07a4bad5f1..08f4e12f11 100644 --- a/entc/integration/hooks/ent/ent.go +++ b/entc/integration/hooks/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -263,3 +264,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/hooks/ent/user_query.go b/entc/integration/hooks/ent/user_query.go index 59fa9ee0f6..ff437ec4ef 100644 --- a/entc/integration/hooks/ent/user_query.go +++ b/entc/integration/hooks/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -377,15 +376,17 @@ func (uq *UserQuery) WithBestFriend(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -403,7 +404,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -685,6 +689,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -708,209 +713,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -952,6 +754,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -965,201 +768,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/idtype/ent/ent.go b/entc/integration/idtype/ent/ent.go index 3950f9d260..a119012467 100644 --- a/entc/integration/idtype/ent/ent.go +++ b/entc/integration/idtype/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/idtype/ent/user_query.go b/entc/integration/idtype/ent/user_query.go index 4454caa9bd..95d009838b 100644 --- a/entc/integration/idtype/ent/user_query.go +++ b/entc/integration/idtype/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -376,15 +375,17 @@ func (uq *UserQuery) WithFollowing(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -402,7 +403,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -720,6 +724,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -743,209 +748,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -987,6 +789,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -1000,201 +803,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/json/ent/ent.go b/entc/integration/json/ent/ent.go index 4676bf9b6f..0d530e2ee4 100644 --- a/entc/integration/json/ent/ent.go +++ b/entc/integration/json/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/json/ent/user_query.go b/entc/integration/json/ent/user_query.go index c08f917552..0c47e1be99 100644 --- a/entc/integration/json/ent/user_query.go +++ b/entc/integration/json/ent/user_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (uq *UserQuery) Clone() *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -706,6 +508,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/migrate/entv1/car_query.go b/entc/integration/migrate/entv1/car_query.go index 481b4160aa..3e4ec55147 100644 --- a/entc/integration/migrate/entv1/car_query.go +++ b/entc/integration/migrate/entv1/car_query.go @@ -8,7 +8,6 @@ package entv1 import ( "context" - "errors" "fmt" "math" @@ -293,22 +292,27 @@ func (cq *CarQuery) WithOwner(opts ...func(*UserQuery)) *CarQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { - group := &CarGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CarGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = car.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (cq *CarQuery) Select(fields ...string) *CarSelect { cq.fields = append(cq.fields, fields...) - return &CarSelect{CarQuery: cq} + selbuild := &CarSelect{CarQuery: cq} + selbuild.label = car.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CarQuery) prepareQuery(ctx context.Context) error { @@ -494,6 +498,7 @@ func (cq *CarQuery) sqlQuery(ctx context.Context) *sql.Selector { // CarGroupBy is the group-by builder for Car entities. type CarGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -517,209 +522,6 @@ func (cgb *CarGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CarGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv1: CarGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CarGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv1: CarGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CarGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv1: CarGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CarGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv1: CarGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CarGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv1: CarGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CarGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv1: CarGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CarGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv1: CarGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CarGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv1: CarGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CarGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CarGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !car.ValidColumn(f) { @@ -761,6 +563,7 @@ func (cgb *CarGroupBy) sqlQuery() *sql.Selector { // CarSelect is the builder for selecting fields of Car entities. type CarSelect struct { *CarQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -774,201 +577,6 @@ func (cs *CarSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CarSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv1: CarSelect.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 *CarSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv1: CarSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CarSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv1: CarSelect.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 *CarSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv1: CarSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CarSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv1: CarSelect.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 *CarSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv1: CarSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CarSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv1: CarSelect.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 *CarSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv1: CarSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CarSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CarSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/migrate/entv1/conversion_query.go b/entc/integration/migrate/entv1/conversion_query.go index badfa9d93e..edb5373e66 100644 --- a/entc/integration/migrate/entv1/conversion_query.go +++ b/entc/integration/migrate/entv1/conversion_query.go @@ -8,7 +8,6 @@ package entv1 import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (cq *ConversionQuery) Clone() *ConversionQuery { // Scan(ctx, &v) // func (cq *ConversionQuery) GroupBy(field string, fields ...string) *ConversionGroupBy { - group := &ConversionGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &ConversionGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = conversion.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (cq *ConversionQuery) GroupBy(field string, fields ...string) *ConversionGr // func (cq *ConversionQuery) Select(fields ...string) *ConversionSelect { cq.fields = append(cq.fields, fields...) - return &ConversionSelect{ConversionQuery: cq} + selbuild := &ConversionSelect{ConversionQuery: cq} + selbuild.label = conversion.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *ConversionQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (cq *ConversionQuery) sqlQuery(ctx context.Context) *sql.Selector { // ConversionGroupBy is the group-by builder for Conversion entities. type ConversionGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (cgb *ConversionGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *ConversionGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv1: ConversionGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *ConversionGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv1: ConversionGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *ConversionGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv1: ConversionGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *ConversionGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv1: ConversionGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *ConversionGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv1: ConversionGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *ConversionGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv1: ConversionGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *ConversionGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv1: ConversionGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *ConversionGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv1: ConversionGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *ConversionGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *ConversionGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !conversion.ValidColumn(f) { @@ -706,6 +508,7 @@ func (cgb *ConversionGroupBy) sqlQuery() *sql.Selector { // ConversionSelect is the builder for selecting fields of Conversion entities. type ConversionSelect struct { *ConversionQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ func (cs *ConversionSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *ConversionSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv1: ConversionSelect.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 *ConversionSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv1: ConversionSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *ConversionSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv1: ConversionSelect.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 *ConversionSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv1: ConversionSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *ConversionSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv1: ConversionSelect.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 *ConversionSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv1: ConversionSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *ConversionSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv1: ConversionSelect.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 *ConversionSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv1: ConversionSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *ConversionSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *ConversionSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/migrate/entv1/customtype_query.go b/entc/integration/migrate/entv1/customtype_query.go index 5bb6909fc3..babdb0d8f3 100644 --- a/entc/integration/migrate/entv1/customtype_query.go +++ b/entc/integration/migrate/entv1/customtype_query.go @@ -8,7 +8,6 @@ package entv1 import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (ctq *CustomTypeQuery) Clone() *CustomTypeQuery { // Scan(ctx, &v) // func (ctq *CustomTypeQuery) GroupBy(field string, fields ...string) *CustomTypeGroupBy { - group := &CustomTypeGroupBy{config: ctq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CustomTypeGroupBy{config: ctq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := ctq.prepareQuery(ctx); err != nil { return nil, err } return ctq.sqlQuery(ctx), nil } - return group + grbuild.label = customtype.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (ctq *CustomTypeQuery) GroupBy(field string, fields ...string) *CustomTypeG // func (ctq *CustomTypeQuery) Select(fields ...string) *CustomTypeSelect { ctq.fields = append(ctq.fields, fields...) - return &CustomTypeSelect{CustomTypeQuery: ctq} + selbuild := &CustomTypeSelect{CustomTypeQuery: ctq} + selbuild.label = customtype.Label + selbuild.flds, selbuild.scan = &ctq.fields, selbuild.Scan + return selbuild } func (ctq *CustomTypeQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (ctq *CustomTypeQuery) sqlQuery(ctx context.Context) *sql.Selector { // CustomTypeGroupBy is the group-by builder for CustomType entities. type CustomTypeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (ctgb *CustomTypeGroupBy) Scan(ctx context.Context, v interface{}) error { return ctgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ctgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ctgb.fields) > 1 { - return nil, errors.New("entv1: CustomTypeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ctgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) StringsX(ctx context.Context) []string { - v, err := ctgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ctgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv1: CustomTypeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) StringX(ctx context.Context) string { - v, err := ctgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ctgb.fields) > 1 { - return nil, errors.New("entv1: CustomTypeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ctgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) IntsX(ctx context.Context) []int { - v, err := ctgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ctgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv1: CustomTypeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) IntX(ctx context.Context) int { - v, err := ctgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ctgb.fields) > 1 { - return nil, errors.New("entv1: CustomTypeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ctgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ctgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ctgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv1: CustomTypeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ctgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ctgb.fields) > 1 { - return nil, errors.New("entv1: CustomTypeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ctgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ctgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ctgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv1: CustomTypeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) BoolX(ctx context.Context) bool { - v, err := ctgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ctgb *CustomTypeGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ctgb.fields { if !customtype.ValidColumn(f) { @@ -706,6 +508,7 @@ func (ctgb *CustomTypeGroupBy) sqlQuery() *sql.Selector { // CustomTypeSelect is the builder for selecting fields of CustomType entities. type CustomTypeSelect struct { *CustomTypeQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ func (cts *CustomTypeSelect) Scan(ctx context.Context, v interface{}) error { return cts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cts *CustomTypeSelect) ScanX(ctx context.Context, v interface{}) { - if err := cts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Strings(ctx context.Context) ([]string, error) { - if len(cts.fields) > 1 { - return nil, errors.New("entv1: CustomTypeSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := cts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cts *CustomTypeSelect) StringsX(ctx context.Context) []string { - v, err := cts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv1: CustomTypeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cts *CustomTypeSelect) StringX(ctx context.Context) string { - v, err := cts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Ints(ctx context.Context) ([]int, error) { - if len(cts.fields) > 1 { - return nil, errors.New("entv1: CustomTypeSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := cts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cts *CustomTypeSelect) IntsX(ctx context.Context) []int { - v, err := cts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv1: CustomTypeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cts *CustomTypeSelect) IntX(ctx context.Context) int { - v, err := cts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cts.fields) > 1 { - return nil, errors.New("entv1: CustomTypeSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := cts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cts *CustomTypeSelect) Float64sX(ctx context.Context) []float64 { - v, err := cts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv1: CustomTypeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cts *CustomTypeSelect) Float64X(ctx context.Context) float64 { - v, err := cts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cts.fields) > 1 { - return nil, errors.New("entv1: CustomTypeSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := cts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cts *CustomTypeSelect) BoolsX(ctx context.Context) []bool { - v, err := cts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv1: CustomTypeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cts *CustomTypeSelect) BoolX(ctx context.Context) bool { - v, err := cts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cts *CustomTypeSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cts.sql.Query() diff --git a/entc/integration/migrate/entv1/ent.go b/entc/integration/migrate/entv1/ent.go index a06a4b7046..ddd6e04349 100644 --- a/entc/integration/migrate/entv1/ent.go +++ b/entc/integration/migrate/entv1/ent.go @@ -7,6 +7,7 @@ package entv1 import ( + "context" "errors" "fmt" @@ -267,3 +268,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("entv1: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("entv1: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("entv1: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("entv1: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("entv1: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("entv1: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("entv1: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("entv1: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/migrate/entv1/user_query.go b/entc/integration/migrate/entv1/user_query.go index 6eec60adf8..6c976138a4 100644 --- a/entc/integration/migrate/entv1/user_query.go +++ b/entc/integration/migrate/entv1/user_query.go @@ -9,7 +9,6 @@ package entv1 import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -412,15 +411,17 @@ func (uq *UserQuery) WithCar(opts ...func(*CarQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -438,7 +439,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -713,6 +717,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -736,209 +741,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("entv1: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv1: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("entv1: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv1: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("entv1: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv1: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("entv1: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv1: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -980,6 +782,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -993,201 +796,6 @@ 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 a 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("entv1: 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv1: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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("entv1: 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv1: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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("entv1: 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv1: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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("entv1: 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv1: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/migrate/entv2/car_query.go b/entc/integration/migrate/entv2/car_query.go index 96e30b523e..9f11625995 100644 --- a/entc/integration/migrate/entv2/car_query.go +++ b/entc/integration/migrate/entv2/car_query.go @@ -8,7 +8,6 @@ package entv2 import ( "context" - "errors" "fmt" "math" @@ -293,22 +292,27 @@ func (cq *CarQuery) WithOwner(opts ...func(*UserQuery)) *CarQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { - group := &CarGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CarGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = car.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (cq *CarQuery) Select(fields ...string) *CarSelect { cq.fields = append(cq.fields, fields...) - return &CarSelect{CarQuery: cq} + selbuild := &CarSelect{CarQuery: cq} + selbuild.label = car.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CarQuery) prepareQuery(ctx context.Context) error { @@ -494,6 +498,7 @@ func (cq *CarQuery) sqlQuery(ctx context.Context) *sql.Selector { // CarGroupBy is the group-by builder for Car entities. type CarGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -517,209 +522,6 @@ func (cgb *CarGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CarGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv2: CarGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CarGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv2: CarGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CarGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv2: CarGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CarGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv2: CarGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CarGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv2: CarGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CarGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv2: CarGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CarGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv2: CarGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CarGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv2: CarGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CarGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CarGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !car.ValidColumn(f) { @@ -761,6 +563,7 @@ func (cgb *CarGroupBy) sqlQuery() *sql.Selector { // CarSelect is the builder for selecting fields of Car entities. type CarSelect struct { *CarQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -774,201 +577,6 @@ func (cs *CarSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CarSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv2: CarSelect.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 *CarSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv2: CarSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CarSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv2: CarSelect.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 *CarSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv2: CarSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CarSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv2: CarSelect.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 *CarSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv2: CarSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CarSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv2: CarSelect.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 *CarSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("entv2: CarSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CarSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CarSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/migrate/entv2/conversion_query.go b/entc/integration/migrate/entv2/conversion_query.go index ae32a954c9..62363b7064 100644 --- a/entc/integration/migrate/entv2/conversion_query.go +++ b/entc/integration/migrate/entv2/conversion_query.go @@ -8,7 +8,6 @@ package entv2 import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (cq *ConversionQuery) Clone() *ConversionQuery { // Scan(ctx, &v) // func (cq *ConversionQuery) GroupBy(field string, fields ...string) *ConversionGroupBy { - group := &ConversionGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &ConversionGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = conversion.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (cq *ConversionQuery) GroupBy(field string, fields ...string) *ConversionGr // func (cq *ConversionQuery) Select(fields ...string) *ConversionSelect { cq.fields = append(cq.fields, fields...) - return &ConversionSelect{ConversionQuery: cq} + selbuild := &ConversionSelect{ConversionQuery: cq} + selbuild.label = conversion.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *ConversionQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (cq *ConversionQuery) sqlQuery(ctx context.Context) *sql.Selector { // ConversionGroupBy is the group-by builder for Conversion entities. type ConversionGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (cgb *ConversionGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *ConversionGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv2: ConversionGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *ConversionGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv2: ConversionGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *ConversionGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv2: ConversionGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *ConversionGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv2: ConversionGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *ConversionGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv2: ConversionGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *ConversionGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv2: ConversionGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *ConversionGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("entv2: ConversionGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *ConversionGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *ConversionGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv2: ConversionGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *ConversionGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *ConversionGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !conversion.ValidColumn(f) { @@ -706,6 +508,7 @@ func (cgb *ConversionGroupBy) sqlQuery() *sql.Selector { // ConversionSelect is the builder for selecting fields of Conversion entities. type ConversionSelect struct { *ConversionQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ func (cs *ConversionSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *ConversionSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv2: ConversionSelect.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 *ConversionSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv2: ConversionSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *ConversionSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv2: ConversionSelect.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 *ConversionSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv2: ConversionSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *ConversionSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv2: ConversionSelect.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 *ConversionSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv2: ConversionSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *ConversionSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("entv2: ConversionSelect.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 *ConversionSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *ConversionSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{conversion.Label} - default: - err = fmt.Errorf("entv2: ConversionSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *ConversionSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *ConversionSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/migrate/entv2/customtype_query.go b/entc/integration/migrate/entv2/customtype_query.go index 20e2b7b701..7b5a731872 100644 --- a/entc/integration/migrate/entv2/customtype_query.go +++ b/entc/integration/migrate/entv2/customtype_query.go @@ -8,7 +8,6 @@ package entv2 import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (ctq *CustomTypeQuery) Clone() *CustomTypeQuery { // Scan(ctx, &v) // func (ctq *CustomTypeQuery) GroupBy(field string, fields ...string) *CustomTypeGroupBy { - group := &CustomTypeGroupBy{config: ctq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CustomTypeGroupBy{config: ctq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := ctq.prepareQuery(ctx); err != nil { return nil, err } return ctq.sqlQuery(ctx), nil } - return group + grbuild.label = customtype.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (ctq *CustomTypeQuery) GroupBy(field string, fields ...string) *CustomTypeG // func (ctq *CustomTypeQuery) Select(fields ...string) *CustomTypeSelect { ctq.fields = append(ctq.fields, fields...) - return &CustomTypeSelect{CustomTypeQuery: ctq} + selbuild := &CustomTypeSelect{CustomTypeQuery: ctq} + selbuild.label = customtype.Label + selbuild.flds, selbuild.scan = &ctq.fields, selbuild.Scan + return selbuild } func (ctq *CustomTypeQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (ctq *CustomTypeQuery) sqlQuery(ctx context.Context) *sql.Selector { // CustomTypeGroupBy is the group-by builder for CustomType entities. type CustomTypeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (ctgb *CustomTypeGroupBy) Scan(ctx context.Context, v interface{}) error { return ctgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ctgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ctgb.fields) > 1 { - return nil, errors.New("entv2: CustomTypeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ctgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) StringsX(ctx context.Context) []string { - v, err := ctgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ctgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv2: CustomTypeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) StringX(ctx context.Context) string { - v, err := ctgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ctgb.fields) > 1 { - return nil, errors.New("entv2: CustomTypeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ctgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) IntsX(ctx context.Context) []int { - v, err := ctgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ctgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv2: CustomTypeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) IntX(ctx context.Context) int { - v, err := ctgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ctgb.fields) > 1 { - return nil, errors.New("entv2: CustomTypeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ctgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ctgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ctgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv2: CustomTypeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ctgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ctgb.fields) > 1 { - return nil, errors.New("entv2: CustomTypeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ctgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ctgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ctgb *CustomTypeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ctgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv2: CustomTypeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ctgb *CustomTypeGroupBy) BoolX(ctx context.Context) bool { - v, err := ctgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ctgb *CustomTypeGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ctgb.fields { if !customtype.ValidColumn(f) { @@ -706,6 +508,7 @@ func (ctgb *CustomTypeGroupBy) sqlQuery() *sql.Selector { // CustomTypeSelect is the builder for selecting fields of CustomType entities. type CustomTypeSelect struct { *CustomTypeQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ func (cts *CustomTypeSelect) Scan(ctx context.Context, v interface{}) error { return cts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cts *CustomTypeSelect) ScanX(ctx context.Context, v interface{}) { - if err := cts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Strings(ctx context.Context) ([]string, error) { - if len(cts.fields) > 1 { - return nil, errors.New("entv2: CustomTypeSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := cts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cts *CustomTypeSelect) StringsX(ctx context.Context) []string { - v, err := cts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv2: CustomTypeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cts *CustomTypeSelect) StringX(ctx context.Context) string { - v, err := cts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Ints(ctx context.Context) ([]int, error) { - if len(cts.fields) > 1 { - return nil, errors.New("entv2: CustomTypeSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := cts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cts *CustomTypeSelect) IntsX(ctx context.Context) []int { - v, err := cts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv2: CustomTypeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cts *CustomTypeSelect) IntX(ctx context.Context) int { - v, err := cts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cts.fields) > 1 { - return nil, errors.New("entv2: CustomTypeSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := cts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cts *CustomTypeSelect) Float64sX(ctx context.Context) []float64 { - v, err := cts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv2: CustomTypeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cts *CustomTypeSelect) Float64X(ctx context.Context) float64 { - v, err := cts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cts.fields) > 1 { - return nil, errors.New("entv2: CustomTypeSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := cts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cts *CustomTypeSelect) BoolsX(ctx context.Context) []bool { - v, err := cts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cts *CustomTypeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{customtype.Label} - default: - err = fmt.Errorf("entv2: CustomTypeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cts *CustomTypeSelect) BoolX(ctx context.Context) bool { - v, err := cts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cts *CustomTypeSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cts.sql.Query() diff --git a/entc/integration/migrate/entv2/ent.go b/entc/integration/migrate/entv2/ent.go index 8e187284e2..23ed9e4826 100644 --- a/entc/integration/migrate/entv2/ent.go +++ b/entc/integration/migrate/entv2/ent.go @@ -7,6 +7,7 @@ package entv2 import ( + "context" "errors" "fmt" @@ -273,3 +274,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("entv2: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("entv2: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("entv2: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("entv2: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("entv2: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("entv2: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("entv2: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("entv2: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/migrate/entv2/group_query.go b/entc/integration/migrate/entv2/group_query.go index 771d9b3a69..564597ce45 100644 --- a/entc/integration/migrate/entv2/group_query.go +++ b/entc/integration/migrate/entv2/group_query.go @@ -8,7 +8,6 @@ package entv2 import ( "context" - "errors" "fmt" "math" @@ -255,22 +254,27 @@ func (gq *GroupQuery) Clone() *GroupQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -415,6 +419,7 @@ func (gq *GroupQuery) sqlQuery(ctx context.Context) *sql.Selector { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -438,209 +443,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("entv2: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("entv2: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("entv2: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("entv2: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("entv2: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("entv2: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("entv2: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("entv2: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -682,6 +484,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -695,201 +498,6 @@ 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 a 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("entv2: 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("entv2: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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("entv2: 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("entv2: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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("entv2: 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("entv2: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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("entv2: 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("entv2: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/entc/integration/migrate/entv2/media_query.go b/entc/integration/migrate/entv2/media_query.go index 21d9b75c1a..8ad4c2d148 100644 --- a/entc/integration/migrate/entv2/media_query.go +++ b/entc/integration/migrate/entv2/media_query.go @@ -8,7 +8,6 @@ package entv2 import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (mq *MediaQuery) Clone() *MediaQuery { // Scan(ctx, &v) // func (mq *MediaQuery) GroupBy(field string, fields ...string) *MediaGroupBy { - group := &MediaGroupBy{config: mq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &MediaGroupBy{config: mq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := mq.prepareQuery(ctx); err != nil { return nil, err } return mq.sqlQuery(ctx), nil } - return group + grbuild.label = media.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (mq *MediaQuery) GroupBy(field string, fields ...string) *MediaGroupBy { // func (mq *MediaQuery) Select(fields ...string) *MediaSelect { mq.fields = append(mq.fields, fields...) - return &MediaSelect{MediaQuery: mq} + selbuild := &MediaSelect{MediaQuery: mq} + selbuild.label = media.Label + selbuild.flds, selbuild.scan = &mq.fields, selbuild.Scan + return selbuild } func (mq *MediaQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (mq *MediaQuery) sqlQuery(ctx context.Context) *sql.Selector { // MediaGroupBy is the group-by builder for Media entities. type MediaGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (mgb *MediaGroupBy) Scan(ctx context.Context, v interface{}) error { return mgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (mgb *MediaGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := mgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (mgb *MediaGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(mgb.fields) > 1 { - return nil, errors.New("entv2: MediaGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := mgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (mgb *MediaGroupBy) StringsX(ctx context.Context) []string { - v, err := mgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (mgb *MediaGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = mgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{media.Label} - default: - err = fmt.Errorf("entv2: MediaGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (mgb *MediaGroupBy) StringX(ctx context.Context) string { - v, err := mgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (mgb *MediaGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(mgb.fields) > 1 { - return nil, errors.New("entv2: MediaGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := mgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (mgb *MediaGroupBy) IntsX(ctx context.Context) []int { - v, err := mgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (mgb *MediaGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = mgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{media.Label} - default: - err = fmt.Errorf("entv2: MediaGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (mgb *MediaGroupBy) IntX(ctx context.Context) int { - v, err := mgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (mgb *MediaGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(mgb.fields) > 1 { - return nil, errors.New("entv2: MediaGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := mgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (mgb *MediaGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := mgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (mgb *MediaGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = mgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{media.Label} - default: - err = fmt.Errorf("entv2: MediaGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (mgb *MediaGroupBy) Float64X(ctx context.Context) float64 { - v, err := mgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (mgb *MediaGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(mgb.fields) > 1 { - return nil, errors.New("entv2: MediaGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := mgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (mgb *MediaGroupBy) BoolsX(ctx context.Context) []bool { - v, err := mgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (mgb *MediaGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = mgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{media.Label} - default: - err = fmt.Errorf("entv2: MediaGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (mgb *MediaGroupBy) BoolX(ctx context.Context) bool { - v, err := mgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (mgb *MediaGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range mgb.fields { if !media.ValidColumn(f) { @@ -706,6 +508,7 @@ func (mgb *MediaGroupBy) sqlQuery() *sql.Selector { // MediaSelect is the builder for selecting fields of Media entities. type MediaSelect struct { *MediaQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ func (ms *MediaSelect) Scan(ctx context.Context, v interface{}) error { return ms.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ms *MediaSelect) ScanX(ctx context.Context, v interface{}) { - if err := ms.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ms *MediaSelect) Strings(ctx context.Context) ([]string, error) { - if len(ms.fields) > 1 { - return nil, errors.New("entv2: MediaSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ms.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ms *MediaSelect) StringsX(ctx context.Context) []string { - v, err := ms.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ms *MediaSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ms.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{media.Label} - default: - err = fmt.Errorf("entv2: MediaSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ms *MediaSelect) StringX(ctx context.Context) string { - v, err := ms.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ms *MediaSelect) Ints(ctx context.Context) ([]int, error) { - if len(ms.fields) > 1 { - return nil, errors.New("entv2: MediaSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ms.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ms *MediaSelect) IntsX(ctx context.Context) []int { - v, err := ms.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ms *MediaSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ms.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{media.Label} - default: - err = fmt.Errorf("entv2: MediaSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ms *MediaSelect) IntX(ctx context.Context) int { - v, err := ms.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ms *MediaSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ms.fields) > 1 { - return nil, errors.New("entv2: MediaSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ms.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ms *MediaSelect) Float64sX(ctx context.Context) []float64 { - v, err := ms.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ms *MediaSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ms.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{media.Label} - default: - err = fmt.Errorf("entv2: MediaSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ms *MediaSelect) Float64X(ctx context.Context) float64 { - v, err := ms.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ms *MediaSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ms.fields) > 1 { - return nil, errors.New("entv2: MediaSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ms.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ms *MediaSelect) BoolsX(ctx context.Context) []bool { - v, err := ms.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ms *MediaSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ms.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{media.Label} - default: - err = fmt.Errorf("entv2: MediaSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ms *MediaSelect) BoolX(ctx context.Context) bool { - v, err := ms.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ms *MediaSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ms.sql.Query() diff --git a/entc/integration/migrate/entv2/pet_query.go b/entc/integration/migrate/entv2/pet_query.go index ba6b5f571e..94bbe88a45 100644 --- a/entc/integration/migrate/entv2/pet_query.go +++ b/entc/integration/migrate/entv2/pet_query.go @@ -8,7 +8,6 @@ package entv2 import ( "context" - "errors" "fmt" "math" @@ -293,22 +292,27 @@ func (pq *PetQuery) WithOwner(opts ...func(*UserQuery)) *PetQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -494,6 +498,7 @@ func (pq *PetQuery) sqlQuery(ctx context.Context) *sql.Selector { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -517,209 +522,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("entv2: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("entv2: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("entv2: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("entv2: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("entv2: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("entv2: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("entv2: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("entv2: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !pet.ValidColumn(f) { @@ -761,6 +563,7 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -774,201 +577,6 @@ 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 a 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("entv2: 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("entv2: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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("entv2: 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("entv2: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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("entv2: 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("entv2: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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("entv2: 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("entv2: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/entc/integration/migrate/entv2/user_query.go b/entc/integration/migrate/entv2/user_query.go index de0203e940..30d672f83e 100644 --- a/entc/integration/migrate/entv2/user_query.go +++ b/entc/integration/migrate/entv2/user_query.go @@ -9,7 +9,6 @@ package entv2 import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -377,15 +376,17 @@ func (uq *UserQuery) WithFriends(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -403,7 +404,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -677,6 +681,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -700,209 +705,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("entv2: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv2: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("entv2: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv2: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("entv2: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv2: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("entv2: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv2: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -944,6 +746,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -957,201 +760,6 @@ 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 a 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("entv2: 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv2: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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("entv2: 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv2: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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("entv2: 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv2: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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("entv2: 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("entv2: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/migrate/versioned/car_query.go b/entc/integration/migrate/versioned/car_query.go index 86837a98bb..2da2bf1990 100644 --- a/entc/integration/migrate/versioned/car_query.go +++ b/entc/integration/migrate/versioned/car_query.go @@ -8,7 +8,6 @@ package versioned import ( "context" - "errors" "fmt" "math" @@ -293,22 +292,27 @@ func (cq *CarQuery) WithOwner(opts ...func(*UserQuery)) *CarQuery { // GroupBy is used to group vertices by one or more fields/columns. // It is often used with aggregate functions, like: count, max, mean, min, sum. func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { - group := &CarGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CarGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = car.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, // instead of selecting all fields in the entity. func (cq *CarQuery) Select(fields ...string) *CarSelect { cq.fields = append(cq.fields, fields...) - return &CarSelect{CarQuery: cq} + selbuild := &CarSelect{CarQuery: cq} + selbuild.label = car.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CarQuery) prepareQuery(ctx context.Context) error { @@ -494,6 +498,7 @@ func (cq *CarQuery) sqlQuery(ctx context.Context) *sql.Selector { // CarGroupBy is the group-by builder for Car entities. type CarGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -517,209 +522,6 @@ func (cgb *CarGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CarGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("versioned: CarGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CarGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("versioned: CarGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CarGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("versioned: CarGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CarGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("versioned: CarGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CarGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("versioned: CarGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CarGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("versioned: CarGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CarGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("versioned: CarGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CarGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("versioned: CarGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CarGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CarGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !car.ValidColumn(f) { @@ -761,6 +563,7 @@ func (cgb *CarGroupBy) sqlQuery() *sql.Selector { // CarSelect is the builder for selecting fields of Car entities. type CarSelect struct { *CarQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -774,201 +577,6 @@ func (cs *CarSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CarSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("versioned: CarSelect.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 *CarSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("versioned: CarSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CarSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("versioned: CarSelect.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 *CarSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("versioned: CarSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CarSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("versioned: CarSelect.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 *CarSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("versioned: CarSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CarSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("versioned: CarSelect.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 *CarSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("versioned: CarSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CarSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CarSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/entc/integration/migrate/versioned/ent.go b/entc/integration/migrate/versioned/ent.go index d4ee5e8971..fbed0759e8 100644 --- a/entc/integration/migrate/versioned/ent.go +++ b/entc/integration/migrate/versioned/ent.go @@ -7,6 +7,7 @@ package versioned import ( + "context" "errors" "fmt" @@ -263,3 +264,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("versioned: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("versioned: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("versioned: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("versioned: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("versioned: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("versioned: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("versioned: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("versioned: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/migrate/versioned/user_query.go b/entc/integration/migrate/versioned/user_query.go index 4c29b5e1e1..82ef6a3df9 100644 --- a/entc/integration/migrate/versioned/user_query.go +++ b/entc/integration/migrate/versioned/user_query.go @@ -9,7 +9,6 @@ package versioned import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -412,15 +411,17 @@ func (uq *UserQuery) WithCar(opts ...func(*CarQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -438,7 +439,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -713,6 +717,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -736,209 +741,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("versioned: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("versioned: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("versioned: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("versioned: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("versioned: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("versioned: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("versioned: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("versioned: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -980,6 +782,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -993,201 +796,6 @@ 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 a 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("versioned: 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("versioned: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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("versioned: 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("versioned: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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("versioned: 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("versioned: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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("versioned: 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("versioned: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/multischema/ent/ent.go b/entc/integration/multischema/ent/ent.go index f8dcfc357a..56e9a28144 100644 --- a/entc/integration/multischema/ent/ent.go +++ b/entc/integration/multischema/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -265,3 +266,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/multischema/ent/group_query.go b/entc/integration/multischema/ent/group_query.go index d3bacd872f..a0d3ccb73a 100644 --- a/entc/integration/multischema/ent/group_query.go +++ b/entc/integration/multischema/ent/group_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -311,15 +310,17 @@ func (gq *GroupQuery) WithUsers(opts ...func(*UserQuery)) *GroupQuery { // Scan(ctx, &v) // func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -337,7 +338,10 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { // func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -575,6 +579,7 @@ func (gq *GroupQuery) Modify(modifiers ...func(s *sql.Selector)) *GroupSelect { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -598,209 +603,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -842,6 +644,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -855,201 +658,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/entc/integration/multischema/ent/pet_query.go b/entc/integration/multischema/ent/pet_query.go index ca62f3e85e..c104fcee81 100644 --- a/entc/integration/multischema/ent/pet_query.go +++ b/entc/integration/multischema/ent/pet_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -310,15 +309,17 @@ func (pq *PetQuery) WithOwner(opts ...func(*UserQuery)) *PetQuery { // Scan(ctx, &v) // func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -336,7 +337,10 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { // func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -534,6 +538,7 @@ func (pq *PetQuery) Modify(modifiers ...func(s *sql.Selector)) *PetSelect { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -557,209 +562,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !pet.ValidColumn(f) { @@ -801,6 +603,7 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -814,201 +617,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/entc/integration/multischema/ent/user_query.go b/entc/integration/multischema/ent/user_query.go index 2f417ae671..bb5dc7f2bd 100644 --- a/entc/integration/multischema/ent/user_query.go +++ b/entc/integration/multischema/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -350,15 +349,17 @@ func (uq *UserQuery) WithGroups(opts ...func(*GroupQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -376,7 +377,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -640,6 +644,7 @@ func (uq *UserQuery) Modify(modifiers ...func(s *sql.Selector)) *UserSelect { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -663,209 +668,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -907,6 +709,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -920,201 +723,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/privacy/ent/ent.go b/entc/integration/privacy/ent/ent.go index 5d7378ca85..9228491bbe 100644 --- a/entc/integration/privacy/ent/ent.go +++ b/entc/integration/privacy/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -265,3 +266,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/privacy/ent/task_query.go b/entc/integration/privacy/ent/task_query.go index 7271968cdd..2b5e488a03 100644 --- a/entc/integration/privacy/ent/task_query.go +++ b/entc/integration/privacy/ent/task_query.go @@ -343,15 +343,17 @@ func (tq *TaskQuery) WithOwner(opts ...func(*UserQuery)) *TaskQuery { // Scan(ctx, &v) // func (tq *TaskQuery) GroupBy(field string, fields ...string) *TaskGroupBy { - group := &TaskGroupBy{config: tq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &TaskGroupBy{config: tq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := tq.prepareQuery(ctx); err != nil { return nil, err } return tq.sqlQuery(ctx), nil } - return group + grbuild.label = task.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -369,7 +371,10 @@ func (tq *TaskQuery) GroupBy(field string, fields ...string) *TaskGroupBy { // func (tq *TaskQuery) Select(fields ...string) *TaskSelect { tq.fields = append(tq.fields, fields...) - return &TaskSelect{TaskQuery: tq} + selbuild := &TaskSelect{TaskQuery: tq} + selbuild.label = task.Label + selbuild.flds, selbuild.scan = &tq.fields, selbuild.Scan + return selbuild } func (tq *TaskQuery) prepareQuery(ctx context.Context) error { @@ -627,6 +632,7 @@ func (tq *TaskQuery) sqlQuery(ctx context.Context) *sql.Selector { // TaskGroupBy is the group-by builder for Task entities. type TaskGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -650,209 +656,6 @@ func (tgb *TaskGroupBy) Scan(ctx context.Context, v interface{}) error { return tgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (tgb *TaskGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := tgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (tgb *TaskGroupBy) StringsX(ctx context.Context) []string { - v, err := tgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = tgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{task.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (tgb *TaskGroupBy) StringX(ctx context.Context) string { - v, err := tgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (tgb *TaskGroupBy) IntsX(ctx context.Context) []int { - v, err := tgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = tgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{task.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (tgb *TaskGroupBy) IntX(ctx context.Context) int { - v, err := tgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (tgb *TaskGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := tgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = tgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{task.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (tgb *TaskGroupBy) Float64X(ctx context.Context) float64 { - v, err := tgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TaskGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (tgb *TaskGroupBy) BoolsX(ctx context.Context) []bool { - v, err := tgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TaskGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = tgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{task.Label} - default: - err = fmt.Errorf("ent: TaskGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (tgb *TaskGroupBy) BoolX(ctx context.Context) bool { - v, err := tgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (tgb *TaskGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range tgb.fields { if !task.ValidColumn(f) { @@ -894,6 +697,7 @@ func (tgb *TaskGroupBy) sqlQuery() *sql.Selector { // TaskSelect is the builder for selecting fields of Task entities. type TaskSelect struct { *TaskQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -907,201 +711,6 @@ func (ts *TaskSelect) Scan(ctx context.Context, v interface{}) error { return ts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ts *TaskSelect) ScanX(ctx context.Context, v interface{}) { - if err := ts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Strings(ctx context.Context) ([]string, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ts *TaskSelect) StringsX(ctx context.Context) []string { - v, err := ts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{task.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ts *TaskSelect) StringX(ctx context.Context) string { - v, err := ts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Ints(ctx context.Context) ([]int, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ts *TaskSelect) IntsX(ctx context.Context) []int { - v, err := ts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{task.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ts *TaskSelect) IntX(ctx context.Context) int { - v, err := ts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ts *TaskSelect) Float64sX(ctx context.Context) []float64 { - v, err := ts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{task.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ts *TaskSelect) Float64X(ctx context.Context) float64 { - v, err := ts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TaskSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ts *TaskSelect) BoolsX(ctx context.Context) []bool { - v, err := ts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ts *TaskSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{task.Label} - default: - err = fmt.Errorf("ent: TaskSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ts *TaskSelect) BoolX(ctx context.Context) bool { - v, err := ts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ts *TaskSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ts.sql.Query() diff --git a/entc/integration/privacy/ent/team_query.go b/entc/integration/privacy/ent/team_query.go index 0b9d346d95..d488354bca 100644 --- a/entc/integration/privacy/ent/team_query.go +++ b/entc/integration/privacy/ent/team_query.go @@ -342,15 +342,17 @@ func (tq *TeamQuery) WithUsers(opts ...func(*UserQuery)) *TeamQuery { // Scan(ctx, &v) // func (tq *TeamQuery) GroupBy(field string, fields ...string) *TeamGroupBy { - group := &TeamGroupBy{config: tq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &TeamGroupBy{config: tq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := tq.prepareQuery(ctx); err != nil { return nil, err } return tq.sqlQuery(ctx), nil } - return group + grbuild.label = team.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +370,10 @@ func (tq *TeamQuery) GroupBy(field string, fields ...string) *TeamGroupBy { // func (tq *TeamQuery) Select(fields ...string) *TeamSelect { tq.fields = append(tq.fields, fields...) - return &TeamSelect{TeamQuery: tq} + selbuild := &TeamSelect{TeamQuery: tq} + selbuild.label = team.Label + selbuild.flds, selbuild.scan = &tq.fields, selbuild.Scan + return selbuild } func (tq *TeamQuery) prepareQuery(ctx context.Context) error { @@ -655,6 +660,7 @@ func (tq *TeamQuery) sqlQuery(ctx context.Context) *sql.Selector { // TeamGroupBy is the group-by builder for Team entities. type TeamGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -678,209 +684,6 @@ func (tgb *TeamGroupBy) Scan(ctx context.Context, v interface{}) error { return tgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (tgb *TeamGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := tgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TeamGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TeamGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (tgb *TeamGroupBy) StringsX(ctx context.Context) []string { - v, err := tgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TeamGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = tgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{team.Label} - default: - err = fmt.Errorf("ent: TeamGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (tgb *TeamGroupBy) StringX(ctx context.Context) string { - v, err := tgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TeamGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TeamGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (tgb *TeamGroupBy) IntsX(ctx context.Context) []int { - v, err := tgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TeamGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = tgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{team.Label} - default: - err = fmt.Errorf("ent: TeamGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (tgb *TeamGroupBy) IntX(ctx context.Context) int { - v, err := tgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TeamGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TeamGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (tgb *TeamGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := tgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TeamGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = tgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{team.Label} - default: - err = fmt.Errorf("ent: TeamGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (tgb *TeamGroupBy) Float64X(ctx context.Context) float64 { - v, err := tgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TeamGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TeamGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (tgb *TeamGroupBy) BoolsX(ctx context.Context) []bool { - v, err := tgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TeamGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = tgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{team.Label} - default: - err = fmt.Errorf("ent: TeamGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (tgb *TeamGroupBy) BoolX(ctx context.Context) bool { - v, err := tgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (tgb *TeamGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range tgb.fields { if !team.ValidColumn(f) { @@ -922,6 +725,7 @@ func (tgb *TeamGroupBy) sqlQuery() *sql.Selector { // TeamSelect is the builder for selecting fields of Team entities. type TeamSelect struct { *TeamQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -935,201 +739,6 @@ func (ts *TeamSelect) Scan(ctx context.Context, v interface{}) error { return ts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ts *TeamSelect) ScanX(ctx context.Context, v interface{}) { - if err := ts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ts *TeamSelect) Strings(ctx context.Context) ([]string, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TeamSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ts *TeamSelect) StringsX(ctx context.Context) []string { - v, err := ts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ts *TeamSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{team.Label} - default: - err = fmt.Errorf("ent: TeamSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ts *TeamSelect) StringX(ctx context.Context) string { - v, err := ts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ts *TeamSelect) Ints(ctx context.Context) ([]int, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TeamSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ts *TeamSelect) IntsX(ctx context.Context) []int { - v, err := ts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ts *TeamSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{team.Label} - default: - err = fmt.Errorf("ent: TeamSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ts *TeamSelect) IntX(ctx context.Context) int { - v, err := ts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ts *TeamSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TeamSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ts *TeamSelect) Float64sX(ctx context.Context) []float64 { - v, err := ts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ts *TeamSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{team.Label} - default: - err = fmt.Errorf("ent: TeamSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ts *TeamSelect) Float64X(ctx context.Context) float64 { - v, err := ts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ts *TeamSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TeamSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ts *TeamSelect) BoolsX(ctx context.Context) []bool { - v, err := ts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ts *TeamSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{team.Label} - default: - err = fmt.Errorf("ent: TeamSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ts *TeamSelect) BoolX(ctx context.Context) bool { - v, err := ts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ts *TeamSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ts.sql.Query() diff --git a/entc/integration/privacy/ent/user_query.go b/entc/integration/privacy/ent/user_query.go index 2bb6a03a63..2816d8449e 100644 --- a/entc/integration/privacy/ent/user_query.go +++ b/entc/integration/privacy/ent/user_query.go @@ -342,15 +342,17 @@ func (uq *UserQuery) WithTasks(opts ...func(*TaskQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +370,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -619,6 +624,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -642,209 +648,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -886,6 +689,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -899,201 +703,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/entc/integration/template/ent/ent.go b/entc/integration/template/ent/ent.go index 8964b5f7d1..f3d8a09bce 100644 --- a/entc/integration/template/ent/ent.go +++ b/entc/integration/template/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -265,3 +266,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/entc/integration/template/ent/group_query.go b/entc/integration/template/ent/group_query.go index 3130977a20..620179e74d 100644 --- a/entc/integration/template/ent/group_query.go +++ b/entc/integration/template/ent/group_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -271,15 +270,17 @@ func (gq *GroupQuery) Clone() *GroupQuery { // Scan(ctx, &v) // func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -297,7 +298,10 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { // func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -456,6 +460,7 @@ func (gq *GroupQuery) Modify(modifier func(s *sql.Selector)) *GroupQuery { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -479,209 +484,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -723,6 +525,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -736,201 +539,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/entc/integration/template/ent/pet_query.go b/entc/integration/template/ent/pet_query.go index 241249cb1e..969a79a3d1 100644 --- a/entc/integration/template/ent/pet_query.go +++ b/entc/integration/template/ent/pet_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -309,15 +308,17 @@ func (pq *PetQuery) WithOwner(opts ...func(*UserQuery)) *PetQuery { // Scan(ctx, &v) // func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -335,7 +336,10 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { // func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -535,6 +539,7 @@ func (pq *PetQuery) Modify(modifier func(s *sql.Selector)) *PetQuery { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -558,209 +563,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !pet.ValidColumn(f) { @@ -802,6 +604,7 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -815,201 +618,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/entc/integration/template/ent/user_query.go b/entc/integration/template/ent/user_query.go index bc87204910..563813613f 100644 --- a/entc/integration/template/ent/user_query.go +++ b/entc/integration/template/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -344,15 +343,17 @@ func (uq *UserQuery) WithFriends(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -370,7 +371,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -629,6 +633,7 @@ func (uq *UserQuery) Modify(modifier func(s *sql.Selector)) *UserQuery { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -652,209 +657,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -896,6 +698,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -909,201 +712,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/edgeindex/ent/city_query.go b/examples/edgeindex/ent/city_query.go index 4d5bc8ca32..5f6cee7e15 100644 --- a/examples/edgeindex/ent/city_query.go +++ b/examples/edgeindex/ent/city_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (cq *CityQuery) WithStreets(opts ...func(*StreetQuery)) *CityQuery { // Scan(ctx, &v) // func (cq *CityQuery) GroupBy(field string, fields ...string) *CityGroupBy { - group := &CityGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CityGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = city.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (cq *CityQuery) GroupBy(field string, fields ...string) *CityGroupBy { // func (cq *CityQuery) Select(fields ...string) *CitySelect { cq.fields = append(cq.fields, fields...) - return &CitySelect{CityQuery: cq} + selbuild := &CitySelect{CityQuery: cq} + selbuild.label = city.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CityQuery) prepareQuery(ctx context.Context) error { @@ -511,6 +515,7 @@ func (cq *CityQuery) sqlQuery(ctx context.Context) *sql.Selector { // CityGroupBy is the group-by builder for City entities. type CityGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -534,209 +539,6 @@ func (cgb *CityGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CityGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CityGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CityGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CityGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CityGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{city.Label} - default: - err = fmt.Errorf("ent: CityGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CityGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CityGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CityGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CityGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CityGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{city.Label} - default: - err = fmt.Errorf("ent: CityGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CityGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CityGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CityGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CityGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CityGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{city.Label} - default: - err = fmt.Errorf("ent: CityGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CityGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CityGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CityGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CityGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CityGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{city.Label} - default: - err = fmt.Errorf("ent: CityGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CityGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CityGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !city.ValidColumn(f) { @@ -778,6 +580,7 @@ func (cgb *CityGroupBy) sqlQuery() *sql.Selector { // CitySelect is the builder for selecting fields of City entities. type CitySelect struct { *CityQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -791,201 +594,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CitySelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{city.Label} - default: - err = fmt.Errorf("ent: CitySelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CitySelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CitySelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{city.Label} - default: - err = fmt.Errorf("ent: CitySelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CitySelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CitySelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{city.Label} - default: - err = fmt.Errorf("ent: CitySelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CitySelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CitySelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{city.Label} - default: - err = fmt.Errorf("ent: CitySelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CitySelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CitySelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/examples/edgeindex/ent/ent.go b/examples/edgeindex/ent/ent.go index 2e6c794e52..fdc2cd9581 100644 --- a/examples/edgeindex/ent/ent.go +++ b/examples/edgeindex/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -263,3 +264,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/edgeindex/ent/street_query.go b/examples/edgeindex/ent/street_query.go index b34f688040..0b20371152 100644 --- a/examples/edgeindex/ent/street_query.go +++ b/examples/edgeindex/ent/street_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (sq *StreetQuery) WithCity(opts ...func(*CityQuery)) *StreetQuery { // Scan(ctx, &v) // func (sq *StreetQuery) GroupBy(field string, fields ...string) *StreetGroupBy { - group := &StreetGroupBy{config: sq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &StreetGroupBy{config: sq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := sq.prepareQuery(ctx); err != nil { return nil, err } return sq.sqlQuery(ctx), nil } - return group + grbuild.label = street.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (sq *StreetQuery) GroupBy(field string, fields ...string) *StreetGroupBy { // func (sq *StreetQuery) Select(fields ...string) *StreetSelect { sq.fields = append(sq.fields, fields...) - return &StreetSelect{StreetQuery: sq} + selbuild := &StreetSelect{StreetQuery: sq} + selbuild.label = street.Label + selbuild.flds, selbuild.scan = &sq.fields, selbuild.Scan + return selbuild } func (sq *StreetQuery) prepareQuery(ctx context.Context) error { @@ -518,6 +522,7 @@ func (sq *StreetQuery) sqlQuery(ctx context.Context) *sql.Selector { // StreetGroupBy is the group-by builder for Street entities. type StreetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -541,209 +546,6 @@ func (sgb *StreetGroupBy) Scan(ctx context.Context, v interface{}) error { return sgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (sgb *StreetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := sgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *StreetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: StreetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (sgb *StreetGroupBy) StringsX(ctx context.Context) []string { - v, err := sgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *StreetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = sgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{street.Label} - default: - err = fmt.Errorf("ent: StreetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (sgb *StreetGroupBy) StringX(ctx context.Context) string { - v, err := sgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *StreetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: StreetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (sgb *StreetGroupBy) IntsX(ctx context.Context) []int { - v, err := sgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *StreetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = sgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{street.Label} - default: - err = fmt.Errorf("ent: StreetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (sgb *StreetGroupBy) IntX(ctx context.Context) int { - v, err := sgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *StreetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: StreetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (sgb *StreetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := sgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *StreetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = sgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{street.Label} - default: - err = fmt.Errorf("ent: StreetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (sgb *StreetGroupBy) Float64X(ctx context.Context) float64 { - v, err := sgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (sgb *StreetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(sgb.fields) > 1 { - return nil, errors.New("ent: StreetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := sgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (sgb *StreetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := sgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (sgb *StreetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = sgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{street.Label} - default: - err = fmt.Errorf("ent: StreetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (sgb *StreetGroupBy) BoolX(ctx context.Context) bool { - v, err := sgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (sgb *StreetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range sgb.fields { if !street.ValidColumn(f) { @@ -785,6 +587,7 @@ func (sgb *StreetGroupBy) sqlQuery() *sql.Selector { // StreetSelect is the builder for selecting fields of Street entities. type StreetSelect struct { *StreetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -798,201 +601,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ss *StreetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ss.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{street.Label} - default: - err = fmt.Errorf("ent: StreetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ss *StreetSelect) StringX(ctx context.Context) string { - v, err := ss.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ss *StreetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ss.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{street.Label} - default: - err = fmt.Errorf("ent: StreetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ss *StreetSelect) IntX(ctx context.Context) int { - v, err := ss.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ss *StreetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ss.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{street.Label} - default: - err = fmt.Errorf("ent: StreetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ss *StreetSelect) Float64X(ctx context.Context) float64 { - v, err := ss.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ss *StreetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ss.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{street.Label} - default: - err = fmt.Errorf("ent: StreetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ss *StreetSelect) BoolX(ctx context.Context) bool { - v, err := ss.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ss *StreetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ss.sql.Query() diff --git a/examples/entcpkg/ent/ent.go b/examples/entcpkg/ent/ent.go index b3c29681e3..a25423dbce 100644 --- a/examples/entcpkg/ent/ent.go +++ b/examples/entcpkg/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/entcpkg/ent/user_query.go b/examples/entcpkg/ent/user_query.go index 5dc82fbc11..5e2834efe6 100644 --- a/examples/entcpkg/ent/user_query.go +++ b/examples/entcpkg/ent/user_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (uq *UserQuery) Clone() *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -706,6 +508,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/fs/ent/ent.go b/examples/fs/ent/ent.go index baeaad64ad..7dfb1ed5a7 100644 --- a/examples/fs/ent/ent.go +++ b/examples/fs/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/fs/ent/file_query.go b/examples/fs/ent/file_query.go index f094e00c60..914b4385be 100644 --- a/examples/fs/ent/file_query.go +++ b/examples/fs/ent/file_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -340,15 +339,17 @@ func (fq *FileQuery) WithChildren(opts ...func(*FileQuery)) *FileQuery { // Scan(ctx, &v) // func (fq *FileQuery) GroupBy(field string, fields ...string) *FileGroupBy { - group := &FileGroupBy{config: fq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &FileGroupBy{config: fq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := fq.prepareQuery(ctx); err != nil { return nil, err } return fq.sqlQuery(ctx), nil } - return group + grbuild.label = file.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -366,7 +367,10 @@ func (fq *FileQuery) GroupBy(field string, fields ...string) *FileGroupBy { // func (fq *FileQuery) Select(fields ...string) *FileSelect { fq.fields = append(fq.fields, fields...) - return &FileSelect{FileQuery: fq} + selbuild := &FileSelect{FileQuery: fq} + selbuild.label = file.Label + selbuild.flds, selbuild.scan = &fq.fields, selbuild.Scan + return selbuild } func (fq *FileQuery) prepareQuery(ctx context.Context) error { @@ -568,6 +572,7 @@ func (fq *FileQuery) sqlQuery(ctx context.Context) *sql.Selector { // FileGroupBy is the group-by builder for File entities. type FileGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -591,209 +596,6 @@ func (fgb *FileGroupBy) Scan(ctx context.Context, v interface{}) error { return fgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fgb *FileGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := fgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fgb *FileGroupBy) StringsX(ctx context.Context) []string { - v, err := fgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fgb *FileGroupBy) StringX(ctx context.Context) string { - v, err := fgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fgb *FileGroupBy) IntsX(ctx context.Context) []int { - v, err := fgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fgb *FileGroupBy) IntX(ctx context.Context) int { - v, err := fgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fgb *FileGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := fgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fgb *FileGroupBy) Float64X(ctx context.Context) float64 { - v, err := fgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(fgb.fields) > 1 { - return nil, errors.New("ent: FileGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := fgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fgb *FileGroupBy) BoolsX(ctx context.Context) []bool { - v, err := fgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (fgb *FileGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fgb *FileGroupBy) BoolX(ctx context.Context) bool { - v, err := fgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fgb *FileGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range fgb.fields { if !file.ValidColumn(f) { @@ -835,6 +637,7 @@ func (fgb *FileGroupBy) sqlQuery() *sql.Selector { // FileSelect is the builder for selecting fields of File entities. type FileSelect struct { *FileQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -848,201 +651,6 @@ func (fs *FileSelect) Scan(ctx context.Context, v interface{}) error { return fs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (fs *FileSelect) ScanX(ctx context.Context, v interface{}) { - if err := fs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Strings(ctx context.Context) ([]string, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (fs *FileSelect) StringsX(ctx context.Context) []string { - v, err := fs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = fs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (fs *FileSelect) StringX(ctx context.Context) string { - v, err := fs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Ints(ctx context.Context) ([]int, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (fs *FileSelect) IntsX(ctx context.Context) []int { - v, err := fs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = fs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (fs *FileSelect) IntX(ctx context.Context) int { - v, err := fs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (fs *FileSelect) Float64sX(ctx context.Context) []float64 { - v, err := fs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = fs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (fs *FileSelect) Float64X(ctx context.Context) float64 { - v, err := fs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Bools(ctx context.Context) ([]bool, error) { - if len(fs.fields) > 1 { - return nil, errors.New("ent: FileSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := fs.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (fs *FileSelect) BoolsX(ctx context.Context) []bool { - v, err := fs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (fs *FileSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = fs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{file.Label} - default: - err = fmt.Errorf("ent: FileSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (fs *FileSelect) BoolX(ctx context.Context) bool { - v, err := fs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (fs *FileSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := fs.sql.Query() diff --git a/examples/m2m2types/ent/ent.go b/examples/m2m2types/ent/ent.go index a93e0e39ae..9bd3798c2a 100644 --- a/examples/m2m2types/ent/ent.go +++ b/examples/m2m2types/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -263,3 +264,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/m2m2types/ent/group_query.go b/examples/m2m2types/ent/group_query.go index 9deee58742..afc239abac 100644 --- a/examples/m2m2types/ent/group_query.go +++ b/examples/m2m2types/ent/group_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (gq *GroupQuery) WithUsers(opts ...func(*UserQuery)) *GroupQuery { // Scan(ctx, &v) // func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { // func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -547,6 +551,7 @@ func (gq *GroupQuery) sqlQuery(ctx context.Context) *sql.Selector { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -570,209 +575,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -814,6 +616,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -827,201 +630,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/examples/m2m2types/ent/user_query.go b/examples/m2m2types/ent/user_query.go index 3bc8b65498..45c4f6062f 100644 --- a/examples/m2m2types/ent/user_query.go +++ b/examples/m2m2types/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (uq *UserQuery) WithGroups(opts ...func(*GroupQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -547,6 +551,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -570,209 +575,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -814,6 +616,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -827,201 +630,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/m2mbidi/ent/ent.go b/examples/m2mbidi/ent/ent.go index e7341cbd71..f4ea4dd039 100644 --- a/examples/m2mbidi/ent/ent.go +++ b/examples/m2mbidi/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/m2mbidi/ent/user_query.go b/examples/m2mbidi/ent/user_query.go index 1a685d4f7a..97ec4b0bba 100644 --- a/examples/m2mbidi/ent/user_query.go +++ b/examples/m2mbidi/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -305,15 +304,17 @@ func (uq *UserQuery) WithFriends(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -331,7 +332,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -546,6 +550,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -569,209 +574,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -813,6 +615,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -826,201 +629,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/m2mrecur/ent/ent.go b/examples/m2mrecur/ent/ent.go index 68b174dc46..7aea071442 100644 --- a/examples/m2mrecur/ent/ent.go +++ b/examples/m2mrecur/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/m2mrecur/ent/user_query.go b/examples/m2mrecur/ent/user_query.go index de6a52cd00..941003a3e9 100644 --- a/examples/m2mrecur/ent/user_query.go +++ b/examples/m2mrecur/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -340,15 +339,17 @@ func (uq *UserQuery) WithFollowing(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -366,7 +367,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -647,6 +651,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -670,209 +675,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -914,6 +716,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -927,201 +730,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/o2m2types/ent/ent.go b/examples/o2m2types/ent/ent.go index e56a9a251a..01c2029ecd 100644 --- a/examples/o2m2types/ent/ent.go +++ b/examples/o2m2types/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -263,3 +264,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/o2m2types/ent/pet_query.go b/examples/o2m2types/ent/pet_query.go index 7c87a83d16..c976c30d3a 100644 --- a/examples/o2m2types/ent/pet_query.go +++ b/examples/o2m2types/ent/pet_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (pq *PetQuery) WithOwner(opts ...func(*UserQuery)) *PetQuery { // Scan(ctx, &v) // func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { // func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -518,6 +522,7 @@ func (pq *PetQuery) sqlQuery(ctx context.Context) *sql.Selector { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -541,209 +546,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !pet.ValidColumn(f) { @@ -785,6 +587,7 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -798,201 +601,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/examples/o2m2types/ent/user_query.go b/examples/o2m2types/ent/user_query.go index feee4c8241..614c168a7d 100644 --- a/examples/o2m2types/ent/user_query.go +++ b/examples/o2m2types/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (uq *UserQuery) WithPets(opts ...func(*PetQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -511,6 +515,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -534,209 +539,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -778,6 +580,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -791,201 +594,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/o2mrecur/ent/ent.go b/examples/o2mrecur/ent/ent.go index 9e654a0a72..05c3b2e243 100644 --- a/examples/o2mrecur/ent/ent.go +++ b/examples/o2mrecur/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/o2mrecur/ent/node_query.go b/examples/o2mrecur/ent/node_query.go index ef6830b732..34f817e0fd 100644 --- a/examples/o2mrecur/ent/node_query.go +++ b/examples/o2mrecur/ent/node_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -341,15 +340,17 @@ func (nq *NodeQuery) WithChildren(opts ...func(*NodeQuery)) *NodeQuery { // Scan(ctx, &v) // func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { - group := &NodeGroupBy{config: nq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &NodeGroupBy{config: nq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := nq.prepareQuery(ctx); err != nil { return nil, err } return nq.sqlQuery(ctx), nil } - return group + grbuild.label = node.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -367,7 +368,10 @@ func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { // func (nq *NodeQuery) Select(fields ...string) *NodeSelect { nq.fields = append(nq.fields, fields...) - return &NodeSelect{NodeQuery: nq} + selbuild := &NodeSelect{NodeQuery: nq} + selbuild.label = node.Label + selbuild.flds, selbuild.scan = &nq.fields, selbuild.Scan + return selbuild } func (nq *NodeQuery) prepareQuery(ctx context.Context) error { @@ -583,6 +587,7 @@ func (nq *NodeQuery) sqlQuery(ctx context.Context) *sql.Selector { // NodeGroupBy is the group-by builder for Node entities. type NodeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -606,209 +611,6 @@ func (ngb *NodeGroupBy) Scan(ctx context.Context, v interface{}) error { return ngb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ngb *NodeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ngb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ngb *NodeGroupBy) StringsX(ctx context.Context) []string { - v, err := ngb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ngb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ngb *NodeGroupBy) StringX(ctx context.Context) string { - v, err := ngb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ngb *NodeGroupBy) IntsX(ctx context.Context) []int { - v, err := ngb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ngb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ngb *NodeGroupBy) IntX(ctx context.Context) int { - v, err := ngb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ngb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ngb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ngb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ngb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ngb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolX(ctx context.Context) bool { - v, err := ngb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ngb *NodeGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ngb.fields { if !node.ValidColumn(f) { @@ -850,6 +652,7 @@ func (ngb *NodeGroupBy) sqlQuery() *sql.Selector { // NodeSelect is the builder for selecting fields of Node entities. type NodeSelect struct { *NodeQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -863,201 +666,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ns.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ns *NodeSelect) StringX(ctx context.Context) string { - v, err := ns.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ns.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ns *NodeSelect) IntX(ctx context.Context) int { - v, err := ns.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ns.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ns *NodeSelect) Float64X(ctx context.Context) float64 { - v, err := ns.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ns.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ns *NodeSelect) BoolX(ctx context.Context) bool { - v, err := ns.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ns *NodeSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ns.sql.Query() diff --git a/examples/o2o2types/ent/card_query.go b/examples/o2o2types/ent/card_query.go index 17dac84923..06898275cc 100644 --- a/examples/o2o2types/ent/card_query.go +++ b/examples/o2o2types/ent/card_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (cq *CardQuery) WithOwner(opts ...func(*UserQuery)) *CardQuery { // Scan(ctx, &v) // func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { - group := &CardGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CardGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = card.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (cq *CardQuery) GroupBy(field string, fields ...string) *CardGroupBy { // func (cq *CardQuery) Select(fields ...string) *CardSelect { cq.fields = append(cq.fields, fields...) - return &CardSelect{CardQuery: cq} + selbuild := &CardSelect{CardQuery: cq} + selbuild.label = card.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CardQuery) prepareQuery(ctx context.Context) error { @@ -518,6 +522,7 @@ func (cq *CardQuery) sqlQuery(ctx context.Context) *sql.Selector { // CardGroupBy is the group-by builder for Card entities. type CardGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -541,209 +546,6 @@ func (cgb *CardGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CardGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CardGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CardGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CardGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CardGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CardGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CardGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CardGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CardGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CardGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CardGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CardGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !card.ValidColumn(f) { @@ -785,6 +587,7 @@ func (cgb *CardGroupBy) sqlQuery() *sql.Selector { // CardSelect is the builder for selecting fields of Card entities. type CardSelect struct { *CardQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -798,201 +601,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CardSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CardSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CardSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CardSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{card.Label} - default: - err = fmt.Errorf("ent: CardSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CardSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CardSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/examples/o2o2types/ent/ent.go b/examples/o2o2types/ent/ent.go index 591b52d960..eabaab71c6 100644 --- a/examples/o2o2types/ent/ent.go +++ b/examples/o2o2types/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -263,3 +264,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/o2o2types/ent/user_query.go b/examples/o2o2types/ent/user_query.go index 1ccec47938..3acc0c55e8 100644 --- a/examples/o2o2types/ent/user_query.go +++ b/examples/o2o2types/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (uq *UserQuery) WithCard(opts ...func(*CardQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -510,6 +514,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -533,209 +538,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -777,6 +579,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -790,201 +593,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/o2obidi/ent/ent.go b/examples/o2obidi/ent/ent.go index 3fc487293a..0896127e55 100644 --- a/examples/o2obidi/ent/ent.go +++ b/examples/o2obidi/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/o2obidi/ent/user_query.go b/examples/o2obidi/ent/user_query.go index e6727979c0..50deaed5bc 100644 --- a/examples/o2obidi/ent/user_query.go +++ b/examples/o2obidi/ent/user_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -305,15 +304,17 @@ func (uq *UserQuery) WithSpouse(opts ...func(*UserQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -331,7 +332,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -517,6 +521,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -540,209 +545,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -784,6 +586,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -797,201 +600,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/o2orecur/ent/ent.go b/examples/o2orecur/ent/ent.go index a603b04fc6..ddc3ba9701 100644 --- a/examples/o2orecur/ent/ent.go +++ b/examples/o2orecur/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/o2orecur/ent/node_query.go b/examples/o2orecur/ent/node_query.go index 830bcc9927..af1014f59b 100644 --- a/examples/o2orecur/ent/node_query.go +++ b/examples/o2orecur/ent/node_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -341,15 +340,17 @@ func (nq *NodeQuery) WithNext(opts ...func(*NodeQuery)) *NodeQuery { // Scan(ctx, &v) // func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { - group := &NodeGroupBy{config: nq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &NodeGroupBy{config: nq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := nq.prepareQuery(ctx); err != nil { return nil, err } return nq.sqlQuery(ctx), nil } - return group + grbuild.label = node.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -367,7 +368,10 @@ func (nq *NodeQuery) GroupBy(field string, fields ...string) *NodeGroupBy { // func (nq *NodeQuery) Select(fields ...string) *NodeSelect { nq.fields = append(nq.fields, fields...) - return &NodeSelect{NodeQuery: nq} + selbuild := &NodeSelect{NodeQuery: nq} + selbuild.label = node.Label + selbuild.flds, selbuild.scan = &nq.fields, selbuild.Scan + return selbuild } func (nq *NodeQuery) prepareQuery(ctx context.Context) error { @@ -582,6 +586,7 @@ func (nq *NodeQuery) sqlQuery(ctx context.Context) *sql.Selector { // NodeGroupBy is the group-by builder for Node entities. type NodeGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -605,209 +610,6 @@ func (ngb *NodeGroupBy) Scan(ctx context.Context, v interface{}) error { return ngb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ngb *NodeGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ngb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ngb *NodeGroupBy) StringsX(ctx context.Context) []string { - v, err := ngb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ngb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ngb *NodeGroupBy) StringX(ctx context.Context) string { - v, err := ngb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ngb *NodeGroupBy) IntsX(ctx context.Context) []int { - v, err := ngb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ngb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ngb *NodeGroupBy) IntX(ctx context.Context) int { - v, err := ngb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ngb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ngb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ngb *NodeGroupBy) Float64X(ctx context.Context) float64 { - v, err := ngb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ngb.fields) > 1 { - return nil, errors.New("ent: NodeGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ngb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ngb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ngb *NodeGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ngb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ngb *NodeGroupBy) BoolX(ctx context.Context) bool { - v, err := ngb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ngb *NodeGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ngb.fields { if !node.ValidColumn(f) { @@ -849,6 +651,7 @@ func (ngb *NodeGroupBy) sqlQuery() *sql.Selector { // NodeSelect is the builder for selecting fields of Node entities. type NodeSelect struct { *NodeQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -862,201 +665,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ns.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ns *NodeSelect) StringX(ctx context.Context) string { - v, err := ns.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ns.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ns *NodeSelect) IntX(ctx context.Context) int { - v, err := ns.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ns.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ns *NodeSelect) Float64X(ctx context.Context) float64 { - v, err := ns.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ns *NodeSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ns.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{node.Label} - default: - err = fmt.Errorf("ent: NodeSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ns *NodeSelect) BoolX(ctx context.Context) bool { - v, err := ns.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ns *NodeSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ns.sql.Query() diff --git a/examples/privacyadmin/ent/ent.go b/examples/privacyadmin/ent/ent.go index 23b732a380..56b596f41c 100644 --- a/examples/privacyadmin/ent/ent.go +++ b/examples/privacyadmin/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/privacyadmin/ent/user_query.go b/examples/privacyadmin/ent/user_query.go index 7f943a2f68..0e3ad6882d 100644 --- a/examples/privacyadmin/ent/user_query.go +++ b/examples/privacyadmin/ent/user_query.go @@ -268,15 +268,17 @@ func (uq *UserQuery) Clone() *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +296,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -445,6 +450,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -468,209 +474,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -712,6 +515,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -725,201 +529,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/privacytenant/ent/ent.go b/examples/privacytenant/ent/ent.go index 372bdc24a2..00de15c5e9 100644 --- a/examples/privacytenant/ent/ent.go +++ b/examples/privacytenant/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -265,3 +266,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/privacytenant/ent/group_query.go b/examples/privacytenant/ent/group_query.go index c43495acfb..a58f43e4c3 100644 --- a/examples/privacytenant/ent/group_query.go +++ b/examples/privacytenant/ent/group_query.go @@ -343,15 +343,17 @@ func (gq *GroupQuery) WithUsers(opts ...func(*UserQuery)) *GroupQuery { // Scan(ctx, &v) // func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -369,7 +371,10 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { // func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -627,6 +632,7 @@ func (gq *GroupQuery) sqlQuery(ctx context.Context) *sql.Selector { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -650,209 +656,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -894,6 +697,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -907,201 +711,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/examples/privacytenant/ent/tenant_query.go b/examples/privacytenant/ent/tenant_query.go index e126b36174..b7e21c5495 100644 --- a/examples/privacytenant/ent/tenant_query.go +++ b/examples/privacytenant/ent/tenant_query.go @@ -268,15 +268,17 @@ func (tq *TenantQuery) Clone() *TenantQuery { // Scan(ctx, &v) // func (tq *TenantQuery) GroupBy(field string, fields ...string) *TenantGroupBy { - group := &TenantGroupBy{config: tq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &TenantGroupBy{config: tq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := tq.prepareQuery(ctx); err != nil { return nil, err } return tq.sqlQuery(ctx), nil } - return group + grbuild.label = tenant.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +296,10 @@ func (tq *TenantQuery) GroupBy(field string, fields ...string) *TenantGroupBy { // func (tq *TenantQuery) Select(fields ...string) *TenantSelect { tq.fields = append(tq.fields, fields...) - return &TenantSelect{TenantQuery: tq} + selbuild := &TenantSelect{TenantQuery: tq} + selbuild.label = tenant.Label + selbuild.flds, selbuild.scan = &tq.fields, selbuild.Scan + return selbuild } func (tq *TenantQuery) prepareQuery(ctx context.Context) error { @@ -445,6 +450,7 @@ func (tq *TenantQuery) sqlQuery(ctx context.Context) *sql.Selector { // TenantGroupBy is the group-by builder for Tenant entities. type TenantGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -468,209 +474,6 @@ func (tgb *TenantGroupBy) Scan(ctx context.Context, v interface{}) error { return tgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (tgb *TenantGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := tgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TenantGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TenantGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (tgb *TenantGroupBy) StringsX(ctx context.Context) []string { - v, err := tgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TenantGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = tgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{tenant.Label} - default: - err = fmt.Errorf("ent: TenantGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (tgb *TenantGroupBy) StringX(ctx context.Context) string { - v, err := tgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TenantGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TenantGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (tgb *TenantGroupBy) IntsX(ctx context.Context) []int { - v, err := tgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TenantGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = tgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{tenant.Label} - default: - err = fmt.Errorf("ent: TenantGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (tgb *TenantGroupBy) IntX(ctx context.Context) int { - v, err := tgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TenantGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TenantGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (tgb *TenantGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := tgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TenantGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = tgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{tenant.Label} - default: - err = fmt.Errorf("ent: TenantGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (tgb *TenantGroupBy) Float64X(ctx context.Context) float64 { - v, err := tgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (tgb *TenantGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(tgb.fields) > 1 { - return nil, errors.New("ent: TenantGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := tgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (tgb *TenantGroupBy) BoolsX(ctx context.Context) []bool { - v, err := tgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (tgb *TenantGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = tgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{tenant.Label} - default: - err = fmt.Errorf("ent: TenantGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (tgb *TenantGroupBy) BoolX(ctx context.Context) bool { - v, err := tgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (tgb *TenantGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range tgb.fields { if !tenant.ValidColumn(f) { @@ -712,6 +515,7 @@ func (tgb *TenantGroupBy) sqlQuery() *sql.Selector { // TenantSelect is the builder for selecting fields of Tenant entities. type TenantSelect struct { *TenantQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -725,201 +529,6 @@ func (ts *TenantSelect) Scan(ctx context.Context, v interface{}) error { return ts.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ts *TenantSelect) ScanX(ctx context.Context, v interface{}) { - if err := ts.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (ts *TenantSelect) Strings(ctx context.Context) ([]string, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TenantSelect.Strings is not achievable when selecting more than 1 field") - } - var v []string - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ts *TenantSelect) StringsX(ctx context.Context) []string { - v, err := ts.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ts *TenantSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ts.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{tenant.Label} - default: - err = fmt.Errorf("ent: TenantSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ts *TenantSelect) StringX(ctx context.Context) string { - v, err := ts.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (ts *TenantSelect) Ints(ctx context.Context) ([]int, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TenantSelect.Ints is not achievable when selecting more than 1 field") - } - var v []int - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ts *TenantSelect) IntsX(ctx context.Context) []int { - v, err := ts.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ts *TenantSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ts.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{tenant.Label} - default: - err = fmt.Errorf("ent: TenantSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ts *TenantSelect) IntX(ctx context.Context) int { - v, err := ts.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (ts *TenantSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TenantSelect.Float64s is not achievable when selecting more than 1 field") - } - var v []float64 - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ts *TenantSelect) Float64sX(ctx context.Context) []float64 { - v, err := ts.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ts *TenantSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ts.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{tenant.Label} - default: - err = fmt.Errorf("ent: TenantSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ts *TenantSelect) Float64X(ctx context.Context) float64 { - v, err := ts.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (ts *TenantSelect) Bools(ctx context.Context) ([]bool, error) { - if len(ts.fields) > 1 { - return nil, errors.New("ent: TenantSelect.Bools is not achievable when selecting more than 1 field") - } - var v []bool - if err := ts.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ts *TenantSelect) BoolsX(ctx context.Context) []bool { - v, err := ts.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ts *TenantSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ts.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{tenant.Label} - default: - err = fmt.Errorf("ent: TenantSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ts *TenantSelect) BoolX(ctx context.Context) bool { - v, err := ts.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ts *TenantSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ts.sql.Query() diff --git a/examples/privacytenant/ent/user_query.go b/examples/privacytenant/ent/user_query.go index aeed75f735..d98cc6b7d3 100644 --- a/examples/privacytenant/ent/user_query.go +++ b/examples/privacytenant/ent/user_query.go @@ -343,15 +343,17 @@ func (uq *UserQuery) WithGroups(opts ...func(*GroupQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -369,7 +371,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -627,6 +632,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -650,209 +656,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -894,6 +697,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -907,201 +711,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/start/ent/car_query.go b/examples/start/ent/car_query.go index 743d8b75c4..4b986e882e 100644 --- a/examples/start/ent/car_query.go +++ b/examples/start/ent/car_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (cq *CarQuery) WithOwner(opts ...func(*UserQuery)) *CarQuery { // Scan(ctx, &v) // func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { - group := &CarGroupBy{config: cq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &CarGroupBy{config: cq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := cq.prepareQuery(ctx); err != nil { return nil, err } return cq.sqlQuery(ctx), nil } - return group + grbuild.label = car.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (cq *CarQuery) GroupBy(field string, fields ...string) *CarGroupBy { // func (cq *CarQuery) Select(fields ...string) *CarSelect { cq.fields = append(cq.fields, fields...) - return &CarSelect{CarQuery: cq} + selbuild := &CarSelect{CarQuery: cq} + selbuild.label = car.Label + selbuild.flds, selbuild.scan = &cq.fields, selbuild.Scan + return selbuild } func (cq *CarQuery) prepareQuery(ctx context.Context) error { @@ -518,6 +522,7 @@ func (cq *CarQuery) sqlQuery(ctx context.Context) *sql.Selector { // CarGroupBy is the group-by builder for Car entities. type CarGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -541,209 +546,6 @@ func (cgb *CarGroupBy) Scan(ctx context.Context, v interface{}) error { return cgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cgb *CarGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := cgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (cgb *CarGroupBy) StringsX(ctx context.Context) []string { - v, err := cgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cgb *CarGroupBy) StringX(ctx context.Context) string { - v, err := cgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (cgb *CarGroupBy) IntsX(ctx context.Context) []int { - v, err := cgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cgb *CarGroupBy) IntX(ctx context.Context) int { - v, err := cgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (cgb *CarGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := cgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cgb *CarGroupBy) Float64X(ctx context.Context) float64 { - v, err := cgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(cgb.fields) > 1 { - return nil, errors.New("ent: CarGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := cgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (cgb *CarGroupBy) BoolsX(ctx context.Context) []bool { - v, err := cgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (cgb *CarGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cgb *CarGroupBy) BoolX(ctx context.Context) bool { - v, err := cgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cgb *CarGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range cgb.fields { if !car.ValidColumn(f) { @@ -785,6 +587,7 @@ func (cgb *CarGroupBy) sqlQuery() *sql.Selector { // CarSelect is the builder for selecting fields of Car entities. type CarSelect struct { *CarQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -798,201 +601,6 @@ func (cs *CarSelect) Scan(ctx context.Context, v interface{}) error { return cs.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (cs *CarSelect) ScanX(ctx context.Context, v interface{}) { - if err := cs.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Strings(ctx context.Context) ([]string, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) StringsX(ctx context.Context) []string { - v, err := cs.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = cs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (cs *CarSelect) StringX(ctx context.Context) string { - v, err := cs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Ints(ctx context.Context) ([]int, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) IntsX(ctx context.Context) []int { - v, err := cs.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = cs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (cs *CarSelect) IntX(ctx context.Context) int { - v, err := cs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64s(ctx context.Context) ([]float64, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) Float64sX(ctx context.Context) []float64 { - v, err := cs.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = cs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (cs *CarSelect) Float64X(ctx context.Context) float64 { - v, err := cs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bools(ctx context.Context) ([]bool, error) { - if len(cs.fields) > 1 { - return nil, errors.New("ent: CarSelect.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 *CarSelect) BoolsX(ctx context.Context) []bool { - v, err := cs.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (cs *CarSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = cs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{car.Label} - default: - err = fmt.Errorf("ent: CarSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (cs *CarSelect) BoolX(ctx context.Context) bool { - v, err := cs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (cs *CarSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := cs.sql.Query() diff --git a/examples/start/ent/ent.go b/examples/start/ent/ent.go index ebf4dd1f93..c7317b1425 100644 --- a/examples/start/ent/ent.go +++ b/examples/start/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -265,3 +266,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/start/ent/group_query.go b/examples/start/ent/group_query.go index ff45f0c9c3..04f18cbb32 100644 --- a/examples/start/ent/group_query.go +++ b/examples/start/ent/group_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -306,15 +305,17 @@ func (gq *GroupQuery) WithUsers(opts ...func(*UserQuery)) *GroupQuery { // Scan(ctx, &v) // func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -332,7 +333,10 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { // func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -547,6 +551,7 @@ func (gq *GroupQuery) sqlQuery(ctx context.Context) *sql.Selector { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -570,209 +575,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -814,6 +616,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -827,201 +630,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/examples/start/ent/user_query.go b/examples/start/ent/user_query.go index 15bd651a74..9561ece40e 100644 --- a/examples/start/ent/user_query.go +++ b/examples/start/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -342,15 +341,17 @@ func (uq *UserQuery) WithGroups(opts ...func(*GroupQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +369,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -613,6 +617,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -636,209 +641,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -880,6 +682,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -893,201 +696,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/traversal/ent/ent.go b/examples/traversal/ent/ent.go index 38f0865038..a5163f88f0 100644 --- a/examples/traversal/ent/ent.go +++ b/examples/traversal/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -265,3 +266,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/traversal/ent/group_query.go b/examples/traversal/ent/group_query.go index 26d2ebdf36..b36c6ebd3b 100644 --- a/examples/traversal/ent/group_query.go +++ b/examples/traversal/ent/group_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -342,15 +341,17 @@ func (gq *GroupQuery) WithAdmin(opts ...func(*UserQuery)) *GroupQuery { // Scan(ctx, &v) // func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { - group := &GroupGroupBy{config: gq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &GroupGroupBy{config: gq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := gq.prepareQuery(ctx); err != nil { return nil, err } return gq.sqlQuery(ctx), nil } - return group + grbuild.label = group.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +369,10 @@ func (gq *GroupQuery) GroupBy(field string, fields ...string) *GroupGroupBy { // func (gq *GroupQuery) Select(fields ...string) *GroupSelect { gq.fields = append(gq.fields, fields...) - return &GroupSelect{GroupQuery: gq} + selbuild := &GroupSelect{GroupQuery: gq} + selbuild.label = group.Label + selbuild.flds, selbuild.scan = &gq.fields, selbuild.Scan + return selbuild } func (gq *GroupQuery) prepareQuery(ctx context.Context) error { @@ -620,6 +624,7 @@ func (gq *GroupQuery) sqlQuery(ctx context.Context) *sql.Selector { // GroupGroupBy is the group-by builder for Group entities. type GroupGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -643,209 +648,6 @@ func (ggb *GroupGroupBy) Scan(ctx context.Context, v interface{}) error { return ggb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ggb *GroupGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ggb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ggb *GroupGroupBy) StringsX(ctx context.Context) []string { - v, err := ggb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ggb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ggb *GroupGroupBy) StringX(ctx context.Context) string { - v, err := ggb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ggb *GroupGroupBy) IntsX(ctx context.Context) []int { - v, err := ggb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ggb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ggb *GroupGroupBy) IntX(ctx context.Context) int { - v, err := ggb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ggb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ggb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ggb *GroupGroupBy) Float64X(ctx context.Context) float64 { - v, err := ggb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ggb.fields) > 1 { - return nil, errors.New("ent: GroupGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ggb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ggb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ggb *GroupGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ggb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ggb *GroupGroupBy) BoolX(ctx context.Context) bool { - v, err := ggb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ggb *GroupGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ggb.fields { if !group.ValidColumn(f) { @@ -887,6 +689,7 @@ func (ggb *GroupGroupBy) sqlQuery() *sql.Selector { // GroupSelect is the builder for selecting fields of Group entities. type GroupSelect struct { *GroupQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -900,201 +703,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = gs.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (gs *GroupSelect) StringX(ctx context.Context) string { - v, err := gs.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = gs.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (gs *GroupSelect) IntX(ctx context.Context) int { - v, err := gs.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = gs.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (gs *GroupSelect) Float64X(ctx context.Context) float64 { - v, err := gs.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (gs *GroupSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = gs.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{group.Label} - default: - err = fmt.Errorf("ent: GroupSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (gs *GroupSelect) BoolX(ctx context.Context) bool { - v, err := gs.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (gs *GroupSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := gs.sql.Query() diff --git a/examples/traversal/ent/pet_query.go b/examples/traversal/ent/pet_query.go index 8897a21453..21e28f2cb2 100644 --- a/examples/traversal/ent/pet_query.go +++ b/examples/traversal/ent/pet_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -342,15 +341,17 @@ func (pq *PetQuery) WithOwner(opts ...func(*UserQuery)) *PetQuery { // Scan(ctx, &v) // func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { - group := &PetGroupBy{config: pq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &PetGroupBy{config: pq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := pq.prepareQuery(ctx); err != nil { return nil, err } return pq.sqlQuery(ctx), nil } - return group + grbuild.label = pet.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -368,7 +369,10 @@ func (pq *PetQuery) GroupBy(field string, fields ...string) *PetGroupBy { // func (pq *PetQuery) Select(fields ...string) *PetSelect { pq.fields = append(pq.fields, fields...) - return &PetSelect{PetQuery: pq} + selbuild := &PetSelect{PetQuery: pq} + selbuild.label = pet.Label + selbuild.flds, selbuild.scan = &pq.fields, selbuild.Scan + return selbuild } func (pq *PetQuery) prepareQuery(ctx context.Context) error { @@ -620,6 +624,7 @@ func (pq *PetQuery) sqlQuery(ctx context.Context) *sql.Selector { // PetGroupBy is the group-by builder for Pet entities. type PetGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -643,209 +648,6 @@ func (pgb *PetGroupBy) Scan(ctx context.Context, v interface{}) error { return pgb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (pgb *PetGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := pgb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (pgb *PetGroupBy) StringsX(ctx context.Context) []string { - v, err := pgb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = pgb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (pgb *PetGroupBy) StringX(ctx context.Context) string { - v, err := pgb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (pgb *PetGroupBy) IntsX(ctx context.Context) []int { - v, err := pgb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = pgb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (pgb *PetGroupBy) IntX(ctx context.Context) int { - v, err := pgb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (pgb *PetGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := pgb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = pgb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (pgb *PetGroupBy) Float64X(ctx context.Context) float64 { - v, err := pgb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(pgb.fields) > 1 { - return nil, errors.New("ent: PetGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := pgb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (pgb *PetGroupBy) BoolsX(ctx context.Context) []bool { - v, err := pgb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (pgb *PetGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = pgb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (pgb *PetGroupBy) BoolX(ctx context.Context) bool { - v, err := pgb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (pgb *PetGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range pgb.fields { if !pet.ValidColumn(f) { @@ -887,6 +689,7 @@ func (pgb *PetGroupBy) sqlQuery() *sql.Selector { // PetSelect is the builder for selecting fields of Pet entities. type PetSelect struct { *PetQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -900,201 +703,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ps.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ps *PetSelect) StringX(ctx context.Context) string { - v, err := ps.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ps.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ps *PetSelect) IntX(ctx context.Context) int { - v, err := ps.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ps.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ps *PetSelect) Float64X(ctx context.Context) float64 { - v, err := ps.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (ps *PetSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ps.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{pet.Label} - default: - err = fmt.Errorf("ent: PetSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ps *PetSelect) BoolX(ctx context.Context) bool { - v, err := ps.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ps *PetSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := ps.sql.Query() diff --git a/examples/traversal/ent/user_query.go b/examples/traversal/ent/user_query.go index 48ecb49ff2..b6656a153e 100644 --- a/examples/traversal/ent/user_query.go +++ b/examples/traversal/ent/user_query.go @@ -9,7 +9,6 @@ package ent import ( "context" "database/sql/driver" - "errors" "fmt" "math" @@ -412,15 +411,17 @@ func (uq *UserQuery) WithManage(opts ...func(*GroupQuery)) *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -438,7 +439,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -779,6 +783,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -802,209 +807,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -1046,6 +848,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -1059,201 +862,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query() diff --git a/examples/version/ent/ent.go b/examples/version/ent/ent.go index 1685d06740..57fe4b8c68 100644 --- a/examples/version/ent/ent.go +++ b/examples/version/ent/ent.go @@ -7,6 +7,7 @@ package ent import ( + "context" "errors" "fmt" @@ -261,3 +262,205 @@ func IsConstraintError(err error) bool { var e *ConstraintError return errors.As(err, &e) } + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + scan func(context.Context, interface{}) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v interface{}) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} diff --git a/examples/version/ent/user_query.go b/examples/version/ent/user_query.go index ba7c844553..619bec3628 100644 --- a/examples/version/ent/user_query.go +++ b/examples/version/ent/user_query.go @@ -8,7 +8,6 @@ package ent import ( "context" - "errors" "fmt" "math" @@ -268,15 +267,17 @@ func (uq *UserQuery) Clone() *UserQuery { // Scan(ctx, &v) // func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { - group := &UserGroupBy{config: uq.config} - group.fields = append([]string{field}, fields...) - group.path = func(ctx context.Context) (prev *sql.Selector, err error) { + grbuild := &UserGroupBy{config: uq.config} + grbuild.fields = append([]string{field}, fields...) + grbuild.path = func(ctx context.Context) (prev *sql.Selector, err error) { if err := uq.prepareQuery(ctx); err != nil { return nil, err } return uq.sqlQuery(ctx), nil } - return group + grbuild.label = user.Label + grbuild.flds, grbuild.scan = &grbuild.fields, grbuild.Scan + return grbuild } // Select allows the selection one or more fields/columns for the given query, @@ -294,7 +295,10 @@ func (uq *UserQuery) GroupBy(field string, fields ...string) *UserGroupBy { // func (uq *UserQuery) Select(fields ...string) *UserSelect { uq.fields = append(uq.fields, fields...) - return &UserSelect{UserQuery: uq} + selbuild := &UserSelect{UserQuery: uq} + selbuild.label = user.Label + selbuild.flds, selbuild.scan = &uq.fields, selbuild.Scan + return selbuild } func (uq *UserQuery) prepareQuery(ctx context.Context) error { @@ -439,6 +443,7 @@ func (uq *UserQuery) sqlQuery(ctx context.Context) *sql.Selector { // UserGroupBy is the group-by builder for User entities. type UserGroupBy struct { config + selector fields []string fns []AggregateFunc // intermediate query (i.e. traversal path). @@ -462,209 +467,6 @@ func (ugb *UserGroupBy) Scan(ctx context.Context, v interface{}) error { return ugb.sqlScan(ctx, v) } -// ScanX is like Scan, but panics if an error occurs. -func (ugb *UserGroupBy) ScanX(ctx context.Context, v interface{}) { - if err := ugb.Scan(ctx, v); err != nil { - panic(err) - } -} - -// Strings returns list of strings from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Strings(ctx context.Context) ([]string, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Strings is not achievable when grouping more than 1 field") - } - var v []string - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// StringsX is like Strings, but panics if an error occurs. -func (ugb *UserGroupBy) StringsX(ctx context.Context) []string { - v, err := ugb.Strings(ctx) - if err != nil { - panic(err) - } - return v -} - -// String returns a single string from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = ugb.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (ugb *UserGroupBy) StringX(ctx context.Context) string { - v, err := ugb.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Ints(ctx context.Context) ([]int, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Ints is not achievable when grouping more than 1 field") - } - var v []int - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// IntsX is like Ints, but panics if an error occurs. -func (ugb *UserGroupBy) IntsX(ctx context.Context) []int { - v, err := ugb.Ints(ctx) - if err != nil { - panic(err) - } - return v -} - -// Int returns a single int from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = ugb.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (ugb *UserGroupBy) IntX(ctx context.Context) int { - v, err := ugb.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64s(ctx context.Context) ([]float64, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Float64s is not achievable when grouping more than 1 field") - } - var v []float64 - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// Float64sX is like Float64s, but panics if an error occurs. -func (ugb *UserGroupBy) Float64sX(ctx context.Context) []float64 { - v, err := ugb.Float64s(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64 returns a single float64 from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = ugb.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (ugb *UserGroupBy) Float64X(ctx context.Context) float64 { - v, err := ugb.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from group-by. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bools(ctx context.Context) ([]bool, error) { - if len(ugb.fields) > 1 { - return nil, errors.New("ent: UserGroupBy.Bools is not achievable when grouping more than 1 field") - } - var v []bool - if err := ugb.Scan(ctx, &v); err != nil { - return nil, err - } - return v, nil -} - -// BoolsX is like Bools, but panics if an error occurs. -func (ugb *UserGroupBy) BoolsX(ctx context.Context) []bool { - v, err := ugb.Bools(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bool returns a single bool from a group-by query. -// It is only allowed when executing a group-by query with one field. -func (ugb *UserGroupBy) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = ugb.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserGroupBy.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (ugb *UserGroupBy) BoolX(ctx context.Context) bool { - v, err := ugb.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (ugb *UserGroupBy) sqlScan(ctx context.Context, v interface{}) error { for _, f := range ugb.fields { if !user.ValidColumn(f) { @@ -706,6 +508,7 @@ func (ugb *UserGroupBy) sqlQuery() *sql.Selector { // UserSelect is the builder for selecting fields of User entities. type UserSelect struct { *UserQuery + selector // intermediate query (i.e. traversal path). sql *sql.Selector } @@ -719,201 +522,6 @@ 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 a 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 -} - -// String returns a single string from a selector. It is only allowed when selecting one field. -func (us *UserSelect) String(ctx context.Context) (_ string, err error) { - var v []string - if v, err = us.Strings(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Strings returned %d results when one was expected", len(v)) - } - return -} - -// StringX is like String, but panics if an error occurs. -func (us *UserSelect) StringX(ctx context.Context) string { - v, err := us.String(ctx) - if err != nil { - panic(err) - } - return v -} - -// Ints returns list of ints from a 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 -} - -// Int returns a single int from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Int(ctx context.Context) (_ int, err error) { - var v []int - if v, err = us.Ints(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Ints returned %d results when one was expected", len(v)) - } - return -} - -// IntX is like Int, but panics if an error occurs. -func (us *UserSelect) IntX(ctx context.Context) int { - v, err := us.Int(ctx) - if err != nil { - panic(err) - } - return v -} - -// Float64s returns list of float64s from a 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 -} - -// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Float64(ctx context.Context) (_ float64, err error) { - var v []float64 - if v, err = us.Float64s(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Float64s returned %d results when one was expected", len(v)) - } - return -} - -// Float64X is like Float64, but panics if an error occurs. -func (us *UserSelect) Float64X(ctx context.Context) float64 { - v, err := us.Float64(ctx) - if err != nil { - panic(err) - } - return v -} - -// Bools returns list of bools from a 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 -} - -// Bool returns a single bool from a selector. It is only allowed when selecting one field. -func (us *UserSelect) Bool(ctx context.Context) (_ bool, err error) { - var v []bool - if v, err = us.Bools(ctx); err != nil { - return - } - switch len(v) { - case 1: - return v[0], nil - case 0: - err = &NotFoundError{user.Label} - default: - err = fmt.Errorf("ent: UserSelect.Bools returned %d results when one was expected", len(v)) - } - return -} - -// BoolX is like Bool, but panics if an error occurs. -func (us *UserSelect) BoolX(ctx context.Context) bool { - v, err := us.Bool(ctx) - if err != nil { - panic(err) - } - return v -} - func (us *UserSelect) sqlScan(ctx context.Context, v interface{}) error { rows := &sql.Rows{} query, args := us.sql.Query()