diff --git a/executor/executor.go b/executor/executor.go index 13c746ac..de70f76e 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -13,12 +13,14 @@ import ( ) type Executor[T any] struct { - client xorm.Interface + client xorm.Interface + tableObj *T } func New[T any](c xorm.Interface) *Executor[T] { return &Executor[T]{ - client: c, + client: c, + tableObj: new(T), } } @@ -42,8 +44,19 @@ func (q *Executor[T]) InsertOne(ctx context.Context, obj *T) error { return err } -func (q *Executor[T]) Insert(ctx context.Context, results []T) (int64, error) { - return q.client.Insert(results) +func (q *Executor[T]) InsertMap(ctx context.Context, result map[string]any) error { + _, err := q.client.Table(q.tableObj).Insert(result) + return err +} + +func (q *Executor[T]) Insert(ctx context.Context, results []T) error { + _, err := q.client.Insert(results) + return err +} + +func (q *Executor[T]) InsertMaps(ctx context.Context, results []map[string]any) error { + _, err := q.client.Table(q.tableObj).Insert(results) + return err } func (q *Executor[T]) Exec(ctx context.Context) (sql.Result, error) { diff --git a/executor/executor_test.go b/executor/executor_test.go index f18a4ee8..866c681d 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -45,4 +45,15 @@ func TestExecutor(t *testing.T) { users, err = executor.Where(builder.Eq{"id": 1}).All(context.Background()) assert.NoError(t, err) assert.Equal(t, len(users), 1) + + err = executor.InsertMap(context.Background(), map[string]any{ + "name": "test2", + }) + assert.NoError(t, err) + + users, err = executor.All(context.Background()) + assert.NoError(t, err) + assert.Equal(t, len(users), 2) + assert.Equal(t, "test", users[0].Name) + assert.Equal(t, "test2", users[1].Name) }