jet/sqlbuilder/bool_expression_test.go

110 lines
2.4 KiB
Go
Raw Normal View History

2019-03-31 09:17:28 +02:00
package sqlbuilder
import (
"gotest.tools/assert"
"testing"
)
func TestBinaryExpression(t *testing.T) {
boolExpression := Eq(Literal(2), Literal(3))
2019-05-01 17:25:10 +02:00
out := queryData{}
err := boolExpression.Serialize(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), "$1 = $2")
assert.Equal(t, len(out.args), 2)
2019-03-31 09:17:28 +02:00
t.Run("alias", func(t *testing.T) {
alias := boolExpression.As("alias_eq_expression")
2019-05-01 17:25:10 +02:00
out := queryData{}
2019-04-07 09:58:12 +02:00
err := alias.SerializeForProjection(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), `$1 = $2 AS "alias_eq_expression"`)
2019-03-31 09:17:28 +02:00
})
t.Run("and", func(t *testing.T) {
exp := boolExpression.And(Eq(Literal(4), Literal(5)))
2019-05-01 17:25:10 +02:00
out := queryData{}
err := exp.Serialize(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), `($1 = $2 AND $3 = $4)`)
2019-03-31 09:17:28 +02:00
})
t.Run("or", func(t *testing.T) {
exp := boolExpression.Or(Eq(Literal(4), Literal(5)))
2019-05-01 17:25:10 +02:00
out := queryData{}
err := exp.Serialize(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), `($1 = $2 OR $3 = $4)`)
2019-03-31 09:17:28 +02:00
})
}
func TestUnaryExpression(t *testing.T) {
notExpression := Not(Eq(Literal(2), Literal(1)))
2019-05-01 17:25:10 +02:00
out := queryData{}
err := notExpression.Serialize(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), " NOT $1 = $2")
2019-03-31 09:17:28 +02:00
t.Run("alias", func(t *testing.T) {
alias := notExpression.As("alias_not_expression")
2019-05-01 17:25:10 +02:00
out := queryData{}
2019-04-07 09:58:12 +02:00
err := alias.SerializeForProjection(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), ` NOT $1 = $2 AS "alias_not_expression"`)
2019-03-31 09:17:28 +02:00
})
t.Run("and", func(t *testing.T) {
exp := notExpression.And(Eq(Literal(4), Literal(5)))
2019-05-01 17:25:10 +02:00
out := queryData{}
err := exp.Serialize(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), `( NOT $1 = $2 AND $3 = $4)`)
2019-03-31 09:17:28 +02:00
})
}
func TestUnaryIsTrueExpression(t *testing.T) {
notExpression := IsTrue(Eq(Literal(2), Literal(1)))
2019-05-01 17:25:10 +02:00
out := queryData{}
err := notExpression.Serialize(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), " IS TRUE $1 = $2")
2019-03-31 09:17:28 +02:00
t.Run("and", func(t *testing.T) {
exp := notExpression.And(Eq(Literal(4), Literal(5)))
2019-05-01 17:25:10 +02:00
out := queryData{}
err := exp.Serialize(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), `( IS TRUE $1 = $2 AND $3 = $4)`)
2019-03-31 09:17:28 +02:00
})
}
func TestBoolLiteral(t *testing.T) {
2019-03-31 14:07:58 +02:00
literal := newBoolLiteralExpression(true)
2019-03-31 09:17:28 +02:00
2019-05-01 17:25:10 +02:00
out := queryData{}
err := literal.Serialize(&out)
2019-03-31 09:17:28 +02:00
assert.NilError(t, err)
2019-05-01 17:25:10 +02:00
assert.Equal(t, out.buff.String(), "$1")
2019-03-31 09:17:28 +02:00
}