wrap

package
v1.7.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type WrapFunc

type WrapFunc func(sql string, args []any) func(error)

WrapFunc 用于包裹 SQL 执行方法。 函数本身在执行 SQL 语句前执行,返回一个函数,在执行 SQL 语句后执行。 返回函数的 err 参数是 SQL 执行后返回的 error。

type WrappedDbClient

type WrappedDbClient struct {
	// contains filtered or unexported fields
}

WrappedDbClient 将包包裹 DbClient 的所有 SQL 执行方法,以注入慢日志/统计指标等能力。

func Extend

func Extend(raw sqlmer.DbClient, execWrapFunc WrapFunc) *WrappedDbClient

Extend 加强 DbClient,在 DbClient 的数据库访问上,提供一层装饰器包裹,以注入慢日志/统计指标等能力。 params:

@raw 原始的 DbClient 实例。
@execWrapFunc 包裹函数,在执行 SQL 语句前执行,返回一个函数,在执行 SQL 语句后执行。返回函数的 err 参数是 SQL 执行后返回的 error。

returns:

@wrappedDbClient 返回一个被包裹上注入逻辑的 DbClient 实例。

注意:

  • 事务是内部语句独立包裹,而不是一整个事务包裹;
  • Rows 方法,在返回游标对象时包裹上下文即结束;

func (*WrappedDbClient) CreateTransaction

func (c *WrappedDbClient) CreateTransaction() (tran sqlmer.TransactionKeeper, err error)

CreateTransaction 用于开始一个事务。 returns:

@tran 返回一个实现了 TransactionKeeper(内嵌 DbClient 接口) 接口的对象,在上面执行的语句会在同一个事务中执行。
@err 创建事务时遇到的错误。

func (*WrappedDbClient) Dsn

func (c *WrappedDbClient) Dsn() string

Dsn 用于获取当 Dsn 用于获取当前实例所使用的数据库连接字符串。

func (*WrappedDbClient) Execute

func (c *WrappedDbClient) Execute(sqlText string, args ...any) (rowsEffected int64, err error)

Execute 用于执行非查询SQL语句,并返回所影响的行数。 params:

@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@effectedRows 语句影响的行数。
@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) ExecuteContext

func (c *WrappedDbClient) ExecuteContext(ctx context.Context, sqlText string, args ...any) (rowsEffected int64, err error)

ExecuteContext 用于执行非查询 sql 语句,并返回所影响的行数。 params:

@ctx context。
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@effectedRows 语句影响的行数。
@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) Exists

func (c *WrappedDbClient) Exists(sqlText string, args ...any) (ok bool, err error)

Exists 用于判断给定的查询的结果是否至少包含 1 行。 params:

@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@ok 结果至少包含一行。
@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) ExistsContext

func (c *WrappedDbClient) ExistsContext(ctx context.Context, sqlText string, args ...any) (ok bool, err error)

ExistsContext 用于判断给定的查询的结果是否至少包含 1 行。 params:

@ctx context。
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@ok 结果至少包含一行。
@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) Get

func (c *WrappedDbClient) Get(sqlText string, args ...any) (mapRow map[string]any, err error)

Get 用于获取查询结果的第一行记录。 params:

@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@mapRow 目标查询第一行的结果。
@err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,可知是否有数据可直接判断第一个返回值是否为 nil。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) GetConnTimeout

func (c *WrappedDbClient) GetConnTimeout() time.Duration

GetConnTimeout 用于获取当前 DbClient 实例的获取连接的超时时间。

func (*WrappedDbClient) GetContext

func (c *WrappedDbClient) GetContext(ctx context.Context, sqlText string, args ...any) (mapRow map[string]any, err error)

GetContext 用于获取查询结果的第一行记录。 params:

@ctx context。
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@mapRow 目标查询第一行的结果。
@err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,可知是否有数据可直接判断第一个返回值是否为 nil。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) GetExecTimeout

func (c *WrappedDbClient) GetExecTimeout() time.Duration

GetExecTimeout 用于获取当前 DbClient 实例的执行超时时间。

func (*WrappedDbClient) Row

func (c *WrappedDbClient) Row(sqlText string, args ...any) (row *sqlen.EnhanceRow, err error)

Row 用于获取单个查询结果行。 params:

@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@row 返回目标行的 EnhanceRow 对象(是对 sql.Row 的增强包装对象)。
@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) RowContext

