@@ -60,43 +60,34 @@ func (e *ParserErr) Error() string {
60
60
return fmt .Sprintf ("multiple errors: %d errors" , len (e .Errs ))
61
61
}
62
62
63
- func ReadSQLFiles (path string ) ([]string , error ) {
64
- f , err := os .Stat (path )
65
- if err != nil {
66
- return nil , fmt .Errorf ("path %s does not exist" , path )
67
- }
68
-
63
+ func ReadSQLFiles (paths []string ) ([]string , error ) {
69
64
var files []string
70
- if f . IsDir () {
71
- listing , err := ioutil . ReadDir (path )
65
+ for _ , path := range paths {
66
+ f , err := os . Stat (path )
72
67
if err != nil {
73
- return nil , err
68
+ return nil , fmt . Errorf ( "path %s does not exist" , path )
74
69
}
75
- for _ , f := range listing {
76
- files = append (files , filepath .Join (path , f .Name ()))
77
- }
78
- } else {
79
- files = append (files , path )
80
- }
81
70
82
- var sql []string
83
- for _ , filename := range files {
84
- if ! strings .HasSuffix (filename , ".sql" ) {
85
- continue
86
- }
87
- if strings .HasPrefix (filepath .Base (filename ), "." ) {
88
- continue
71
+ if f .IsDir () {
72
+ listing , err := ioutil .ReadDir (path )
73
+ if err != nil {
74
+ return nil , err
75
+ }
76
+ for _ , f := range listing {
77
+ files = append (files , filepath .Join (path , f .Name ()))
78
+ }
79
+ } else {
80
+ files = append (files , path )
89
81
}
90
- if migrations .IsDown (filename ) {
82
+ if migrations .IsDown (path ) {
91
83
continue
92
84
}
93
- sql = append (sql , filename )
94
85
}
95
- return sql , nil
86
+ return files , nil
96
87
}
97
88
98
- func ParseCatalog (schema string ) (core.Catalog , error ) {
99
- files , err := ReadSQLFiles (schema )
89
+ func ParseCatalog (schemas [] string ) (core.Catalog , error ) {
90
+ files , err := ReadSQLFiles (schemas )
100
91
if err != nil {
101
92
return core.Catalog {}, err
102
93
}
@@ -197,73 +188,75 @@ type ParserOpts struct {
197
188
UsePositionalParameters bool
198
189
}
199
190
200
- func ParseQueries (c core.Catalog , queries string , opts ParserOpts ) (* Result , error ) {
201
- f , err := os .Stat (queries )
202
- if err != nil {
203
- return nil , fmt .Errorf ("path %s does not exist" , queries )
204
- }
205
-
206
- var files []string
207
- if f .IsDir () {
208
- listing , err := ioutil .ReadDir (queries )
209
- if err != nil {
210
- return nil , err
211
- }
212
- for _ , f := range listing {
213
- files = append (files , filepath .Join (queries , f .Name ()))
214
- }
215
- } else {
216
- files = append (files , queries )
217
- }
218
-
191
+ func ParseQueries (c core.Catalog , queriesPaths []string , opts ParserOpts ) (* Result , error ) {
219
192
merr := NewParserErr ()
220
193
var q []* Query
221
- set := map [string ]struct {}{}
222
- for _ , filename := range files {
223
- if ! strings .HasSuffix (filename , ".sql" ) {
224
- continue
225
- }
226
- if strings .HasPrefix (filepath .Base (filename ), "." ) {
227
- continue
228
- }
229
- blob , err := ioutil .ReadFile (filename )
194
+ for _ , queries := range queriesPaths {
195
+ f , err := os .Stat (queries )
230
196
if err != nil {
231
- merr .Add (filename , "" , 0 , err )
232
- continue
197
+ return nil , fmt .Errorf ("path %s does not exist" , queries )
233
198
}
234
- source := string (blob )
235
- tree , err := pg .Parse (source )
236
- if err != nil {
237
- merr .Add (filename , source , 0 , err )
238
- continue
199
+
200
+ var files []string
201
+ if f .IsDir () {
202
+ listing , err := ioutil .ReadDir (queries )
203
+ if err != nil {
204
+ return nil , err
205
+ }
206
+ for _ , f := range listing {
207
+ files = append (files , filepath .Join (queries , f .Name ()))
208
+ }
209
+ } else {
210
+ files = append (files , queries )
239
211
}
240
- for _ , stmt := range tree .Statements {
241
- query , err := parseQuery (c , stmt , source , opts .UsePositionalParameters )
242
- if err == errUnsupportedStatementType {
212
+
213
+ set := map [string ]struct {}{}
214
+ for _ , filename := range files {
215
+ if ! strings .HasSuffix (filename , ".sql" ) {
216
+ continue
217
+ }
218
+ if strings .HasPrefix (filepath .Base (filename ), "." ) {
243
219
continue
244
220
}
221
+ blob , err := ioutil .ReadFile (filename )
245
222
if err != nil {
246
- merr .Add (filename , source , location ( stmt ) , err )
223
+ merr .Add (filename , "" , 0 , err )
247
224
continue
248
225
}
249
- if query .Name != "" {
250
- if _ , exists := set [query .Name ]; exists {
251
- merr .Add (filename , source , location (stmt ), fmt .Errorf ("duplicate query name: %s" , query .Name ))
226
+ source := string (blob )
227
+ tree , err := pg .Parse (source )
228
+ if err != nil {
229
+ merr .Add (filename , source , 0 , err )
230
+ continue
231
+ }
232
+ for _ , stmt := range tree .Statements {
233
+ query , err := parseQuery (c , stmt , source , opts .UsePositionalParameters )
234
+ if err == errUnsupportedStatementType {
252
235
continue
253
236
}
254
- set [query .Name ] = struct {}{}
255
- }
256
- query .Filename = filepath .Base (filename )
257
- if query != nil {
258
- q = append (q , query )
237
+ if err != nil {
238
+ merr .Add (filename , source , location (stmt ), err )
239
+ continue
240
+ }
241
+ if query .Name != "" {
242
+ if _ , exists := set [query .Name ]; exists {
243
+ merr .Add (filename , source , location (stmt ), fmt .Errorf ("duplicate query name: %s" , query .Name ))
244
+ continue
245
+ }
246
+ set [query .Name ] = struct {}{}
247
+ }
248
+ query .Filename = filepath .Base (filename )
249
+ if query != nil {
250
+ q = append (q , query )
251
+ }
259
252
}
260
253
}
261
254
}
262
255
if len (merr .Errs ) > 0 {
263
256
return nil , merr
264
257
}
265
258
if len (q ) == 0 {
266
- return nil , fmt .Errorf ("path %s contains no queries " , queries )
259
+ return nil , fmt .Errorf ("no queries contained in paths %s " , strings . Join ( queriesPaths , "," ) )
267
260
}
268
261
return & Result {
269
262
Catalog : c ,
0 commit comments