@@ -60,43 +60,34 @@ func (e *ParserErr) Error() string {
6060 return fmt .Sprintf ("multiple errors: %d errors" , len (e .Errs ))
6161}
6262
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 ) {
6964 var files []string
70- if f . IsDir () {
71- listing , err := ioutil . ReadDir (path )
65+ for _ , path := range paths {
66+ f , err := os . Stat (path )
7267 if err != nil {
73- return nil , err
68+ return nil , fmt . Errorf ( "path %s does not exist" , path )
7469 }
75- for _ , f := range listing {
76- files = append (files , filepath .Join (path , f .Name ()))
77- }
78- } else {
79- files = append (files , path )
80- }
8170
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 )
8981 }
90- if migrations .IsDown (filename ) {
82+ if migrations .IsDown (path ) {
9183 continue
9284 }
93- sql = append (sql , filename )
9485 }
95- return sql , nil
86+ return files , nil
9687}
9788
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 )
10091 if err != nil {
10192 return core.Catalog {}, err
10293 }
@@ -197,73 +188,75 @@ type ParserOpts struct {
197188 UsePositionalParameters bool
198189}
199190
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 ) {
219192 merr := NewParserErr ()
220193 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 )
230196 if err != nil {
231- merr .Add (filename , "" , 0 , err )
232- continue
197+ return nil , fmt .Errorf ("path %s does not exist" , queries )
233198 }
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 )
239211 }
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 ), "." ) {
243219 continue
244220 }
221+ blob , err := ioutil .ReadFile (filename )
245222 if err != nil {
246- merr .Add (filename , source , location ( stmt ) , err )
223+ merr .Add (filename , "" , 0 , err )
247224 continue
248225 }
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 {
252235 continue
253236 }
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+ }
259252 }
260253 }
261254 }
262255 if len (merr .Errs ) > 0 {
263256 return nil , merr
264257 }
265258 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 , "," ) )
267260 }
268261 return & Result {
269262 Catalog : c ,
0 commit comments