jet/set_statement_test.go

302 lines
5.3 KiB
Go
Raw Normal View History

2019-06-21 13:56:57 +02:00
package jet
2019-05-01 18:23:19 +02:00
import (
"gotest.tools/assert"
"testing"
)
2019-07-01 19:41:49 +02:00
func TestUnionTwoSelect(t *testing.T) {
2019-07-18 17:43:11 +02:00
var expectedSQL = `
2019-07-01 19:41:49 +02:00
(
(
SELECT table1.col1 AS "table1.col1"
FROM db.table1
)
UNION
(
SELECT table2.col3 AS "table2.col3"
FROM db.table2
)
);
`
unionStmt1 := table1.
SELECT(table1Col1).
UNION(
table2.SELECT(table2Col3),
)
unionStmt2 := UNION(table1.SELECT(table1Col1), table2.SELECT(table2Col3))
2019-05-01 18:23:19 +02:00
2019-07-18 17:43:11 +02:00
assertStatement(t, unionStmt1, expectedSQL)
assertStatement(t, unionStmt2, expectedSQL)
2019-05-01 18:23:19 +02:00
}
2019-07-01 19:41:49 +02:00
func TestUnionNilSelect(t *testing.T) {
unionStmt := table1.
SELECT(table1Col1).
UNION(nil)
2019-05-01 18:23:19 +02:00
2019-07-08 13:00:44 +02:00
assertStatementErr(t, unionStmt, "jet: select statement is nil")
2019-05-01 18:23:19 +02:00
}
2019-07-01 19:41:49 +02:00
func TestUnionThreeSelect1(t *testing.T) {
2019-05-01 18:23:19 +02:00
2019-07-01 19:41:49 +02:00
unionStmt1 := table1.SELECT(table1Col1).
UNION(
table2.SELECT(table2Col3),
).
UNION(
table3.SELECT(table3Col1),
)
2019-07-18 17:43:11 +02:00
var expectedSQL = `
2019-05-12 18:15:23 +02:00
(
2019-07-01 19:41:49 +02:00
2019-05-12 18:15:23 +02:00
(
2019-07-01 19:41:49 +02:00
(
SELECT table1.col1 AS "table1.col1"
FROM db.table1
)
UNION
(
SELECT table2.col3 AS "table2.col3"
FROM db.table2
)
2019-05-12 18:15:23 +02:00
)
UNION
(
2019-07-01 19:41:49 +02:00
SELECT table3.col1 AS "table3.col1"
FROM db.table3
2019-05-12 18:15:23 +02:00
)
);
2019-07-01 19:41:49 +02:00
`
2019-07-18 17:43:11 +02:00
assertStatement(t, unionStmt1, expectedSQL)
2019-05-01 18:23:19 +02:00
}
2019-07-01 19:41:49 +02:00
func TestUnionThreeSelect2(t *testing.T) {
unionStmt2 := UNION(
2019-05-01 18:23:19 +02:00
table1.SELECT(table1Col1),
table2.SELECT(table2Col3),
table3.SELECT(table3Col1),
2019-07-01 19:41:49 +02:00
)
2019-05-01 18:23:19 +02:00
2019-07-18 17:43:11 +02:00
var expectedSQL = `
2019-05-12 18:15:23 +02:00
(
(
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-07-01 19:41:49 +02:00
`
2019-07-18 17:43:11 +02:00
assertStatement(t, unionStmt2, expectedSQL)
2019-05-01 18:23:19 +02:00
}
func TestUnionWithOrderBy(t *testing.T) {
2019-07-01 19:41:49 +02:00
unionStmt := UNION(
2019-05-01 18:23:19 +02:00
table1.SELECT(table1Col1),
table2.SELECT(table2Col3),
2019-07-01 19:41:49 +02:00
).
ORDER_BY(table1Col1.ASC())
2019-05-01 18:23:19 +02:00
2019-07-01 19:41:49 +02:00
assertStatement(t, unionStmt, `
2019-05-12 18:15:23 +02:00
(
(
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
}
2019-07-01 19:41:49 +02:00
func TestUnionWithLimitAndOffset(t *testing.T) {
2019-05-01 18:23:19 +02:00
query, args, err := UNION(
table1.SELECT(table1Col1),
table2.SELECT(table2Col3),
2019-07-01 19:41:49 +02:00
).
LIMIT(10).
OFFSET(11).Sql()
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
)
)
LIMIT $1
OFFSET $2;
`)
2019-05-01 18:23:19 +02:00
assert.Equal(t, len(args), 2)
}
func TestUnionInUnion(t *testing.T) {
2019-07-18 17:43:11 +02:00
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)),
)
2019-07-18 17:43:11 +02:00
assertStatement(t, query, expectedSQL)
}
2019-06-11 12:47:35 +02:00
func TestUnionALL(t *testing.T) {
query, args, err := UNION_ALL(
table1.SELECT(table1Col1),
table2.SELECT(table2Col3),
).Sql()
assert.NilError(t, err)
assert.Equal(t, query, `
(
(
SELECT table1.col1 AS "table1.col1"
FROM db.table1
)
UNION ALL
(
SELECT table2.col3 AS "table2.col3"
FROM db.table2
)
);
`)
assert.Equal(t, len(args), 0)
}
func TestINTERSECT(t *testing.T) {
query, args, err := INTERSECT(
table1.SELECT(table1Col1),
table2.SELECT(table2Col3),
).Sql()
assert.NilError(t, err)
assert.Equal(t, query, `
(
(
SELECT table1.col1 AS "table1.col1"
FROM db.table1
)
INTERSECT
(
SELECT table2.col3 AS "table2.col3"
FROM db.table2
)
);
`)
assert.Equal(t, len(args), 0)
}
func TestINTERSECT_ALL(t *testing.T) {
query, args, err := INTERSECT_ALL(
table1.SELECT(table1Col1),
table2.SELECT(table2Col3),
).Sql()
assert.NilError(t, err)
assert.Equal(t, query, `
(
(
SELECT table1.col1 AS "table1.col1"
FROM db.table1
)
INTERSECT ALL
(
SELECT table2.col3 AS "table2.col3"
FROM db.table2
)
);
`)
assert.Equal(t, len(args), 0)
}
func TestEXCEPT(t *testing.T) {
query, args, err := EXCEPT(
table1.SELECT(table1Col1),
table2.SELECT(table2Col3),
).Sql()
assert.NilError(t, err)
assert.Equal(t, query, `
(
(
SELECT table1.col1 AS "table1.col1"
FROM db.table1
)
EXCEPT
(
SELECT table2.col3 AS "table2.col3"
FROM db.table2
)
);
`)
assert.Equal(t, len(args), 0)
}
func TestEXCEPT_ALL(t *testing.T) {
query, args, err := EXCEPT_ALL(
table1.SELECT(table1Col1),
table2.SELECT(table2Col3),
).Sql()
assert.NilError(t, err)
assert.Equal(t, query, `
(
(
SELECT table1.col1 AS "table1.col1"
FROM db.table1
)
EXCEPT ALL
(
SELECT table2.col3 AS "table2.col3"
FROM db.table2
)
);
`)
assert.Equal(t, len(args), 0)
}