In parameterized statements integer literals, like Int(num), are replaced with a placeholders. For some expressions, postgres interpreter will not have enough information to deduce the type. If this is the case postgres returns an error. Int8, Int16, Int32.... functions now will add automatic type cast over a placeholder, so type deduction is always possible.
88 lines
2.7 KiB
Go
88 lines
2.7 KiB
Go
package postgres
|
|
|
|
import "testing"
|
|
|
|
func TestString_REGEXP_LIKE_operator(t *testing.T) {
|
|
assertSerialize(t, table3StrCol.REGEXP_LIKE(table2ColStr), "(table3.col2 ~* table2.col_str)")
|
|
assertSerialize(t, table3StrCol.REGEXP_LIKE(String("JOHN")), "(table3.col2 ~* $1)", "JOHN")
|
|
assertSerialize(t, table3StrCol.REGEXP_LIKE(String("JOHN"), false), "(table3.col2 ~* $1)", "JOHN")
|
|
assertSerialize(t, table3StrCol.REGEXP_LIKE(String("JOHN"), true), "(table3.col2 ~ $1)", "JOHN")
|
|
}
|
|
|
|
func TestString_NOT_REGEXP_LIKE_operator(t *testing.T) {
|
|
assertSerialize(t, table3StrCol.NOT_REGEXP_LIKE(table2ColStr), "(table3.col2 !~* table2.col_str)")
|
|
assertSerialize(t, table3StrCol.NOT_REGEXP_LIKE(String("JOHN")), "(table3.col2 !~* $1)", "JOHN")
|
|
assertSerialize(t, table3StrCol.NOT_REGEXP_LIKE(String("JOHN"), false), "(table3.col2 !~* $1)", "JOHN")
|
|
assertSerialize(t, table3StrCol.NOT_REGEXP_LIKE(String("JOHN"), true), "(table3.col2 !~ $1)", "JOHN")
|
|
}
|
|
|
|
func TestExists(t *testing.T) {
|
|
assertSerialize(t, EXISTS(
|
|
table2.
|
|
SELECT(Int(1)).
|
|
WHERE(table1Col1.EQ(table2Col3)),
|
|
),
|
|
`(EXISTS (
|
|
SELECT $1
|
|
FROM db.table2
|
|
WHERE table1.col1 = table2.col3
|
|
))`, int64(1))
|
|
|
|
assertSerialize(t, EXISTS(
|
|
SELECT(Int(1)),
|
|
).EQ(Bool(true)),
|
|
`((EXISTS (
|
|
SELECT $1
|
|
)) = $2::boolean)`, int64(1), true)
|
|
|
|
assertProjectionSerialize(t, EXISTS(
|
|
SELECT(Int(1)),
|
|
).AS("exists"),
|
|
`(EXISTS (
|
|
SELECT $1
|
|
)) AS "exists"`, int64(1))
|
|
}
|
|
|
|
func TestIN(t *testing.T) {
|
|
|
|
assertSerialize(t, Float(1.11).IN(table1.SELECT(table1Col1)),
|
|
`($1 IN (
|
|
SELECT table1.col1 AS "table1.col1"
|
|
FROM db.table1
|
|
))`, float64(1.11))
|
|
|
|
assertSerialize(t, ROW(Int(12), table1Col1).IN(table2.SELECT(table2Col3, table3Col1)),
|
|
`(ROW($1, table1.col1) IN (
|
|
SELECT table2.col3 AS "table2.col3",
|
|
table3.col1 AS "table3.col1"
|
|
FROM db.table2
|
|
))`, int64(12))
|
|
}
|
|
|
|
func TestNOT_IN(t *testing.T) {
|
|
|
|
assertSerialize(t, Float(1.11).NOT_IN(table1.SELECT(table1Col1)),
|
|
`($1 NOT IN (
|
|
SELECT table1.col1 AS "table1.col1"
|
|
FROM db.table1
|
|
))`, float64(1.11))
|
|
|
|
assertSerialize(t, ROW(Int(12), table1Col1).NOT_IN(table2.SELECT(table2Col3, table3Col1)),
|
|
`(ROW($1, table1.col1) NOT IN (
|
|
SELECT table2.col3 AS "table2.col3",
|
|
table3.col1 AS "table3.col1"
|
|
FROM db.table2
|
|
))`, int64(12))
|
|
}
|
|
|
|
func TestReservedWordEscaped(t *testing.T) {
|
|
var table1ColUser = IntervalColumn("user")
|
|
var table1ColVariadic = IntervalColumn("VARIADIC")
|
|
var table1ColProcedure = IntervalColumn("procedure")
|
|
|
|
_ = NewTable("db", "table1", "", table1ColUser, table1ColVariadic, table1ColProcedure)
|
|
|
|
assertSerialize(t, table1ColUser, `table1."user"`)
|
|
assertSerialize(t, table1ColVariadic, `table1."VARIADIC"`)
|
|
assertSerialize(t, table1ColProcedure, `table1.procedure`)
|
|
}
|