Skip to content

Commit 40931af

Browse files
authored
parser: Use same function to load SQL files (#483)
1 parent cca78ef commit 40931af

File tree

8 files changed

+168
-56
lines changed

8 files changed

+168
-56
lines changed

internal/dinosql/parser.go

Lines changed: 42 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -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

9198
func ParseCatalog(schemas []string) (core.Catalog, error) {
@@ -193,64 +200,43 @@ type ParserOpts struct {
193200
func 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
}

internal/endtoend/testdata/multischema/go/db.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/multischema/go/models.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/multischema/go/query.sql.go

Lines changed: 62 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CREATE TABLE bar (id serial not null);
2+
CREATE TABLE foo (id serial not null, bar serial references bar(id));
3+
4+
-- name: ListBar :many
5+
SELECT * FROM bar;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Hello!
2+
3+
This file should be ignored
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: ListFoo :many
2+
SELECT * FROM foo;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"version": "1",
3+
"packages": [{
4+
"path": "go",
5+
"name": "querytest",
6+
"schema": ["query.sql", "sql"],
7+
"queries": ["query.sql", "sql"]
8+
}]
9+
}

0 commit comments

Comments
 (0)