From 92c475925dcf4128817973521d434e813a898b46 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 12 Apr 2020 20:39:30 +0800 Subject: [PATCH] Fix batch insert --- integrations/session_cond_test.go | 28 ++++++++++++++-------------- session_insert.go | 4 +++- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/integrations/session_cond_test.go b/integrations/session_cond_test.go index a0a91cad..493f914c 100644 --- a/integrations/session_cond_test.go +++ b/integrations/session_cond_test.go @@ -37,62 +37,62 @@ func TestBuilder(t *testing.T) { assert.NoError(t, err) var cond Condition - has, err := testEngine.Where(builder.Eq{"col_name": "col1"}).Get(&cond) + has, err := testEngine.Where(builder.Eq{"`col_name`": "col1"}).Get(&cond) assert.NoError(t, err) assert.Equal(t, true, has, "records should exist") - has, err = testEngine.Where(builder.Eq{"col_name": "col1"}. - And(builder.Eq{"op": OpEqual})). + has, err = testEngine.Where(builder.Eq{"`col_name`": "col1"}. + And(builder.Eq{"`op`": OpEqual})). NoAutoCondition(). Get(&cond) assert.NoError(t, err) assert.Equal(t, true, has, "records should exist") - has, err = testEngine.Where(builder.Eq{"col_name": "col1", "op": OpEqual, "value": "1"}). + has, err = testEngine.Where(builder.Eq{"`col_name`": "col1", "`op`": OpEqual, "`value`": "1"}). NoAutoCondition(). Get(&cond) assert.NoError(t, err) assert.Equal(t, true, has, "records should exist") - has, err = testEngine.Where(builder.Eq{"col_name": "col1"}. - And(builder.Neq{"op": OpEqual})). + has, err = testEngine.Where(builder.Eq{"`col_name`": "col1"}. + And(builder.Neq{"`op`": OpEqual})). NoAutoCondition(). Get(&cond) assert.NoError(t, err) assert.Equal(t, false, has, "records should not exist") var conds []Condition - err = testEngine.Where(builder.Eq{"col_name": "col1"}. - And(builder.Eq{"op": OpEqual})). + err = testEngine.Where(builder.Eq{"`col_name`": "col1"}. + And(builder.Eq{"`op`": OpEqual})). Find(&conds) assert.NoError(t, err) assert.EqualValues(t, 1, len(conds), "records should exist") conds = make([]Condition, 0) - err = testEngine.Where(builder.Like{"col_name", "col"}).Find(&conds) + err = testEngine.Where(builder.Like{"`col_name`", "col"}).Find(&conds) assert.NoError(t, err) assert.EqualValues(t, 1, len(conds), "records should exist") conds = make([]Condition, 0) - err = testEngine.Where(builder.Expr("col_name = ?", "col1")).Find(&conds) + err = testEngine.Where(builder.Expr("`col_name` = ?", "col1")).Find(&conds) assert.NoError(t, err) assert.EqualValues(t, 1, len(conds), "records should exist") conds = make([]Condition, 0) - err = testEngine.Where(builder.In("col_name", "col1", "col2")).Find(&conds) + err = testEngine.Where(builder.In("`col_name`", "col1", "col2")).Find(&conds) assert.NoError(t, err) assert.EqualValues(t, 1, len(conds), "records should exist") conds = make([]Condition, 0) - err = testEngine.NotIn("col_name", "col1", "col2").Find(&conds) + err = testEngine.NotIn("`col_name`", "col1", "col2").Find(&conds) assert.NoError(t, err) assert.EqualValues(t, 0, len(conds), "records should not exist") // complex condtions var where = builder.NewCond() if true { - where = where.And(builder.Eq{"col_name": "col1"}) - where = where.Or(builder.And(builder.In("col_name", "col1", "col2"), builder.Expr("col_name = ?", "col1"))) + where = where.And(builder.Eq{"`col_name`": "col1"}) + where = where.Or(builder.And(builder.In("`col_name`", "col1", "col2"), builder.Expr("`col_name` = ?", "col1"))) } conds = make([]Condition, 0) diff --git a/session_insert.go b/session_insert.go index 77e36bed..a991cac8 100644 --- a/session_insert.go +++ b/session_insert.go @@ -118,6 +118,7 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error colMultiPlaces []string args []interface{} cols []*schemas.Column + insertCnt int ) for i := 0; i < size; i++ { @@ -155,7 +156,8 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error colNames = append(colNames, col.Name) cols = append(cols, col) } - colPlaces = append(colPlaces, "seq_"+tableName+".nextval") + colPlaces = append(colPlaces, fmt.Sprintf("seq_"+tableName+".nextval + %d", insertCnt)) + insertCnt++ } continue }