car_query.go 25 KB

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