bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/pkg/database/ent/bouncer_query.go (about)

     1  // Code generated by entc, DO NOT EDIT.
     2  
     3  package ent
     4  
     5  import (
     6  	"context"
     7  	"errors"
     8  	"fmt"
     9  	"math"
    10  
    11  	"entgo.io/ent/dialect/sql"
    12  	"entgo.io/ent/dialect/sql/sqlgraph"
    13  	"entgo.io/ent/schema/field"
    14  	"bitbucket.org/Aishee/synsec/pkg/database/ent/bouncer"
    15  	"bitbucket.org/Aishee/synsec/pkg/database/ent/predicate"
    16  )
    17  
    18  // BouncerQuery is the builder for querying Bouncer entities.
    19  type BouncerQuery struct {
    20  	config
    21  	limit      *int
    22  	offset     *int
    23  	order      []OrderFunc
    24  	fields     []string
    25  	predicates []predicate.Bouncer
    26  	// intermediate query (i.e. traversal path).
    27  	sql  *sql.Selector
    28  	path func(context.Context) (*sql.Selector, error)
    29  }
    30  
    31  // Where adds a new predicate for the BouncerQuery builder.
    32  func (bq *BouncerQuery) Where(ps ...predicate.Bouncer) *BouncerQuery {
    33  	bq.predicates = append(bq.predicates, ps...)
    34  	return bq
    35  }
    36  
    37  // Limit adds a limit step to the query.
    38  func (bq *BouncerQuery) Limit(limit int) *BouncerQuery {
    39  	bq.limit = &limit
    40  	return bq
    41  }
    42  
    43  // Offset adds an offset step to the query.
    44  func (bq *BouncerQuery) Offset(offset int) *BouncerQuery {
    45  	bq.offset = &offset
    46  	return bq
    47  }
    48  
    49  // Order adds an order step to the query.
    50  func (bq *BouncerQuery) Order(o ...OrderFunc) *BouncerQuery {
    51  	bq.order = append(bq.order, o...)
    52  	return bq
    53  }
    54  
    55  // First returns the first Bouncer entity from the query.
    56  // Returns a *NotFoundError when no Bouncer was found.
    57  func (bq *BouncerQuery) First(ctx context.Context) (*Bouncer, error) {
    58  	nodes, err := bq.Limit(1).All(ctx)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  	if len(nodes) == 0 {
    63  		return nil, &NotFoundError{bouncer.Label}
    64  	}
    65  	return nodes[0], nil
    66  }
    67  
    68  // FirstX is like First, but panics if an error occurs.
    69  func (bq *BouncerQuery) FirstX(ctx context.Context) *Bouncer {
    70  	node, err := bq.First(ctx)
    71  	if err != nil && !IsNotFound(err) {
    72  		panic(err)
    73  	}
    74  	return node
    75  }
    76  
    77  // FirstID returns the first Bouncer ID from the query.
    78  // Returns a *NotFoundError when no Bouncer ID was found.
    79  func (bq *BouncerQuery) FirstID(ctx context.Context) (id int, err error) {
    80  	var ids []int
    81  	if ids, err = bq.Limit(1).IDs(ctx); err != nil {
    82  		return
    83  	}
    84  	if len(ids) == 0 {
    85  		err = &NotFoundError{bouncer.Label}
    86  		return
    87  	}
    88  	return ids[0], nil
    89  }
    90  
    91  // FirstIDX is like FirstID, but panics if an error occurs.
    92  func (bq *BouncerQuery) FirstIDX(ctx context.Context) int {
    93  	id, err := bq.FirstID(ctx)
    94  	if err != nil && !IsNotFound(err) {
    95  		panic(err)
    96  	}
    97  	return id
    98  }
    99  
   100  // Only returns a single Bouncer entity found by the query, ensuring it only returns one.
   101  // Returns a *NotSingularError when exactly one Bouncer entity is not found.
   102  // Returns a *NotFoundError when no Bouncer entities are found.
   103  func (bq *BouncerQuery) Only(ctx context.Context) (*Bouncer, error) {
   104  	nodes, err := bq.Limit(2).All(ctx)
   105  	if err != nil {
   106  		return nil, err
   107  	}
   108  	switch len(nodes) {
   109  	case 1:
   110  		return nodes[0], nil
   111  	case 0:
   112  		return nil, &NotFoundError{bouncer.Label}
   113  	default:
   114  		return nil, &NotSingularError{bouncer.Label}
   115  	}
   116  }
   117  
   118  // OnlyX is like Only, but panics if an error occurs.
   119  func (bq *BouncerQuery) OnlyX(ctx context.Context) *Bouncer {
   120  	node, err := bq.Only(ctx)
   121  	if err != nil {
   122  		panic(err)
   123  	}
   124  	return node
   125  }
   126  
   127  // OnlyID is like Only, but returns the only Bouncer ID in the query.
   128  // Returns a *NotSingularError when exactly one Bouncer ID is not found.
   129  // Returns a *NotFoundError when no entities are found.
   130  func (bq *BouncerQuery) OnlyID(ctx context.Context) (id int, err error) {
   131  	var ids []int
   132  	if ids, err = bq.Limit(2).IDs(ctx); err != nil {
   133  		return
   134  	}
   135  	switch len(ids) {
   136  	case 1:
   137  		id = ids[0]
   138  	case 0:
   139  		err = &NotFoundError{bouncer.Label}
   140  	default:
   141  		err = &NotSingularError{bouncer.Label}
   142  	}
   143  	return
   144  }
   145  
   146  // OnlyIDX is like OnlyID, but panics if an error occurs.
   147  func (bq *BouncerQuery) OnlyIDX(ctx context.Context) int {
   148  	id, err := bq.OnlyID(ctx)
   149  	if err != nil {
   150  		panic(err)
   151  	}
   152  	return id
   153  }
   154  
   155  // All executes the query and returns a list of Bouncers.
   156  func (bq *BouncerQuery) All(ctx context.Context) ([]*Bouncer, error) {
   157  	if err := bq.prepareQuery(ctx); err != nil {
   158  		return nil, err
   159  	}
   160  	return bq.sqlAll(ctx)
   161  }
   162  
   163  // AllX is like All, but panics if an error occurs.
   164  func (bq *BouncerQuery) AllX(ctx context.Context) []*Bouncer {
   165  	nodes, err := bq.All(ctx)
   166  	if err != nil {
   167  		panic(err)
   168  	}
   169  	return nodes
   170  }
   171  
   172  // IDs executes the query and returns a list of Bouncer IDs.
   173  func (bq *BouncerQuery) IDs(ctx context.Context) ([]int, error) {
   174  	var ids []int
   175  	if err := bq.Select(bouncer.FieldID).Scan(ctx, &ids); err != nil {
   176  		return nil, err
   177  	}
   178  	return ids, nil
   179  }
   180  
   181  // IDsX is like IDs, but panics if an error occurs.
   182  func (bq *BouncerQuery) IDsX(ctx context.Context) []int {
   183  	ids, err := bq.IDs(ctx)
   184  	if err != nil {
   185  		panic(err)
   186  	}
   187  	return ids
   188  }
   189  
   190  // Count returns the count of the given query.
   191  func (bq *BouncerQuery) Count(ctx context.Context) (int, error) {
   192  	if err := bq.prepareQuery(ctx); err != nil {
   193  		return 0, err
   194  	}
   195  	return bq.sqlCount(ctx)
   196  }
   197  
   198  // CountX is like Count, but panics if an error occurs.
   199  func (bq *BouncerQuery) CountX(ctx context.Context) int {
   200  	count, err := bq.Count(ctx)
   201  	if err != nil {
   202  		panic(err)
   203  	}
   204  	return count
   205  }
   206  
   207  // Exist returns true if the query has elements in the graph.
   208  func (bq *BouncerQuery) Exist(ctx context.Context) (bool, error) {
   209  	if err := bq.prepareQuery(ctx); err != nil {
   210  		return false, err
   211  	}
   212  	return bq.sqlExist(ctx)
   213  }
   214  
   215  // ExistX is like Exist, but panics if an error occurs.
   216  func (bq *BouncerQuery) ExistX(ctx context.Context) bool {
   217  	exist, err := bq.Exist(ctx)
   218  	if err != nil {
   219  		panic(err)
   220  	}
   221  	return exist
   222  }
   223  
   224  // Clone returns a duplicate of the BouncerQuery builder, including all associated steps. It can be
   225  // used to prepare common query builders and use them differently after the clone is made.
   226  func (bq *BouncerQuery) Clone() *BouncerQuery {
   227  	if bq == nil {
   228  		return nil
   229  	}
   230  	return &BouncerQuery{
   231  		config:     bq.config,
   232  		limit:      bq.limit,
   233  		offset:     bq.offset,
   234  		order:      append([]OrderFunc{}, bq.order...),
   235  		predicates: append([]predicate.Bouncer{}, bq.predicates...),
   236  		// clone intermediate query.
   237  		sql:  bq.sql.Clone(),
   238  		path: bq.path,
   239  	}
   240  }
   241  
   242  // GroupBy is used to group vertices by one or more fields/columns.
   243  // It is often used with aggregate functions, like: count, max, mean, min, sum.
   244  //
   245  // Example:
   246  //
   247  //	var v []struct {
   248  //		CreatedAt time.Time `json:"created_at,omitempty"`
   249  //		Count int `json:"count,omitempty"`
   250  //	}
   251  //
   252  //	client.Bouncer.Query().
   253  //		GroupBy(bouncer.FieldCreatedAt).
   254  //		Aggregate(ent.Count()).
   255  //		Scan(ctx, &v)
   256  //
   257  func (bq *BouncerQuery) GroupBy(field string, fields ...string) *BouncerGroupBy {
   258  	group := &BouncerGroupBy{config: bq.config}
   259  	group.fields = append([]string{field}, fields...)
   260  	group.path = func(ctx context.Context) (prev *sql.Selector, err error) {
   261  		if err := bq.prepareQuery(ctx); err != nil {
   262  			return nil, err
   263  		}
   264  		return bq.sqlQuery(ctx), nil
   265  	}
   266  	return group
   267  }
   268  
   269  // Select allows the selection one or more fields/columns for the given query,
   270  // instead of selecting all fields in the entity.
   271  //
   272  // Example:
   273  //
   274  //	var v []struct {
   275  //		CreatedAt time.Time `json:"created_at,omitempty"`
   276  //	}
   277  //
   278  //	client.Bouncer.Query().
   279  //		Select(bouncer.FieldCreatedAt).
   280  //		Scan(ctx, &v)
   281  //
   282  func (bq *BouncerQuery) Select(field string, fields ...string) *BouncerSelect {
   283  	bq.fields = append([]string{field}, fields...)
   284  	return &BouncerSelect{BouncerQuery: bq}
   285  }
   286  
   287  func (bq *BouncerQuery) prepareQuery(ctx context.Context) error {
   288  	for _, f := range bq.fields {
   289  		if !bouncer.ValidColumn(f) {
   290  			return &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
   291  		}
   292  	}
   293  	if bq.path != nil {
   294  		prev, err := bq.path(ctx)
   295  		if err != nil {
   296  			return err
   297  		}
   298  		bq.sql = prev
   299  	}
   300  	return nil
   301  }
   302  
   303  func (bq *BouncerQuery) sqlAll(ctx context.Context) ([]*Bouncer, error) {
   304  	var (
   305  		nodes = []*Bouncer{}
   306  		_spec = bq.querySpec()
   307  	)
   308  	_spec.ScanValues = func(columns []string) ([]interface{}, error) {
   309  		node := &Bouncer{config: bq.config}
   310  		nodes = append(nodes, node)
   311  		return node.scanValues(columns)
   312  	}
   313  	_spec.Assign = func(columns []string, values []interface{}) error {
   314  		if len(nodes) == 0 {
   315  			return fmt.Errorf("ent: Assign called without calling ScanValues")
   316  		}
   317  		node := nodes[len(nodes)-1]
   318  		return node.assignValues(columns, values)
   319  	}
   320  	if err := sqlgraph.QueryNodes(ctx, bq.driver, _spec); err != nil {
   321  		return nil, err
   322  	}
   323  	if len(nodes) == 0 {
   324  		return nodes, nil
   325  	}
   326  	return nodes, nil
   327  }
   328  
   329  func (bq *BouncerQuery) sqlCount(ctx context.Context) (int, error) {
   330  	_spec := bq.querySpec()
   331  	return sqlgraph.CountNodes(ctx, bq.driver, _spec)
   332  }
   333  
   334  func (bq *BouncerQuery) sqlExist(ctx context.Context) (bool, error) {
   335  	n, err := bq.sqlCount(ctx)
   336  	if err != nil {
   337  		return false, fmt.Errorf("ent: check existence: %w", err)
   338  	}
   339  	return n > 0, nil
   340  }
   341  
   342  func (bq *BouncerQuery) querySpec() *sqlgraph.QuerySpec {
   343  	_spec := &sqlgraph.QuerySpec{
   344  		Node: &sqlgraph.NodeSpec{
   345  			Table:   bouncer.Table,
   346  			Columns: bouncer.Columns,
   347  			ID: &sqlgraph.FieldSpec{
   348  				Type:   field.TypeInt,
   349  				Column: bouncer.FieldID,
   350  			},
   351  		},
   352  		From:   bq.sql,
   353  		Unique: true,
   354  	}
   355  	if fields := bq.fields; len(fields) > 0 {
   356  		_spec.Node.Columns = make([]string, 0, len(fields))
   357  		_spec.Node.Columns = append(_spec.Node.Columns, bouncer.FieldID)
   358  		for i := range fields {
   359  			if fields[i] != bouncer.FieldID {
   360  				_spec.Node.Columns = append(_spec.Node.Columns, fields[i])
   361  			}
   362  		}
   363  	}
   364  	if ps := bq.predicates; len(ps) > 0 {
   365  		_spec.Predicate = func(selector *sql.Selector) {
   366  			for i := range ps {
   367  				ps[i](selector)
   368  			}
   369  		}
   370  	}
   371  	if limit := bq.limit; limit != nil {
   372  		_spec.Limit = *limit
   373  	}
   374  	if offset := bq.offset; offset != nil {
   375  		_spec.Offset = *offset
   376  	}
   377  	if ps := bq.order; len(ps) > 0 {
   378  		_spec.Order = func(selector *sql.Selector) {
   379  			for i := range ps {
   380  				ps[i](selector, bouncer.ValidColumn)
   381  			}
   382  		}
   383  	}
   384  	return _spec
   385  }
   386  
   387  func (bq *BouncerQuery) sqlQuery(ctx context.Context) *sql.Selector {
   388  	builder := sql.Dialect(bq.driver.Dialect())
   389  	t1 := builder.Table(bouncer.Table)
   390  	selector := builder.Select(t1.Columns(bouncer.Columns...)...).From(t1)
   391  	if bq.sql != nil {
   392  		selector = bq.sql
   393  		selector.Select(selector.Columns(bouncer.Columns...)...)
   394  	}
   395  	for _, p := range bq.predicates {
   396  		p(selector)
   397  	}
   398  	for _, p := range bq.order {
   399  		p(selector, bouncer.ValidColumn)
   400  	}
   401  	if offset := bq.offset; offset != nil {
   402  		// limit is mandatory for offset clause. We start
   403  		// with default value, and override it below if needed.
   404  		selector.Offset(*offset).Limit(math.MaxInt32)
   405  	}
   406  	if limit := bq.limit; limit != nil {
   407  		selector.Limit(*limit)
   408  	}
   409  	return selector
   410  }
   411  
   412  // BouncerGroupBy is the group-by builder for Bouncer entities.
   413  type BouncerGroupBy struct {
   414  	config
   415  	fields []string
   416  	fns    []AggregateFunc
   417  	// intermediate query (i.e. traversal path).
   418  	sql  *sql.Selector
   419  	path func(context.Context) (*sql.Selector, error)
   420  }
   421  
   422  // Aggregate adds the given aggregation functions to the group-by query.
   423  func (bgb *BouncerGroupBy) Aggregate(fns ...AggregateFunc) *BouncerGroupBy {
   424  	bgb.fns = append(bgb.fns, fns...)
   425  	return bgb
   426  }
   427  
   428  // Scan applies the group-by query and scans the result into the given value.
   429  func (bgb *BouncerGroupBy) Scan(ctx context.Context, v interface{}) error {
   430  	query, err := bgb.path(ctx)
   431  	if err != nil {
   432  		return err
   433  	}
   434  	bgb.sql = query
   435  	return bgb.sqlScan(ctx, v)
   436  }
   437  
   438  // ScanX is like Scan, but panics if an error occurs.
   439  func (bgb *BouncerGroupBy) ScanX(ctx context.Context, v interface{}) {
   440  	if err := bgb.Scan(ctx, v); err != nil {
   441  		panic(err)
   442  	}
   443  }
   444  
   445  // Strings returns list of strings from group-by.
   446  // It is only allowed when executing a group-by query with one field.
   447  func (bgb *BouncerGroupBy) Strings(ctx context.Context) ([]string, error) {
   448  	if len(bgb.fields) > 1 {
   449  		return nil, errors.New("ent: BouncerGroupBy.Strings is not achievable when grouping more than 1 field")
   450  	}
   451  	var v []string
   452  	if err := bgb.Scan(ctx, &v); err != nil {
   453  		return nil, err
   454  	}
   455  	return v, nil
   456  }
   457  
   458  // StringsX is like Strings, but panics if an error occurs.
   459  func (bgb *BouncerGroupBy) StringsX(ctx context.Context) []string {
   460  	v, err := bgb.Strings(ctx)
   461  	if err != nil {
   462  		panic(err)
   463  	}
   464  	return v
   465  }
   466  
   467  // String returns a single string from a group-by query.
   468  // It is only allowed when executing a group-by query with one field.
   469  func (bgb *BouncerGroupBy) String(ctx context.Context) (_ string, err error) {
   470  	var v []string
   471  	if v, err = bgb.Strings(ctx); err != nil {
   472  		return
   473  	}
   474  	switch len(v) {
   475  	case 1:
   476  		return v[0], nil
   477  	case 0:
   478  		err = &NotFoundError{bouncer.Label}
   479  	default:
   480  		err = fmt.Errorf("ent: BouncerGroupBy.Strings returned %d results when one was expected", len(v))
   481  	}
   482  	return
   483  }
   484  
   485  // StringX is like String, but panics if an error occurs.
   486  func (bgb *BouncerGroupBy) StringX(ctx context.Context) string {
   487  	v, err := bgb.String(ctx)
   488  	if err != nil {
   489  		panic(err)
   490  	}
   491  	return v
   492  }
   493  
   494  // Ints returns list of ints from group-by.
   495  // It is only allowed when executing a group-by query with one field.
   496  func (bgb *BouncerGroupBy) Ints(ctx context.Context) ([]int, error) {
   497  	if len(bgb.fields) > 1 {
   498  		return nil, errors.New("ent: BouncerGroupBy.Ints is not achievable when grouping more than 1 field")
   499  	}
   500  	var v []int
   501  	if err := bgb.Scan(ctx, &v); err != nil {
   502  		return nil, err
   503  	}
   504  	return v, nil
   505  }
   506  
   507  // IntsX is like Ints, but panics if an error occurs.
   508  func (bgb *BouncerGroupBy) IntsX(ctx context.Context) []int {
   509  	v, err := bgb.Ints(ctx)
   510  	if err != nil {
   511  		panic(err)
   512  	}
   513  	return v
   514  }
   515  
   516  // Int returns a single int from a group-by query.
   517  // It is only allowed when executing a group-by query with one field.
   518  func (bgb *BouncerGroupBy) Int(ctx context.Context) (_ int, err error) {
   519  	var v []int
   520  	if v, err = bgb.Ints(ctx); err != nil {
   521  		return
   522  	}
   523  	switch len(v) {
   524  	case 1:
   525  		return v[0], nil
   526  	case 0:
   527  		err = &NotFoundError{bouncer.Label}
   528  	default:
   529  		err = fmt.Errorf("ent: BouncerGroupBy.Ints returned %d results when one was expected", len(v))
   530  	}
   531  	return
   532  }
   533  
   534  // IntX is like Int, but panics if an error occurs.
   535  func (bgb *BouncerGroupBy) IntX(ctx context.Context) int {
   536  	v, err := bgb.Int(ctx)
   537  	if err != nil {
   538  		panic(err)
   539  	}
   540  	return v
   541  }
   542  
   543  // Float64s returns list of float64s from group-by.
   544  // It is only allowed when executing a group-by query with one field.
   545  func (bgb *BouncerGroupBy) Float64s(ctx context.Context) ([]float64, error) {
   546  	if len(bgb.fields) > 1 {
   547  		return nil, errors.New("ent: BouncerGroupBy.Float64s is not achievable when grouping more than 1 field")
   548  	}
   549  	var v []float64
   550  	if err := bgb.Scan(ctx, &v); err != nil {
   551  		return nil, err
   552  	}
   553  	return v, nil
   554  }
   555  
   556  // Float64sX is like Float64s, but panics if an error occurs.
   557  func (bgb *BouncerGroupBy) Float64sX(ctx context.Context) []float64 {
   558  	v, err := bgb.Float64s(ctx)
   559  	if err != nil {
   560  		panic(err)
   561  	}
   562  	return v
   563  }
   564  
   565  // Float64 returns a single float64 from a group-by query.
   566  // It is only allowed when executing a group-by query with one field.
   567  func (bgb *BouncerGroupBy) Float64(ctx context.Context) (_ float64, err error) {
   568  	var v []float64
   569  	if v, err = bgb.Float64s(ctx); err != nil {
   570  		return
   571  	}
   572  	switch len(v) {
   573  	case 1:
   574  		return v[0], nil
   575  	case 0:
   576  		err = &NotFoundError{bouncer.Label}
   577  	default:
   578  		err = fmt.Errorf("ent: BouncerGroupBy.Float64s returned %d results when one was expected", len(v))
   579  	}
   580  	return
   581  }
   582  
   583  // Float64X is like Float64, but panics if an error occurs.
   584  func (bgb *BouncerGroupBy) Float64X(ctx context.Context) float64 {
   585  	v, err := bgb.Float64(ctx)
   586  	if err != nil {
   587  		panic(err)
   588  	}
   589  	return v
   590  }
   591  
   592  // Bools returns list of bools from group-by.
   593  // It is only allowed when executing a group-by query with one field.
   594  func (bgb *BouncerGroupBy) Bools(ctx context.Context) ([]bool, error) {
   595  	if len(bgb.fields) > 1 {
   596  		return nil, errors.New("ent: BouncerGroupBy.Bools is not achievable when grouping more than 1 field")
   597  	}
   598  	var v []bool
   599  	if err := bgb.Scan(ctx, &v); err != nil {
   600  		return nil, err
   601  	}
   602  	return v, nil
   603  }
   604  
   605  // BoolsX is like Bools, but panics if an error occurs.
   606  func (bgb *BouncerGroupBy) BoolsX(ctx context.Context) []bool {
   607  	v, err := bgb.Bools(ctx)
   608  	if err != nil {
   609  		panic(err)
   610  	}
   611  	return v
   612  }
   613  
   614  // Bool returns a single bool from a group-by query.
   615  // It is only allowed when executing a group-by query with one field.
   616  func (bgb *BouncerGroupBy) Bool(ctx context.Context) (_ bool, err error) {
   617  	var v []bool
   618  	if v, err = bgb.Bools(ctx); err != nil {
   619  		return
   620  	}
   621  	switch len(v) {
   622  	case 1:
   623  		return v[0], nil
   624  	case 0:
   625  		err = &NotFoundError{bouncer.Label}
   626  	default:
   627  		err = fmt.Errorf("ent: BouncerGroupBy.Bools returned %d results when one was expected", len(v))
   628  	}
   629  	return
   630  }
   631  
   632  // BoolX is like Bool, but panics if an error occurs.
   633  func (bgb *BouncerGroupBy) BoolX(ctx context.Context) bool {
   634  	v, err := bgb.Bool(ctx)
   635  	if err != nil {
   636  		panic(err)
   637  	}
   638  	return v
   639  }
   640  
   641  func (bgb *BouncerGroupBy) sqlScan(ctx context.Context, v interface{}) error {
   642  	for _, f := range bgb.fields {
   643  		if !bouncer.ValidColumn(f) {
   644  			return &ValidationError{Name: f, err: fmt.Errorf("invalid field %q for group-by", f)}
   645  		}
   646  	}
   647  	selector := bgb.sqlQuery()
   648  	if err := selector.Err(); err != nil {
   649  		return err
   650  	}
   651  	rows := &sql.Rows{}
   652  	query, args := selector.Query()
   653  	if err := bgb.driver.Query(ctx, query, args, rows); err != nil {
   654  		return err
   655  	}
   656  	defer rows.Close()
   657  	return sql.ScanSlice(rows, v)
   658  }
   659  
   660  func (bgb *BouncerGroupBy) sqlQuery() *sql.Selector {
   661  	selector := bgb.sql
   662  	columns := make([]string, 0, len(bgb.fields)+len(bgb.fns))
   663  	columns = append(columns, bgb.fields...)
   664  	for _, fn := range bgb.fns {
   665  		columns = append(columns, fn(selector, bouncer.ValidColumn))
   666  	}
   667  	return selector.Select(columns...).GroupBy(bgb.fields...)
   668  }
   669  
   670  // BouncerSelect is the builder for selecting fields of Bouncer entities.
   671  type BouncerSelect struct {
   672  	*BouncerQuery
   673  	// intermediate query (i.e. traversal path).
   674  	sql *sql.Selector
   675  }
   676  
   677  // Scan applies the selector query and scans the result into the given value.
   678  func (bs *BouncerSelect) Scan(ctx context.Context, v interface{}) error {
   679  	if err := bs.prepareQuery(ctx); err != nil {
   680  		return err
   681  	}
   682  	bs.sql = bs.BouncerQuery.sqlQuery(ctx)
   683  	return bs.sqlScan(ctx, v)
   684  }
   685  
   686  // ScanX is like Scan, but panics if an error occurs.
   687  func (bs *BouncerSelect) ScanX(ctx context.Context, v interface{}) {
   688  	if err := bs.Scan(ctx, v); err != nil {
   689  		panic(err)
   690  	}
   691  }
   692  
   693  // Strings returns list of strings from a selector. It is only allowed when selecting one field.
   694  func (bs *BouncerSelect) Strings(ctx context.Context) ([]string, error) {
   695  	if len(bs.fields) > 1 {
   696  		return nil, errors.New("ent: BouncerSelect.Strings is not achievable when selecting more than 1 field")
   697  	}
   698  	var v []string
   699  	if err := bs.Scan(ctx, &v); err != nil {
   700  		return nil, err
   701  	}
   702  	return v, nil
   703  }
   704  
   705  // StringsX is like Strings, but panics if an error occurs.
   706  func (bs *BouncerSelect) StringsX(ctx context.Context) []string {
   707  	v, err := bs.Strings(ctx)
   708  	if err != nil {
   709  		panic(err)
   710  	}
   711  	return v
   712  }
   713  
   714  // String returns a single string from a selector. It is only allowed when selecting one field.
   715  func (bs *BouncerSelect) String(ctx context.Context) (_ string, err error) {
   716  	var v []string
   717  	if v, err = bs.Strings(ctx); err != nil {
   718  		return
   719  	}
   720  	switch len(v) {
   721  	case 1:
   722  		return v[0], nil
   723  	case 0:
   724  		err = &NotFoundError{bouncer.Label}
   725  	default:
   726  		err = fmt.Errorf("ent: BouncerSelect.Strings returned %d results when one was expected", len(v))
   727  	}
   728  	return
   729  }
   730  
   731  // StringX is like String, but panics if an error occurs.
   732  func (bs *BouncerSelect) StringX(ctx context.Context) string {
   733  	v, err := bs.String(ctx)
   734  	if err != nil {
   735  		panic(err)
   736  	}
   737  	return v
   738  }
   739  
   740  // Ints returns list of ints from a selector. It is only allowed when selecting one field.
   741  func (bs *BouncerSelect) Ints(ctx context.Context) ([]int, error) {
   742  	if len(bs.fields) > 1 {
   743  		return nil, errors.New("ent: BouncerSelect.Ints is not achievable when selecting more than 1 field")
   744  	}
   745  	var v []int
   746  	if err := bs.Scan(ctx, &v); err != nil {
   747  		return nil, err
   748  	}
   749  	return v, nil
   750  }
   751  
   752  // IntsX is like Ints, but panics if an error occurs.
   753  func (bs *BouncerSelect) IntsX(ctx context.Context) []int {
   754  	v, err := bs.Ints(ctx)
   755  	if err != nil {
   756  		panic(err)
   757  	}
   758  	return v
   759  }
   760  
   761  // Int returns a single int from a selector. It is only allowed when selecting one field.
   762  func (bs *BouncerSelect) Int(ctx context.Context) (_ int, err error) {
   763  	var v []int
   764  	if v, err = bs.Ints(ctx); err != nil {
   765  		return
   766  	}
   767  	switch len(v) {
   768  	case 1:
   769  		return v[0], nil
   770  	case 0:
   771  		err = &NotFoundError{bouncer.Label}
   772  	default:
   773  		err = fmt.Errorf("ent: BouncerSelect.Ints returned %d results when one was expected", len(v))
   774  	}
   775  	return
   776  }
   777  
   778  // IntX is like Int, but panics if an error occurs.
   779  func (bs *BouncerSelect) IntX(ctx context.Context) int {
   780  	v, err := bs.Int(ctx)
   781  	if err != nil {
   782  		panic(err)
   783  	}
   784  	return v
   785  }
   786  
   787  // Float64s returns list of float64s from a selector. It is only allowed when selecting one field.
   788  func (bs *BouncerSelect) Float64s(ctx context.Context) ([]float64, error) {
   789  	if len(bs.fields) > 1 {
   790  		return nil, errors.New("ent: BouncerSelect.Float64s is not achievable when selecting more than 1 field")
   791  	}
   792  	var v []float64
   793  	if err := bs.Scan(ctx, &v); err != nil {
   794  		return nil, err
   795  	}
   796  	return v, nil
   797  }
   798  
   799  // Float64sX is like Float64s, but panics if an error occurs.
   800  func (bs *BouncerSelect) Float64sX(ctx context.Context) []float64 {
   801  	v, err := bs.Float64s(ctx)
   802  	if err != nil {
   803  		panic(err)
   804  	}
   805  	return v
   806  }
   807  
   808  // Float64 returns a single float64 from a selector. It is only allowed when selecting one field.
   809  func (bs *BouncerSelect) Float64(ctx context.Context) (_ float64, err error) {
   810  	var v []float64
   811  	if v, err = bs.Float64s(ctx); err != nil {
   812  		return
   813  	}
   814  	switch len(v) {
   815  	case 1:
   816  		return v[0], nil
   817  	case 0:
   818  		err = &NotFoundError{bouncer.Label}
   819  	default:
   820  		err = fmt.Errorf("ent: BouncerSelect.Float64s returned %d results when one was expected", len(v))
   821  	}
   822  	return
   823  }
   824  
   825  // Float64X is like Float64, but panics if an error occurs.
   826  func (bs *BouncerSelect) Float64X(ctx context.Context) float64 {
   827  	v, err := bs.Float64(ctx)
   828  	if err != nil {
   829  		panic(err)
   830  	}
   831  	return v
   832  }
   833  
   834  // Bools returns list of bools from a selector. It is only allowed when selecting one field.
   835  func (bs *BouncerSelect) Bools(ctx context.Context) ([]bool, error) {
   836  	if len(bs.fields) > 1 {
   837  		return nil, errors.New("ent: BouncerSelect.Bools is not achievable when selecting more than 1 field")
   838  	}
   839  	var v []bool
   840  	if err := bs.Scan(ctx, &v); err != nil {
   841  		return nil, err
   842  	}
   843  	return v, nil
   844  }
   845  
   846  // BoolsX is like Bools, but panics if an error occurs.
   847  func (bs *BouncerSelect) BoolsX(ctx context.Context) []bool {
   848  	v, err := bs.Bools(ctx)
   849  	if err != nil {
   850  		panic(err)
   851  	}
   852  	return v
   853  }
   854  
   855  // Bool returns a single bool from a selector. It is only allowed when selecting one field.
   856  func (bs *BouncerSelect) Bool(ctx context.Context) (_ bool, err error) {
   857  	var v []bool
   858  	if v, err = bs.Bools(ctx); err != nil {
   859  		return
   860  	}
   861  	switch len(v) {
   862  	case 1:
   863  		return v[0], nil
   864  	case 0:
   865  		err = &NotFoundError{bouncer.Label}
   866  	default:
   867  		err = fmt.Errorf("ent: BouncerSelect.Bools returned %d results when one was expected", len(v))
   868  	}
   869  	return
   870  }
   871  
   872  // BoolX is like Bool, but panics if an error occurs.
   873  func (bs *BouncerSelect) BoolX(ctx context.Context) bool {
   874  	v, err := bs.Bool(ctx)
   875  	if err != nil {
   876  		panic(err)
   877  	}
   878  	return v
   879  }
   880  
   881  func (bs *BouncerSelect) sqlScan(ctx context.Context, v interface{}) error {
   882  	rows := &sql.Rows{}
   883  	query, args := bs.sqlQuery().Query()
   884  	if err := bs.driver.Query(ctx, query, args, rows); err != nil {
   885  		return err
   886  	}
   887  	defer rows.Close()
   888  	return sql.ScanSlice(rows, v)
   889  }
   890  
   891  func (bs *BouncerSelect) sqlQuery() sql.Querier {
   892  	selector := bs.sql
   893  	selector.Select(selector.Columns(bs.fields...)...)
   894  	return selector
   895  }