more examples

This commit is contained in:
Lunny Xiao 2023-10-30 13:40:19 +08:00
parent d14289a40e
commit 7a9cb6aa52
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
2 changed files with 44 additions and 6 deletions

View File

@ -8,6 +8,7 @@ import (
"context" "context"
"database/sql" "database/sql"
"xorm.io/builder"
"xorm.io/xorm/v2" "xorm.io/xorm/v2"
) )
@ -21,6 +22,30 @@ func New[T any](c xorm.Interface) *Executor[T] {
} }
} }
func (q *Executor[T]) Where(cond builder.Cond) *Executor[T] {
q.client.Where(cond)
return q
}
func (q *Executor[T]) Get(ctx context.Context) (*T, error) {
var result T
if has, err := q.client.Get(&result); err != nil {
return nil, err
} else if !has {
return nil, nil
}
return &result, nil
}
func (q *Executor[T]) InsertOne(ctx context.Context, obj *T) error {
_, err := q.client.InsertOne(obj)
return err
}
func (q *Executor[T]) Insert(ctx context.Context, results []T) (int64, error) {
return q.client.Insert(results)
}
func (q *Executor[T]) Exec(ctx context.Context) (sql.Result, error) { func (q *Executor[T]) Exec(ctx context.Context) (sql.Result, error) {
return q.client.Exec() return q.client.Exec()
} }

View File

@ -8,6 +8,7 @@ import (
"context" "context"
"testing" "testing"
"xorm.io/builder"
"xorm.io/xorm/v2" "xorm.io/xorm/v2"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
@ -25,11 +26,23 @@ func TestExecutor(t *testing.T) {
assert.NoError(t, engine.Sync(new(User))) assert.NoError(t, engine.Sync(new(User)))
// create querier // create querier
querier := New[User](engine) executor := New[User](engine)
users, err := querier.All(context.Background()) err = executor.InsertOne(context.Background(), &User{
if err != nil { Name: "test",
t.Fatal(err) })
} assert.NoError(t, err)
assert.Equal(t, len(users), 0)
user, err := executor.Get(context.Background())
assert.NoError(t, err)
assert.Equal(t, user.Name, "test")
assert.Equal(t, user.Id, int64(1))
users, err := executor.All(context.Background())
assert.NoError(t, err)
assert.Equal(t, len(users), 1)
users, err = executor.Where(builder.Eq{"id": 1}).All(context.Background())
assert.NoError(t, err)
assert.Equal(t, len(users), 1)
} }