-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathonoff_parse.go
68 lines (59 loc) · 1.82 KB
/
onoff_parse.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
63
64
65
66
67
68
package sqlpatchwork
import (
"bufio"
"errors"
"os"
"strings"
)
// hasOnOffParseDone have filepathes which have already parsed.
var hasOnOffParseDone = map[string]*parseResult{}
// onOffParseFile parses file and save the result to hasParseDone.
func onOffParseFile(path string) (*parseResult, error) {
if pr, ok := hasOnOffParseDone[path]; ok {
return pr, nil
}
f, err := os.Open(path)
if err != nil {
return nil, err
}
defer f.Close()
reader := bufio.NewReader(f)
dps := newDomainParser()
dps.di2OnOff()
pr, err := dps.parse(reader)
hasOnOffParseDone[path] = pr
return pr, err
}
// di2OnOff injects dependencey as a onOffPatchwork Parser.
func (dps *domainParser) di2OnOff() {
dps.defaultValue = dps.onOffDefaultValue
dps.customParseID = dps.onOffCustomParseID
dps.checkEndedCorrect = dps.onOffCheckEndedCorrect
dps.appendQP = dps.onOffAppendQp
}
// onOffDefaultValue sets default value to tmpIDs and queryPieceIDs.
// In this function, not set to parser's field.
func (dps *domainParser) onOffDefaultValue() (tmpIDs []string, queryPieceIDs map[string]bool) {
tmpIDs = []string{onoff_default_id}
queryPieceIDs = map[string]bool{onoff_default_id: true}
return
}
// onOffCustomParseID splits ID by "/".
// Eg: "key1/key2" => [key1, key2]
func (dps *domainParser) onOffCustomParseID(tmpID string) ([]string, error) {
return strings.Split(tmpID, "/"), nil
}
//checkEndedCorrect gets whether all "@start" closed by "@end" or not.
func (dps *domainParser) onOffCheckEndedCorrect() error {
if len(dps.tmpIDs) == 1 && dps.tmpIDs[0] == onoff_default_id {
return nil
}
return errors.New("'@end' is missing.")
}
//onOffAppendQp appends query piece to onoff query pieace field.
func (dps *domainParser) onOffAppendQp() {
dps.onOffQueryPieces = append(dps.onOffQueryPieces,
onOffQP{iDs: dps.tmpIDs,
query: dps.queryBuf,
})
}