| 1064 | } |
| 1065 | |
| 1066 | func (q *query) selector(ctx context.Context) (*sql.Selector, error) { |
| 1067 | selector := q.builder. |
| 1068 | Select(). |
| 1069 | From(q.builder.Table(q.Node.Table).Schema(q.Node.Schema)). |
| 1070 | WithContext(ctx) |
| 1071 | if q.From != nil { |
| 1072 | selector = q.From |
| 1073 | } |
| 1074 | selector.Select(selector.Columns(q.Node.Columns...)...) |
| 1075 | if order := q.Order; order != nil { |
| 1076 | order(selector) |
| 1077 | } |
| 1078 | if pred := q.Predicate; pred != nil { |
| 1079 | pred(selector) |
| 1080 | } |
| 1081 | if q.Offset != 0 { |
| 1082 | // Limit is mandatory for the offset clause. We start |
| 1083 | // with default value, and override it below if needed. |
| 1084 | selector.Offset(q.Offset).Limit(math.MaxInt32) |
| 1085 | } |
| 1086 | if q.Limit != 0 { |
| 1087 | selector.Limit(q.Limit) |
| 1088 | } |
| 1089 | if q.Unique { |
| 1090 | selector.Distinct() |
| 1091 | } |
| 1092 | for _, m := range q.Modifiers { |
| 1093 | m(selector) |
| 1094 | } |
| 1095 | if err := selector.Err(); err != nil { |
| 1096 | return nil, err |
| 1097 | } |
| 1098 | return selector, nil |
| 1099 | } |
| 1100 | |
| 1101 | type updater struct { |
| 1102 | graph |