Skip to content

Commit 4b9a139

Browse files
make Executor more readable and reduce obj generate. (#306)
Signed-off-by: zhanluxianshen <[email protected]>
1 parent 4df6220 commit 4b9a139

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

executor.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"encoding/hex"
2424
"encoding/json"
2525
"errors"
26+
2627
"github.com/eatmoreapple/juice/cache"
2728
"github.com/eatmoreapple/juice/driver"
2829
"github.com/eatmoreapple/juice/internal/reflectlite"
@@ -94,22 +95,21 @@ var _ SQLRowsExecutor = (*invalidExecutor)(nil)
9495

9596
// sqlRowsExecutor implements the SQLRowsExecutor interface.
9697
type sqlRowsExecutor struct {
97-
session Session
98-
statement Statement
99-
driver driver.Driver
100-
middlewares MiddlewareGroup
98+
session Session
99+
statement Statement
100+
statementHandler StatementHandler
101+
driver driver.Driver
102+
middlewares MiddlewareGroup
101103
}
102104

103105
// QueryContext executes the query and returns the result.
104106
func (e *sqlRowsExecutor) QueryContext(ctx context.Context, param Param) (*sql.Rows, error) {
105-
handler := NewSQLRowsStatementHandler(e.driver, e.session, e.middlewares...)
106-
return handler.QueryContext(ctx, e.Statement(), param)
107+
return e.statementHandler.QueryContext(ctx, e.Statement(), param)
107108
}
108109

109110
// ExecContext executes the query and returns the result.
110111
func (e *sqlRowsExecutor) ExecContext(ctx context.Context, param Param) (sql.Result, error) {
111-
handler := NewSQLRowsStatementHandler(e.driver, e.session, e.middlewares...)
112-
return handler.ExecContext(ctx, e.Statement(), param)
112+
return e.statementHandler.ExecContext(ctx, e.Statement(), param)
113113
}
114114

115115
// Statement returns the xmlSQLStatement.

juice.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package juice
1919
import (
2020
"context"
2121
"database/sql"
22+
2223
"github.com/eatmoreapple/juice/cache"
2324
"github.com/eatmoreapple/juice/driver"
2425
)
@@ -55,11 +56,13 @@ func (e *Engine) executor(v any) (*sqlRowsExecutor, error) {
5556
if err != nil {
5657
return nil, err
5758
}
59+
handler := NewSQLRowsStatementHandler(e.driver, e.DB(), e.middlewares...)
5860
return &sqlRowsExecutor{
59-
statement: stat,
60-
session: e.DB(),
61-
driver: e.driver,
62-
middlewares: e.middlewares,
61+
statement: stat,
62+
statementHandler: handler,
63+
session: e.DB(),
64+
driver: e.driver,
65+
middlewares: e.middlewares,
6366
}, nil
6467
}
6568

statement.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ package juice
1919
import (
2020
"context"
2121
"database/sql"
22-
"github.com/eatmoreapple/juice/driver"
2322
"regexp"
23+
24+
"github.com/eatmoreapple/juice/driver"
2425
)
2526

2627
type Statement interface {
@@ -33,6 +34,11 @@ type Statement interface {
3334
Build(translator driver.Translator, param Param) (query string, args []any, err error)
3435
}
3536

37+
type StatementHandler interface {
38+
ExecContext(ctx context.Context, statement Statement, param Param) (sql.Result, error)
39+
QueryContext(ctx context.Context, statement Statement, param Param) (*sql.Rows, error)
40+
}
41+
3642
var formatRegexp = regexp.MustCompile(`\$\{ *?([a-zA-Z0-9_\.]+) *?\}`)
3743

3844
// xmlSQLStatement defines a sql xmlSQLStatement.
@@ -164,10 +170,12 @@ func (s *SQLRowsStatementHandler) ExecContext(ctx context.Context, statement Sta
164170
return execHandler(ctx, query, args...)
165171
}
166172

173+
var _ StatementHandler = (*SQLRowsStatementHandler)(nil)
174+
167175
// NewSQLRowsStatementHandler creates a new instance of SQLRowsStatementHandler
168176
// with the provided driver, session, and an optional list of middlewares. This
169177
// function is typically used to initialize the handler before executing SQL statements.
170-
func NewSQLRowsStatementHandler(driver driver.Driver, session Session, middlewares ...Middleware) *SQLRowsStatementHandler {
178+
func NewSQLRowsStatementHandler(driver driver.Driver, session Session, middlewares ...Middleware) StatementHandler {
171179
return &SQLRowsStatementHandler{
172180
driver: driver,
173181
middlewares: middlewares,

0 commit comments

Comments
 (0)