entitysql

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2024 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var OpAnd = func(p *Predicate) {
	p.And()
}
View Source
var OpNot = func(p *Predicate) {
	p.Not()
}
View Source
var OpOr = func(p *Predicate) {
	p.Or()
}

Functions

func NewCreate

func NewCreate(ctx context.Context, drv dialect.Driver, spec *CreateSpec) error

func NewDelete

func NewDelete(ctx context.Context, drv dialect.Driver, spec *DeleteSpec) error

func NewQuery

func NewQuery(ctx context.Context, drv dialect.Driver, spec *QuerySpec) error

NewQuery 查询一个实体,并将返回的结果扫描到指定的值中。

func NewQueryContext

func NewQueryContext(parent context.Context, c *QueryContext) context.Context

NewQueryContext 将QueryContext添加到context中,并返回一个新的context。

func NewUpdate

func NewUpdate(ctx context.Context, drv dialect.Driver, spec *UpdateSpec) error

Types

type Builder

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

func (*Builder) Arg

func (b *Builder) Arg(a any) *Builder

Arg 添加一个参数到生成器中。

func (*Builder) Argf

func (b *Builder) Argf(format string, a any) *Builder

Argf 将输入参数以给定的格式添加到生成器中。

Argf("JSON(?)", b).
Argf("ST_GeomFromText(?)", geom)

func (*Builder) Args

func (b *Builder) Args(args ...any) *Builder

Argf 添加多个参数到生成器中。

func (*Builder) Blank

func (b *Builder) Blank() *Builder

Blank 添加一个空格到查询中。

func (*Builder) Comma

func (b *Builder) Comma() *Builder

Comma 添加一个逗号到查询中。

func (Builder) Dialect

func (b Builder) Dialect() dialect.DbDriver

Dialect 返回生成器使用的数据库驱动。满足state接口。

func (*Builder) Ident

func (b *Builder) Ident(s string) *Builder

Ident 添加标识符到查询中。标识符可以是表名、列名、别名等。

func (*Builder) IdentComma

func (b *Builder) IdentComma(s ...string) *Builder

IdentComma 添加标识符到查询中,用逗号分隔

func (*Builder) Join

func (b *Builder) Join(qs ...Querier) *Builder

Join 添加多个查询到生成器中。

func (*Builder) Len

func (b *Builder) Len() int

func (*Builder) Quote

func (b *Builder) Quote(ident string) string

Quote 根据配置的dialect,选择不同的字符引用SQL标识符。默认为"`"(通常用于MySQL)。 用于区分关键字,特殊字符等。

func (*Builder) Reset

func (b *Builder) Reset()

func (*Builder) SetDialect

func (b *Builder) SetDialect(dialect dialect.DbDriver)

SetDialect 设置生成器使用的数据库驱动。满足state接口。

func (*Builder) SetTotal

func (b *Builder) SetTotal(total int)

SetTotal 设置查询树中总共出现的参数数量。满足state接口。 用于在查询、表达式中传递参数数量。

func (*Builder) String

func (b *Builder) String() string

String 把生成器中的查询语句转换为字符串。

func (Builder) Total

func (b Builder) Total() int

Total 返回查询树中总共出现的参数数量。满足state接口。

func (*Builder) Wrap

func (b *Builder) Wrap(f func(*Builder)) *Builder

Wrap 获取一个回调函数,把它包装在括号中,并添加到查询中。

func (*Builder) WriteByte

func (b *Builder) WriteByte(c byte) *Builder

WriteByte 添加一个字节到查询中。

func (*Builder) WriteOp

func (b *Builder) WriteOp(op Op) *Builder

func (*Builder) WriteSchema

func (b *Builder) WriteSchema(schema string) *Builder

WriteSchema 添加一个模式到查询中。

func (*Builder) WriteString

func (b *Builder) WriteString(s string) *Builder

WriteString 添加一个字符串到查询中。

type CreateSpec

