Skip to content

Commit

Permalink
スキーマで順番が壊れる問題の修正
Browse files Browse the repository at this point in the history
  • Loading branch information
mazrean committed Jun 1, 2020
1 parent 4dcb046 commit 2e06eb8
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 64 deletions.
8 changes: 4 additions & 4 deletions boiler/code.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ func NewCode(basePath string, yaml *model.Yaml) (*Code, error) {
tables := make([]*model.CodeTable, 0, len(yaml.Tables))
for key, val := range yaml.Tables {
columns := make([]*model.CodeColumn, 0, len(val))
for k, v := range val {
name, err := model.NewNameDetail(k)
for _, v := range val {
name, err := model.NewNameDetail(v.Name)
if err != nil {
return nil, fmt.Errorf("Name Detail Constructor(%s.%s) Error: %w", key, k, err)
return nil, fmt.Errorf("Name Detail Constructor(%s.%s) Error: %w", key, v.Name, err)
}
goType, err := typeParser(v.Type)
if err != nil {
return nil, fmt.Errorf("Type Parse Error(%s.%s): %w", key, k, err)
return nil, fmt.Errorf("Type Parse Error(%s.%s): %w", key, v.Name, err)
}

column := &model.CodeColumn{
Expand Down
6 changes: 3 additions & 3 deletions boiler/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ func NewSchema(basePath string, yaml *model.Yaml) *Schema {
tables := make([]*model.SchemaTable, 0, len(yaml.Tables))
for key, val := range yaml.Tables {
columns := make([]*model.SchemaColumn, 0, len(val))
for k, v := range val {
for _, v := range val {
extra := make([]string, 0)
if v.AutoIncrement {
extra = append(extra, "AUTO_INCREMENT")
}

column := model.SchemaColumn{
Name: k,
Name: v.Name,
Type: v.Type,
Null: v.Null,
Key: v.Key,
Expand Down Expand Up @@ -59,7 +59,7 @@ func (s *Schema) BoilSchema() error {
return fmt.Errorf("Make Base Directory Error: %w", err)
}

fileNames := []string{"dbschemas.go"}
fileNames := []string{"dbschema.md"}
for _, fileName := range fileNames {
fw, err := s.MakeFileWriter(fileName)
if err != nil {
Expand Down
8 changes: 5 additions & 3 deletions boiler/yaml.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,18 @@ func newTestYaml() *Yaml {
Type: "mysql",
Name: "test",
},
Tables: map[string]map[string]*model.YamlColumn{
Tables: map[string][]*model.YamlColumn{
"test_test": {
"testa": {
{
Name: "testa",
Type: "int(1)",
Null: true,
AutoIncrement: true,
Key: "PRI",
Default: "default",
},
"testb": {
{
Name: "testb",
Type: "int",
Null: false,
AutoIncrement: false,
Expand Down
29 changes: 27 additions & 2 deletions boiler/yaml_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,38 @@ package boiler

import (
"testing"

"github.com/titech-cpp/sqlboiler/model"
)

func TestReadYaml(t *testing.T) {
yaml, err := NewYaml("../sample/sqlboiler.yaml")
yaml, err := NewYaml("../testdata/test.yaml")
if err != nil {
t.Fatalf("ReadYaml Error: %#v", err)
}
if err != nil {
t.Fatalf("Unexpected Yaml Constructor Error: %#v", yaml)
}

t.Logf("map: %#v", yaml.Yaml)
expect := &model.Yaml{
DB: model.DB{
Type: "mysql",
Name: "test",
},
Tables: map[string][]*model.YamlColumn{
"messages": {
{
Name: "user_id",
Type: "int(11)",
Null: false,
AutoIncrement: false,
Key: "",
Default: "",
},
},
},
}
if !yaml.Yaml.Check(expect) {
t.Fatalf("Invalid Yaml Value %#v, Expected %#v", yaml.Yaml, expect)
}
}
27 changes: 7 additions & 20 deletions model/yaml.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,8 @@ func (y *Yaml) Check(yml *Yaml) bool {
if !ok {
return false
}
for k, val := range value {
v, ok := table[k]
if !ok || !val.Check(v) {
return false
}
}
for k, val := range table {
v, ok := value[k]
if !ok || !val.Check(v) {
for i, val := range table {
if !val.Check(value[i]) {
return false
}
}
Expand All @@ -36,15 +29,8 @@ func (y *Yaml) Check(yml *Yaml) bool {
if !ok {
return false
}
for k, val := range value {
v, ok := table[k]
if !ok || !val.Check(v) {
return false
}
}
for k, val := range table {
v, ok := value[k]
if !ok || !val.Check(v) {
for i, val := range table {
if !val.Check(value[i]) {
return false
}
}
Expand All @@ -53,10 +39,11 @@ func (y *Yaml) Check(yml *Yaml) bool {
return true
}

type yamlColumns = map[string]*YamlColumn
type yamlColumns = []*YamlColumn

// YamlColumn カラムの構造体
type YamlColumn struct {
Name string
Type string
Null bool
AutoIncrement bool
Expand All @@ -66,5 +53,5 @@ type YamlColumn struct {

// Check 同一か確認
func (y *YamlColumn) Check(yc *YamlColumn) bool {
return y.Type == yc.Type && y.Null == yc.Null && y.AutoIncrement == yc.AutoIncrement && y.Key == yc.Key && y.Default == yc.Default
return y.Name == yc.Name || y.Type == yc.Type && y.Null == yc.Null && y.AutoIncrement == yc.AutoIncrement && y.Key == yc.Key && y.Default == yc.Default
}
4 changes: 4 additions & 0 deletions querys/select.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package query

// Select Select文用のメソッドを実装した構造体
type Select struct {}
54 changes: 27 additions & 27 deletions sample/sqlboiler.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,92 +3,92 @@ db:
name: twitter-clone
tables:
users:
id:
- name: id
type: int(11)
auto_increment: true
key: primary
name:
key: PRI
- name: name
type: varchar(32)
null: false
password:
- name: password
type: char(128)
null: false
created_at:
- name: created_at
type: datetime(6)
default: CURRENT_TIMESTAMP
null: false
updated_at:
- name: updated_at
type: datetime(6)
default: CURRENT_TIMESTAMP
null: false
deleted_at:
- name: deleted_at
type: datetime(6)
default: null
messages:
id:
- name: id
type: varchar(36)
key: primary
user_id:
key: PRI
- name: user_id
type: int(11)
null: false
foreign_key:
users: id
content:
- name: content
type: text
null: false
is_pinned:
- name: is_pinned
type: boolean
null: false
default: false
created_at:
- name: created_at
type: datetime(6)
default: CURRENT_TIMESTAMP
null: false
updated_at:
- name: updated_at
type: datetime(6)
default: null
deleted_at:
- name: deleted_at
type: datetime(6)
default: null
follow:
id:
- name: id
type: int(11)
auto_increment: true
key: primary
user_id:
key: PRI
- name: user_id
type: int(11)
null: false
foreign_key:
users: id
target_user_id:
- name: target_user_id
type: int(11)
null: false
foreign_key:
users: id
created_at:
- name: created_at
type: datetime(6)
default: CURRENT_TIMESTAMP
null: false
deleted_at:
- name: deleted_at
type: datetime(6)
default: null
favorite:
id:
- name: id
type: int(11)
auto_increment: true
key: primary
user_id:
key: PRI
- name: user_id
type: int(11)
null: false
foreign_key:
users: id
target_message_id:
- name: target_message_id
type: varchar(36)
null: false
created_at:
- name: created_at
type: datetime(6)
default: CURRENT_TIMESTAMP
null: false
deleted_at:
- name: deleted_at
type: datetime(6)
default: null
8 changes: 5 additions & 3 deletions statik/statik.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions testdata/test.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
table:
db:
type: mysql
name: test
tables:
messages:
user_id:
- name: user_id
type: int(11)
null: false
foreign-key:
Expand Down

0 comments on commit 2e06eb8

Please sign in to comment.