@@ -18,9 +18,10 @@ import (
18
18
"github.com/kyleconroy/sqlc/internal/compiler"
19
19
"github.com/kyleconroy/sqlc/internal/config"
20
20
"github.com/kyleconroy/sqlc/internal/debug"
21
+ "github.com/kyleconroy/sqlc/internal/ext"
22
+ "github.com/kyleconroy/sqlc/internal/ext/process"
21
23
"github.com/kyleconroy/sqlc/internal/multierr"
22
24
"github.com/kyleconroy/sqlc/internal/opts"
23
- "github.com/kyleconroy/sqlc/internal/plugin"
24
25
)
25
26
26
27
const errMessageNoVersion = `The configuration file must have a version number.
@@ -44,7 +45,9 @@ func printFileErr(stderr io.Writer, dir string, fileErr *multierr.FileError) {
44
45
}
45
46
46
47
type outPair struct {
47
- Gen config.SQLGen
48
+ Gen config.SQLGen
49
+ Plugin * config.Codegen
50
+
48
51
config.SQL
49
52
}
50
53
@@ -145,10 +148,19 @@ func Generate(ctx context.Context, e Env, dir, filename string, stderr io.Writer
145
148
Gen : config.SQLGen {JSON : sql .Gen .JSON },
146
149
})
147
150
}
151
+ for i , _ := range sql .Codegen {
152
+ pairs = append (pairs , outPair {
153
+ SQL : sql ,
154
+ Plugin : & sql .Codegen [i ],
155
+ })
156
+ }
148
157
}
149
158
150
159
for _ , sql := range pairs {
151
160
combo := config .Combine (* conf , sql .SQL )
161
+ if sql .Plugin != nil {
162
+ combo .Codegen = * sql .Plugin
163
+ }
152
164
153
165
// TODO: This feels like a hack that will bite us later
154
166
joined := make ([]string , 0 , len (sql .Schema ))
@@ -167,24 +179,32 @@ func Generate(ctx context.Context, e Env, dir, filename string, stderr io.Writer
167
179
parseOpts := opts.Parser {
168
180
Debug : debug .Debug ,
169
181
}
170
- if sql .Gen .Go != nil {
182
+
183
+ switch {
184
+ case sql .Gen .Go != nil :
171
185
name = combo .Go .Package
172
186
lang = "golang"
173
- } else if sql .Gen .Kotlin != nil {
187
+
188
+ case sql .Gen .Kotlin != nil :
174
189
if sql .Engine == config .EnginePostgreSQL {
175
190
parseOpts .UsePositionalParameters = true
176
191
}
177
192
lang = "kotlin"
178
193
name = combo .Kotlin .Package
179
- } else if sql .Gen .Python != nil {
194
+
195
+ case sql .Gen .Python != nil :
180
196
lang = "python"
181
197
name = combo .Python .Package
198
+
199
+ case sql .Plugin != nil :
200
+ lang = fmt .Sprintf ("process:%s" , sql .Plugin .Plugin )
201
+ name = sql .Plugin .Plugin
182
202
}
183
203
184
204
var packageRegion * trace.Region
185
205
if debug .Traced {
186
206
packageRegion = trace .StartRegion (ctx , "package" )
187
- trace .Logf (ctx , "" , "name=%s dir=%s language =%s" , name , dir , lang )
207
+ trace .Logf (ctx , "" , "name=%s dir=%s plugin =%s" , name , dir , lang )
188
208
}
189
209
190
210
result , failed := parse (ctx , e , name , dir , sql .SQL , combo , parseOpts , stderr )
@@ -200,25 +220,36 @@ func Generate(ctx context.Context, e Env, dir, filename string, stderr io.Writer
200
220
if debug .Traced {
201
221
region = trace .StartRegion (ctx , "codegen" )
202
222
}
203
- var genfunc func ( req * plugin. CodeGenRequest ) ( * plugin. CodeGenResponse , error )
223
+ var handler ext. Handler
204
224
var out string
205
225
switch {
206
226
case sql .Gen .Go != nil :
207
227
out = combo .Go .Out
208
- genfunc = golang .Generate
228
+ handler = ext .HandleFunc (golang .Generate )
229
+
209
230
case sql .Gen .Kotlin != nil :
210
231
out = combo .Kotlin .Out
211
- genfunc = kotlin .Generate
232
+ handler = ext .HandleFunc (kotlin .Generate )
233
+
212
234
case sql .Gen .Python != nil :
213
235
out = combo .Python .Out
214
- genfunc = python .Generate
236
+ handler = ext .HandleFunc (python .Generate )
237
+
215
238
case sql .Gen .JSON != nil :
216
239
out = combo .JSON .Out
217
- genfunc = json .Generate
240
+ handler = ext .HandleFunc (json .Generate )
241
+
242
+ case sql .Plugin != nil :
243
+ out = sql .Plugin .Out
244
+ handler = & process.Runner {
245
+ Config : combo .Global ,
246
+ Plugin : sql .Plugin .Plugin ,
247
+ }
248
+
218
249
default :
219
250
panic ("missing language backend" )
220
251
}
221
- resp , err := genfunc (codeGenRequest (result , combo ))
252
+ resp , err := handler . Generate (codeGenRequest (result , combo ))
222
253
if region != nil {
223
254
region .End ()
224
255
}
0 commit comments