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