from.go 891 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package clause
  2. import "strings"
  3. type From struct {
  4. otherClauses []Clause
  5. }
  6. func NewFrom(otherClauses []Clause) *From {
  7. return &From{
  8. otherClauses: otherClauses,
  9. }
  10. }
  11. func (clause *From) Clause() (string, error) {
  12. if clause.otherClauses == nil || len(clause.otherClauses) == 0 {
  13. return "", nil
  14. }
  15. otherClauseBuilder := strings.Builder{}
  16. for _, otherClause := range clause.otherClauses {
  17. otherClauseStr, err := otherClause.Clause()
  18. if err != nil {
  19. return "", err
  20. }
  21. otherClauseBuilder.WriteString(" " + otherClauseStr)
  22. }
  23. clauseBuilder := strings.Builder{}
  24. clauseBuilder.WriteString("FROM\n")
  25. clauseBuilder.WriteString(otherClauseBuilder.String())
  26. return clauseBuilder.String(), nil
  27. }
  28. func (clause *From) Args() []any {
  29. args := make([]any, 0)
  30. for _, otherClause := range clause.otherClauses {
  31. args = append(args, otherClause.Args()...)
  32. }
  33. return args
  34. }