Skip to content

Commit

Permalink
working on cleaning up the API
Browse files Browse the repository at this point in the history
  • Loading branch information
markbates committed Jun 16, 2018
1 parent e1b32f1 commit 873df14
Show file tree
Hide file tree
Showing 6 changed files with 163 additions and 170 deletions.
26 changes: 13 additions & 13 deletions bubbler.go
Expand Up @@ -29,19 +29,19 @@ func (b *Bubbler) Bubble(s string) (string, error) {
f := fizzer{b}
ctx := plush.NewContextWith(map[string]interface{}{
"exec": f.Exec(os.Stdout),
"change_column": f.ChangeColumn(),
"add_column": f.AddColumn(),
"drop_column": f.DropColumn(),
"rename_column": f.RenameColumn(),
"raw": f.RawSql(),
"add_index": f.AddIndex(),
"drop_index": f.DropIndex(),
"rename_index": f.RenameIndex(),
"add_foreign_key": f.AddForeignKey(),
"drop_foreign_key": f.DropForeignKey(),
"create_table": f.CreateTable(),
"drop_table": f.DropTable(),
"rename_table": f.RenameTable(),
"create_table": f.CreateTable,
"change_column": f.ChangeColumn,
"add_column": f.AddColumn,
"drop_column": f.DropColumn,
"rename_column": f.RenameColumn,
"raw": f.RawSql,
"add_index": f.AddIndex,
"drop_index": f.DropIndex,
"rename_index": f.RenameIndex,
"add_foreign_key": f.AddForeignKey,
"drop_foreign_key": f.DropForeignKey,
"drop_table": f.DropTable,
"rename_table": f.RenameTable,
})

err := plush.RunScript(s, ctx)
Expand Down
66 changes: 29 additions & 37 deletions columns.go
Expand Up @@ -24,51 +24,43 @@ type Column struct {
Options map[string]interface{}
}

func (f fizzer) ChangeColumn() interface{} {
return func(table, name, ctype string, options Options) {
t := Table{
Name: table,
Columns: []Column{
{Name: name, ColType: ctype, Options: options},
},
}
f.add(f.Bubbler.ChangeColumn(t))
func (f fizzer) ChangeColumn(table, name, ctype string, options Options) {
t := Table{
Name: table,
Columns: []Column{
{Name: name, ColType: ctype, Options: options},
},
}
f.add(f.Bubbler.ChangeColumn(t))
}

func (f fizzer) AddColumn() interface{} {
return func(table, name, ctype string, options Options) {
t := Table{
Name: table,
Columns: []Column{
{Name: name, ColType: ctype, Options: options},
},
}
f.add(f.Bubbler.AddColumn(t))
func (f fizzer) AddColumn(table, name, ctype string, options Options) {
t := Table{
Name: table,
Columns: []Column{
{Name: name, ColType: ctype, Options: options},
},
}
f.add(f.Bubbler.AddColumn(t))
}

func (f fizzer) DropColumn() interface{} {
return func(table, name string) {
t := Table{
Name: table,
Columns: []Column{
{Name: name},
},
}
f.add(f.Bubbler.DropColumn(t))
func (f fizzer) DropColumn(table, name string) {
t := Table{
Name: table,
Columns: []Column{
{Name: name},
},
}
f.add(f.Bubbler.DropColumn(t))
}

func (f fizzer) RenameColumn() interface{} {
return func(table, old, new string) error {
t := Table{
Name: table,
Columns: []Column{
{Name: old},
{Name: new},
},
}
return f.add(f.Bubbler.RenameColumn(t))
func (f fizzer) RenameColumn(table, old, new string) error {
t := Table{
Name: table,
Columns: []Column{
{Name: old},
{Name: new},
},
}
return f.add(f.Bubbler.RenameColumn(t))
}
70 changes: 36 additions & 34 deletions foreign_keys.go
Expand Up @@ -3,6 +3,8 @@ package fizz
import (
"fmt"
"strings"

"github.com/pkg/errors"
)

type ForeignKeyRef struct {
Expand All @@ -17,50 +19,50 @@ type ForeignKey struct {
Options Options
}

func (f fizzer) AddForeignKey() interface{} {
return func(table string, column string, refs interface{}, options Options) {
fk := ForeignKey{
Column: column,
References: parseForeignKeyRef(refs),
Options: options,
}

if options["name"] != nil {
fk.Name = options["name"].(string)
} else {
fk.Name = fmt.Sprintf("%s_%s_%s_fk", table, fk.References.Table, strings.Join(fk.References.Columns, "_"))
}
func (f fizzer) AddForeignKey(table string, column string, refs interface{}, options Options) error {
fkr, err := parseForeignKeyRef(refs)
if err != nil {
return errors.WithStack(err)
}
fk := ForeignKey{
Column: column,
References: fkr,
Options: options,
}

f.add(f.Bubbler.AddForeignKey(Table{
Name: table,
ForeignKeys: []ForeignKey{fk},
}))
if options["name"] != nil {
fk.Name = options["name"].(string)
} else {
fk.Name = fmt.Sprintf("%s_%s_%s_fk", table, fk.References.Table, strings.Join(fk.References.Columns, "_"))
}

f.add(f.Bubbler.AddForeignKey(Table{
Name: table,
ForeignKeys: []ForeignKey{fk},
}))
return nil
}

func (f fizzer) DropForeignKey() interface{} {
return func(table string, fk string, options Options) {
f.add(f.Bubbler.DropForeignKey(Table{
Name: table,
ForeignKeys: []ForeignKey{
{
Name: fk,
Options: options,
},
func (f fizzer) DropForeignKey(table string, fk string, options Options) {
f.add(f.Bubbler.DropForeignKey(Table{
Name: table,
ForeignKeys: []ForeignKey{
{
Name: fk,
Options: options,
},
}))
}
},
}))
}

func parseForeignKeyRef(refs interface{}) (fkr ForeignKeyRef) {
func parseForeignKeyRef(refs interface{}) (ForeignKeyRef, error) {
fkr := ForeignKeyRef{}
refMap, ok := refs.(map[string]interface{})
if !ok {
fmt.Printf(`invalid references format %s\nmust be "{"table": ["colum1", "column2"]}"`, refs)
return
return fkr, errors.Errorf(`invalid references format %s\nmust be "{"table": ["colum1", "column2"]}"`, refs)
}
if len(refMap) != 1 {
fmt.Printf("only one table is supported as Foreign key reference")
return
return fkr, errors.Errorf("only one table is supported as Foreign key reference")
}
for table, columns := range refMap {
fkr.Table = table
Expand All @@ -69,5 +71,5 @@ func parseForeignKeyRef(refs interface{}) (fkr ForeignKeyRef) {
}
}

return
return fkr, nil
}
83 changes: 40 additions & 43 deletions index.go
Expand Up @@ -3,6 +3,8 @@ package fizz
import (
"fmt"
"strings"

"github.com/pkg/errors"
)

type Index struct {
Expand All @@ -12,54 +14,49 @@ type Index struct {
Options Options
}

func (f fizzer) AddIndex() interface{} {
return func(table string, columns interface{}, options Options) {
i := Index{}
switch t := columns.(type) {
default:
fmt.Printf("unexpected type %T\n", t) // %T prints whatever type t has
case string:
i.Columns = []string{t}
case []interface{}:
cl := make([]string, len(t))
for i, c := range t {
cl[i] = c.(string)
}
i.Columns = cl
func (f fizzer) AddIndex(table string, columns interface{}, options Options) error {
i := Index{}
switch t := columns.(type) {
default:
return errors.Errorf("unexpected type for columns %T", t) // %T prints whatever type t has
case string:
i.Columns = []string{t}
case []interface{}:
cl := make([]string, len(t))
for i, c := range t {
cl[i] = c.(string)
}
i.Columns = cl
}

if options["name"] != nil {
i.Name = options["name"].(string)
} else {
i.Name = fmt.Sprintf("%s_%s_idx", table, strings.Join(i.Columns, "_"))
}
i.Unique = options["unique"] != nil
f.add(f.Bubbler.AddIndex(Table{
Name: table,
Indexes: []Index{i},
}))
if options["name"] != nil {
i.Name = options["name"].(string)
} else {
i.Name = fmt.Sprintf("%s_%s_idx", table, strings.Join(i.Columns, "_"))
}
i.Unique = options["unique"] != nil
f.add(f.Bubbler.AddIndex(Table{
Name: table,
Indexes: []Index{i},
}))
return nil
}

func (f fizzer) DropIndex() interface{} {
return func(table, name string) {
f.add(f.Bubbler.DropIndex(Table{
Name: table,
Indexes: []Index{
{Name: name},
},
}))
}
func (f fizzer) DropIndex(table, name string) {
f.add(f.Bubbler.DropIndex(Table{
Name: table,
Indexes: []Index{
{Name: name},
},
}))
}

func (f fizzer) RenameIndex() interface{} {
return func(table, old, new string) {
f.add(f.Bubbler.RenameIndex(Table{
Name: table,
Indexes: []Index{
{Name: old},
{Name: new},
},
}))
}
func (f fizzer) RenameIndex(table, old, new string) {
f.add(f.Bubbler.RenameIndex(Table{
Name: table,
Indexes: []Index{
{Name: old},
{Name: new},
},
}))
}
9 changes: 6 additions & 3 deletions raw_sql.go
@@ -1,7 +1,10 @@
package fizz

func (f fizzer) RawSql() interface{} {
return func(sql string) {
f.add(sql, nil)
import "strings"

func (f fizzer) RawSql(sql string) {
if !strings.HasSuffix(sql, ";") {
sql += ";"
}
f.add(sql, nil)
}

0 comments on commit 873df14

Please sign in to comment.