[postgres] Add support for ON CONFLICT clause
This commit is contained in:
parent
eea776a1ac
commit
14e1863456
42 changed files with 827 additions and 277 deletions
34
postgres/clause_test.go
Normal file
34
postgres/clause_test.go
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
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`)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue