164 lines
3 KiB
Go
164 lines
3 KiB
Go
package sqlbuilder
|
|
|
|
import (
|
|
"fmt"
|
|
"gotest.tools/assert"
|
|
"testing"
|
|
)
|
|
|
|
func TestUnionNoSelect(t *testing.T) {
|
|
_, _, err := UNION().Sql()
|
|
|
|
assert.Assert(t, err != nil)
|
|
//fmt.Println(err.Error())
|
|
//fmt.Print(query, args)
|
|
}
|
|
|
|
func TestUnionOneSelect(t *testing.T) {
|
|
_, _, err := UNION(
|
|
table1.SELECT(table1Col1),
|
|
).Sql()
|
|
|
|
assert.Assert(t, err != nil)
|
|
}
|
|
|
|
func TestUnionTwoSelect(t *testing.T) {
|
|
query, args, err := UNION(
|
|
table1.SELECT(table1Col1),
|
|
table2.SELECT(table2Col3),
|
|
).Sql()
|
|
|
|
assert.NilError(t, err)
|
|
fmt.Println(query)
|
|
assert.Equal(t, query, `
|
|
(
|
|
(
|
|
SELECT table1.col1 AS "table1.col1"
|
|
FROM db.table1
|
|
)
|
|
UNION
|
|
(
|
|
SELECT table2.col3 AS "table2.col3"
|
|
FROM db.table2
|
|
)
|
|
);
|
|
`)
|
|
assert.Equal(t, len(args), 0)
|
|
}
|
|
|
|
func TestUnionThreeSelect(t *testing.T) {
|
|
query, args, err := UNION(
|
|
table1.SELECT(table1Col1),
|
|
table2.SELECT(table2Col3),
|
|
table3.SELECT(table3Col1),
|
|
).Sql()
|
|
|
|
fmt.Println(query)
|
|
assert.NilError(t, err)
|
|
assert.Equal(t, query, `
|
|
(
|
|
(
|
|
SELECT table1.col1 AS "table1.col1"
|
|
FROM db.table1
|
|
)
|
|
UNION
|
|
(
|
|
SELECT table2.col3 AS "table2.col3"
|
|
FROM db.table2
|
|
)
|
|
UNION
|
|
(
|
|
SELECT table3.col1 AS "table3.col1"
|
|
FROM db.table3
|
|
)
|
|
);
|
|
`)
|
|
assert.Equal(t, len(args), 0)
|
|
}
|
|
|
|
func TestUnionWithOrderBy(t *testing.T) {
|
|
query, args, err := UNION(
|
|
table1.SELECT(table1Col1),
|
|
table2.SELECT(table2Col3),
|
|
).ORDER_BY(table1Col1.ASC()).Sql()
|
|
|
|
assert.NilError(t, err)
|
|
fmt.Println(query)
|
|
assert.Equal(t, query, `
|
|
(
|
|
(
|
|
SELECT table1.col1 AS "table1.col1"
|
|
FROM db.table1
|
|
)
|
|
UNION
|
|
(
|
|
SELECT table2.col3 AS "table2.col3"
|
|
FROM db.table2
|
|
)
|
|
)
|
|
ORDER BY "table1.col1" ASC;
|
|
`)
|
|
assert.Equal(t, len(args), 0)
|
|
}
|
|
|
|
func TestUnionWithLimit(t *testing.T) {
|
|
query, args, err := UNION(
|
|
table1.SELECT(table1Col1),
|
|
table2.SELECT(table2Col3),
|
|
).LIMIT(10).OFFSET(11).Sql()
|
|
|
|
assert.NilError(t, err)
|
|
fmt.Println(query)
|
|
assert.Equal(t, query, `
|
|
(
|
|
(
|
|
SELECT table1.col1 AS "table1.col1"
|
|
FROM db.table1
|
|
)
|
|
UNION
|
|
(
|
|
SELECT table2.col3 AS "table2.col3"
|
|
FROM db.table2
|
|
)
|
|
)
|
|
LIMIT $1
|
|
OFFSET $2;
|
|
`)
|
|
assert.Equal(t, len(args), 2)
|
|
}
|
|
|
|
func TestUnionInUnion(t *testing.T) {
|
|
expectedSql := `
|
|
(
|
|
(
|
|
SELECT table2.col3 AS "table2.col3",
|
|
table2.col3 AS "table2.col3"
|
|
FROM db.table2
|
|
)
|
|
UNION
|
|
|
|
(
|
|
(
|
|
SELECT table1.col1 AS "table1.col1"
|
|
FROM db.table1
|
|
)
|
|
UNION ALL
|
|
(
|
|
SELECT table2.col3 AS "table2.col3"
|
|
FROM db.table2
|
|
)
|
|
)
|
|
);
|
|
`
|
|
query := UNION(
|
|
SELECT(table2Col3, table2Col3).FROM(table2),
|
|
UNION_ALL(table1.SELECT(table1Col1), table2.SELECT(table2Col3)),
|
|
)
|
|
|
|
queryStr, args, err := query.Sql()
|
|
|
|
fmt.Println(queryStr)
|
|
assert.NilError(t, err)
|
|
assert.Equal(t, len(args), 0)
|
|
assert.Equal(t, queryStr, expectedSql)
|
|
}
|