Skip to content

Commit

Permalink
Merge pull request #1 from daichirata/feature/create
Browse files Browse the repository at this point in the history
Add create command
  • Loading branch information
daichirata committed Jan 26, 2020
2 parents ab08822 + d5f4e67 commit 6ceabba
Show file tree
Hide file tree
Showing 14 changed files with 530 additions and 438 deletions.
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Usage:
hammer [command]
Available Commands:
create Create database and apply schema
diff Diff schema
export Export schema
help Help about any command
Expand All @@ -39,7 +40,13 @@ Examples:
hammer export spanner://projects/projectId/instances/instanceId/databases/databaseName > schema.sql
* Apply local schema file
hammer spanner://projects/projectId/instances/instanceId/databases/databaseName /path/to/file.sql
hammer spanner://projects/projectId/instances/instanceId/databases/databaseName /path/to/file
* Create database and apply local schema (faster than running database creation and schema apply separately)
hammer create spanner://projects/projectId/instances/instanceId/databases/databaseName /path/to/file
* Copy database
hammer create spanner://projects/projectId/instances/instanceId/databases/databaseName1 spanner://projects/projectId/instances/instanceId/databases/databaseName2
* Compare local files
hammer diff /path/to/file /another/path/to/file
Expand Down
42 changes: 42 additions & 0 deletions cmd/create.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package cmd

import (
"fmt"

"github.com/spf13/cobra"

"github.com/daichirata/hammer/internal/hammer"
)

var (
createCmd = &cobra.Command{
Use: "create DATABASE SOURCE",
Short: "Create database and apply schema",
Args: func(cmd *cobra.Command, args []string) error {
if len(args) != 2 {
return fmt.Errorf("must specify 2 argument")
}
return nil
},
RunE: func(cmd *cobra.Command, args []string) error {
databaseURI := args[0]

if hammer.Scheme(databaseURI) != "spanner" {
return fmt.Errorf("DATABASE must be a spanner URI")
}
database, err := hammer.NewSpannerSource(databaseURI)
if err != nil {
return err
}
ddl, err := database.DDL()
if err != nil {
return err
}
return database.Create(ddl)
},
}
)

func init() {
rootCmd.AddCommand(createCmd)
}
14 changes: 7 additions & 7 deletions cmd/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package cmd
import (
"fmt"

"github.com/daichirata/hammer/internal"
"github.com/spf13/cobra"

"github.com/daichirata/hammer/internal/hammer"
)

var (
Expand All @@ -21,23 +22,22 @@ var (
sourceURI1 := args[0]
sourceURI2 := args[1]

source1, err := internal.NewSource(sourceURI1)
source1, err := hammer.NewSource(sourceURI1)
if err != nil {
return err
}
source2, err := internal.NewSource(sourceURI2)
source2, err := hammer.NewSource(sourceURI2)
if err != nil {
return err
}

ddls, err := internal.GenerateDDLs(source1, source2)
ddl, err := hammer.Diff(source1, source2)
if err != nil {
return err
}
for _, ddl := range ddls {
fmt.Println(ddl.SQL())
for _, stmt := range ddl.List {
fmt.Println(stmt.SQL())
}

return nil
},
}
Expand Down
20 changes: 9 additions & 11 deletions cmd/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ package cmd
import (
"fmt"

"github.com/daichirata/hammer/internal"
"github.com/spf13/cobra"

"github.com/daichirata/hammer/internal/hammer"
)

var (
exportCmd = &cobra.Command{
Use: "export DATABASE",
Use: "export SOURCE",
Short: "Export schema",
Args: func(cmd *cobra.Command, args []string) error {
if len(args) != 1 {
Expand All @@ -18,22 +19,19 @@ var (
return nil
},
RunE: func(cmd *cobra.Command, args []string) error {
databaseURI := args[0]
sourceURI := args[0]

if internal.Scheme(databaseURI) != "spanner" {
return fmt.Errorf("DATABASE must be a spanner URI")
}
database, err := internal.NewSource(databaseURI)
database, err := hammer.NewSource(sourceURI)
if err != nil {
return err
}

ddls, err := database.Read()
ddl, err := database.DDL()
if err != nil {
return err
}
fmt.Println(ddls)

for _, stmt := range ddl.List {
fmt.Println(stmt.SQL() + ";\n")
}
return nil
},
}
Expand Down
16 changes: 9 additions & 7 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package cmd
import (
"fmt"

"github.com/daichirata/hammer/internal"
"github.com/spf13/cobra"

"github.com/daichirata/hammer/internal/hammer"
)

var (
Expand All @@ -21,31 +22,32 @@ var (
databaseURI := args[0]
sourceURI := args[1]

if internal.Scheme(databaseURI) != "spanner" {
if hammer.Scheme(databaseURI) != "spanner" {
return fmt.Errorf("DATABASE must be a spanner URI")
}
database, err := internal.NewSpannerSource(databaseURI)
database, err := hammer.NewSpannerSource(databaseURI)
if err != nil {
return err
}
source, err := internal.NewSource(sourceURI)
source, err := hammer.NewSource(sourceURI)
if err != nil {
return err
}

ddls, err := internal.GenerateDDLs(database, source)
ddl, err := hammer.Diff(database, source)
if err != nil {
return err
}
if len(ddls) == 0 {
if len(ddl.List) == 0 {
return nil
}

if err := database.Apply(ddls); err != nil {
if err := database.Apply(ddl); err != nil {
return err
}
return nil
},
SilenceUsage: true,
}
)

Expand Down
Loading

0 comments on commit 6ceabba

Please sign in to comment.