join.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package clause
  2. import (
  3. "git.sxidc.com/go-tools/utils/strutils"
  4. "strings"
  5. )
  6. type Join struct {
  7. joinType string
  8. tableName string
  9. on string
  10. }
  11. func NewJoin(tableName string, on string) *Join {
  12. return &Join{
  13. joinType: "JOIN",
  14. tableName: tableName,
  15. on: on,
  16. }
  17. }
  18. func (clause *Join) Left() *Join {
  19. clause.joinType = "LEFT JOIN"
  20. return clause
  21. }
  22. func (clause *Join) Right() *Join {
  23. clause.joinType = "RIGHT JOIN"
  24. return clause
  25. }
  26. func (clause *Join) Inner() *Join {
  27. clause.joinType = "INNER JOIN"
  28. return clause
  29. }
  30. func (clause *Join) Clause() (string, error) {
  31. if strutils.IsStringEmpty(clause.joinType) || strutils.IsStringEmpty(clause.tableName) || strutils.IsStringEmpty(clause.on) {
  32. return "", nil
  33. }
  34. clauseBuilder := strings.Builder{}
  35. clauseBuilder.WriteString(clause.joinType)
  36. clauseBuilder.WriteString(" " + clause.tableName)
  37. clauseBuilder.WriteString(" ON ")
  38. clauseBuilder.WriteString(clause.on + "\n")
  39. return clauseBuilder.String(), nil
  40. }
  41. func (clause *Join) Args() []any {
  42. return make([]any, 0)
  43. }