@@ -360,6 +360,30 @@ func (q *Query) ExcludeColumn(columns ...string) *Query {
360360 return q
361361}
362362
363+ // AppendColumn appends column to the list of default columns if they weren't set,
364+ // while Column method overrides defaults
365+ func (q * Query ) AppendColumn (columns ... string ) * Query {
366+ t := q .tableModel .Table ()
367+ if q .columns == nil {
368+ for _ , f := range t .Fields {
369+ q .columns = append (q .columns , SafeQuery ("?.?" , t .Alias , f .Column ))
370+ }
371+ }
372+ return q .Column (columns ... )
373+ }
374+
375+ // AppendColumnExpr appends column expression to the list of default columns if they weren't set,
376+ // while ColumnExpr method overrides defaults
377+ func (q * Query ) AppendColumnExpr (expr string , params ... interface {}) * Query {
378+ t := q .tableModel .Table ()
379+ if q .columns == nil {
380+ for _ , f := range t .Fields {
381+ q .columns = append (q .columns , SafeQuery ("?.?" , t .Alias , f .Column ))
382+ }
383+ }
384+ return q .ColumnExpr (expr , params ... )
385+ }
386+
363387func (q * Query ) excludeColumn (column string ) bool {
364388 for i := 0 ; i < len (q .columns ); i ++ {
365389 app , ok := q .columns [i ].(fieldAppender )
@@ -482,60 +506,60 @@ func (q *Query) WhereOr(condition string, params ...interface{}) *Query {
482506
483507// WhereGroup encloses conditions added in the function in parentheses.
484508//
485- // q.Where("TRUE").
486- // WhereGroup(func(q *pg.Query) (*pg.Query, error) {
487- // q = q.WhereOr("FALSE").WhereOr("TRUE").
488- // return q, nil
489- // })
509+ // q.Where("TRUE").
510+ // WhereGroup(func(q *pg.Query) (*pg.Query, error) {
511+ // q = q.WhereOr("FALSE").WhereOr("TRUE").
512+ // return q, nil
513+ // })
490514//
491515// generates
492516//
493- // WHERE TRUE AND (FALSE OR TRUE)
517+ // WHERE TRUE AND (FALSE OR TRUE)
494518func (q * Query ) WhereGroup (fn func (* Query ) (* Query , error )) * Query {
495519 return q .whereGroup (" AND " , fn )
496520}
497521
498522// WhereGroup encloses conditions added in the function in parentheses.
499523//
500- // q.Where("TRUE").
501- // WhereNotGroup(func(q *pg.Query) (*pg.Query, error) {
502- // q = q.WhereOr("FALSE").WhereOr("TRUE").
503- // return q, nil
504- // })
524+ // q.Where("TRUE").
525+ // WhereNotGroup(func(q *pg.Query) (*pg.Query, error) {
526+ // q = q.WhereOr("FALSE").WhereOr("TRUE").
527+ // return q, nil
528+ // })
505529//
506530// generates
507531//
508- // WHERE TRUE AND NOT (FALSE OR TRUE)
532+ // WHERE TRUE AND NOT (FALSE OR TRUE)
509533func (q * Query ) WhereNotGroup (fn func (* Query ) (* Query , error )) * Query {
510534 return q .whereGroup (" AND NOT " , fn )
511535}
512536
513537// WhereOrGroup encloses conditions added in the function in parentheses.
514538//
515- // q.Where("TRUE").
516- // WhereOrGroup(func(q *pg.Query) (*pg.Query, error) {
517- // q = q.Where("FALSE").Where("TRUE").
518- // return q, nil
519- // })
539+ // q.Where("TRUE").
540+ // WhereOrGroup(func(q *pg.Query) (*pg.Query, error) {
541+ // q = q.Where("FALSE").Where("TRUE").
542+ // return q, nil
543+ // })
520544//
521545// generates
522546//
523- // WHERE TRUE OR (FALSE AND TRUE)
547+ // WHERE TRUE OR (FALSE AND TRUE)
524548func (q * Query ) WhereOrGroup (fn func (* Query ) (* Query , error )) * Query {
525549 return q .whereGroup (" OR " , fn )
526550}
527551
528552// WhereOrGroup encloses conditions added in the function in parentheses.
529553//
530- // q.Where("TRUE").
531- // WhereOrGroup(func(q *pg.Query) (*pg.Query, error) {
532- // q = q.Where("FALSE").Where("TRUE").
533- // return q, nil
534- // })
554+ // q.Where("TRUE").
555+ // WhereOrGroup(func(q *pg.Query) (*pg.Query, error) {
556+ // q = q.Where("FALSE").Where("TRUE").
557+ // return q, nil
558+ // })
535559//
536560// generates
537561//
538- // WHERE TRUE OR NOT (FALSE AND TRUE)
562+ // WHERE TRUE OR NOT (FALSE AND TRUE)
539563func (q * Query ) WhereOrNotGroup (fn func (* Query ) (* Query , error )) * Query {
540564 return q .whereGroup (" OR NOT " , fn )
541565}
@@ -591,7 +615,7 @@ func (q *Query) addWhere(f queryWithSepAppender) {
591615// WherePK adds condition based on the model primary keys.
592616// Usually it is the same as:
593617//
594- // Where("id = ?id")
618+ // Where("id = ?id")
595619func (q * Query ) WherePK () * Query {
596620 if ! q .hasTableModel () {
597621 q .err (errModelNil )
@@ -801,7 +825,7 @@ func (q *Query) countSelectQuery(column string) *SelectQuery {
801825// First sorts rows by primary key and selects the first row.
802826// It is a shortcut for:
803827//
804- // q.OrderExpr("id ASC").Limit(1)
828+ // q.OrderExpr("id ASC").Limit(1)
805829func (q * Query ) First () error {
806830 table := q .tableModel .Table ()
807831
@@ -816,7 +840,7 @@ func (q *Query) First() error {
816840// Last sorts rows by primary key and selects the last row.
817841// It is a shortcut for:
818842//
819- // q.OrderExpr("id DESC").Limit(1)
843+ // q.OrderExpr("id DESC").Limit(1)
820844func (q * Query ) Last () error {
821845 table := q .tableModel .Table ()
822846
0 commit comments