42 lines
744 B
Go
42 lines
744 B
Go
package dbr
|
|
|
|
type joinType uint8
|
|
|
|
const (
|
|
inner joinType = iota
|
|
left
|
|
right
|
|
full
|
|
)
|
|
|
|
func join(t joinType, table interface{}, on interface{}) Builder {
|
|
return BuildFunc(func(d Dialect, buf Buffer) error {
|
|
buf.WriteString(" ")
|
|
switch t {
|
|
case left:
|
|
buf.WriteString("LEFT ")
|
|
case right:
|
|
buf.WriteString("RIGHT ")
|
|
case full:
|
|
buf.WriteString("FULL ")
|
|
}
|
|
buf.WriteString("JOIN ")
|
|
switch table := table.(type) {
|
|
case string:
|
|
buf.WriteString(d.QuoteIdent(table))
|
|
default:
|
|
buf.WriteString(placeholder)
|
|
buf.WriteValue(table)
|
|
}
|
|
buf.WriteString(" ON ")
|
|
switch on := on.(type) {
|
|
case string:
|
|
buf.WriteString(on)
|
|
case Builder:
|
|
buf.WriteString(placeholder)
|
|
buf.WriteValue(on)
|
|
}
|
|
return nil
|
|
})
|
|
}
|