diff --git a/database/sq.go b/database/sq.go index 474c66772cac2beee97b7f811f0427c4004715b6..a2699308c4b5897edaf884fe18c929c889f30d2f 100644 --- a/database/sq.go +++ b/database/sq.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "sort" sq "github.com/Masterminds/squirrel" ) @@ -104,3 +105,32 @@ } } return q } + +func SelectAll(m Model) sq.SelectBuilder { + mf := m.Fields() + mf.buildCache() + var cols []string + for col, fields := range mf.bySQL { + for _, _ = range fields { + cols = append(cols, WithAlias(m.Alias(), col)) + } + } + sort.Strings(cols) + q := sq.Select().PlaceholderFormat(sq.Dollar) + return q.Columns(cols...) +} + +func ScanAll(m Model) []interface{} { + fms := m.Fields().All() + sort.Slice(fms, func(a, b int) bool { + return fms[a].SQL < fms[b].SQL + }) + + var fields []interface{} + for _, f := range fms { + if f.SQL != "" { + fields = append(fields, f.Ptr) + } + } + return fields +}