@@ -11,13 +11,12 @@ import (
1111 "strings"
1212
1313 "github.com/kyleconroy/sqlc/internal/codegen/golang"
14+ "github.com/kyleconroy/sqlc/internal/codegen/kotlin"
1415 "github.com/kyleconroy/sqlc/internal/compiler"
1516 "github.com/kyleconroy/sqlc/internal/config"
16- "github.com/kyleconroy/sqlc/internal/dinosql"
17- "github.com/kyleconroy/sqlc/internal/dinosql/kotlin"
1817 "github.com/kyleconroy/sqlc/internal/multierr"
1918 "github.com/kyleconroy/sqlc/internal/mysql"
20- "github.com/kyleconroy/sqlc/internal/pg "
19+ "github.com/kyleconroy/sqlc/internal/opts "
2120)
2221
2322const errMessageNoVersion = `The configuration file must have a version number.
@@ -113,7 +112,6 @@ func Generate(e Env, dir string, stderr io.Writer) (map[string]string, error) {
113112
114113 for _ , sql := range pairs {
115114 combo := config .Combine (conf , sql .SQL )
116- var result golang.Generateable
117115
118116 // TODO: This feels like a hack that will bite us later
119117 joined := make ([]string , 0 , len (sql .Schema ))
@@ -129,40 +127,48 @@ func Generate(e Env, dir string, stderr io.Writer) (map[string]string, error) {
129127 sql .Queries = joined
130128
131129 var name string
132- parseOpts := dinosql. ParserOpts {}
130+ parseOpts := opts. Parser {}
133131 if sql .Gen .Go != nil {
134132 name = combo .Go .Package
135133 } else if sql .Gen .Kotlin != nil {
136134 parseOpts .UsePositionalParameters = true
137135 name = combo .Kotlin .Package
138136 }
139137
140- result , errored = parse (e , name , dir , sql .SQL , combo , parseOpts , stderr )
141- if errored {
142- break
143- }
144-
145138 var files map [string ]string
146139 var out string
147- if sql .Gen .Go != nil {
140+
141+ // TODO: Note about how this will be going away
142+ if sql .Engine == config .EngineMySQL {
143+ result , errored := parseMySQL (e , name , dir , sql .SQL , combo , parseOpts , stderr )
144+ if errored {
145+ break
146+ }
148147 out = combo .Go .Out
149- files , err = golang .Generate (result , combo )
150- } else if sql .Gen .Kotlin != nil {
151- out = combo .Kotlin .Out
152- ktRes , ok := result .(kotlin.KtGenerateable )
153- if ! ok {
154- err = fmt .Errorf ("kotlin not supported for engine %s" , combo .Package .Engine )
148+ files , err = golang .DeprecatedGenerate (result , combo )
149+ } else {
150+ result , errored := parse (e , name , dir , sql .SQL , combo , parseOpts , stderr )
151+ if errored {
155152 break
156153 }
157- files , err = kotlin .KtGenerate (ktRes , combo )
154+ switch {
155+ case sql .Gen .Go != nil :
156+ out = combo .Go .Out
157+ files , err = golang .Generate (result , combo )
158+ case sql .Gen .Kotlin != nil :
159+ out = combo .Kotlin .Out
160+ files , err = kotlin .Generate (result , combo )
161+ default :
162+ panic ("missing language backend" )
163+ }
158164 }
165+
159166 if err != nil {
160167 fmt .Fprintf (stderr , "# package %s\n " , name )
161168 fmt .Fprintf (stderr , "error generating code: %s\n " , err )
162169 errored = true
163170 continue
164171 }
165-
166172 for n , source := range files {
167173 filename := filepath .Join (dir , out , n )
168174 output [filename ] = source
@@ -175,64 +181,25 @@ func Generate(e Env, dir string, stderr io.Writer) (map[string]string, error) {
175181 return output , nil
176182}
177183
178- type postgreEngine interface {
179- ParseCatalog ([]string ) error
180- ParseQueries ([]string , dinosql.ParserOpts ) error
181- Result () golang.Generateable
182- }
183-
184- type dinosqlEngine struct {
185- catalog pg.Catalog
186- result * dinosql.Result
187- }
188-
189- func (d * dinosqlEngine ) ParseCatalog (schema []string ) error {
190- c , err := dinosql .ParseCatalog (schema )
191- if err != nil {
192- return err
193- }
194- d .catalog = c
195- return nil
196- }
197-
198- func (d * dinosqlEngine ) ParseQueries (queries []string , opts dinosql.ParserOpts ) error {
199- q , err := dinosql .ParseQueries (d .catalog , queries , opts )
184+ // Experimental MySQL support
185+ func parseMySQL (e Env , name , dir string , sql config.SQL , combo config.CombinedSettings , parserOpts opts.Parser , stderr io.Writer ) (golang.Generateable , bool ) {
186+ q , err := mysql .GeneratePkg (name , sql .Schema , sql .Queries , combo )
200187 if err != nil {
201- return err
202- }
203- d .result = q
204- return nil
205- }
206-
207- func (d * dinosqlEngine ) Result () golang.Generateable {
208- return & kotlin.Result {Result : d .result }
209- }
210-
211- func parse (e Env , name , dir string , sql config.SQL , combo config.CombinedSettings , parserOpts dinosql.ParserOpts , stderr io.Writer ) (golang.Generateable , bool ) {
212- if sql .Engine == config .EngineMySQL {
213- // Experimental MySQL support
214- q , err := mysql .GeneratePkg (name , sql .Schema , sql .Queries , combo )
215- if err != nil {
216- fmt .Fprintf (stderr , "# package %s\n " , name )
217- if parserErr , ok := err .(* multierr.Error ); ok {
218- for _ , fileErr := range parserErr .Errs () {
219- printFileErr (stderr , dir , fileErr )
220- }
221- } else {
222- fmt .Fprintf (stderr , "error parsing schema: %s\n " , err )
188+ fmt .Fprintf (stderr , "# package %s\n " , name )
189+ if parserErr , ok := err .(* multierr.Error ); ok {
190+ for _ , fileErr := range parserErr .Errs () {
191+ printFileErr (stderr , dir , fileErr )
223192 }
224- return nil , true
193+ } else {
194+ fmt .Fprintf (stderr , "error parsing schema: %s\n " , err )
225195 }
226- return q , false
227- }
228-
229- var eng postgreEngine
230- if sql .Engine == config .EnginePostgreSQL && ! e .ExperimentalParser {
231- eng = & dinosqlEngine {}
232- } else {
233- eng = compiler .NewEngine (sql , combo )
196+ return nil , true
234197 }
198+ return q , false
199+ }
235200
201+ func parse (e Env , name , dir string , sql config.SQL , combo config.CombinedSettings , parserOpts opts.Parser , stderr io.Writer ) (* compiler.Result , bool ) {
202+ eng := compiler .NewEngine (sql , combo )
236203 if err := eng .ParseCatalog (sql .Schema ); err != nil {
237204 fmt .Fprintf (stderr , "# package %s\n " , name )
238205 if parserErr , ok := err .(* multierr.Error ); ok {
0 commit comments