Add multiple from statements.
This commit is contained in:
parent
01124d9d0b
commit
48e14f4fd8
3 changed files with 15 additions and 18 deletions
boil
1
boil/_fixtures/04.sql
Normal file
1
boil/_fixtures/04.sql
Normal file
|
@ -0,0 +1 @@
|
||||||
|
SELECT count(*) as ab, thing as bd, "stuff" FROM "a","b";
|
|
@ -33,7 +33,7 @@ type Query struct {
|
||||||
update map[string]interface{}
|
update map[string]interface{}
|
||||||
selectCols []string
|
selectCols []string
|
||||||
count bool
|
count bool
|
||||||
from string
|
from []string
|
||||||
innerJoins []join
|
innerJoins []join
|
||||||
outerJoins []join
|
outerJoins []join
|
||||||
leftOuterJoins []join
|
leftOuterJoins []join
|
||||||
|
@ -73,12 +73,7 @@ func buildSelectQuery(q *Query) (*bytes.Buffer, []interface{}) {
|
||||||
buf.WriteString("COUNT(")
|
buf.WriteString("COUNT(")
|
||||||
}
|
}
|
||||||
if len(q.selectCols) > 0 {
|
if len(q.selectCols) > 0 {
|
||||||
cols := make([]string, len(q.selectCols))
|
buf.WriteString(strings.Join(strmangle.IdentQuoteSlice(q.selectCols), `, `))
|
||||||
copy(cols, q.selectCols)
|
|
||||||
for i := 0; i < len(cols); i++ {
|
|
||||||
cols[i] = strmangle.IdentQuote(cols[i])
|
|
||||||
}
|
|
||||||
buf.WriteString(strings.Join(q.selectCols, `, `))
|
|
||||||
} else {
|
} else {
|
||||||
buf.WriteByte('*')
|
buf.WriteByte('*')
|
||||||
}
|
}
|
||||||
|
@ -88,7 +83,7 @@ func buildSelectQuery(q *Query) (*bytes.Buffer, []interface{}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.WriteString(" FROM ")
|
buf.WriteString(" FROM ")
|
||||||
fmt.Fprintf(buf, `"%s"`, q.from)
|
buf.WriteString(strings.Join(strmangle.IdentQuoteSlice(q.from), ","))
|
||||||
|
|
||||||
where, args := whereClause(q)
|
where, args := whereClause(q)
|
||||||
buf.WriteString(where)
|
buf.WriteString(where)
|
||||||
|
@ -198,8 +193,8 @@ func Select(q *Query) []string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetFrom on the query.
|
// SetFrom on the query.
|
||||||
func SetFrom(q *Query, from string) {
|
func SetFrom(q *Query, from ...string) {
|
||||||
q.from = from
|
q.from = append(q.from, from...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetInnerJoin on the query.
|
// SetInnerJoin on the query.
|
||||||
|
|
|
@ -26,10 +26,11 @@ func TestBuildQuery(t *testing.T) {
|
||||||
q *Query
|
q *Query
|
||||||
args []interface{}
|
args []interface{}
|
||||||
}{
|
}{
|
||||||
{&Query{from: "t"}, nil},
|
{&Query{from: []string{"t"}}, nil},
|
||||||
{&Query{from: "q", limit: 5, offset: 6}, nil},
|
{&Query{from: []string{"q"}, limit: 5, offset: 6}, nil},
|
||||||
{&Query{from: "q", orderBy: []string{"a ASC", "b DESC"}}, nil},
|
{&Query{from: []string{"q"}, orderBy: []string{"a ASC", "b DESC"}}, nil},
|
||||||
{&Query{from: "t", selectCols: []string{"count(*) as ab, thing as bd", `"stuff"`}}, nil},
|
{&Query{from: []string{"t"}, selectCols: []string{"count(*) as ab, thing as bd", `"stuff"`}}, nil},
|
||||||
|
{&Query{from: []string{"a", "b"}, selectCols: []string{"count(*) as ab, thing as bd", `"stuff"`}}, nil},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, test := range tests {
|
for i, test := range tests {
|
||||||
|
@ -192,14 +193,14 @@ func TestSetHaving(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSetTable(t *testing.T) {
|
func TestSetFrom(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
q := &Query{}
|
q := &Query{}
|
||||||
SetFrom(q, "videos a, orders b")
|
SetFrom(q, "videos a", "orders b")
|
||||||
|
|
||||||
expect := "videos a, orders b"
|
expect := []string{"videos a", "orders b"}
|
||||||
if q.from != expect {
|
if !reflect.DeepEqual(q.from, expect) {
|
||||||
t.Errorf("Expected %s, got %s", expect, q.from)
|
t.Errorf("Expected %s, got %s", expect, q.from)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue