-
Notifications
You must be signed in to change notification settings - Fork 140
/
Copy pathlock_statement.go
57 lines (44 loc) · 1.38 KB
/
lock_statement.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package mysql
import "github.com/go-jet/jet/v2/internal/jet"
// LockStatement is interface for MySQL LOCK tables
type LockStatement interface {
Statement
READ() Statement
WRITE() Statement
}
// LOCK creates LockStatement from list of tables
func LOCK(tables ...jet.SerializerTable) LockStatement {
newLock := &lockStatementImpl{
Lock: jet.ClauseStatementBegin{Name: "LOCK TABLES", Tables: tables},
Read: jet.ClauseOptional{Name: "READ"},
Write: jet.ClauseOptional{Name: "WRITE"},
}
newLock.SerializerStatement = jet.NewStatementImpl(Dialect, jet.LockStatementType, newLock, &newLock.Lock, &newLock.Read, &newLock.Write)
return newLock
}
type lockStatementImpl struct {
jet.SerializerStatement
Lock jet.ClauseStatementBegin
Read jet.ClauseOptional
Write jet.ClauseOptional
}
func (l *lockStatementImpl) READ() Statement {
l.Read.Show = true
return l
}
func (l *lockStatementImpl) WRITE() Statement {
l.Write.Show = true
return l
}
// UNLOCK_TABLES explicitly releases any table locks held by the current session
func UNLOCK_TABLES() Statement {
newUnlock := &unlockStatementImpl{
Unlock: jet.ClauseStatementBegin{Name: "UNLOCK TABLES"},
}
newUnlock.SerializerStatement = jet.NewStatementImpl(Dialect, jet.UnLockStatementType, newUnlock, &newUnlock.Unlock)
return newUnlock
}
type unlockStatementImpl struct {
jet.SerializerStatement
Unlock jet.ClauseStatementBegin
}