You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
906 B
47 lines
906 B
package clause |
|
|
|
type JoinType string |
|
|
|
const ( |
|
CrossJoin JoinType = "CROSS" |
|
InnerJoin JoinType = "INNER" |
|
LeftJoin JoinType = "LEFT" |
|
RightJoin JoinType = "RIGHT" |
|
) |
|
|
|
// Join join clause for from |
|
type Join struct { |
|
Type JoinType |
|
Table Table |
|
ON Where |
|
Using []string |
|
Expression Expression |
|
} |
|
|
|
func (join Join) Build(builder Builder) { |
|
if join.Expression != nil { |
|
join.Expression.Build(builder) |
|
} else { |
|
if join.Type != "" { |
|
builder.WriteString(string(join.Type)) |
|
builder.WriteByte(' ') |
|
} |
|
|
|
builder.WriteString("JOIN ") |
|
builder.WriteQuoted(join.Table) |
|
|
|
if len(join.ON.Exprs) > 0 { |
|
builder.WriteString(" ON ") |
|
join.ON.Build(builder) |
|
} else if len(join.Using) > 0 { |
|
builder.WriteString(" USING (") |
|
for idx, c := range join.Using { |
|
if idx > 0 { |
|
builder.WriteByte(',') |
|
} |
|
builder.WriteQuoted(c) |
|
} |
|
builder.WriteByte(')') |
|
} |
|
} |
|
}
|
|
|