Skip to content

Commit

Permalink
Fix declarers from being clobbered by later files
Browse files Browse the repository at this point in the history
The bug occurs when a file alpha.sql creates a declarer that bravo.sql doesn't
need. When pggen templates bravo.sql, it throws away all previous declarers.
  • Loading branch information
jschaf committed Apr 26, 2021
1 parent 45e3a27 commit a5b736d
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 8 deletions.
5 changes: 4 additions & 1 deletion example/separate_out_dir/alpha/alpha/query.sql
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
-- name: AlphaNested :one
SELECT 'alpha_nested' as output;
SELECT 'alpha_nested' as output;

-- name: AlphaCompositeArray :one
SELECT ARRAY[ROW('key')]::alpha[];
116 changes: 116 additions & 0 deletions example/separate_out_dir/out/alpha_query.sql.0.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 4 additions & 7 deletions internal/codegen/golang/templater.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func NewTemplater(opts TemplaterOpts) Templater {
// TemplateAll creates query template files for each codegen.QueryFile.
func (tm Templater) TemplateAll(files []codegen.QueryFile) ([]TemplatedFile, error) {
goQueryFiles := make([]TemplatedFile, 0, len(files))
var declarers DeclarerSet
allDeclarers := NewDeclarerSet()

// Pick leader file to define common structs and interfaces via Declarer.
firstIndex := -1
Expand All @@ -50,18 +50,15 @@ func (tm Templater) TemplateAll(files []codegen.QueryFile) ([]TemplatedFile, err
for i, queryFile := range files {
isLeader := i == firstIndex
goFile, decls, err := tm.templateFile(queryFile, isLeader)
declarers = decls
if err != nil {
return nil, fmt.Errorf("template query file %s for go: %w", queryFile.SourcePath, err)
}
goQueryFiles = append(goQueryFiles, goFile)
ds := decls.ListAll()
declarers.AddAll(ds...)
allDeclarers.AddAll(decls.ListAll()...)
}

if len(declarers) > 0 {
goQueryFiles[firstIndex].Declarers = declarers.ListAll()
}
// Add declarers to leader file.
goQueryFiles[firstIndex].Declarers = allDeclarers.ListAll()

// Remove unneeded pgconn import if possible.
for i, file := range goQueryFiles {
Expand Down

0 comments on commit a5b736d

Please sign in to comment.