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