sqlx

package
v0.0.9 Latest Latest
Warning

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

Go to latest
Published: Apr 16, 2024 License: Apache-2.0 Imports: 13 Imported by: 2

Documentation

Index

Examples

Constants

This section is empty.

Variables

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

Functions

func NewNullBool added in v0.0.9

func NewNullBool(val bool) sql.NullBool

func NewNullBytes added in v0.0.9

func NewNullBytes(val []byte) sql.NullString

func NewNullFloat64 added in v0.0.9

func NewNullFloat64(val float64) sql.NullFloat64

func NewNullInt64 added in v0.0.9

func NewNullInt64(val int64) sql.NullInt64

func NewNullString added in v0.0.9

func NewNullString(val string) sql.NullString

func NewNullTime added in v0.0.9

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 added in v0.0.8

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 added in v0.0.8

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 added in v0.0.8

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