sqlmer

package module
v1.3.11 Latest Latest
Warning

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

Go to latest
Published: Apr 9, 2022 License: MIT Imports: 8 Imported by: 0

README

sqlmer

License Go Go Report Card Go Reference

功能简介

数据库访问库,目前支持 MySQL 和 SQL Server。

  • SQL语句提供了统一的 命名参数索引参数 语法,可直观的使用 map 作为SQL语句参数,并以 map 或 slice 方式返回;
  • 提供了面向map的 参数结果集 交互接口,事务和非事务访问均可通过相同接口完成;
  • 扩展了原生 sql.Rows / sql.Row,使其支持 MapScan 以及 SliceScan;

简单样例

func main() {
	// 获取 DbClient,这里使用 SqlServer 做示范,MySQL 也提供了一致的 API 和相应的参数解析逻辑。
	dbClient, err := mssql.NewMsSqlDbClient(
		"server=127.0.0.1:1433; database=test; user id=dev;password=qwer1234;",
		sqlmer.WithConnTimeout(time.Second*15), // 连接超时。
		sqlmer.WithExecTimeout(time.Second*15), // 读写超时(执行语句时候,如果没有指定超时时间,默认用这个)。
	)
	if err != nil {
		fmt.Println(err)
		return
	}

	// 创建测试表。
	_, err = dbClient.Execute(`
CREATE TABLE MainDemo(
	Id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
	Name VARCHAR(10) NOT NULL,
	Age INT NOT NULL
)`)
	if err != nil {
		log.Fatal(err)
		return
	}

	// 有超时时间的查询。
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*1)
	defer cancel()
	_, err = dbClient.ExecuteContext(ctx, "WAITFOR DELAY '00:00:02'")
	if err != nil {
		fmt.Println("timeout: " + err.Error()) // 预期内的超时~
	}

	// 索引方式插入数据,@p1...@pn,分别对应第 1-n 个参数。
	_, err = dbClient.Execute("INSERT INTO MainDemo(Name, Age) VALUES(@p1, @p2)", "rui", 1)
	if err != nil {
		log.Fatal(err)
		return
	}
	_, err = dbClient.Execute("INSERT INTO MainDemo(Name, Age) VALUES(@p1, @p2)", "bao", 2)
	if err != nil {
		log.Fatal(err)
		return
	}

	// 命名参数查询数据,命名参数采用 map,key 为 sql 语句 @ 之后的参数名,value 为值。
	data, err := dbClient.Get("SELECT * FROM MainDemo WHERE Name=@name", map[string]interface{}{"name": "rui"})
	if err != nil {
		log.Fatal(err)
		return
	}
	fmt.Println(data) // map 方式返回,需要结构的,需要自己转换。

	// 获取第一行第一列,返回的第二个值标示是否为 null,主要用于 nullable 列。
	name, _, err := dbClient.Scalar("SELECT Name FROM MainDemo WHERE Name=@p1", "rui")
	if err != nil {
		log.Fatal(err)
		return
	}
	
	// 返回interface{},类型可以自己转换。已经统一了 Sql Server 和 MySQL 返回的类型。
	fmt.Println(name.(string)) 

	// 获取增强后的sql.Rows(支持SliceScan、MapScan)。
	sliceRows, err := dbClient.Rows("SELECT Name, GETDATE() FROM MainDemo WHERE Name IN (@p1, @p2)", "rui", "bao")
	if err != nil {
		log.Fatal(err)
		return
	}
	for sliceRows.Next() {
		sliceRow, err := sliceRows.SliceScan() // SliceScan 用 []interface{} 方式返回。
		if err != nil {
			log.Fatal(err)
			return
		}
		fmt.Println(sliceRow...)
	}

	if sliceRows.Err() != nil {
		log.Fatal(err)
		return
	}

	// 删除测试表。
	_, err = dbClient.Execute("DROP TABLE MainDemo")
	if err != nil {
		log.Fatal(err)
		return
	}
}

类型映射

nullable 的字段,如果值为 null,默认均以 nil 返回。

