本文整理汇总了Golang中gnd/la/orm/driver.Model.Join方法的典型用法代码示例。如果您正苦于以下问题:Golang Model.Join方法的具体用法?Golang Model.Join怎么用?Golang Model.Join使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gnd/la/orm/driver.Model
的用法示例。
在下文中一共展示了Model.Join方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: makeQuery
func (d *Driver) makeQuery(m driver.Model, q query.Q, opts *driver.QueryOptions) (*datastore.Query, error) {
if m.Join() != nil {
return nil, errJoinNotSupported
}
dq := datastore.NewQuery(m.Table()).Ancestor(d.parentKey(m))
var err error
if dq, err = d.applyQuery(m, dq, q); err != nil {
return nil, err
}
if opts != nil {
if opts.Distinct {
dq = dq.Distinct()
}
for _, v := range opts.Sort {
field := v.Field()
if v.Direction() == driver.DESC {
field = "-" + field
}
dq = dq.Order(field)
}
if opts.Limit >= 0 {
dq = dq.Limit(opts.Limit)
}
if opts.Offset > 0 {
dq = dq.Offset(opts.Offset)
}
}
return dq, nil
}
示例2: selectStmt
func (d *Driver) selectStmt(buf *bytes.Buffer, params *[]interface{}, fields []string, quote bool, m driver.Model, opts driver.QueryOptions) error {
buf.WriteString("SELECT ")
if opts.Distinct {
buf.WriteString("DISTINCT ")
}
if fields != nil {
if quote {
for _, v := range fields {
buf.WriteByte('"')
buf.WriteString(v)
buf.WriteByte('"')
buf.WriteByte(',')
}
} else {
for _, v := range fields {
buf.WriteString(v)
buf.WriteByte(',')
}
}
} else {
// Select all fields for the given model (which might be joined)
cur := m
for {
if !cur.Skip() {
for _, v := range cur.Fields().QuotedNames {
buf.WriteString(v)
buf.WriteByte(',')
}
}
join := cur.Join()
if join == nil {
break
}
cur = join.Model()
}
}
buf.Truncate(buf.Len() - 1)
buf.WriteString(" FROM ")
buf.WriteByte('"')
buf.WriteString(m.Table())
buf.WriteByte('"')
for join := m.Join(); join != nil; {
jm := join.Model()
switch join.Type() {
case driver.OuterJoin:
buf.WriteString(" FULL OUTER")
case driver.LeftJoin:
buf.WriteString(" LEFT OUTER")
case driver.RightJoin:
buf.WriteString(" RIGHT OUTER")
}
buf.WriteString(" JOIN ")
buf.WriteByte('"')
buf.WriteString(jm.Table())
buf.WriteByte('"')
buf.WriteString(" ON ")
if err := d.condition(buf, params, m, join.Query(), len(*params)); err != nil {
return err
}
join = jm.Join()
}
return nil
}