in backend/impls/dalgorm/dalgorm.go [83:136]
func buildTx(tx *gorm.DB, clauses []dal.Clause) *gorm.DB {
for _, c := range clauses {
t := c.Type
d := c.Data
switch t {
case dal.JoinClause:
tx = tx.Joins(d.(dal.DalClause).Expr, transformParams(d.(dal.DalClause).Params)...)
case dal.WhereClause:
tx = tx.Where(d.(dal.DalClause).Expr, transformParams(d.(dal.DalClause).Params)...)
case dal.OrderbyClause:
tx = tx.Order(d.(string))
case dal.LimitClause:
tx = tx.Limit(d.(int))
case dal.OffsetClause:
tx = tx.Offset(d.(int))
case dal.FromClause:
switch dd := d.(type) {
case string:
tx = tx.Table(dd)
case dal.DalClause:
tx = tx.Table(dd.Expr, transformParams(dd.Params)...)
case dal.ClauseTable:
tx = tx.Table(" ? ", clause.Table{
Name: dd.Name,
Alias: dd.Alias,
Raw: dd.Raw,
})
case models.DynamicTabler:
tx = tx.Table(dd.TableName())
default:
tx = tx.Model(d)
}
case dal.SelectClause:
tx = tx.Select(d.(dal.DalClause).Expr, transformParams(d.(dal.DalClause).Params)...)
case dal.GroupbyClause:
tx = tx.Group(d.(string))
case dal.HavingClause:
tx = tx.Having(d.(dal.DalClause).Expr, transformParams(d.(dal.DalClause).Params)...)
case dal.LockClause:
locking := clause.Locking{}
params := d.([]bool)
write := params[0]
if write {
locking.Strength = "UPDATE"
}
nowait := params[1]
if nowait {
locking.Options = "NOWAIT"
}
tx = tx.Clauses(locking)
}
}
return tx
}