MySql
DB datatype Go datatype
varchar / char / text string
tiny int / small int / int / unsigned int / bigint int64
float / double float64
decimal string
date / datetime / timestamp time.Time
bit []byte
SQL Server
DB datatype Go datatype
nvarchar / nchar / varchar / char / text string
small int / tiny int / int / bigint int64
float / real float64
small money / money / decimal string
date / datetime / datetime2 / time time.Time
binary / varbinary []byte
bit bool

测试用例

测试用例 Schema:

  1. 编辑 test_conf.yml 文件,相应数据库的连接字符串;
  2. 如果第 1 步配置的连接字符串有 DDL 权限,可通过调用 go run ./internal/testcmd/main.go -a PREPARE -c test_conf.yml 来同时准备 MySQL / SQL Server 环境,如果没有 DDL 权限可自行直接执行 internal/testenv/*_prepare.sql 准备环境;
  3. 如果第 1 步配置的连接字符串有 DDL 权限,测试结束后可以通过 go run ./internal/testcmd/main.go -a CLEAN -c test_conf.yml 销毁测试表,如果没有 DDL 权限可自行直接执行 internal/testenv/*_clean.sql 销毁测试表;

另外,如果你和我一样使用 VSCode 作为开发工具,可在配置好 test_conf.yml 之后,直接使用 .vscode 中编写好的 Task 来准备环境。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrConnect = errors.New("dbConnect")

ErrConnect 是 DbClient 获取数据库连接时遇到的错误。

View Source
var ErrExecutingSql = errors.New("dbClient: failed to execute sql")

ErrExecutingSql 当执行 SQL 语句执行时遇到错误,返回该类型错误。

View Source
var ErrExpectedSizeWrong = errors.New("dbClient: effected rows was wrong")

ErrExpectedSizeWrong 当执行语句时候,没有影响到预期行数,返回该类型错误。

View Source
var ErrGetEffectedRows = errors.New("dbClient: the db driver do not support getting effected rows")

ErrGetEffectedRows 当数据库不支持获取影响行数时候,会返回改类型的错误。

View Source
var ErrParseParamFailed = errors.New("dbClient: failed to parse named params")

ErrSqlParamParse 解析 SQL 语句中的参数遇到错误时候,会返回该类型错误。

View Source
var ErrTran = errors.New("dbTrans")

ErrTran 是数据库执行事务操作遇到的错误。

Functions

This section is empty.

Types

type AbstractDbClient added in v1.2.0

type AbstractDbClient struct {
	Db   *sqlen.DbEnhance     // 内部依赖的连接池。
	Exer sqlen.EnhancedDbExer // 获取方法实际使用的执行对象。
	// contains filtered or unexported fields
}

AbstractDbClient 是一个 DbClient 的抽象实现。

func NewAbstractDbClient added in v1.3.11

func NewAbstractDbClient(config *DbClientConfig) (*AbstractDbClient, error)

NewAbstractDbClient 用于获取一个 internalDbClient 对象。

func (*AbstractDbClient) CreateTransaction added in v1.2.0

func (client *AbstractDbClient) CreateTransaction() (TransactionKeeper, error)

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

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

func (*AbstractDbClient) Dsn added in v1.3.11

func (client *AbstractDbClient) Dsn() string

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

func (*AbstractDbClient) Execute added in v1.2.0

func (client *AbstractDbClient) Execute(sqlText string, args ...interface{}) (int64, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) ExecuteContext added in v1.2.0

func (client *AbstractDbClient) ExecuteContext(ctx context.Context, sqlText string, args ...interface{}) (int64, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) Exists added in v1.2.0

func (client *AbstractDbClient) Exists(sqlText string, args ...interface{}) (bool, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) ExistsContext added in v1.2.0

func (client *AbstractDbClient) ExistsContext(ctx context.Context, sqlText string, args ...interface{}) (bool, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) Get added in v1.2.0

func (client *AbstractDbClient) Get(sqlText string, args ...interface{}) (map[string]interface{}, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) GetContext added in v1.2.0

func (client *AbstractDbClient) GetContext(ctx context.Context, sqlText string, args ...interface{}) (map[string]interface{}, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) MustCreateTransaction added in v1.2.0

func (client *AbstractDbClient) MustCreateTransaction() TransactionKeeper

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

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

func (*AbstractDbClient) MustExecute added in v1.2.0

func (client *AbstractDbClient) MustExecute(sqlText string, args ...interface{}) int64

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

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

returns:

@effectedRows 语句影响的行数。

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustExecuteContext added in v1.2.0

func (client *AbstractDbClient) MustExecuteContext(ctx context.Context, sqlText string, args ...interface{}) int64

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

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

returns:

@effectedRows 语句影响的行数。

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustExists added in v1.2.0

func (client *AbstractDbClient) MustExists(sqlText string, args ...interface{}) bool

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

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

returns:

@ok 结果至少包含一行。

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustExistsContext added in v1.2.0

func (client *AbstractDbClient) MustExistsContext(ctx context.Context, sqlText string, args ...interface{}) bool

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

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

returns:

@ok 结果至少包含一行。

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustGet added in v1.2.0

func (client *AbstractDbClient) MustGet(sqlText string, args ...interface{}) map[string]interface{}

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

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

returns:

@mapRow 目标查询第一行的结果。

可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以判断返回值是否为 nil:

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

func (*AbstractDbClient) MustGetContext added in v1.2.0

func (client *AbstractDbClient) MustGetContext(ctx context.Context, sqlText string, args ...interface{}) map[string]interface{}

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

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

returns:

@mapRow 目标查询第一行的结果。

可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以判断返回值是否为 nil:

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

func (*AbstractDbClient) MustRow added in v1.2.0

func (client *AbstractDbClient) MustRow(sqlText string, args ...interface{}) *sqlen.EnhanceRow

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

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

returns:

@row 返回目标行的 EnhanceRow 对象(是对 sql.Row 的增强包装对象)。

可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,要知道是否有数据可直接判断返回值的 len。

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

func (*AbstractDbClient) MustRowContext added in v1.2.0

func (client *AbstractDbClient) MustRowContext(ctx context.Context, sqlText string, args ...interface{}) *sqlen.EnhanceRow

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

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

returns:

@row 返回目标行的 EnhanceRow 对象(是对 sql.Row 的增强包装对象)。

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustRows added in v1.2.0

func (client *AbstractDbClient) MustRows(sqlText string, args ...interface{}) *sqlen.EnhanceRows

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

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

returns:

@row 返回目标行的 EnhanceRows 对象(是对 sql.Rows 的增强包装对象)。

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustRowsContext added in v1.2.0

func (client *AbstractDbClient) MustRowsContext(ctx context.Context, sqlText string, args ...interface{}) *sqlen.EnhanceRows

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

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

returns:

@row 返回目标行的 EnhanceRows 对象(是对 sql.Rows 的增强包装对象)。

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustScalar added in v1.2.0

func (client *AbstractDbClient) MustScalar(sqlText string, args ...interface{}) (interface{}, bool)

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

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

returns:

@cell 目标查询第一行第一列的值。
@hit true 表明有命中数据,false 则为没有命中数据,可通过该值区分是否为数据库空值。

可能 panic 出的 error(可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以通过第二个返回值区分:

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

func (*AbstractDbClient) MustScalarContext added in v1.2.0

func (client *AbstractDbClient) MustScalarContext(ctx context.Context, sqlText string, args ...interface{}) (interface{}, bool)

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

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

returns:

@cell 目标查询第一行第一列的值。
@hit true 表明有命中数据,false 则为没有命中数据,可通过该值区分是否为数据库空值。

可能 panic 出的 error(可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以通过第二个返回值区分:

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

func (*AbstractDbClient) MustSizedExecute added in v1.2.0

func (client *AbstractDbClient) MustSizedExecute(expectedSize int64, sqlText string, args ...interface{})

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

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

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustSizedExecuteContext added in v1.2.0

func (client *AbstractDbClient) MustSizedExecuteContext(ctx context.Context, expectedSize int64, sqlText string, args ...interface{})

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

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

可能 panic 出的 error (可以通过 errors.Is 判断):

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

func (*AbstractDbClient) MustSliceGet added in v1.2.0

func (client *AbstractDbClient) MustSliceGet(sqlText string, args ...interface{}) []map[string]interface{}

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

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

returns:

@mapRows 目标查询结果的所有行。

可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以判断返回值是否为 nil:

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

func (*AbstractDbClient) MustSliceGetContext added in v1.2.0

func (client *AbstractDbClient) MustSliceGetContext(ctx context.Context, sqlText string, args ...interface{}) []map[string]interface{}

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

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

returns:

@mapRows 目标查询结果的所有行。

可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,要知道是否有数据可直接判断返回值的 len。

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

func (*AbstractDbClient) Row added in v1.2.0

func (client *AbstractDbClient) Row(sqlText string, args ...interface{}) (*sqlen.EnhanceRow, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) RowContext added in v1.2.0

func (client *AbstractDbClient) RowContext(ctx context.Context, sqlText string, args ...interface{}) (*sqlen.EnhanceRow, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) Rows added in v1.2.0

func (client *AbstractDbClient) Rows(sqlText string, args ...interface{}) (*sqlen.EnhanceRows, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) RowsContext added in v1.2.0

func (client *AbstractDbClient) RowsContext(ctx context.Context, sqlText string, args ...interface{}) (*sqlen.EnhanceRows, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) Scalar added in v1.2.0

func (client *AbstractDbClient) Scalar(sqlText string, args ...interface{}) (interface{}, bool, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) ScalarContext added in v1.2.0

func (client *AbstractDbClient) ScalarContext(ctx context.Context, sqlText string, args ...interface{}) (interface{}, bool, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) SizedExecute added in v1.2.0

func (client *AbstractDbClient) SizedExecute(expectedSize int64, sqlText string, args ...interface{}) error

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

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

returns:

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

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

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

func (*AbstractDbClient) SizedExecuteContext added in v1.2.0

func (client *AbstractDbClient) SizedExecuteContext(ctx context.Context, expectedSize int64, sqlText string, args ...interface{}) error

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

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

returns:

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

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

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

func (*AbstractDbClient) SliceGet added in v1.2.0

func (client *AbstractDbClient) SliceGet(sqlText string, args ...interface{}) ([]map[string]interface{}, error)

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

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

returns:

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

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

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

func (*AbstractDbClient) SliceGetContext added in v1.2.0

func (client *AbstractDbClient) SliceGetContext(ctx context.Context, sqlText string, args ...interface{}) ([]map[string]interface{}, error)

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

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

returns:

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

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

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

type BindSqlArgsFunc

type BindSqlArgsFunc func(string, ...interface{}) (string, []interface{}, error)

BindSqlArgsFunc 定义用于预处理 sql 语句与参数的函数。

type DbClient

type DbClient interface {
	Dsn() string  // Dsn 用于获取当前实例所使用的数据库连接字符串。
	ErrorDbClient // error 版本 API。
	MustDbClient  // panic 版本 API。
}

DbClient 定义了数据库访问客户端。

type DbClientConfig

type DbClientConfig struct {
	Driver string  // 数据库驱动名称。
	Dsn    string  // 连接字符串。
	Db     *sql.DB // 数据库对象。
	// contains filtered or unexported fields
}

func NewDbClientConfig

func NewDbClientConfig(options ...DbClientOption) (*DbClientConfig, error)

NewDbClientConfig 创建一个数据库连接配置。

type DbClientOption

type DbClientOption func(config *DbClientConfig) error

DbClientOption 是 DbClientConfig 的可选配置。

func WithBindArgsFunc

func WithBindArgsFunc(argsFunc BindSqlArgsFunc) DbClientOption

WithBindArgsFunc 用于为 DbClientConfig 设置处理参数的函数。

func WithConnTimeout

func WithConnTimeout(timeout time.Duration) DbClientOption

WithConnTimeout 用于为 DbClientConfig 设置获取数据库连接的超时时间。

func WithDb added in v1.2.0

func WithDb(db *sql.DB, driver string, dsn string) DbClientOption

WithDb 用于用现有的 sql.DB 初始化 DbClientOption。

func WithDsn added in v1.3.11

func WithDsn(driver string, dsn string) DbClientOption

WithDsn 用于用现有的 sql.DB 初始化 DbClientOption。

func WithExecTimeout

func WithExecTimeout(timeout time.Duration) DbClientOption

WithExecTimeout 用于为 DbClientConfig 设置默认的执行超时时间。

func WithGetScanTypeFunc added in v1.3.11

func WithGetScanTypeFunc(scanFunc sqlen.GetScanTypeFunc) DbClientOption

WithBindArgsFunc 用于为 DbClientConfig 设置根据列信息获取 Scan 类型的函数。

func WithPingCheck added in v1.2.0

func WithPingCheck(withPingCheck bool) DbClientOption

WithPingCheck 用于选择是否在初始化 DbClient 时候进行 ping 操作(默认为 false)。

func WithUnifyDataTypeFunc added in v1.3.1

func WithUnifyDataTypeFunc(unifyDataType sqlen.UnifyDataTypeFn) DbClientOption

WithUnifyDataTypeFunc 用于为 DbClient 注入驱动相关的类型转换逻辑。

type ErrorDbClient added in v1.3.10

type ErrorDbClient interface {

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

	// Execute 用于执行非查询SQL语句,并返回所影响的行数。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @effectedRows 语句影响的行数。
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	Execute(sqlText string, args ...interface{}) (rowsEffected int64, err error)

	// ExecuteContext 用于执行非查询 sql 语句,并返回所影响的行数。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @effectedRows 语句影响的行数。
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	ExecuteContext(ctx context.Context, sqlText string, args ...interface{}) (rowsEffected int64, err error)

	// SizedExecute 用于执行非查询SQL语句,并断言所影响的行数。
	// params:
	//  @expectedSize 预期的影响行数,当
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
	//  - sqlmer.ErrExpectedSizeWrong: 当没有影响到预期行数时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	SizedExecute(expectedSize int64, sqlText string, args ...interface{}) error

	// SizedExecuteContext 用于执行非查询SQL语句,并断言所影响的行数。
	// params:
	//  @ctx context。
	//  @expectedSize 预期的影响行数,当
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
	//  - sqlmer.ErrExpectedSizeWrong: 当没有影响到预期行数时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	SizedExecuteContext(ctx context.Context, expectedSize int64, sqlText string, args ...interface{}) error

	// Exists 用于判断给定的查询的结果是否至少包含 1 行。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @ok 结果至少包含一行。
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	Exists(sqlText string, args ...interface{}) (ok bool, err error)

	// ExistsContext 用于判断给定的查询的结果是否至少包含 1 行。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @ok 结果至少包含一行。
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	ExistsContext(ctx context.Context, sqlText string, args ...interface{}) (ok bool, err error)

	// Scalar 用于获取查询的第一行第一列的值。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @cell 目标查询第一行第一列的值。
	//  @hit true 表明有命中数据,false 则为没有命中数据,可通过该值区分是否为数据库空值。
	//  @err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,而通过第二个返回值区分。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	Scalar(sqlText string, args ...interface{}) (cell interface{}, hit bool, err error)

	// ScalarContext 用于获取查询的第一行第一列的值。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @cell 目标查询第一行第一列的值。
	//  @hit true 表明有命中数据,false 则为没有命中数据,可通过该值区分是否为数据库空值。
	//  @err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,而通过第二个返回值区分。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	ScalarContext(ctx context.Context, sqlText string, args ...interface{}) (cell interface{}, hit bool, err error)

	// Get 用于获取查询结果的第一行记录。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @mapRow 目标查询第一行的结果。
	//  @err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,要知道是否有数据可直接判断第一个返回值是否为 nil。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	Get(sqlText string, args ...interface{}) (mapRow map[string]interface{}, err error)

	// GetContext 用于获取查询结果的第一行记录。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @mapRow 目标查询第一行的结果。
	//  @err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,要知道是否有数据可直接判断第一个返回值是否为 nil。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	GetContext(ctx context.Context, sqlText string, args ...interface{}) (mapRow map[string]interface{}, err error)

	// SliceGet 用于获取查询结果的所有行。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @mapRows 目标查询结果的所有行。
	//  @err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,要知道是否有数据可直接判断第一个返回值的 len。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	SliceGet(sqlText string, args ...interface{}) (mapRows []map[string]interface{}, err error)

	// SliceGetContext 用于获取查询结果得行序列。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @mapRows 目标查询结果的所有行。
	//  @err 执行语句时遇到的错误。注意,sql.ErrNoRows 不放 error 中返回,要知道是否有数据可直接判断第一个返回值的 len。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	SliceGetContext(ctx context.Context, sqlText string, args ...interface{}) (mapRows []map[string]interface{}, err error)

	// Row 用于获取单个查询结果行。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @row 返回目标行的 EnhanceRow 对象(是对 sql.Row 的增强包装对象)。
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	Row(sqlText string, args ...interface{}) (row *sqlen.EnhanceRow, err error)

	// RowContext 用于获取单个查询结果行。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @row 返回目标行的 EnhanceRow 对象(是对 sql.Row 的增强包装对象)。
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	RowContext(context context.Context, sqlText string, args ...interface{}) (row *sqlen.EnhanceRow, err error)

	// Rows 用于获取查询结果行的游标对象。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @row 返回目标行的 EnhanceRows 对象(是对 sql.Rows 的增强包装对象)。
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	Rows(sqlText string, args ...interface{}) (rows *sqlen.EnhanceRows, err error)

	// RowsContext 用于获取查询结果行的游标对象。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @row 返回目标行的 EnhanceRows 对象(是对 sql.Rows 的增强包装对象)。
	//  @err 执行语句时遇到的错误。
	// 可以通过 errors.Is 判断的特殊 err:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	RowsContext(context context.Context, sqlText string, args ...interface{}) (rows *sqlen.EnhanceRows, err error)
}

ErrorDbClient 为 error 版本 API。

type ErrorTransactionKeeper added in v1.3.10

type ErrorTransactionKeeper interface {
	// Commit 用于提交事务。
	Commit() error

	// Rollback 用于回滚事务。
	Rollback() error

	// Close 用于优雅关闭事务,创建事务后应 defer 执行本方法。
	Close() error
}

ErrorTransactionKeeper 为 error 版本 API。

type MustDbClient added in v1.3.10

type MustDbClient interface {

	// MustCreateTransaction 用于开始一个事务。
	// returns:
	//  @tran 返回一个实现了 TransactionKeeper(内嵌 DbClient 接口) 接口的对象,在上面执行的语句会在同一个事务中执行。
	MustCreateTransaction() (tran TransactionKeeper)

	// MustExecute 用于执行非查询 sql 语句,并返回所影响的行数。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @effectedRows 语句影响的行数。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustExecute(sqlText string, args ...interface{}) (rowsEffected int64)

	// MustExecuteContext 用于执行非查询SQL语句,并返回所影响的行数。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @effectedRows 语句影响的行数。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustExecuteContext(context context.Context, sqlText string, args ...interface{}) (rowsEffected int64)

	// MustSizedExecute 用于执行非查询 sql 语句,并断言所影响的行数。
	// params:
	//  @expectedSize 预期的影响行数,当
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
	//  - sqlmer.ErrExpectedSizeWrong: 当没有影响到预期行数时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustSizedExecute(expectedSize int64, sqlText string, args ...interface{})

	// MustSizedExecuteContext 用于执行非查询 sql 语句,并断言所影响的行数。
	// params:
	//  @ctx context。
	//  @expectedSize 预期的影响行数,当
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrGetEffectedRows: 当执行成功,但驱动不支持获取影响行数时候,返回该类型错误。
	//  - sqlmer.ErrExpectedSizeWrong: 当没有影响到预期行数时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustSizedExecuteContext(context context.Context, expectedSize int64, sqlText string, args ...interface{})

	// MustExists 用于判断给定的查询的结果是否至少包含 1 行。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @ok 结果至少包含一行。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustExists(sqlText string, args ...interface{}) (ok bool)

	// MustExistsContext 用于判断给定的查询的结果是否至少包含 1 行。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @ok 结果至少包含一行。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustExistsContext(context context.Context, sqlText string, args ...interface{}) (ok bool)

	// MustScalar 用于获取查询的第一行第一列的值。
	// Scalar 用于获取查询的第一行第一列的值。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @cell 目标查询第一行第一列的值。
	//  @hit true 表明有命中数据,false 则为没有命中数据,可通过该值区分是否为数据库空值。
	// 可能 panic 出的 error(可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以通过第二个返回值区分:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustScalar(sqlText string, args ...interface{}) (cell interface{}, hit bool)

	// MustScalarContext 用于获取查询的第一行第一列的值。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @cell 目标查询第一行第一列的值。
	//  @hit true 表明有命中数据,false 则为没有命中数据,可通过该值区分是否为数据库空值。
	// 可能 panic 出的 error(可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以通过第二个返回值区分:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustScalarContext(context context.Context, sqlText string, args ...interface{}) (cell interface{}, hit bool)

	// MustGet 用于获取查询结果的第一行记录。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @mapRow 目标查询第一行的结果。
	// 可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以判断返回值是否为 nil:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustGet(sqlText string, args ...interface{}) (mapRow map[string]interface{})

	// MustGetContext 用于获取查询结果的第一行记录。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @mapRow 目标查询第一行的结果。
	// 可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以判断返回值是否为 nil:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustGetContext(context context.Context, sqlText string, args ...interface{}) (mapRow map[string]interface{})

	// MustSliceGet 用于获取查询结果的所有行。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @mapRows 目标查询结果的所有行。
	// 可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,可以判断返回值是否为 nil:
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustSliceGet(sqlText string, args ...interface{}) (mapRows []map[string]interface{})

	// MustSliceGetContext 用于获取查询结果的所有行。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @mapRows 目标查询结果的所有行。
	// 可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,要知道是否有数据可直接判断返回值的 len。
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustSliceGetContext(context context.Context, sqlText string, args ...interface{}) (mapRows []map[string]interface{})

	// MustRow 用于获取单个查询结果行。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @row 返回目标行的 EnhanceRow 对象(是对 sql.Row 的增强包装对象)。
	// 可能 panic 出的 error (可以通过 errors.Is 判断),注意,sql.ErrNoRows 不会 panic,要知道是否有数据可直接判断返回值的 len。
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustRow(sqlText string, args ...interface{}) (row *sqlen.EnhanceRow)

	// MustRowContext 用于获取单个查询结果行。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @row 返回目标行的 EnhanceRow 对象(是对 sql.Row 的增强包装对象)。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustRowContext(context context.Context, sqlText string, args ...interface{}) (row *sqlen.EnhanceRow)

	// MustRows 用于获取查询结果行的游标对象。
	// params:
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @row 返回目标行的 EnhanceRows 对象(是对 sql.Rows 的增强包装对象)。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustRows(sqlText string, args ...interface{}) (rows *sqlen.EnhanceRows)

	// MustRowsContext 用于获取查询结果行的游标对象。
	// params:
	//  @ctx context。
	//  @sqlText SQL 语句,支持 @ 的命名参数占位及 @p1...@pn 这样的索引占位符。
	//  @args SQL 语句的参数,支持通过 map[string]interface{} 提供命名参数值 或 通过变长参数提供索引参数值。
	// returns:
	//  @row 返回目标行的 EnhanceRows 对象(是对 sql.Rows 的增强包装对象)。
	// 可能 panic 出的 error (可以通过 errors.Is 判断):
	//  - sqlmer.ErrParseParamFailed: 当 SQL 语句中的参数解析失败时返回该类错误。
	//  - sqlmer.ErrExecutingSql: 当 SQL 语句执行时遇到错误,返回该类型错误。
	MustRowsContext(context context.Context, sqlText string, args ...interface{}) (rows *sqlen.EnhanceRows)
}

MustDbClient 为 panic 版本 API

type MustTransactionKeeper added in v1.3.10

type MustTransactionKeeper interface {
	// MustClose 用于提交事务。
	MustCommit()

	// MustClose 用于回滚事务。
	MustRollback()

	// MustClose 用于优雅关闭事务,创建事务后应 defer 执行本方法。
	MustClose()
}

MustTransactionKeeper 为 panic 版本 API。

type TransactionKeeper

type TransactionKeeper interface {
	DbClient               // DbClient 实现了数据库访问客户端的功能。
	ErrorTransactionKeeper // error 版本 API。
	MustTransactionKeeper  // panic 版本 API。
}

TransactionKeeper 是一个定义数据库事务容器。

Directories

Path Synopsis
internal
testcmd command

Jump to

Keyboard shortcuts

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