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 }