@@ -2,11 +2,13 @@ package cmd
22
33import (
44 "bytes"
5+ "context"
56 "errors"
67 "fmt"
78 "io"
89 "os"
910 "path/filepath"
11+ "runtime/trace"
1012 "strings"
1113
1214 "github.com/kyleconroy/sqlc/internal/codegen/golang"
@@ -44,7 +46,7 @@ type outPair struct {
4446 config.SQL
4547}
4648
47- func Generate (e Env , dir , filename string , stderr io.Writer ) (map [string ]string , error ) {
49+ func Generate (ctx context. Context , e Env , dir , filename string , stderr io.Writer ) (map [string ]string , error ) {
4850 configPath := ""
4951 if filename != "" {
5052 configPath = filepath .Join (dir , filename )
@@ -97,12 +99,6 @@ func Generate(e Env, dir, filename string, stderr io.Writer) (map[string]string,
9799 return nil , err
98100 }
99101
100- debug , err := opts .DebugFromEnv ()
101- if err != nil {
102- fmt .Fprintf (stderr , "error parsing SQLCDEBUG: %s\n " , err )
103- return nil , err
104- }
105-
106102 output := map [string ]string {}
107103 errored := false
108104
@@ -148,27 +144,43 @@ func Generate(e Env, dir, filename string, stderr io.Writer) (map[string]string,
148144 }
149145 sql .Queries = joined
150146
151- var name string
147+ var name , lang string
152148 parseOpts := opts.Parser {
153- Debug : debug ,
149+ Debug : debug . Debug ,
154150 }
155151 if sql .Gen .Go != nil {
156152 name = combo .Go .Package
153+ lang = "golang"
157154 } else if sql .Gen .Kotlin != nil {
158155 if sql .Engine == config .EnginePostgreSQL {
159156 parseOpts .UsePositionalParameters = true
160157 }
158+ lang = "kotlin"
161159 name = combo .Kotlin .Package
162160 } else if sql .Gen .Python != nil {
161+ lang = "python"
163162 name = combo .Python .Package
164163 }
165164
166- result , failed := parse (e , name , dir , sql .SQL , combo , parseOpts , stderr )
165+ var packageRegion * trace.Region
166+ if debug .Traced {
167+ packageRegion = trace .StartRegion (ctx , "package" )
168+ trace .Logf (ctx , "" , "name=%s dir=%s language=%s" , name , dir , lang )
169+ }
170+
171+ result , failed := parse (ctx , e , name , dir , sql .SQL , combo , parseOpts , stderr )
167172 if failed {
173+ if packageRegion != nil {
174+ packageRegion .End ()
175+ }
168176 errored = true
169177 break
170178 }
171179
180+ var region * trace.Region
181+ if debug .Traced {
182+ region = trace .StartRegion (ctx , "codegen" )
183+ }
172184 var files map [string ]string
173185 var out string
174186 switch {
@@ -184,17 +196,26 @@ func Generate(e Env, dir, filename string, stderr io.Writer) (map[string]string,
184196 default :
185197 panic ("missing language backend" )
186198 }
199+ if region != nil {
200+ region .End ()
201+ }
187202
188203 if err != nil {
189204 fmt .Fprintf (stderr , "# package %s\n " , name )
190205 fmt .Fprintf (stderr , "error generating code: %s\n " , err )
191206 errored = true
207+ if packageRegion != nil {
208+ packageRegion .End ()
209+ }
192210 continue
193211 }
194212 for n , source := range files {
195213 filename := filepath .Join (dir , out , n )
196214 output [filename ] = source
197215 }
216+ if packageRegion != nil {
217+ packageRegion .End ()
218+ }
198219 }
199220
200221 if errored {
@@ -203,7 +224,10 @@ func Generate(e Env, dir, filename string, stderr io.Writer) (map[string]string,
203224 return output , nil
204225}
205226
206- func parse (e Env , name , dir string , sql config.SQL , combo config.CombinedSettings , parserOpts opts.Parser , stderr io.Writer ) (* compiler.Result , bool ) {
227+ func parse (ctx context.Context , e Env , name , dir string , sql config.SQL , combo config.CombinedSettings , parserOpts opts.Parser , stderr io.Writer ) (* compiler.Result , bool ) {
228+ if debug .Traced {
229+ defer trace .StartRegion (ctx , "parse" ).End ()
230+ }
207231 c := compiler .NewCompiler (sql , combo )
208232 if err := c .ParseCatalog (sql .Schema ); err != nil {
209233 fmt .Fprintf (stderr , "# package %s\n " , name )
0 commit comments