| 45 | } |
| 46 | |
| 47 | func (p *postgresHelper) FirstAvailableSlot(tableName string, mpath *tree.MPath, levelKey string, mpathes ...string) (string, []any, int64, bool) { |
| 48 | var args []any |
| 49 | q := ` |
| 50 | WITH parsed_data AS ( |
| 51 | SELECT |
| 52 | SPLIT_PART(` + p.Concat(mpathes...) + `, '.', ?)::int AS numPart |
| 53 | FROM "` + tableName + `" tr |
| 54 | WHERE level = ? AND ? |
| 55 | ) |
| 56 | SELECT numPart + 1 AS num |
| 57 | FROM parsed_data tr |
| 58 | WHERE NOT EXISTS ( |
| 59 | SELECT 1 |
| 60 | FROM parsed_data tr2 |
| 61 | WHERE tr2.numPart = tr.numPart + 1 |
| 62 | ) |
| 63 | ORDER BY num |
| 64 | LIMIT 1 |
| 65 | ` |
| 66 | level := mpath.Length() + 1 |
| 67 | args = append(args, level) |
| 68 | args = append(args, level) |
| 69 | args = append(args, tree.MPathLike{Value: mpath}) |
| 70 | |
| 71 | return q, args, 3000, true |
| 72 | } |
| 73 | |
| 74 | func (p *postgresHelper) ApplyOrderedUpdates(db *gorm.DB, tableName string, sets []OrderedUpdate, wheres []sql.NamedArg) (int64, error) { |
| 75 | |