Skip to content

Commit 1cd35bf

Browse files
authored
Second version of the configuration format (#318)
* Initial commit * Fix per-package overrides * Parse config-v2 * config: Parse V2 config format
1 parent 921e84f commit 1cd35bf

File tree

14 files changed

+381
-161
lines changed

14 files changed

+381
-161
lines changed

examples/authors/sqlc.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"version": "2",
3+
"sql": [
4+
{
5+
"schema": "schema.sql",
6+
"queries": "query.sql",
7+
"engine": "postgresql",
8+
"gen": {
9+
"go": {
10+
"package": "authors",
11+
"out": "."
12+
}
13+
}
14+
}
15+
]
16+
}

examples/booktest/sqlc.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"name": "booktest",
6+
"path": "postgresql",
7+
"schema": "postgresql/schema.sql",
8+
"queries": "postgresql/query.sql",
9+
"engine": "postgresql"
10+
},
11+
{
12+
"name": "booktest",
13+
"path": "mysql",
14+
"schema": "mysql/schema.sql",
15+
"queries": "mysql/query.sql",
16+
"engine": "mysql"
17+
}
18+
]
19+
}

examples/jets/sqlc.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": ".",
6+
"name": "jets",
7+
"schema": "schema.sql",
8+
"queries": "query-building.sql",
9+
"engine": "postgresql"
10+
}
11+
]
12+
}

examples/ondeck/sqlc.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": ".",
6+
"name": "ondeck",
7+
"schema": "schema",
8+
"queries": "query",
9+
"engine": "postgresql",
10+
"emit_json_tags": true,
11+
"emit_prepared_queries": true,
12+
"emit_interface": true
13+
}
14+
]
15+
}

examples/sqlc.json

Lines changed: 0 additions & 40 deletions
This file was deleted.

internal/cmd/cmd.go

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/spf13/cobra"
1313

1414
"github.com/kyleconroy/sqlc/internal/config"
15-
"github.com/kyleconroy/sqlc/internal/dinosql"
1615
)
1716

1817
// Do runs the command logic.
@@ -53,7 +52,7 @@ var initCmd = &cobra.Command{
5352
if _, err := os.Stat("sqlc.json"); !os.IsNotExist(err) {
5453
return nil
5554
}
56-
blob, err := json.MarshalIndent(config.GenerateSettings{Version: "1"}, "", " ")
55+
blob, err := json.MarshalIndent(config.Config{Version: "1"}, "", " ")
5756
if err != nil {
5857
return err
5958
}
@@ -91,24 +90,14 @@ var checkCmd = &cobra.Command{
9190
Use: "compile",
9291
Short: "Statically check SQL for syntax and type errors",
9392
RunE: func(cmd *cobra.Command, args []string) error {
94-
file, err := os.Open("sqlc.json")
95-
if err != nil {
96-
return err
97-
}
98-
99-
settings, err := config.ParseConfig(file)
93+
stderr := cmd.ErrOrStderr()
94+
dir, err := os.Getwd()
10095
if err != nil {
101-
return err
96+
fmt.Fprintln(stderr, "error parsing sqlc.json: file does not exist")
97+
os.Exit(1)
10298
}
103-
104-
for _, pkg := range settings.Packages {
105-
c, err := dinosql.ParseCatalog(pkg.Schema)
106-
if err != nil {
107-
return err
108-
}
109-
if _, err := dinosql.ParseQueries(c, pkg); err != nil {
110-
return err
111-
}
99+
if _, err := Generate(dir, stderr); err != nil {
100+
os.Exit(1)
112101
}
113102
return nil
114103
},

internal/cmd/generate.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func Generate(dir string, stderr io.Writer) (map[string]string, error) {
4040
return nil, err
4141
}
4242

43-
settings, err := config.ParseConfig(bytes.NewReader(blob))
43+
conf, err := config.ParseConfig(bytes.NewReader(blob))
4444
if err != nil {
4545
switch err {
4646
case config.ErrMissingVersion:
@@ -57,20 +57,19 @@ func Generate(dir string, stderr io.Writer) (map[string]string, error) {
5757
output := map[string]string{}
5858
errored := false
5959

60-
for _, pkg := range settings.Packages {
61-
name := pkg.Name
62-
combo := config.Combine(settings, pkg)
60+
for _, sql := range conf.SQL {
61+
combo := config.Combine(conf, sql)
62+
name := combo.Go.Package
6363
var result dinosql.Generateable
6464

6565
// TODO: This feels like a hack that will bite us later
66-
pkg.Schema = filepath.Join(dir, pkg.Schema)
67-
pkg.Queries = filepath.Join(dir, pkg.Queries)
68-
69-
switch pkg.Engine {
66+
sql.Schema = filepath.Join(dir, sql.Schema)
67+
sql.Queries = filepath.Join(dir, sql.Queries)
7068

69+
switch sql.Engine {
7170
case config.EngineMySQL:
7271
// Experimental MySQL support
73-
q, err := mysql.GeneratePkg(name, pkg.Schema, pkg.Queries, combo)
72+
q, err := mysql.GeneratePkg(name, sql.Schema, sql.Queries, combo)
7473
if err != nil {
7574
fmt.Fprintf(stderr, "# package %s\n", name)
7675
if parserErr, ok := err.(*dinosql.ParserErr); ok {
@@ -86,7 +85,7 @@ func Generate(dir string, stderr io.Writer) (map[string]string, error) {
8685
result = q
8786

8887
case config.EnginePostgreSQL:
89-
c, err := dinosql.ParseCatalog(pkg.Schema)
88+
c, err := dinosql.ParseCatalog(sql.Schema)
9089
if err != nil {
9190
fmt.Fprintf(stderr, "# package %s\n", name)
9291
if parserErr, ok := err.(*dinosql.ParserErr); ok {
@@ -100,7 +99,7 @@ func Generate(dir string, stderr io.Writer) (map[string]string, error) {
10099
continue
101100
}
102101

103-
q, err := dinosql.ParseQueries(c, pkg)
102+
q, err := dinosql.ParseQueries(c, sql)
104103
if err != nil {
105104
fmt.Fprintf(stderr, "# package %s\n", name)
106105
if parserErr, ok := err.(*dinosql.ParserErr); ok {
@@ -126,7 +125,7 @@ func Generate(dir string, stderr io.Writer) (map[string]string, error) {
126125
}
127126

128127
for n, source := range files {
129-
filename := filepath.Join(dir, pkg.Path, n)
128+
filename := filepath.Join(dir, combo.Go.Out, n)
130129
output[filename] = source
131130
}
132131
}

0 commit comments

Comments
 (0)