package clause import ( "git.sxidc.com/go-tools/utils/strutils" "strings" ) type Join struct { joinType string tableName string on string } func NewJoin(tableName string, on string) *Join { return &Join{ joinType: "JOIN", tableName: tableName, on: on, } } func (clause *Join) Left() *Join { clause.joinType = "LEFT JOIN" return clause } func (clause *Join) Right() *Join { clause.joinType = "RIGHT JOIN" return clause } func (clause *Join) Inner() *Join { clause.joinType = "INNER JOIN" return clause } func (clause *Join) Clause() (string, error) { if strutils.IsStringEmpty(clause.joinType) || strutils.IsStringEmpty(clause.tableName) || strutils.IsStringEmpty(clause.on) { return "", nil } clauseBuilder := strings.Builder{} clauseBuilder.WriteString(clause.joinType) clauseBuilder.WriteString(" " + clause.tableName) clauseBuilder.WriteString(" ON ") clauseBuilder.WriteString(clause.on + "\n") return clauseBuilder.String(), nil } func (clause *Join) Args() []any { return make([]any, 0) }