Making locking parameters more intuitive
This commit is contained in:
parent
3207ad6033
commit
c95e45f45e
@ -1,9 +1,23 @@
|
|||||||
package clause
|
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 {
|
type Locking struct {
|
||||||
Strength string
|
Strength LockingStrength
|
||||||
Table Table
|
Table Table
|
||||||
Options string
|
Options LockingOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name where clause name
|
// Name where clause name
|
||||||
@ -13,7 +27,7 @@ func (locking Locking) Name() string {
|
|||||||
|
|
||||||
// Build build where clause
|
// Build build where clause
|
||||||
func (locking Locking) Build(builder Builder) {
|
func (locking Locking) Build(builder Builder) {
|
||||||
builder.WriteString(locking.Strength)
|
builder.WriteString(string(locking.Strength))
|
||||||
if locking.Table.Name != "" {
|
if locking.Table.Name != "" {
|
||||||
builder.WriteString(" OF ")
|
builder.WriteString(" OF ")
|
||||||
builder.WriteQuoted(locking.Table)
|
builder.WriteQuoted(locking.Table)
|
||||||
@ -21,7 +35,7 @@ func (locking Locking) Build(builder Builder) {
|
|||||||
|
|
||||||
if locking.Options != "" {
|
if locking.Options != "" {
|
||||||
builder.WriteByte(' ')
|
builder.WriteByte(' ')
|
||||||
builder.WriteString(locking.Options)
|
builder.WriteString(string(locking.Options))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,17 +14,21 @@ func TestLocking(t *testing.T) {
|
|||||||
Vars []interface{}
|
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,
|
"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,
|
"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,
|
"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 {
|
for idx, result := range results {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user