(tx *gorm.DB, clauses []dal.Clause)
| 81 | } |
| 82 | |
| 83 | func buildTx(tx *gorm.DB, clauses []dal.Clause) *gorm.DB { |
| 84 | for _, c := range clauses { |
| 85 | t := c.Type |
| 86 | d := c.Data |
| 87 | switch t { |
| 88 | case dal.JoinClause: |
| 89 | tx = tx.Joins(d.(dal.DalClause).Expr, transformParams(d.(dal.DalClause).Params)...) |
| 90 | case dal.WhereClause: |
| 91 | tx = tx.Where(d.(dal.DalClause).Expr, transformParams(d.(dal.DalClause).Params)...) |
| 92 | case dal.OrderbyClause: |
| 93 | tx = tx.Order(d.(string)) |
| 94 | case dal.LimitClause: |
| 95 | tx = tx.Limit(d.(int)) |
| 96 | case dal.OffsetClause: |
| 97 | tx = tx.Offset(d.(int)) |
| 98 | case dal.FromClause: |
| 99 | switch dd := d.(type) { |
| 100 | case string: |
| 101 | tx = tx.Table(dd) |
| 102 | case dal.DalClause: |
| 103 | tx = tx.Table(dd.Expr, transformParams(dd.Params)...) |
| 104 | case dal.ClauseTable: |
| 105 | tx = tx.Table(" ? ", clause.Table{ |
| 106 | Name: dd.Name, |
| 107 | Alias: dd.Alias, |
| 108 | Raw: dd.Raw, |
| 109 | }) |
| 110 | case models.DynamicTabler: |
| 111 | tx = tx.Table(dd.TableName()) |
| 112 | default: |
| 113 | tx = tx.Model(d) |
| 114 | } |
| 115 | case dal.SelectClause: |
| 116 | tx = tx.Select(d.(dal.DalClause).Expr, transformParams(d.(dal.DalClause).Params)...) |
| 117 | case dal.GroupbyClause: |
| 118 | tx = tx.Group(d.(string)) |
| 119 | case dal.HavingClause: |
| 120 | tx = tx.Having(d.(dal.DalClause).Expr, transformParams(d.(dal.DalClause).Params)...) |
| 121 | case dal.LockClause: |
| 122 | locking := clause.Locking{} |
| 123 | params := d.([]bool) |
| 124 | write := params[0] |
| 125 | if write { |
| 126 | locking.Strength = "UPDATE" |
| 127 | } |
| 128 | nowait := params[1] |
| 129 | if nowait { |
| 130 | locking.Options = "NOWAIT" |
| 131 | } |
| 132 | tx = tx.Clauses(locking) |
| 133 | } |
| 134 | } |
| 135 | return tx |
| 136 | } |
| 137 | |
| 138 | var _ dal.Dal = (*Dalgorm)(nil) |
| 139 |
no test coverage detected