jet/sqlbuilder/set_statement_test.go

165 lines
3 KiB
Go
Raw Normal View History

2019-05-01 17:25:10 +02:00
package sqlbuilder
2019-05-01 18:23:19 +02:00
import (
2019-05-12 18:15:23 +02:00
"fmt"
2019-05-01 18:23:19 +02:00
"gotest.tools/assert"
"testing"
)
func TestUnionNoSelect(t *testing.T) {
2019-05-03 12:51:57 +02:00
_, _, err := UNION().Sql()
2019-05-01 18:23:19 +02:00
assert.Assert(t, err != nil)
//fmt.Println(err.Error())
2019-05-03 12:51:57 +02:00
//fmt.Print(query, args)
2019-05-01 18:23:19 +02:00
}
func TestUnionOneSelect(t *testing.T) {
2019-05-07 13:44:30 +02:00
_, _, err := UNION(
2019-05-01 18:23:19 +02:00
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)
2019-05-12 18:15:23 +02:00
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
)
);
`)
2019-05-01 18:23:19 +02:00
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()
2019-05-12 18:15:23 +02:00
fmt.Println(query)
2019-05-01 18:23:19 +02:00
assert.NilError(t, err)
2019-05-12 18:15:23 +02:00
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
)
);
`)
2019-05-01 18:23:19 +02:00
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()
2019-05-01 18:23:19 +02:00
assert.NilError(t, err)
2019-05-12 18:15:23 +02:00
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;
`)
2019-05-01 18:23:19 +02:00
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)
2019-05-12 18:15:23 +02:00
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;
`)
2019-05-01 18:23:19 +02:00
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)
}