type CreateSpec struct {
	Entity    *EntitySpec
	Scan      Scanner
	Fields    []*FieldSpec
	Returning []FieldName
	// TODO
	Schema string
}

func NewCreateSpec

func NewCreateSpec(entity string, rows []FieldName) *CreateSpec

func (*CreateSpec) CheckRequired

func (s *CreateSpec) CheckRequired(name FieldName, f entity.FieldStorager) error

CheckRequired 检查字段是否为空。

type DeleteSpec

type DeleteSpec struct {
	Entity    *EntitySpec
	Predicate func(*Predicate)
	Affected  *int64
}

func NewDeleteSpec

func NewDeleteSpec(entity string) *DeleteSpec

type Deleter

type Deleter struct {
	Builder
	// contains filtered or unexported fields
}

func (*Deleter) Query

func (d *Deleter) Query() (string, []any)

func (*Deleter) SetDialect

func (d *Deleter) SetDialect(dialect dialect.DbDriver) *Deleter

func (*Deleter) SetEntity

func (d *Deleter) SetEntity(entity string) *Deleter

func (*Deleter) SetSchema

func (d *Deleter) SetSchema(schema string) *Deleter

type DialectBuilder

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

func NewDialect

func NewDialect(dialect dialect.DbDriver) *DialectBuilder

func (*DialectBuilder) Select

func (b *DialectBuilder) Select() *Selector

type EntitySpec

type EntitySpec struct {
	// Name 实体表的名称,和[entity.EntityConfig]中的AttrName相同。
	Name string
	// Columns 实体表的列名,通过这个属性会指定Select中包含的列。
	Rows []FieldName
}

type Field

type Field struct {
	Name     FieldName
	Primary  int
	Default  bool
	Required bool
}

type FieldName

type FieldName string

func (FieldName) String

func (e FieldName) String() string

type FieldSpec

type FieldSpec struct {
	Column string
	Value  driver.Value // value to be stored.
}

type Inserter

type Inserter struct {
	Builder
	// contains filtered or unexported fields
}

func (*Inserter) Insert

func (i *Inserter) Insert() (string, []any)

func (*Inserter) Set

func (i *Inserter) Set(column string, v any) *Inserter

func (*Inserter) SetDialect

func (i *Inserter) SetDialect(dialect dialect.DbDriver) *Inserter

func (*Inserter) SetEntity

func (i *Inserter) SetEntity(entity string) *Inserter

func (*Inserter) SetReturning

func (i *Inserter) SetReturning(returning ...FieldName) *Inserter

func (*Inserter) SetSchema

func (i *Inserter) SetSchema(schema string) *Inserter

type Op

type Op int
const (
	OpEQ      Op = iota // =
	OpNEQ               // <>
	OpGT                // >
	OpGTE               // >=
	OpLT                // <
	OpLTE               // <=
	OpIn                // IN
	OpNotIn             // NOT IN
	OpLike              // LIKE
	OpIsNull            // IS NULL
	OpNotNull           // IS NOT NULL
	OpAdd               // +
	OpSub               // -
	OpMul               // *
	OpDiv               // / (Quotient)
	OpMod               // % (Reminder)
)

Predicate and arithmetic operators.

func (Op) String

func (op Op) String() string

type ParamFormatter

type ParamFormatter interface {
	// 这个接口可以被用于特定的场景,
	// 例如当你使用的数据库需要一种特殊的参数格式时。
	// 例子:如果你在MySQL中使用地理空间数据,
	// 你可能需要将标准的参数占位符(如?)转换为特定的函数调用(如ST_GeomFromWKB(?))。
	// 参数
	//   - placeholder: 标准的占位符,如?
	//   - info: 保存SQL语句或数据库连接的上下文信息
	FormatParam(placeholder string, info *StmtInfo) string
}

ParamFormatter 定义了FormatParam方法,用于格式化占位符。

type Predicate

type Predicate struct {
	Builder
	// contains filtered or unexported fields
}

