Documentation ¶
Index ¶
- func NewCreate(ctx context.Context, drv dialect.Tx, spec *CreateSpec) error
- func NewDelete(ctx context.Context, drv dialect.Tx, spec *DeleteSpec) error
- func NewQuery(ctx context.Context, drv dialect.Driver, spec *QuerySpec) error
- func NewQueryContext(parent context.Context, c *QueryContext) context.Context
- func NewUpdate(ctx context.Context, drv dialect.Tx, spec *UpdateSpec) error
- func Rollback(tx dialect.Tx, err error) error
- type Builder
- func (b *Builder) Arg(a any) *Builder
- func (b *Builder) Argf(format string, a any) *Builder
- func (b *Builder) Args(args ...any) *Builder
- func (b *Builder) Blank() *Builder
- func (b *Builder) Comma() *Builder
- func (b Builder) Dialect() dialect.DbDriver
- func (b *Builder) FindAs(entityName string) string
- func (b *Builder) Ident(s string) *Builder
- func (b *Builder) IdentComma(s ...string) *Builder
- func (b *Builder) Join(qs ...Querier) *Builder
- func (b *Builder) Len() int
- func (b *Builder) Quote(ident string) string
- func (b *Builder) Reset()
- func (b *Builder) SetDialect(dialect dialect.DbDriver)
- func (b *Builder) SetQualifier(qualifier string)
- func (b *Builder) SetTotal(total int)
- func (b *Builder) String() string
- func (b Builder) Total() int
- func (b *Builder) Wrap(f func(*Builder)) *Builder
- func (b *Builder) WriteByte(c byte) *Builder
- func (b *Builder) WriteOp(op Op) *Builder
- func (b *Builder) WriteQuery(q string) *Builder
- func (b *Builder) WriteSchema(schema string) *Builder
- func (b *Builder) WriteString(s string) *Builder
- type CaseSpec
- type Caser
- type CreateSpec
- type DeleteSpec
- type Deleter
- type DialectBuilder
- type EntitySpec
- type Field
- type FieldName
- type FieldSpec
- type Identifier
- type Inserter
- func (i *Inserter) AddRow() *Inserter
- func (i *Inserter) FillDefault() *Inserter
- func (i *Inserter) Insert() ([]SqlSpec, error)
- func (i *Inserter) Set(column string, as string, v any) *Inserter
- func (i *Inserter) SetColumns(columns ...FieldSpec) *Inserter
- func (i *Inserter) SetDialect(dialect dialect.DbDriver) *Inserter
- func (i *Inserter) SetEntity(entity string) *Inserter
- func (i *Inserter) SetReturning(returning ...FieldName) *Inserter
- func (i *Inserter) SetSchema(schema string) *Inserter
- type Op
- type Order
- func (o *Order) Asc() *Order
- func (o *Order) Desc() *Order
- func (o *Order) NullsFirst() *Order
- func (o *Order) NullsLast() *Order
- func (o *Order) Query(b *Builder)
- func (o *Order) SetAs(schema string) *Order
- func (o *Order) SetColumn(column string) *Order
- func (o *Order) SetDialect(dialect dialect.DbDriver) *Order
- func (o *Order) SetOp(op string) *Order
- type OrderFunc
- type OrderOptions
- type ParamFormatter
- type Predicate
- func (p *Predicate) Add() *Predicate
- func (p *Predicate) And() *Predicate
- func (p *Predicate) Append(f func(*Builder)) *Predicate
- func (p *Predicate) Clone(begin int, end int) *Predicate
- func (p *Predicate) Contains(column string, as string, v any) *Predicate
- func (p *Predicate) Div() *Predicate
- func (p *Predicate) EQ(column string, as string, v any) *Predicate
- func (p *Predicate) FunsLen() int
- func (p *Predicate) GT(column string, as string, v any) *Predicate
- func (p *Predicate) GTE(column string, as string, v any) *Predicate
- func (p *Predicate) In(column string, as string, v ...any) *Predicate
- func (p *Predicate) IsNull(column string, as string) *Predicate
- func (p *Predicate) LT(column string, as string, v any) *Predicate
- func (p *Predicate) LTE(column string, as string, v any) *Predicate
- func (p *Predicate) Like(column string, as string, v any) *Predicate
- func (p *Predicate) Mod() *Predicate
- func (p *Predicate) Mul() *Predicate
- func (p *Predicate) NEQ(column string, as string, v any) *Predicate
- func (p *Predicate) Not() *Predicate
- func (p *Predicate) NotIn(column string, as string, v ...any) *Predicate
- func (p *Predicate) NotNull(column string, as string) *Predicate
- func (p *Predicate) Or() *Predicate
- func (p *Predicate) Query() (SqlSpec, error)
- func (p *Predicate) Sub() *Predicate
- type PredicateFunc
- type Querier
- type QueryContext
- type QueryContextKey
- type QuerySpec
- type Relation
- type RelationDesc
- type RelationTable
- type Scanner
- type ScannerBuilder
- type ScannerField
- type SelectTable
- type Selection
- type Selector
- func (s *Selector) AppendFrom(t TableView) *Selector
- func (s *Selector) C(column string) string
- func (s *Selector) Clone() *Selector
- func (s *Selector) LeftJoin(t TableView) *Selector
- func (s *Selector) On(c1, c2 string) *Selector
- func (s *Selector) OnP(p *Predicate) *Selector
- func (s *Selector) Query() (SqlSpec, error)
- func (s *Selector) Rows(rows ...FieldSpec) []FieldSpec
- func (s *Selector) SetContext(ctx context.Context) *Selector
- func (s *Selector) SetDialect(dialect dialect.DbDriver) *Selector
- func (s *Selector) SetFrom(t TableView) *Selector
- func (s *Selector) SetLimit(limit int) *Selector
- func (s *Selector) SetOrder(order *Order) *Selector
- func (s *Selector) SetSelect(entity string, rows ...FieldSpec) *Selector
- func (s *Selector) Table() *SelectTable
- type SqlSpec
- type StmtInfo
- type TableView
- type UpdateSpec
- type Updater
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewQueryContext ¶
func NewQueryContext(parent context.Context, c *QueryContext) context.Context
NewQueryContext 将QueryContext添加到context中,并返回一个新的context。
Params:
- parent: 父context。
- c: 用于Query,包含了查询语句上下的信息。
Returns:
0: 新的context。
Types ¶
type Builder ¶
type Builder struct { // IsAs 是否使用别名 IsAs bool // contains filtered or unexported fields }
Builder 用于构建SQL查询的字符串构建器。
func (*Builder) Argf ¶
Argf 将输入参数以给定的格式添加到生成器中。
Argf("JSON(?)", b). Argf("ST_GeomFromText(?)", geom)
Params:
- format: 格式。
- a: 参数。
Returns:
0: sql生成器。
func (*Builder) Quote ¶
Quote 根据配置的dialect,选择不同的字符引用SQL标识符。默认为"`"(通常用于MySQL)。 用于区分关键字,特殊字符等。
Params:
- ident: 标识符。
Returns:
0: 引用的标识符。
func (*Builder) SetQualifier ¶ added in v0.5.0
func (*Builder) WriteQuery ¶ added in v0.5.0
WriteQuery 添加一个查询语句到生成器中。
Params:
- q: 查询语句。
Returns:
0: sql生成器。
type CaseSpec ¶ added in v0.5.0
type CaseSpec struct { // Field Case的值。 Field FieldSpec // When Case的条件。 When PredicateFunc }
CaseSpec Case语句信息。
type Caser ¶ added in v0.5.0
type Caser struct { *Builder // Cases CASE语句信息。 Cases []CaseSpec // contains filtered or unexported fields }
Caser CASE语句生成器。
func NewCaser ¶ added in v0.5.0
NewCaser 创建一个CASE语句生成器。
Params:
- column: 列名。
- cases: CASE语句信息。
- as: 实体别名。
Returns:
0: CASE语句生成器。
func (*Caser) When ¶ added in v0.5.0
func (c *Caser) When(pred PredicateFunc) *Caser
When 添加一个WHEN条件。
Params:
- pred: WHERE子句生成器。
Returns:
0: CASE语句生成器。
type CreateSpec ¶
type CreateSpec struct { // Entity 表示实体的信息。 Entity *EntitySpec // Scan 用于扫描返回的数据。 Scan Scanner // Fields 用于生成创建语句。 Fields [][]*FieldSpec // Returning 用于返回的字段。 Returning []FieldName // TODO Schema string }
CreateSpec 用于生成创建语句。
func NewCreateSpec ¶
func NewCreateSpec(entity string, columns []FieldName) *CreateSpec
NewCreateSpec 创建一个CreateSpec。
Params:
- entity: 实体的名称。
- columns: 实体的字段。
func (*CreateSpec) CheckRequired ¶
func (s *CreateSpec) CheckRequired(dbDriver dialect.DbDriver, name FieldName, f entity.FieldStorager) error
CheckRequired 检查字段是否为空。
Params:
- name: 字段名称。
- f: 字段。
type DeleteSpec ¶
type DeleteSpec struct { Entity *EntitySpec Predicate PredicateFunc Affected *int64 }
DeleteSpec 用于生成删除语句。
func NewDeleteSpec ¶
func NewDeleteSpec(entity string) *DeleteSpec
NewDeleteSpec 创建一个DeleteSpec。
Params:
- entity: 实体的名称。
type Deleter ¶
type Deleter struct { *Builder // contains filtered or unexported fields }
Deleter 删除语句生成器。
type DialectBuilder ¶
type DialectBuilder struct {
// contains filtered or unexported fields
}
DialectBuilder 方言生成器。
func (*DialectBuilder) Select ¶
func (b *DialectBuilder) Select() *Selector
NewEntityBuilder 创建一个实体表的生成器。
func (*DialectBuilder) Table ¶ added in v0.5.0
func (b *DialectBuilder) Table(name string) *SelectTable
type EntitySpec ¶
type EntitySpec struct { // Name 实体表的名称,和[entity.EntityConfig]中的AttrName相同。 Name string // Columns 实体表的列名,通过这个属性会指定Select中包含的列。 Columns []FieldSpec }
EntitySpec 实体表的信息。
type Field ¶
type Field struct { // Name 字段名称。 Name FieldName // Primary 主键值。0表示不是主键,大于0表示主键。 Primary int // Default 是否默认值。 Default bool // Required 是否必填。 Required bool }
Field 字段信息。
type FieldSpec ¶
type FieldSpec struct { // Name 字段的名称。 Name FieldName // NameFormat 字段名称的格式化,比如SELECT ST_AsText(geom)中的`ST_AsText(geom)`。 NameFormat func(dbType dialect.DbDriver, name string) string // Param 字段的值。 Param entity.FieldValue // Default 是否使用默认值。 Default bool ParamFormat func(dbType dialect.DbDriver, param string) string }
FieldSpec 字段信息。
func NewFieldSpec ¶ added in v0.7.0
func NewFieldSpecs ¶ added in v0.7.0
func (FieldSpec) FormatParam ¶ added in v0.7.0
FormatParam 格式化字段的值。实现ParamFormatter接口。
type Identifier ¶ added in v0.5.0
type Identifier string
Identifier 标识符的类型。
const ( // IdentDefault 默认值的标识符。 IdentDefault Identifier = "DEFAULT" )
func (Identifier) String ¶ added in v0.5.0
func (i Identifier) String() string
String 返回标识符的字符串表示形式。
type Inserter ¶
type Inserter struct { *Builder // contains filtered or unexported fields }
Inserter 插入语句生成器。
func (*Inserter) FillDefault ¶ added in v0.5.0
FillDefault 用于批量插入,当前行的数据有一些列没有值,填充Null,这里不做非空字段的判断, 由codegen生成的代码保证。
Returns:
0: 插入语句生成器。
func (*Inserter) SetColumns ¶ added in v0.5.0
SetColumns 设置列名。
Params:
- columns: 列名。
Returns:
0: 插入语句生成器。
func (*Inserter) SetReturning ¶
SetReturning 设置返回的列名。
Params:
- returning: 返回的列名。
Returns:
0: 插入语句生成器。
type Op ¶
type Op int
const ( // OpEQ 等于操作符。 OpEQ Op = 0 // = // OpNEQ 不等于操作符。 OpNEQ Op = 1 // <> // OpGT 大于操作符。 OpGT Op = 2 // > // OpGTE 大于等于操作符。 OpGTE Op = 3 // >= // OpLT 小于操作符。 OpLT Op = 4 // < // OpLTE 小于等于操作符。 OpLTE Op = 5 // <= // OpIn IN操作符。 OpIn Op = 6 // IN // OpNotIn NOT IN操作符。 OpNotIn Op = 7 // NOT IN // OpLike LIKE操作符。 OpLike Op = 8 // LIKE // OpIsNull IS NULL操作符。 OpIsNull Op = 9 // IS NULL // OpNotNull IS NOT NULL操作符。 OpNotNull Op = 10 // IS NOT NULL // OpAdd 加操作符。 OpAdd Op = 11 // + // OpSub 减操作符。 OpSub Op = 12 // - // OpMul 乘操作符。 OpMul Op = 13 // * // OpDiv 除操作符。 OpDiv Op = 14 // / (Quotient) // OpMod 取模操作符。 OpMod Op = 15 // % (Reminder) // OpContains 包含操作符。 OpContains Op = 16 // @> (Contains) )
Predicate and arithmetic operators.
type Order ¶ added in v0.5.0
type Order struct { OrderOptions Builder Column string }
func (*Order) NullsFirst ¶ added in v0.5.0
func (*Order) SetDialect ¶ added in v0.5.0
type OrderOptions ¶ added in v0.5.0
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 }
Predicate Where子句生成器。
func (*Predicate) Clone ¶ added in v0.5.0
Clone 复制一个Predicate
Params:
- begin: 复制从第几个开始, -1表示没有开始位置
- end: 复制到第几个结束, -1表示没有结束位置
Returns:
0: 复制的Predicate。
func (*Predicate) GT ¶ added in v0.5.0
GT 添加一个大于的条件。
Params:
- column: 列名。
- v: 值。
Returns:
0: Where子句生成器。
func (*Predicate) GTE ¶ added in v0.5.0
GTE 添加一个大于等于的条件。
Params:
- column: 列名。
- v: 值。
Returns:
0: Where子句生成器。
func (*Predicate) In ¶ added in v0.5.0
In 添加一个IN的条件。
Params:
- column: 列名。
- v: 值。
Returns:
0: Where子句生成器。
func (*Predicate) IsNull ¶ added in v0.5.0
IsNull 添加一个IS NULL的条件。
Params:
- column: 列名。
Returns:
0: Where子句生成器。
func (*Predicate) LT ¶ added in v0.5.0
LT 添加一个小于的条件。
Params:
- column: 列名。
- v: 值。
Returns:
0: Where子句生成器。
func (*Predicate) LTE ¶ added in v0.5.0
LTE 添加一个小于等于的条件。
Params:
- column: 列名。
- v: 值。
Returns:
0: Where子句生成器。
func (*Predicate) Like ¶ added in v0.5.0
Like 添加一个LIKE的条件。
Params:
- column: 列名。
- v: 值。
Returns:
0: Where子句生成器。
func (*Predicate) NEQ ¶ added in v0.5.0
NEQ 添加一个不等于的条件。
Params:
- column: 列名。
- v: 值。
Returns:
0: Where子句生成器。
func (*Predicate) NotIn ¶ added in v0.5.0
NotIn 添加一个NOT IN的条件。
Params:
- column: 列名。
- v: 值。
Returns:
0: Where子句生成器。
func (*Predicate) NotNull ¶ added in v0.5.0
NotNull 添加一个IS NOT NULL的条件。
Params:
- column: 列名。
Returns:
0: Where子句生成器。
type PredicateFunc ¶ added in v0.5.0
type PredicateFunc func(p *Predicate)
PredicateFunc Where子句生成器的函数。
var Add PredicateFunc = func(p *Predicate) {
p.Add()
}
var And PredicateFunc = func(p *Predicate) {
p.And()
}
var Div PredicateFunc = func(p *Predicate) {
p.Div()
}
var Mod PredicateFunc = func(p *Predicate) {
p.Mod()
}
var Mul PredicateFunc = func(p *Predicate) {
p.Mul()
}
var Not PredicateFunc = func(p *Predicate) {
p.Not()
}
var Or PredicateFunc = func(p *Predicate) {
p.Or()
}
var Sub PredicateFunc = func(p *Predicate) {
p.Sub()
}
type Querier ¶
第一个对象返回:("SELECT * FROM users WHERE age > ?", [30]) 第二个对象返回:("AND name = ?", ["John"]) 当使用 Join 方法将这两个对象组合时,生成的SQL查询将是: SELECT * FROM users WHERE age > ? AND name = ?
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。
Params:
- ctx: 上下文。
Returns:
0: QueryContext。
type QuerySpec ¶
type QuerySpec struct { // Entity 表示实体的信息。 Entity *EntitySpec // Scan 用于扫描返回的数据。 Scan Scanner // Limit 限制查询语句返回的记录数。 Limit int // Predicate 查询语句的条件,用于生成where子句。 Predicate PredicateFunc // Rels 用于生成联表查询。 Rels []Relation Orders []OrderFunc }
QuerySpec 包含了实体的查询的信息。 通过把Query中的信息转换为QuerySpec,把QuerySpec传给NewQuery发起查询, QuerySpec是把查询信息转为sql的中间件。
func NewQuerySpec ¶
NewQuerySpec 创建一个QuerySpec。
Params:
- entity:实体的名称。
- rows:实体的字段。
Returns:
0: QuerySpec。
type RelationDesc ¶ added in v0.5.0
type RelationDesc struct { Orders []OrderFunc Predicates []PredicateFunc To RelationTable Join RelationTable }
func (*RelationDesc) Reset ¶ added in v0.5.0
func (r *RelationDesc) Reset()
type RelationTable ¶ added in v0.5.0
type ScannerBuilder ¶ added in v0.5.0
type ScannerBuilder struct {
// contains filtered or unexported fields
}
func NewScannerBuilder ¶ added in v0.5.0
func NewScannerBuilder(length int) *ScannerBuilder
func (*ScannerBuilder) Append ¶ added in v0.5.0
func (s *ScannerBuilder) Append(index int, args ...any)
func (*ScannerBuilder) Args ¶ added in v0.5.0
func (s *ScannerBuilder) Args() [][]any
func (*ScannerBuilder) Flatten ¶ added in v0.5.0
func (s *ScannerBuilder) Flatten() []any
type ScannerField ¶ added in v0.5.0
type ScannerField interface {
String() string
}
type SelectTable ¶ added in v0.5.0
type SelectTable struct { *Builder // contains filtered or unexported fields }
func AddRelBySelector ¶ added in v0.5.0
func AddRelBySelector(s *Selector, t *SelectTable, desc RelationDesc) *SelectTable
func (*SelectTable) As ¶ added in v0.5.0
func (s *SelectTable) As(alias string) *SelectTable
As 设置别名。
func (*SelectTable) Columns ¶ added in v0.5.0
func (s *SelectTable) Columns(columns ...string) []string
Columns 返回一个序列号后的列名列表。
func (*SelectTable) GetAs ¶ added in v0.5.0
func (s *SelectTable) GetAs() (string, int)
func (*SelectTable) Schema ¶ added in v0.5.0
func (s *SelectTable) Schema(name string) *SelectTable
Schema 设置模式名称。
func (*SelectTable) Unquote ¶ added in v0.5.0
func (s *SelectTable) Unquote() *SelectTable
Unquote 使表名格式化为原始字符串(无引号)。 当不想查询当前数据库下的表时,它非常有用。 例如 在 MySQL 中为 "INFORMATION_SCHEMA.TABLE_CONSTRAINTS"。
type Selection ¶
type Selection struct {
// contains filtered or unexported fields
}
Selection 选择的字段。
type Selector ¶
type Selector struct { *Builder // contains filtered or unexported fields }
选择语句生成器
func (*Selector) AppendFrom ¶ added in v0.5.0
AppendFrom appends a new TableView to the `FROM` clause.
func (*Selector) SetSelect ¶
SetSelect 设置选择的字段。
Params:
- entity: 实体表的名称。
- rows: 字段的名称。
Returns:
0: 选择语句生成器。
func (*Selector) Table ¶ added in v0.5.0
func (s *Selector) Table() *SelectTable
type UpdateSpec ¶
type UpdateSpec struct { Entity *EntitySpec Scan Scanner // Sets 更新中Set部分,根据不同的列设置不同的值。 Sets []map[string][]CaseSpec // Predicate 更新中Where部分,根据不同的行设置不同的条件。 Predicate []PredicateFunc }
UpdateSpec 用于生成更新语句。
func NewUpdateSpec ¶
func NewUpdateSpec(entity string, rows []FieldName) *UpdateSpec
NewUpdateSpec 创建一个UpdateSpec。
type Updater ¶
type Updater struct { *Builder // contains filtered or unexported fields }
Updater 更新语句生成器。