diff --git a/boil/_fixtures/12.sql b/boil/_fixtures/12.sql new file mode 100644 index 0000000..7f4a1db --- /dev/null +++ b/boil/_fixtures/12.sql @@ -0,0 +1 @@ +SELECT "cats".* FROM "cats" INNER JOIN dogs d on d.cat_id = cats.id; \ No newline at end of file diff --git a/boil/_fixtures/13.sql b/boil/_fixtures/13.sql new file mode 100644 index 0000000..0527b2d --- /dev/null +++ b/boil/_fixtures/13.sql @@ -0,0 +1 @@ +SELECT "c".* FROM cats c INNER JOIN dogs d on d.cat_id = cats.id; \ No newline at end of file diff --git a/boil/_fixtures/14.sql b/boil/_fixtures/14.sql new file mode 100644 index 0000000..9946661 --- /dev/null +++ b/boil/_fixtures/14.sql @@ -0,0 +1 @@ +SELECT "c".* FROM cats as c INNER JOIN dogs d on d.cat_id = cats.id; \ No newline at end of file diff --git a/boil/_fixtures/15.sql b/boil/_fixtures/15.sql new file mode 100644 index 0000000..59a7ca8 --- /dev/null +++ b/boil/_fixtures/15.sql @@ -0,0 +1 @@ +SELECT "c".*, "d".* FROM cats as c, dogs as d INNER JOIN dogs d on d.cat_id = cats.id; \ No newline at end of file diff --git a/boil/query_builders.go b/boil/query_builders.go index 410baf6..b0131a4 100644 --- a/boil/query_builders.go +++ b/boil/query_builders.go @@ -260,22 +260,23 @@ func writeModifiers(q *Query, buf *bytes.Buffer, args *[]interface{}) { } func writeStars(q *Query) []string { - cols := make([]string, 0, len(q.from)) - for _, f := range q.from { + cols := make([]string, len(q.from)) + for i, f := range q.from { toks := strings.Split(f, " ") if len(toks) == 1 { - cols = append(cols, fmt.Sprintf(`%s.*`, strmangle.IdentQuote(toks[0]))) + cols[i] = fmt.Sprintf(`%s.*`, strmangle.IdentQuote(toks[0])) continue } alias, name, ok := parseFromClause(toks) if !ok { + return nil } if len(alias) != 0 { name = alias } - cols = append(cols, fmt.Sprintf(`%s.*`, strmangle.IdentQuote(name))) + cols[i] = fmt.Sprintf(`%s.*`, strmangle.IdentQuote(name)) } return cols diff --git a/boil/query_builders_test.go b/boil/query_builders_test.go index e2c372a..d99e58d 100644 --- a/boil/query_builders_test.go +++ b/boil/query_builders_test.go @@ -89,6 +89,10 @@ func TestBuildQuery(t *testing.T) { }, limit: 5, }, []interface{}{2, 3, 1, 4, 5, 6, 7, 8, 9, 10}}, + {&Query{from: []string{"cats"}, joins: []join{{JoinInner, "dogs d on d.cat_id = cats.id", nil}}}, nil}, + {&Query{from: []string{"cats c"}, joins: []join{{JoinInner, "dogs d on d.cat_id = cats.id", nil}}}, nil}, + {&Query{from: []string{"cats as c"}, joins: []join{{JoinInner, "dogs d on d.cat_id = cats.id", nil}}}, nil}, + {&Query{from: []string{"cats as c", "dogs as d"}, joins: []join{{JoinInner, "dogs d on d.cat_id = cats.id", nil}}}, nil}, } for i, test := range tests {