forked from zhuxiujia/GoMybatis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NodeTrim.go
62 lines (56 loc) · 1.29 KB
/
NodeTrim.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
58
59
60
61
62
package ast
import "bytes"
//Trim操作节点
type NodeTrim struct {
childs []Node
t NodeType
prefix []byte
suffix []byte
suffixOverrides []byte
prefixOverrides []byte
}
func (it *NodeTrim) Type() NodeType {
return NTrim
}
func (it *NodeTrim) Eval(env map[string]interface{}) ([]byte, error) {
var sql, err = DoChildNodes(it.childs, env)
if err != nil {
return nil, err
}
if sql == nil {
return nil, nil
}
for {
if bytes.HasPrefix(sql, []byte(" ")) {
sql = bytes.Trim(sql, " ")
} else {
break
}
}
if it.prefixOverrides != nil {
var prefixOverridesArray = bytes.Split(it.prefixOverrides, []byte("|"))
if len(prefixOverridesArray) > 0 {
for _, v := range prefixOverridesArray {
sql = bytes.TrimPrefix(sql, []byte(v))
}
}
}
if it.suffixOverrides != nil {
var suffixOverrideArray = bytes.Split(it.suffixOverrides, []byte("|"))
if len(suffixOverrideArray) > 0 {
for _, v := range suffixOverrideArray {
sql = bytes.TrimSuffix(sql, []byte(v))
}
}
}
var newBuffer bytes.Buffer
newBuffer.WriteString(` `)
newBuffer.Write(it.prefix)
newBuffer.WriteString(` `)
newBuffer.Write(sql)
newBuffer.WriteString(` `)
newBuffer.Write(it.suffix)
var newBufferBytes = newBuffer.Bytes()
newBuffer.Reset()
return newBufferBytes, nil
}