35 lines
1.1 KiB
Go
35 lines
1.1 KiB
Go
|
|
package postgres
|
||
|
|
|
||
|
|
import "testing"
|
||
|
|
|
||
|
|
func TestOnConflict(t *testing.T) {
|
||
|
|
|
||
|
|
assertClauseSerialize(t, &onConflictClause{}, "")
|
||
|
|
|
||
|
|
onConflict := &onConflictClause{}
|
||
|
|
onConflict.DO_NOTHING()
|
||
|
|
assertClauseSerialize(t, onConflict, "")
|
||
|
|
|
||
|
|
onConflict = &onConflictClause{indexExpressions: ColumnList{table1ColBool}}
|
||
|
|
onConflict.DO_NOTHING()
|
||
|
|
assertClauseSerialize(t, onConflict, `
|
||
|
|
ON CONFLICT (col_bool) DO NOTHING`)
|
||
|
|
|
||
|
|
onConflict = &onConflictClause{indexExpressions: ColumnList{table1ColBool}}
|
||
|
|
onConflict.ON_CONSTRAINT("table_pkey").DO_NOTHING()
|
||
|
|
assertClauseSerialize(t, onConflict, `
|
||
|
|
ON CONFLICT (col_bool) ON CONSTRAINT table_pkey DO NOTHING`)
|
||
|
|
|
||
|
|
onConflict = &onConflictClause{indexExpressions: ColumnList{table1ColBool, table2ColFloat}}
|
||
|
|
onConflict.WHERE(table2ColFloat.ADD(table1ColInt).GT(table1ColFloat)).DO_UPDATE(
|
||
|
|
SET(table1ColBool, Bool(true)).
|
||
|
|
SET(table1ColInt, Int(1)).
|
||
|
|
WHERE(table2ColFloat.GT(Float(11.1))),
|
||
|
|
)
|
||
|
|
assertClauseSerialize(t, onConflict, `
|
||
|
|
ON CONFLICT (col_bool, col_float) WHERE (col_float + col_int) > col_float DO UPDATE
|
||
|
|
SET col_bool = $1,
|
||
|
|
col_int = $2
|
||
|
|
WHERE table2.col_float > $3`)
|
||
|
|
}
|