Skip to content

Commit

Permalink
Add Merge.
Browse files Browse the repository at this point in the history
Will merge queries maps from a list of *DotSql returning a new one.
  • Loading branch information
Gustavo Chain committed Jan 13, 2015
1 parent a424ecd commit 5487b6a
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
17 changes: 17 additions & 0 deletions dotsql.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,3 +112,20 @@ func LoadFromString(sql string) (*DotSql, error) {
buf := bytes.NewBufferString(sql)
return Load(buf)
}

// Merge takes one or more *DotSql and merge its queries
// It's in-order, so the last source will override queries with the same name
// in the previous arguments if any.
func Merge(dots ...*DotSql) *DotSql {
queries := make(map[string]string)

for _, dot := range dots {
for k, v := range dot.QueryMap() {
queries[k] = v
}
}

return &DotSql{
queries: queries,
}
}
40 changes: 40 additions & 0 deletions dotsql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,43 @@ func TestQueries(t *testing.T) {
}
}
}

func TestMergeHaveBothQueries(t *testing.T) {
expectedQueryMap := map[string]string{
"query-a": "SELECT * FROM a",
"query-b": "SELECT * FROM b",
}

a, err := LoadFromString("--name: query-a\nSELECT * FROM a")
failIfError(t, err)

b, err := LoadFromString("--name: query-b\nSELECT * FROM b")
failIfError(t, err)

c := Merge(a, b)

got := c.QueryMap()
if len(got) != len(expectedQueryMap) {
t.Errorf("QueryMap() len (%d) differ from expected (%d)", len(got), len(expectedQueryMap))
}
}

func TestMergeTakesPresecendeFromLastArgument(t *testing.T) {
expectedQuery := "SELECT * FROM c"

a, err := LoadFromString("--name: query\nSELECT * FROM a")
failIfError(t, err)

b, err := LoadFromString("--name: query\nSELECT * FROM b")
failIfError(t, err)

c, err := LoadFromString("--name: query\nSELECT * FROM c")
failIfError(t, err)

x := Merge(a, b, c)

got := x.QueryMap()["query"]
if expectedQuery != got {
t.Errorf("Expected query: '%s', got: '%s'", expectedQuery, got)
}
}

0 comments on commit 5487b6a

Please sign in to comment.