Skip to content

Commit

Permalink
config: Parse V2 config format
Browse files Browse the repository at this point in the history
  • Loading branch information
kyleconroy committed Feb 5, 2020
1 parent 0f82783 commit 5f60cd7
Show file tree
Hide file tree
Showing 8 changed files with 162 additions and 47 deletions.
16 changes: 16 additions & 0 deletions examples/authors/sqlc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"version": "2",
"sql": [
{
"schema": "schema.sql",
"queries": "query.sql",
"engine": "postgresql",
"gen": {
"go": {
"package": "authors",
"out": "."
}
}
}
]
}
19 changes: 19 additions & 0 deletions examples/booktest/sqlc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"version": "1",
"packages": [
{
"name": "booktest",
"path": "postgresql",
"schema": "postgresql/schema.sql",
"queries": "postgresql/query.sql",
"engine": "postgresql"
},
{
"name": "booktest",
"path": "mysql",
"schema": "mysql/schema.sql",
"queries": "mysql/query.sql",
"engine": "mysql"
}
]
}
12 changes: 12 additions & 0 deletions examples/jets/sqlc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": "1",
"packages": [
{
"path": ".",
"name": "jets",
"schema": "schema.sql",
"queries": "query-building.sql",
"engine": "postgresql"
}
]
}
15 changes: 15 additions & 0 deletions examples/ondeck/sqlc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"version": "1",
"packages": [
{
"path": ".",
"name": "ondeck",
"schema": "schema",
"queries": "query",
"engine": "postgresql",
"emit_json_tags": true,
"emit_prepared_queries": true,
"emit_interface": true
}
]
}
40 changes: 0 additions & 40 deletions examples/sqlc.json

This file was deleted.

2 changes: 1 addition & 1 deletion internal/cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ var initCmd = &cobra.Command{
if _, err := os.Stat("sqlc.json"); !os.IsNotExist(err) {
return nil
}
blob, err := json.MarshalIndent(config.Config{Version: "2"}, "", " ")
blob, err := json.MarshalIndent(config.Config{Version: "1"}, "", " ")
if err != nil {
return err
}
Expand Down
74 changes: 74 additions & 0 deletions internal/config/v_two.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package config

import (
"encoding/json"
"fmt"
"io"
"path/filepath"
)

func v2ParseConfig(rd io.Reader) (Config, error) {
dec := json.NewDecoder(rd)
dec.DisallowUnknownFields()
var conf Config
if err := dec.Decode(&conf); err != nil {
return conf, err
}
if conf.Version == "" {
return conf, ErrMissingVersion
}
if conf.Version != "2" {
return conf, ErrUnknownVersion
}
if len(conf.SQL) == 0 {
return conf, ErrNoPackages
}
if err := conf.validateGlobalOverrides(); err != nil {
return conf, err
}
if conf.Gen.Go != nil {
for i := range conf.Gen.Go.Overrides {
if err := conf.Gen.Go.Overrides[i].Parse(); err != nil {
return conf, err
}
}
}
for j := range conf.SQL {
if conf.SQL[j].Engine == "" {
return conf, ErrMissingEngine
}
if conf.SQL[j].Gen.Go != nil {
if conf.SQL[j].Gen.Go.Out == "" {
return conf, ErrNoPackagePath
}
if conf.SQL[j].Gen.Go.Package == "" {
conf.SQL[j].Gen.Go.Package = filepath.Base(conf.SQL[j].Gen.Go.Out)
}
for i := range conf.SQL[j].Gen.Go.Overrides {
if err := conf.SQL[j].Gen.Go.Overrides[i].Parse(); err != nil {
return conf, err
}
}
}
}
return conf, nil
}

func (c *Config) validateGlobalOverrides() error {
engines := map[Engine]struct{}{}
for _, pkg := range c.SQL {
if _, ok := engines[pkg.Engine]; !ok {
engines[pkg.Engine] = struct{}{}
}
}
if c.Gen.Go == nil {
return nil
}
usesMultipleEngines := len(engines) > 1
for _, oride := range c.Gen.Go.Overrides {
if usesMultipleEngines && oride.Engine == "" {
return fmt.Errorf(`the "engine" field is required for global type overrides because your configuration uses multiple database engines`)
}
}
return nil
}
31 changes: 25 additions & 6 deletions internal/endtoend/endtoend_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,32 @@ import (

func TestExamples(t *testing.T) {
t.Parallel()
examples, err := filepath.Abs(filepath.Join("..", "..", "examples"))
if err != nil {
t.Fatal(err)
}

examples, _ := filepath.Abs(filepath.Join("..", "..", "examples"))
var stderr bytes.Buffer

output, err := cmd.Generate(examples, &stderr)
files, err := ioutil.ReadDir(examples)
if err != nil {
t.Fatalf("%s", stderr.String())
t.Fatal(err)
}

cmpDirectory(t, examples, output)
for _, replay := range files {
if !replay.IsDir() {
continue
}
tc := replay.Name()
t.Run(tc, func(t *testing.T) {
t.Parallel()
path := filepath.Join(examples, tc)
var stderr bytes.Buffer
output, err := cmd.Generate(path, &stderr)
if err != nil {
t.Fatalf("sqlc generate failed: %s", stderr.String())
}
cmpDirectory(t, path, output)
})
}
}

func TestReplay(t *testing.T) {
Expand All @@ -37,6 +53,9 @@ func TestReplay(t *testing.T) {
}

for _, replay := range files {
if !replay.IsDir() {
continue
}
tc := replay.Name()
t.Run(tc, func(t *testing.T) {
t.Parallel()
Expand Down

0 comments on commit 5f60cd7

Please sign in to comment.