sqlx

package
v0.0.0-...-e002cd0 Latest Latest
Warning

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

Go to latest
Published: Aug 22, 2025 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	ErrNoMoreRows = errors.New("ekit: 已读取完")
)

Functions

func NewNullBool

func NewNullBool(val bool) sql.NullBool

func NewNullBytes

func NewNullBytes(val []byte) sql.NullString

func NewNullFloat64

func NewNullFloat64(val float64) sql.NullFloat64

func NewNullInt64

func NewNullInt64(val int64) sql.NullInt64

func NewNullString

func NewNullString(val string) sql.NullString

func NewNullTime

func NewNullTime(val time.Time) sql.NullTime

Types

type EncryptColumn

type EncryptColumn[T any] struct {
	Val   T
	Valid bool
	Key   string
}

EncryptColumn 代表一个加密的列 一般来说加密可以选择依赖于数据库进行加密 EncryptColumn 并不打算使用极其难破解的加密算法 而是选择使用 AES GCM 模式。 如果你觉得安全性不够,那么你可以考虑自己实现类似的结构体.

func (*EncryptColumn[T]) Scan

func (e *EncryptColumn[T]) Scan(src any) error

Scan 方法会把写入的数据转化进行解密, 并将解密后的数据进行反序列化,构造 T

func (EncryptColumn[T]) Value

func (e EncryptColumn[T]) Value() (driver.Value, error)

Value 返回加密后的值 如果 T 是基本类型,那么会对 T 进行直接加密 否则,将 T 按照 JSON 序列化之后进行加密,返回加密后的数据

type JsonColumn

type JsonColumn[T any] struct {
	Val   T
	Valid bool
}

JsonColumn 代表存储字段的 json 类型 主要用于没有提供默认 json 类型的数据库 T 可以是结构体,也可以是切片或者 map 理论上来说一切可以被 json 库所处理的类型都能被用作 T 不建议使用指针作为 T 的类型 如果 T 是指针,那么在 Val 为 nil 的情况下,一定要把 Valid 设置为 false

func (*JsonColumn[T]) Scan

func (j *JsonColumn[T]) Scan(src any) error

Scan 将 src 转化为对象 src 的类型必须是 []byte, string 或者 nil 如果是 nil,我们不会做任何处理

Example
js := JsonColumn[User]{}
err := js.Scan(`{"Name":"Tom"}`)
if err != nil {
	fmt.Println(err)
}
fmt.Print(js.Val)
Output:

{Tom}

func (JsonColumn[T]) Value

func (j JsonColumn[T]) Value() (driver.Value, error)

Value 返回一个 json 串。类型是 []byte

Example
js := JsonColumn[User]{Valid: true, Val: User{Name: "Tom"}}
value, err := js.Value()
if err != nil {
	fmt.Println(err)
}
fmt.Print(string(value.([]byte)))
Output:

{"Name":"Tom"}

type Rows

type Rows interface {
	Next() bool
	NextResultSet() bool
	Err() error
	Columns() ([]string, error)
	// ColumnTypes 还是返回了原本的 sql.ColumnType
	// 因为 ColumnType 同样不是一个接口,所以为了兼容 sql.Rows,
	// 就只有保持这个设计
	ColumnTypes() ([]*sql.ColumnType, error)
	Scan(dest ...any) error
	Close() error
}

type Scanner

type Scanner interface {
	Scan() (values []any, err error)
	// ScanAll 扫描当前结果集的全部数据
	ScanAll() (allValues [][]any, err error)
	// NextResultSet 移动到下一个结果集
	NextResultSet() bool
}

Scanner 用于简化sql.Rows包中的Scan操作 Scanner 不会关闭sql.Rows,用户需要对此负责

func NewSQLRowsScanner

func NewSQLRowsScanner(r Rows) (Scanner, error)

NewSQLRowsScanner 返回一个Scanner

Jump to

Keyboard shortcuts

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