1
1
package cmd
2
2
3
3
import (
4
- "bytes"
5
4
"encoding/json"
6
5
"fmt"
7
6
"io"
@@ -11,7 +10,6 @@ import (
11
10
"path/filepath"
12
11
13
12
"github.com/kyleconroy/sqlc/internal/dinosql"
14
- "github.com/kyleconroy/sqlc/internal/mysql"
15
13
16
14
"github.com/davecgh/go-spew/spew"
17
15
pg "github.com/lfittl/pg_query_go"
@@ -84,127 +82,26 @@ var initCmd = &cobra.Command{
84
82
},
85
83
}
86
84
87
- const errMessageNoVersion = `The configuration file must have a version number.
88
- Set the version to 1 at the top of sqlc.json:
89
-
90
- {
91
- "version": "1"
92
- ...
93
- }
94
- `
95
-
96
- const errMessageUnknownVersion = `The configuration file has an invalid version number.
97
- The only supported version is "1".
98
- `
99
-
100
- const errMessageNoPackages = `No packages are configured`
101
-
102
85
var genCmd = & cobra.Command {
103
86
Use : "generate" ,
104
87
Short : "Generate Go code from SQL" ,
105
88
Run : func (cmd * cobra.Command , args []string ) {
106
- blob , err := ioutil .ReadFile ("sqlc.json" )
89
+ stderr := cmd .ErrOrStderr ()
90
+ dir , err := os .Getwd ()
107
91
if err != nil {
108
- fmt .Fprintln (os . Stderr , "error parsing sqlc.json: file does not exist" )
92
+ fmt .Fprintln (stderr , "error parsing sqlc.json: file does not exist" )
109
93
os .Exit (1 )
110
94
}
111
95
112
- settings , err := dinosql . ParseConfig ( bytes . NewReader ( blob ) )
96
+ output , err := Generate ( dir , stderr )
113
97
if err != nil {
114
- switch err {
115
- case dinosql .ErrMissingVersion :
116
- fmt .Fprintf (os .Stderr , errMessageNoVersion )
117
- case dinosql .ErrUnknownVersion :
118
- fmt .Fprintf (os .Stderr , errMessageUnknownVersion )
119
- case dinosql .ErrNoPackages :
120
- fmt .Fprintf (os .Stderr , errMessageNoPackages )
121
- }
122
- fmt .Fprintf (os .Stderr , "error parsing sqlc.json: %s\n " , err )
123
- os .Exit (1 )
124
- }
125
-
126
- var errored bool
127
-
128
- output := map [string ]string {}
129
-
130
- for _ , pkg := range settings .Packages {
131
- name := pkg .Name
132
- combo := dinosql .Combine (settings , pkg )
133
- var result dinosql.Generateable
134
-
135
- switch pkg .Engine {
136
-
137
- case dinosql .EngineMySQL :
138
- // Experimental MySQL support
139
- q , err := mysql .GeneratePkg (name , pkg .Schema , pkg .Queries , combo )
140
- if err != nil {
141
- fmt .Fprintf (os .Stderr , "# package %s\n " , name )
142
- if parserErr , ok := err .(* dinosql.ParserErr ); ok {
143
- for _ , fileErr := range parserErr .Errs {
144
- fmt .Fprintf (os .Stderr , "%s:%d:%d: %s\n " , fileErr .Filename , fileErr .Line , fileErr .Column , fileErr .Err )
145
- }
146
- } else {
147
- fmt .Fprintf (os .Stderr , "error parsing schema: %s\n " , err )
148
- }
149
- errored = true
150
- continue
151
- }
152
- result = q
153
-
154
- case dinosql .EnginePostgreSQL :
155
- c , err := dinosql .ParseCatalog (pkg .Schema )
156
- if err != nil {
157
- fmt .Fprintf (os .Stderr , "# package %s\n " , name )
158
- if parserErr , ok := err .(* dinosql.ParserErr ); ok {
159
- for _ , fileErr := range parserErr .Errs {
160
- fmt .Fprintf (os .Stderr , "%s:%d:%d: %s\n " , fileErr .Filename , fileErr .Line , fileErr .Column , fileErr .Err )
161
- }
162
- } else {
163
- fmt .Fprintf (os .Stderr , "error parsing schema: %s\n " , err )
164
- }
165
- errored = true
166
- continue
167
- }
168
-
169
- q , err := dinosql .ParseQueries (c , pkg )
170
- if err != nil {
171
- fmt .Fprintf (os .Stderr , "# package %s\n " , name )
172
- if parserErr , ok := err .(* dinosql.ParserErr ); ok {
173
- for _ , fileErr := range parserErr .Errs {
174
- fmt .Fprintf (os .Stderr , "%s:%d:%d: %s\n " , fileErr .Filename , fileErr .Line , fileErr .Column , fileErr .Err )
175
- }
176
- } else {
177
- fmt .Fprintf (os .Stderr , "error parsing queries: %s\n " , err )
178
- }
179
- errored = true
180
- continue
181
- }
182
- result = q
183
-
184
- }
185
-
186
- files , err := dinosql .Generate (result , combo )
187
- if err != nil {
188
- fmt .Fprintf (os .Stderr , "# package %s\n " , name )
189
- fmt .Fprintf (os .Stderr , "error generating code: %s\n " , err )
190
- errored = true
191
- continue
192
- }
193
-
194
- for n , source := range files {
195
- filename := filepath .Join (pkg .Path , n )
196
- output [filename ] = source
197
- }
198
- }
199
-
200
- if errored {
201
98
os .Exit (1 )
202
99
}
203
100
204
101
for filename , source := range output {
205
102
os .MkdirAll (filepath .Dir (filename ), 0755 )
206
103
if err := ioutil .WriteFile (filename , []byte (source ), 0644 ); err != nil {
207
- fmt .Fprintf (os . Stderr , "%s: %s\n " , filename , err )
104
+ fmt .Fprintf (stderr , "%s: %s\n " , filename , err )
208
105
os .Exit (1 )
209
106
}
210
107
}
0 commit comments