Skip to content

Commit 9b6227a

Browse files
authored
Merge pull request #15 from trheyi/main
feat: Add Exec method to Query interface for executing SQL commands
2 parents 2e03a84 + ad44ef4 commit 9b6227a

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

dbal/query/exec.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package query
2+
3+
import "database/sql"
4+
5+
// Exec execute the sql, return the result
6+
func (builder *Builder) Exec(sql string, bindings ...interface{}) (sql.Result, error) {
7+
stmt, err := builder.DB().Prepare(sql)
8+
if err != nil {
9+
return nil, err
10+
}
11+
defer stmt.Close()
12+
return stmt.Exec(bindings...)
13+
}

dbal/query/exec_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package query
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestExec(t *testing.T) {
11+
NewTableForQueryTest()
12+
qb := getTestBuilder()
13+
rows := qb.From("table_test_query as t").
14+
Where("email", "like", "%@yao.run").
15+
OrderBy("id").
16+
MustGet()
17+
18+
assert.Equal(t, 4, len(rows), "the return rows should have 4 items")
19+
if len(rows) == 4 {
20+
assert.Equal(t, "96.32", fmt.Sprintf("%.2f", rows[0].Get("score")), "the return value should be true")
21+
assert.Equal(t, "64.56", fmt.Sprintf("%.2f", rows[1].Get("score")), "the return value should be true")
22+
assert.Equal(t, "99.27", fmt.Sprintf("%.2f", rows[2].Get("score")), "the return value should be true")
23+
assert.Equal(t, "48.12", fmt.Sprintf("%.2f", rows[3].Get("score")), "the return value should be true")
24+
}
25+
26+
// Exec
27+
res, err := qb.Exec("update table_test_query set score = 100 where email like ?", "%@yao.run")
28+
assert.Nil(t, err, "the error should be nil")
29+
affected, err := res.RowsAffected()
30+
assert.Nil(t, err, "the error should be nil")
31+
assert.Equal(t, int64(4), affected, "the rows affected should be 4")
32+
}

dbal/query/interfaces.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package query
22

33
import (
4+
"database/sql"
5+
46
"github.com/jmoiron/sqlx"
57
"github.com/yaoapp/xun"
68
)
@@ -175,6 +177,9 @@ type Query interface {
175177
Truncate() error
176178
MustTruncate()
177179

180+
// defined in the exec.go file
181+
Exec(sql string, bindings ...interface{}) (sql.Result, error)
182+
178183
// defined in the debug.go file
179184
DD()
180185
Dump()

0 commit comments

Comments
 (0)