func (c *WrappedDbClient) RowContext(context context.Context, sqlText string, args ...any) (row *sqlen.EnhanceRow, err error)

RowContext 用于获取单个查询结果行。 params:

@ctx context。
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@row 返回目标行的 EnhanceRow 对象(是对 sql.Row 的增强包装对象)。
@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) Rows

func (c *WrappedDbClient) Rows(sqlText string, args ...any) (rows *sqlen.EnhanceRows, err error)

Rows 用于获取查询结果行的游标对象。 params:

@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@row 返回目标行的 EnhanceRows 对象(是对 sql.Rows 的增强包装对象)。
@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) RowsContext

func (c *WrappedDbClient) RowsContext(context context.Context, sqlText string, args ...any) (rows *sqlen.EnhanceRows, err error)

RowsContext 用于获取查询结果行的游标对象。 params:

@ctx context。
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@row 返回目标行的 EnhanceRows 对象(是对 sql.Rows 的增强包装对象)。
@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) Scalar

func (c *WrappedDbClient) Scalar(sqlText string, args ...any) (cell any, hit bool, err error)

Scalar 用于获取查询的第一行第一列的值。 params:

@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@cell 目标查询第一行第一列的值。
@hit true 表明有命中数据,false 则为没有命中数据,可通过该值区分是否为数据库空值。
@err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,而通过第二个返回值区分。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) ScalarContext

func (c *WrappedDbClient) ScalarContext(ctx context.Context, sqlText string, args ...any) (cell any, hit bool, err error)

ScalarContext 用于获取查询的第一行第一列的值。 params:

@ctx context。
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@cell 目标查询第一行第一列的值。
@hit true 表明有命中数据,false 则为没有命中数据,可通过该值区分是否为数据库空值。
@err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,而通过第二个返回值区分。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) SizedExecute

func (c *WrappedDbClient) SizedExecute(expectedSize int64, sqlText string, args ...any) (err error)

SizedExecute 用于执行非查询SQL语句,并断言所影响的行数。 params:

@expectedSize 预期的影响行数,当
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
  • sqlmer.ErrExpectedSizeWrong: 当没有影响到预期行数时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) SizedExecuteContext

func (c *WrappedDbClient) SizedExecuteContext(ctx context.Context, expectedSize int64, sqlText string, args ...any) (err error)

SizedExecuteContext 用于执行非查询SQL语句,并断言所影响的行数。 params:

@ctx context。
@expectedSize 预期的影响行数,当
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@err 执行语句时遇到的错误。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
  • sqlmer.ErrExpectedSizeWrong: 当没有影响到预期行数时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) SliceGet

func (c *WrappedDbClient) SliceGet(sqlText string, args ...any) (mapRows []map[string]any, err error)

SliceGet 用于获取查询结果的所有行。 params:

@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@mapRows 目标查询结果的所有行。
@err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,可知是否有数据可直接判断第一个返回值的 len。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

func (*WrappedDbClient) SliceGetContext

func (c *WrappedDbClient) SliceGetContext(ctx context.Context, sqlText string, args ...any) (mapRows []map[string]any, err error)

SliceGetContext 用于获取查询结果得行序列。 params:

@ctx context。
@sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
@args SQL 语句的参数,支持通过 map[string]any 提供命名参数值 或 通过变长参数提供索引参数值。

returns:

@mapRows 目标查询结果的所有行。
@err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,可知是否有数据可直接判断第一个返回值的 len。

可以通过 errors.Is 判断的特殊 err:

  • sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
  • sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。

type WrappedTransactionKeeper

type WrappedTransactionKeeper struct {
	sqlmer.DbClient // 内嵌 DbClient 实例。
	// contains filtered or unexported fields
}

WrappedTransactionKeeper 将包包裹 TransactionKeeper 的所有执行方法,以提供慢日志等能力。

func (*WrappedTransactionKeeper) Close

func (t *WrappedTransactionKeeper) Close() error

Close 用于优雅关闭事务,创建事务后可 defer 执行本方法。

func (*WrappedTransactionKeeper) Commit

func (t *WrappedTransactionKeeper) Commit() error

Commit 用于提交事务。

func (*WrappedTransactionKeeper) Rollback

func (t *WrappedTransactionKeeper) Rollback() error

Rollback 用于回滚事务。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL