@@ -67,25 +67,32 @@ func ReadSQLFiles(paths []string) ([]string, error) {
6767 if err != nil {
6868 return nil , fmt .Errorf ("path %s does not exist" , path )
6969 }
70-
7170 if f .IsDir () {
7271 listing , err := ioutil .ReadDir (path )
7372 if err != nil {
7473 return nil , err
7574 }
7675 for _ , f := range listing {
77- if migrations .IsDown (f .Name ()) {
78- continue
79- }
8076 files = append (files , filepath .Join (path , f .Name ()))
8177 }
8278 } else {
83- if ! migrations .IsDown (path ) {
84- files = append (files , path )
85- }
79+ files = append (files , path )
80+ }
81+ }
82+ var sqlFiles []string
83+ for _ , file := range files {
84+ if ! strings .HasSuffix (file , ".sql" ) {
85+ continue
86+ }
87+ if strings .HasPrefix (filepath .Base (file ), "." ) {
88+ continue
89+ }
90+ if migrations .IsDown (filepath .Base (file )) {
91+ continue
8692 }
93+ sqlFiles = append (sqlFiles , file )
8794 }
88- return files , nil
95+ return sqlFiles , nil
8996}
9097
9198func ParseCatalog (schemas []string ) (core.Catalog , error ) {
@@ -193,64 +200,43 @@ type ParserOpts struct {
193200func ParseQueries (c core.Catalog , queriesPaths []string , opts ParserOpts ) (* Result , error ) {
194201 merr := NewParserErr ()
195202 var q []* Query
196- for _ , queries := range queriesPaths {
197- f , err := os .Stat (queries )
203+
204+ set := map [string ]struct {}{}
205+ files , err := ReadSQLFiles (queriesPaths )
206+ if err != nil {
207+ return nil , err
208+ }
209+ for _ , filename := range files {
210+ blob , err := ioutil .ReadFile (filename )
198211 if err != nil {
199- return nil , fmt .Errorf ("path %s does not exist" , queries )
212+ merr .Add (filename , "" , 0 , err )
213+ continue
200214 }
201-
202- var files []string
203- if f .IsDir () {
204- listing , err := ioutil .ReadDir (queries )
205- if err != nil {
206- return nil , err
207- }
208- for _ , f := range listing {
209- files = append (files , filepath .Join (queries , f .Name ()))
210- }
211- } else {
212- files = append (files , queries )
215+ source := string (blob )
216+ tree , err := pg .Parse (source )
217+ if err != nil {
218+ merr .Add (filename , source , 0 , err )
219+ continue
213220 }
214-
215- set := map [string ]struct {}{}
216- for _ , filename := range files {
217- if ! strings .HasSuffix (filename , ".sql" ) {
218- continue
219- }
220- if strings .HasPrefix (filepath .Base (filename ), "." ) {
221- continue
222- }
223- blob , err := ioutil .ReadFile (filename )
224- if err != nil {
225- merr .Add (filename , "" , 0 , err )
221+ for _ , stmt := range tree .Statements {
222+ query , err := parseQuery (c , stmt , source , opts .UsePositionalParameters )
223+ if err == errUnsupportedStatementType {
226224 continue
227225 }
228- source := string (blob )
229- tree , err := pg .Parse (source )
230226 if err != nil {
231- merr .Add (filename , source , 0 , err )
227+ merr .Add (filename , source , location ( stmt ) , err )
232228 continue
233229 }
234- for _ , stmt := range tree .Statements {
235- query , err := parseQuery (c , stmt , source , opts .UsePositionalParameters )
236- if err == errUnsupportedStatementType {
237- continue
238- }
239- if err != nil {
240- merr .Add (filename , source , location (stmt ), err )
230+ if query .Name != "" {
231+ if _ , exists := set [query .Name ]; exists {
232+ merr .Add (filename , source , location (stmt ), fmt .Errorf ("duplicate query name: %s" , query .Name ))
241233 continue
242234 }
243- if query .Name != "" {
244- if _ , exists := set [query .Name ]; exists {
245- merr .Add (filename , source , location (stmt ), fmt .Errorf ("duplicate query name: %s" , query .Name ))
246- continue
247- }
248- set [query .Name ] = struct {}{}
249- }
250- query .Filename = filepath .Base (filename )
251- if query != nil {
252- q = append (q , query )
253- }
235+ set [query .Name ] = struct {}{}
236+ }
237+ query .Filename = filepath .Base (filename )
238+ if query != nil {
239+ q = append (q , query )
254240 }
255241 }
256242 }
0 commit comments