Skip to content

Commit 7c73fcf

Browse files
authored
Merge pull request #7 from swiftcarrot/insert-all
InsertAll
2 parents d5e9eb2 + 4b1d7b7 commit 7c73fcf

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

generator/client/golang/templates/[model]_query.gotmpl

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Code generated by queryx, DO NOT EDIT.
22

3-
package {{.packageName}}
3+
package {{ $.packageName }}
44

55
import (
66
"database/sql"
@@ -126,6 +126,40 @@ func (q *{{ $.model.Name }}Query) Create(change *queryx.{{ $.model.Name }}Change
126126
return record, nil
127127
}
128128

129+
func (q *{{.model.Name}}Query) InsertAll(changes []*queryx.{{.model.Name}}Change) (int64, error){
130+
if q.err != nil {
131+
return 0, q.err
132+
}
133+
134+
if len(changes) == 0 {
135+
return 0, ErrInsertAllEmptyChanges
136+
}
137+
138+
{{- if eq $.model.Timestamps true }}
139+
now := queryx.Now("2006-01-02 15:04:05.000")
140+
for _, change := range changes {
141+
if !change.CreatedAt.Set {
142+
change.SetCreatedAt(now)
143+
}
144+
if !change.UpdatedAt.Set {
145+
change.SetUpdatedAt(now)
146+
}
147+
}
148+
{{- end }}
149+
150+
s := queryx.NewInsert().Into("{{ $.model.TableName }}")
151+
for i, change := range changes {
152+
columns, values := change.Changes()
153+
if i == 0 {
154+
s.Columns(columns...)
155+
}
156+
s.Values(values...)
157+
}
158+
159+
query, args := s.ToSQL()
160+
return q.adapter.Exec(query, args...)
161+
}
162+
129163
{{- if $.model.PrimaryKey }}
130164

131165
func (q *{{ $.model.Name }}Query) Delete({{ template "primary_key_params" $.model.PrimaryKey }}) (int64, error) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Code generated by queryx, DO NOT EDIT.
2+
3+
package {{ $.packageName }}
4+
5+
import "errors"
6+
7+
var ErrInsertAllEmptyChanges = errors.New("queryx: insert all with empty changes")

internal/integration/client_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/stretchr/testify/require"
1212
"github.com/swiftcarrot/queryx/internal/integration/db"
13+
"github.com/swiftcarrot/queryx/internal/integration/db/queryx"
1314
)
1415

1516
var c *db.QXClient
@@ -65,6 +66,23 @@ func TestCreate(t *testing.T) {
6566
require.True(t, user.ID > 0)
6667
}
6768

69+
func TestInsertAll(t *testing.T) {
70+
_, err := c.QueryUserPost().DeleteAll()
71+
require.NoError(t, err)
72+
73+
_, err = c.QueryPost().InsertAll(nil)
74+
require.ErrorIs(t, err, db.ErrInsertAllEmptyChanges)
75+
_, err = c.QueryPost().InsertAll([]*queryx.PostChange{})
76+
require.ErrorIs(t, err, db.ErrInsertAllEmptyChanges)
77+
78+
inserted, err := c.QueryPost().InsertAll([]*queryx.PostChange{
79+
c.ChangePost().SetTitle("title1"),
80+
c.ChangePost().SetTitle("title2"),
81+
})
82+
require.NoError(t, err)
83+
require.Equal(t, int64(2), inserted)
84+
}
85+
6886
func TestCreateEmpty(t *testing.T) {
6987
tag, err := c.QueryTag().Create(nil)
7088
require.NoError(t, err)

0 commit comments

Comments
 (0)