Making locking parameters more intuitive
This commit is contained in:
parent
3207ad6033
commit
c95e45f45e
@ -1,9 +1,23 @@
|
||||
package clause
|
||||
|
||||
type LockingStrength string
|
||||
|
||||
const (
|
||||
LockingStrengthUpdate = LockingStrength("UPDATE")
|
||||
LockingStrengthShare = LockingStrength("SHARE")
|
||||
)
|
||||
|
||||
type LockingOptions string
|
||||
|
||||
const (
|
||||
LockingOptionsSkipLocked = LockingOptions("SKIP LOCKED")
|
||||
LockingOptionsNoWait = LockingOptions("NOWAIT")
|
||||
)
|
||||
|
||||
type Locking struct {
|
||||
Strength string
|
||||
Strength LockingStrength
|
||||
Table Table
|
||||
Options string
|
||||
Options LockingOptions
|
||||
}
|
||||
|
||||
// Name where clause name
|
||||
@ -13,7 +27,7 @@ func (locking Locking) Name() string {
|
||||
|
||||
// Build build where clause
|
||||
func (locking Locking) Build(builder Builder) {
|
||||
builder.WriteString(locking.Strength)
|
||||
builder.WriteString(string(locking.Strength))
|
||||
if locking.Table.Name != "" {
|
||||
builder.WriteString(" OF ")
|
||||
builder.WriteQuoted(locking.Table)
|
||||
@ -21,7 +35,7 @@ func (locking Locking) Build(builder Builder) {
|
||||
|
||||
if locking.Options != "" {
|
||||
builder.WriteByte(' ')
|
||||
builder.WriteString(locking.Options)
|
||||
builder.WriteString(string(locking.Options))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,17 +14,21 @@ func TestLocking(t *testing.T) {
|
||||
Vars []interface{}
|
||||
}{
|
||||
{
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Locking{Strength: "UPDATE"}},
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Locking{Strength: clause.LockingStrengthUpdate}},
|
||||
"SELECT * FROM `users` FOR UPDATE", nil,
|
||||
},
|
||||
{
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Locking{Strength: "SHARE", Table: clause.Table{Name: clause.CurrentTable}}},
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Locking{Strength: clause.LockingStrengthShare, Table: clause.Table{Name: clause.CurrentTable}}},
|
||||
"SELECT * FROM `users` FOR SHARE OF `users`", nil,
|
||||
},
|
||||
{
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Locking{Strength: "UPDATE"}, clause.Locking{Strength: "UPDATE", Options: "NOWAIT"}},
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Locking{Strength: clause.LockingStrengthUpdate, Options: clause.LockingOptionsNoWait}},
|
||||
"SELECT * FROM `users` FOR UPDATE NOWAIT", nil,
|
||||
},
|
||||
{
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Locking{Strength: clause.LockingStrengthUpdate, Options: clause.LockingOptionsSkipLocked}},
|
||||
"SELECT * FROM `users` FOR UPDATE SKIP LOCKED", nil,
|
||||
},
|
||||
}
|
||||
|
||||
for idx, result := range results {
|
||||
|
Loading…
x
Reference in New Issue
Block a user