Additional tests for 'ON CONFLICT DO NOTHING without conflict target does not appear in generated SQL' bug.
This commit is contained in:
parent
60d8f15513
commit
39de87671e
5 changed files with 71 additions and 3 deletions
|
|
@ -1,3 +1,3 @@
|
|||
package main
|
||||
|
||||
const version = "v2.10.1"
|
||||
const version = "v2.11.1"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package postgres
|
|||
|
||||
import (
|
||||
"github.com/go-jet/jet/v2/internal/jet"
|
||||
"github.com/go-jet/jet/v2/internal/utils/is"
|
||||
)
|
||||
|
||||
type onConflict interface {
|
||||
|
|
@ -44,7 +45,7 @@ func (o *onConflictClause) DO_UPDATE(action conflictAction) InsertStatement {
|
|||
}
|
||||
|
||||
func (o *onConflictClause) Serialize(statementType jet.StatementType, out *jet.SQLBuilder, options ...jet.SerializeOption) {
|
||||
if len(o.indexExpressions) == 0 && o.constraint == "" && o.do != jet.Keyword("DO NOTHING") {
|
||||
if is.Nil(o.do) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package sqlite
|
|||
|
||||
import (
|
||||
"github.com/go-jet/jet/v2/internal/jet"
|
||||
"github.com/go-jet/jet/v2/internal/utils/is"
|
||||
)
|
||||
|
||||
type onConflict interface {
|
||||
|
|
@ -37,7 +38,7 @@ func (o *onConflictClause) DO_UPDATE(action conflictAction) InsertStatement {
|
|||
}
|
||||
|
||||
func (o *onConflictClause) Serialize(statementType jet.StatementType, out *jet.SQLBuilder, options ...jet.SerializeOption) {
|
||||
if len(o.indexExpressions) == 0 && o.do == nil {
|
||||
if is.Nil(o.do) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -87,6 +87,24 @@ func TestInsertOnConflict(t *testing.T) {
|
|||
t.Run("do nothing", func(t *testing.T) {
|
||||
employee := model.Employee{EmployeeID: rand.Int31()}
|
||||
|
||||
stmt := Employee.INSERT(Employee.AllColumns).
|
||||
MODEL(employee).
|
||||
MODEL(employee).
|
||||
ON_CONFLICT().DO_NOTHING()
|
||||
|
||||
testutils.AssertStatementSql(t, stmt, `
|
||||
INSERT INTO test_sample.employee (employee_id, first_name, last_name, employment_date, manager_id)
|
||||
VALUES ($1, $2, $3, $4, $5),
|
||||
($6, $7, $8, $9, $10)
|
||||
ON CONFLICT DO NOTHING;
|
||||
`)
|
||||
testutils.AssertExecAndRollback(t, stmt, db, 1)
|
||||
requireLogged(t, stmt)
|
||||
})
|
||||
|
||||
t.Run("do nothing with index", func(t *testing.T) {
|
||||
employee := model.Employee{EmployeeID: rand.Int31()}
|
||||
|
||||
stmt := Employee.INSERT(Employee.AllColumns).
|
||||
MODEL(employee).
|
||||
MODEL(employee).
|
||||
|
|
@ -207,6 +225,21 @@ ON CONFLICT (id) WHERE (id * 2) > 10 DO UPDATE
|
|||
|
||||
testutils.AssertExecAndRollback(t, stmt, db, 1)
|
||||
})
|
||||
|
||||
t.Run("nil action removes ON CONFLICT clause", func(t *testing.T) {
|
||||
employee := model.Employee{EmployeeID: rand.Int31()}
|
||||
|
||||
stmt := Employee.INSERT(Employee.AllColumns).
|
||||
MODEL(employee).
|
||||
ON_CONFLICT().DO_UPDATE(nil)
|
||||
|
||||
testutils.AssertStatementSql(t, stmt, `
|
||||
INSERT INTO test_sample.employee (employee_id, first_name, last_name, employment_date, manager_id)
|
||||
VALUES ($1, $2, $3, $4, $5);
|
||||
`)
|
||||
testutils.AssertExecAndRollback(t, stmt, db, 1)
|
||||
requireLogged(t, stmt)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertModelObject(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -267,6 +267,24 @@ func TestInsertOnConflict(t *testing.T) {
|
|||
t.Run("do nothing", func(t *testing.T) {
|
||||
link := model.Link{ID: rand.Int31()}
|
||||
|
||||
stmt := Link.INSERT(Link.AllColumns).
|
||||
MODEL(link).
|
||||
MODEL(link).
|
||||
ON_CONFLICT().DO_NOTHING()
|
||||
|
||||
testutils.AssertStatementSql(t, stmt, `
|
||||
INSERT INTO link (id, url, name, description)
|
||||
VALUES (?, ?, ?, ?),
|
||||
(?, ?, ?, ?)
|
||||
ON CONFLICT DO NOTHING;
|
||||
`)
|
||||
testutils.AssertExecAndRollback(t, stmt, sampleDB, 1)
|
||||
requireLogged(t, stmt)
|
||||
})
|
||||
|
||||
t.Run("do nothing with index", func(t *testing.T) {
|
||||
link := model.Link{ID: rand.Int31()}
|
||||
|
||||
stmt := Link.INSERT(Link.AllColumns).
|
||||
MODEL(link).
|
||||
MODEL(link).
|
||||
|
|
@ -341,6 +359,21 @@ ON CONFLICT (id) WHERE (id * 2) > 10 DO UPDATE
|
|||
testutils.AssertExecAndRollback(t, stmt, sampleDB)
|
||||
requireLogged(t, stmt)
|
||||
})
|
||||
|
||||
t.Run("nil action removes ON CONFLICT clause", func(t *testing.T) {
|
||||
link := model.Link{ID: rand.Int31()}
|
||||
|
||||
stmt := Link.INSERT(Link.AllColumns).
|
||||
MODEL(link).
|
||||
ON_CONFLICT().DO_UPDATE(nil)
|
||||
|
||||
testutils.AssertStatementSql(t, stmt, `
|
||||
INSERT INTO link (id, url, name, description)
|
||||
VALUES (?, ?, ?, ?);
|
||||
`)
|
||||
testutils.AssertExecAndRollback(t, stmt, sampleDB, 1)
|
||||
requireLogged(t, stmt)
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertContextDeadlineExceeded(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue