@@ -7,6 +7,12 @@ import (
7
7
"strings"
8
8
)
9
9
10
+ func countCurlyBraces (line string ) (int , int ) {
11
+ openBraces := strings .Count (line , "{" )
12
+ closedBraces := strings .Count (line , "}" )
13
+ return openBraces , closedBraces
14
+ }
15
+
10
16
type ConfigBlockMeta struct {
11
17
exsists bool
12
18
startOfConfigBlock int
@@ -67,8 +73,8 @@ func sqlxParser(filepath string) (sqlxParserMeta, error) {
67
73
var sqlBlockExsists = false
68
74
var sqlBlockContent = ""
69
75
70
- var isInInnerMajorBlock = false
71
- var innerMajorBlockCount = 0
76
+ var openBracesCount = 0 ;
77
+ var closedBracesCount = 0 ;
72
78
73
79
var currentBlock = ""
74
80
var currentBlockContent = ""
@@ -85,35 +91,65 @@ func sqlxParser(filepath string) (sqlxParserMeta, error) {
85
91
for scanner .Scan () {
86
92
i ++
87
93
var lineContents = scanner .Text () + "\n "
94
+ openBraces , closedBraces := countCurlyBraces (lineContents )
95
+ openBracesCount += openBraces
96
+ closedBracesCount += closedBraces
88
97
89
98
if strings .Contains (lineContents , "config {" ) {
90
99
inMajorBlock = true
91
100
currentBlock = "config"
92
101
startOfConfigBlock = i
93
102
currentBlockContent += lineContents
103
+
104
+ if (openBracesCount == closedBracesCount ) && inMajorBlock {
105
+ configBlockContent = currentBlockContent
106
+ endOfConfigBlock = i
107
+ configBlockExsists = true
108
+ currentBlock = ""
109
+ currentBlockContent = ""
110
+ }
111
+
94
112
} else if strings .Contains (lineContents , "post_operations {" ) && ! inMajorBlock {
95
113
startOfpostOperationsBlock = i
96
114
inMajorBlock = true
97
115
currentBlock = "post_operations"
98
116
currentBlockContent += lineContents
117
+
118
+ if (openBracesCount == closedBracesCount ) && inMajorBlock {
119
+ endOfpostOperationsBlock = i
120
+ postOpsBlockMeta := PostOpsBlockMeta {
121
+ exsists : true ,
122
+ startOfpostOperationsBlock : startOfpostOperationsBlock ,
123
+ endOfpostOperationsBlock : endOfpostOperationsBlock ,
124
+ postOpsBlockContent : currentBlockContent ,
125
+ }
126
+ postOpsBlocksMeta = append (postOpsBlocksMeta , postOpsBlockMeta )
127
+ currentBlock = ""
128
+ currentBlockContent = ""
129
+ inMajorBlock = false
130
+ }
99
131
} else if strings .Contains (lineContents , "pre_operations {" ) && ! inMajorBlock {
100
132
inMajorBlock = true
101
133
currentBlock = "pre_operations"
102
134
startOfPreOperationsBlock = i
103
135
currentBlockContent += lineContents
104
- } else if strings .Contains (lineContents , "{" ) && inMajorBlock {
105
- if strings .Contains (lineContents , "}" ) {
106
- currentBlockContent += lineContents
107
- continue
108
- } else {
109
- isInInnerMajorBlock = true
110
- innerMajorBlockCount += 1
111
- }
112
- currentBlockContent += lineContents
113
- } else if strings .Contains (lineContents , "}" ) && isInInnerMajorBlock && innerMajorBlockCount >= 1 && inMajorBlock {
114
- innerMajorBlockCount -= 1
136
+
137
+ if (openBracesCount == closedBracesCount ) && inMajorBlock {
138
+ endOfPreOperationsBlock = i
139
+ preOpsBlockMeta := PreOpsBlockMeta {
140
+ exsists : true ,
141
+ startOfPreOperationsBlock : startOfPreOperationsBlock ,
142
+ endOfPreOperationsBlock : endOfPreOperationsBlock ,
143
+ preOpsBlockContent : currentBlockContent ,
144
+ }
145
+ preOpsBlocksMeta = append (preOpsBlocksMeta , preOpsBlockMeta )
146
+ currentBlock = ""
147
+ currentBlockContent = ""
148
+ inMajorBlock = false
149
+ }
150
+ } else if inMajorBlock && (openBracesCount != closedBracesCount ) {
115
151
currentBlockContent += lineContents
116
- } else if strings . Contains ( lineContents , "}" ) && innerMajorBlockCount == 0 && inMajorBlock {
152
+ } else if inMajorBlock && ( openBracesCount == closedBracesCount ) {
117
153
if currentBlock == "config" {
118
154
currentBlockContent += lineContents
119
155
configBlockContent = currentBlockContent
@@ -147,9 +183,6 @@ func sqlxParser(filepath string) (sqlxParserMeta, error) {
147
183
currentBlockContent = ""
148
184
}
149
185
inMajorBlock = false
150
- } else if strings .Contains (lineContents , "}" ) && isInInnerMajorBlock && innerMajorBlockCount >= 1 && ! inMajorBlock {
151
- innerMajorBlockCount -= 1
152
- currentBlockContent += lineContents
153
186
} else if lineContents != "\n " && ! inMajorBlock {
154
187
if startOfSqlBlock == 0 {
155
188
startOfSqlBlock = i
0 commit comments