Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 59c4a5ebf8 | |||
| 091e1913ee |
@@ -2,6 +2,8 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"runtime/debug"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
@@ -12,6 +14,36 @@ var (
|
|||||||
buildDate = "unknown"
|
buildDate = "unknown"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// If version wasn't set via ldflags, try to get it from build info
|
||||||
|
if version == "dev" {
|
||||||
|
if info, ok := debug.ReadBuildInfo(); ok {
|
||||||
|
// Try to get version from VCS
|
||||||
|
var vcsRevision, vcsTime string
|
||||||
|
for _, setting := range info.Settings {
|
||||||
|
switch setting.Key {
|
||||||
|
case "vcs.revision":
|
||||||
|
if len(setting.Value) >= 7 {
|
||||||
|
vcsRevision = setting.Value[:7]
|
||||||
|
}
|
||||||
|
case "vcs.time":
|
||||||
|
vcsTime = setting.Value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if vcsRevision != "" {
|
||||||
|
version = vcsRevision
|
||||||
|
}
|
||||||
|
|
||||||
|
if vcsTime != "" {
|
||||||
|
if t, err := time.Parse(time.RFC3339, vcsTime); err == nil {
|
||||||
|
buildDate = t.UTC().Format("2006-01-02 15:04:05 UTC")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var rootCmd = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
Use: "relspec",
|
Use: "relspec",
|
||||||
Short: "RelSpec - Database schema conversion and analysis tool",
|
Short: "RelSpec - Database schema conversion and analysis tool",
|
||||||
|
|||||||
@@ -251,8 +251,16 @@ func (tm *TypeMapper) BuildRelationshipTag(constraint *models.Constraint, relTyp
|
|||||||
if len(constraint.Columns) > 0 && len(constraint.ReferencedColumns) > 0 {
|
if len(constraint.Columns) > 0 && len(constraint.ReferencedColumns) > 0 {
|
||||||
localCol := constraint.Columns[0]
|
localCol := constraint.Columns[0]
|
||||||
foreignCol := constraint.ReferencedColumns[0]
|
foreignCol := constraint.ReferencedColumns[0]
|
||||||
|
|
||||||
|
// For has-many relationships, swap the columns
|
||||||
|
// has-one: join:fk_in_this_table=pk_in_other_table
|
||||||
|
// has-many: join:pk_in_this_table=fk_in_other_table
|
||||||
|
if relType == "has-many" {
|
||||||
|
parts = append(parts, fmt.Sprintf("join:%s=%s", foreignCol, localCol))
|
||||||
|
} else {
|
||||||
parts = append(parts, fmt.Sprintf("join:%s=%s", localCol, foreignCol))
|
parts = append(parts, fmt.Sprintf("join:%s=%s", localCol, foreignCol))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return strings.Join(parts, ",")
|
return strings.Join(parts, ",")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -308,14 +308,20 @@ func TestWriter_MultipleReferencesToSameTable(t *testing.T) {
|
|||||||
filepointerStr := string(filepointerContent)
|
filepointerStr := string(filepointerContent)
|
||||||
|
|
||||||
// Should have two different has-many relationships with unique names
|
// Should have two different has-many relationships with unique names
|
||||||
hasManyExpectations := []string{
|
hasManyExpectations := []struct {
|
||||||
"RelRIDFilepointerRequestOrgAPIEvents", // Has many via rid_filepointer_request
|
fieldName string
|
||||||
"RelRIDFilepointerResponseOrgAPIEvents", // Has many via rid_filepointer_response
|
tag string
|
||||||
|
}{
|
||||||
|
{"RelRIDFilepointerRequestOrgAPIEvents", "join:id_filepointer=rid_filepointer_request"}, // Has many via rid_filepointer_request
|
||||||
|
{"RelRIDFilepointerResponseOrgAPIEvents", "join:id_filepointer=rid_filepointer_response"}, // Has many via rid_filepointer_response
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, exp := range hasManyExpectations {
|
for _, exp := range hasManyExpectations {
|
||||||
if !strings.Contains(filepointerStr, exp) {
|
if !strings.Contains(filepointerStr, exp.fieldName) {
|
||||||
t.Errorf("Missing has-many relationship field: %s\nGenerated:\n%s", exp, filepointerStr)
|
t.Errorf("Missing has-many relationship field: %s\nGenerated:\n%s", exp.fieldName, filepointerStr)
|
||||||
|
}
|
||||||
|
if !strings.Contains(filepointerStr, exp.tag) {
|
||||||
|
t.Errorf("Missing has-many relationship join tag: %s\nGenerated:\n%s", exp.tag, filepointerStr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user