Update process update query with filter and update object like a mongodb.
(table string, availFields FieldMap, filter map[string]interface{},
update map[string]interface{}, justOne bool)
| 96 | |
| 97 | // Update process update query with filter and update object like a mongodb. |
| 98 | func Update(table string, availFields FieldMap, filter map[string]interface{}, |
| 99 | update map[string]interface{}, justOne bool) ( |
| 100 | statement string, args []interface{}, fields FieldMap, err error) { |
| 101 | fields = FieldMap{} |
| 102 | |
| 103 | statement = `UPDATE "` + table + `" ` |
| 104 | |
| 105 | // update set segment |
| 106 | updateFields, updateStatement, updateArgs, err := ResolveUpdate(update, availFields) |
| 107 | if err != nil { |
| 108 | err = errors.Wrapf(err, "resolve query update data failed") |
| 109 | return |
| 110 | } |
| 111 | fields.Merge(updateFields) |
| 112 | statement += updateStatement |
| 113 | args = append(args, updateArgs...) |
| 114 | |
| 115 | // update filter statement |
| 116 | filterFields, filterStatement, filterArgs, err := ResolveFilter(filter, availFields) |
| 117 | if err != nil { |
| 118 | err = errors.Wrapf(err, "resolve query filter failed") |
| 119 | return |
| 120 | } |
| 121 | |
| 122 | fields.Merge(filterFields) |
| 123 | args = append(args, filterArgs...) |
| 124 | |
| 125 | if filterStatement != "" { |
| 126 | statement += " WHERE " |
| 127 | statement += filterStatement |
| 128 | } |
| 129 | |
| 130 | if justOne { |
| 131 | statement += " LIMIT 1" |
| 132 | } |
| 133 | |
| 134 | return |
| 135 | } |
| 136 | |
| 137 | // Remove process remove query with filter like a mongodb. |
| 138 | func Remove(table string, availFields FieldMap, filter map[string]interface{}, justOne bool) ( |
no test coverage detected