123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package clause
- import "strings"
- type Select struct {
- selectClauses []string
- fromClause *From
- otherClauses []Clause
- }
- func NewSelect(selectClauses []string, fromClause *From, otherClauses ...Clause) *Select {
- return &Select{
- selectClauses: selectClauses,
- fromClause: fromClause,
- otherClauses: otherClauses,
- }
- }
- func (clause *Select) Clause() (string, error) {
- selectClauseBuilder := strings.Builder{}
- if clause.selectClauses == nil || len(clause.selectClauses) == 0 {
- selectClauseBuilder.WriteString("*\n")
- } else {
- for i, selectClause := range clause.selectClauses {
- selectClauseBuilder.WriteString(" " + selectClause)
- if i < len(clause.selectClauses)-1 {
- selectClauseBuilder.WriteString(",\n")
- } else {
- selectClauseBuilder.WriteString("\n")
- }
- }
- }
- fromClause, err := clause.fromClause.Clause()
- if err != nil {
- return "", err
- }
- otherClauseBuilder := strings.Builder{}
- for _, otherClause := range clause.otherClauses {
- otherClauseStr, err := otherClause.Clause()
- if err != nil {
- return "", err
- }
- otherClauseBuilder.WriteString(otherClauseStr)
- }
- clauseBuilder := strings.Builder{}
- clauseBuilder.WriteString("SELECT\n")
- clauseBuilder.WriteString(selectClauseBuilder.String())
- clauseBuilder.WriteString(fromClause)
- clauseBuilder.WriteString(otherClauseBuilder.String())
- return clauseBuilder.String(), nil
- }
- func (clause *Select) Args() []any {
- args := make([]any, 0)
- args = append(args, clause.fromClause.Args()...)
- for _, otherClause := range clause.otherClauses {
- args = append(args, otherClause.Args()...)
- }
- return args
- }
|