@@ -59,44 +59,46 @@ func (e *ParserErr) Error() string {
5959 return fmt .Sprintf ("multiple errors: %d errors" , len (e .Errs ))
6060}
6161
62- func ReadSQLFiles (path string ) ([]string , error ) {
63- f , err := os .Stat (path )
64- if err != nil {
65- return nil , fmt .Errorf ("path %s does not exist" , path )
66- }
67-
68- var files []string
69- if f .IsDir () {
70- listing , err := ioutil .ReadDir (path )
62+ func ReadSQLFiles (paths []string ) ([]string , error ) {
63+ var sql []string
64+ for _ , path := range paths {
65+ f , err := os .Stat (path )
7166 if err != nil {
72- return nil , err
67+ return nil , fmt . Errorf ( "path %s does not exist" , path )
7368 }
74- for _ , f := range listing {
75- files = append (files , filepath .Join (path , f .Name ()))
76- }
77- } else {
78- files = append (files , path )
79- }
8069
81- var sql []string
82- for _ , filename := range files {
83- if ! strings .HasSuffix (filename , ".sql" ) {
84- continue
85- }
86- if strings .HasPrefix (filepath .Base (filename ), "." ) {
87- continue
70+ var files []string
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 )
8881 }
89- // Remove golang-migrate rollback files.
90- if strings .HasSuffix (filename , ".down.sql" ) {
91- continue
82+
83+ for _ , filename := range files {
84+ if ! strings .HasSuffix (filename , ".sql" ) {
85+ continue
86+ }
87+ if strings .HasPrefix (filepath .Base (filename ), "." ) {
88+ continue
89+ }
90+ // Remove golang-migrate rollback files.
91+ if strings .HasSuffix (filename , ".down.sql" ) {
92+ continue
93+ }
94+ sql = append (sql , filename )
9295 }
93- sql = append (sql , filename )
9496 }
9597 return sql , nil
9698}
9799
98- func ParseCatalog (schema string ) (core.Catalog , error ) {
99- files , err := ReadSQLFiles (schema )
100+ func ParseCatalog (schemas [] string ) (core.Catalog , error ) {
101+ files , err := ReadSQLFiles (schemas )
100102 if err != nil {
101103 return core.Catalog {}, err
102104 }
@@ -197,73 +199,75 @@ type ParserOpts struct {
197199 UsePositionalParameters bool
198200}
199201
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-
202+ func ParseQueries (c core.Catalog , queriesPaths []string , opts ParserOpts ) (* Result , error ) {
219203 merr := NewParserErr ()
220204 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 )
205+ for _ , queries := range queriesPaths {
206+ f , err := os .Stat (queries )
230207 if err != nil {
231- merr .Add (filename , "" , 0 , err )
232- continue
208+ return nil , fmt .Errorf ("path %s does not exist" , queries )
233209 }
234- source := string (blob )
235- tree , err := pg .Parse (source )
236- if err != nil {
237- merr .Add (filename , source , 0 , err )
238- continue
210+
211+ var files []string
212+ if f .IsDir () {
213+ listing , err := ioutil .ReadDir (queries )
214+ if err != nil {
215+ return nil , err
216+ }
217+ for _ , f := range listing {
218+ files = append (files , filepath .Join (queries , f .Name ()))
219+ }
220+ } else {
221+ files = append (files , queries )
239222 }
240- for _ , stmt := range tree .Statements {
241- query , err := parseQuery (c , stmt , source , opts .UsePositionalParameters )
242- if err == errUnsupportedStatementType {
223+
224+ set := map [string ]struct {}{}
225+ for _ , filename := range files {
226+ if ! strings .HasSuffix (filename , ".sql" ) {
227+ continue
228+ }
229+ if strings .HasPrefix (filepath .Base (filename ), "." ) {
230+ continue
231+ }
232+ blob , err := ioutil .ReadFile (filename )
233+ if err != nil {
234+ merr .Add (filename , "" , 0 , err )
243235 continue
244236 }
237+ source := string (blob )
238+ tree , err := pg .Parse (source )
245239 if err != nil {
246- merr .Add (filename , source , location ( stmt ) , err )
240+ merr .Add (filename , source , 0 , err )
247241 continue
248242 }
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 ))
243+ for _ , stmt := range tree . Statements {
244+ query , err := parseQuery ( c , stmt , source , opts . UsePositionalParameters )
245+ if err == errUnsupportedStatementType {
252246 continue
253247 }
254- set [query .Name ] = struct {}{}
255- }
256- query .Filename = filepath .Base (filename )
257- if query != nil {
258- q = append (q , query )
248+ if err != nil {
249+ merr .Add (filename , source , location (stmt ), err )
250+ continue
251+ }
252+ if query .Name != "" {
253+ if _ , exists := set [query .Name ]; exists {
254+ merr .Add (filename , source , location (stmt ), fmt .Errorf ("duplicate query name: %s" , query .Name ))
255+ continue
256+ }
257+ set [query .Name ] = struct {}{}
258+ }
259+ query .Filename = filepath .Base (filename )
260+ if query != nil {
261+ q = append (q , query )
262+ }
259263 }
260264 }
261265 }
262266 if len (merr .Errs ) > 0 {
263267 return nil , merr
264268 }
265269 if len (q ) == 0 {
266- return nil , fmt .Errorf ("path %s contains no queries " , queries )
270+ return nil , fmt .Errorf ("no queries contained in paths %s " , strings . Join ( queriesPaths , "," ) )
267271 }
268272 return & Result {
269273 Catalog : c ,
0 commit comments