func P

func P(fns ...func(*Builder)) *Predicate

func (*Predicate) And

func (p *Predicate) And() *Predicate

func (*Predicate) Append

func (p *Predicate) Append(f func(*Builder)) *Predicate

func (*Predicate) EQ

func (p *Predicate) EQ(column string, v any) *Predicate

func (*Predicate) Not

func (p *Predicate) Not() *Predicate

func (*Predicate) Or

func (p *Predicate) Or() *Predicate

func (*Predicate) Query

func (p *Predicate) Query() (string, []any)

type Querier

type Querier interface {
	// Query 返回元素的查询表示形式以及与之相关的参数
	Query() (string, []any)
}

第一个对象返回:("SELECT * FROM users WHERE age > ?", [30]) 第二个对象返回:("AND name = ?", ["John"]) 当使用 Join 方法将这两个对象组合时,生成的SQL查询将是: SELECT * FROM users WHERE age > ? AND name = ?

func Raw

func Raw(s string) Querier

type QueryContext

type QueryContext struct {
	// Limit 限制查询语句返回的记录数。
	// 调用Limit方法时,会将Limit设置为指定的值。
	// 比如:Limit(10), sql: Select * from user limit 10。
	Limit  *int
	Fields []FieldName
}

QueryContext 用于Query,包含了查询语句上下的信息, 比如Limit、Offset、Order等,用于生成查询语句。

func QueryFromContext

func QueryFromContext(ctx context.Context) *QueryContext

QueryFromContext 从context中获取QueryContext。

type QueryContextKey

type QueryContextKey struct{}

type QuerySpec

type QuerySpec struct {
	Entity    *EntitySpec
	Scan      Scanner
	Limit     int
	Predicate func(*Predicate)
}

QuerySpec 包含了实体的查询的信息。 通过把Query中的信息转换为QuerySpec,把QuerySpec传给NewQuery发起查询, QuerySpec是把查询信息转为sql的中间件。

func NewQuerySpec

func NewQuerySpec(entity string, rows []FieldName) *QuerySpec

NewQuerySpec 创建一个QuerySpec。

参数:

  • entity:实体的名称。

type Scanner

type Scanner func(row dialect.Rows, rows []FieldName) error

type Selection

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

type Selector

type Selector struct {
	Builder
	// contains filtered or unexported fields
}

func (*Selector) Query

func (s *Selector) Query() (string, []any)

func (*Selector) Rows

func (s *Selector) Rows(rows ...FieldName) []string

func (*Selector) SetContext

func (s *Selector) SetContext(ctx context.Context) *Selector

func (*Selector) SetDialect

func (s *Selector) SetDialect(dialect dialect.DbDriver) *Selector

func (*Selector) SetFrom

func (s *Selector) SetFrom(from string) *Selector

func (*Selector) SetLimit

func (s *Selector) SetLimit(limit int) *Selector

func (*Selector) SetSelect

func (s *Selector) SetSelect(rows ...string) *Selector

type StmtInfo

type StmtInfo struct {
	// Dialect 数据库驱动
	Dialect dialect.DbDriver
}

StmtInfo 保存SQL语句或数据库连接的上下文信息

type UpdateSpec

type UpdateSpec struct {
	Entity    *EntitySpec
	Scan      Scanner
	Sets      []*FieldSpec
	Predicate func(*Predicate)
}

func NewUpdateSpec

func NewUpdateSpec(entity string, rows []FieldName) *UpdateSpec

type Updater

type Updater struct {
	Builder
	// contains filtered or unexported fields
}

func (*Updater) Query

func (u *Updater) Query() (string, []any)

func (*Updater) Set

func (u *Updater) Set(column string, v any) *Updater

func (*Updater) SetDialect

func (u *Updater) SetDialect(dialect dialect.DbDriver) *Updater

func (*Updater) SetEntity

func (u *Updater) SetEntity(entity string) *Updater

Jump to

Keyboard shortcuts

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