Documentation
¶
Index ¶
- Variables
- type CommandOp
- type ConditionNode
- type FieldFlags
- type Filter
- type FilterNode
- type GroupNode
- type JoinMode
- type LogicOp
- type Query
- type Result
- type Row
- type Rows
- type SQLNamer
- type Table
- func (t *Table[ROW]) Defs() TableDefinition
- func (t *Table[ROW]) Del(ctx context.Context, tx TxProcessor, keys ...any) (Result, error)
- func (t *Table[ROW]) Ins(ctx context.Context, tx TxProcessor, row *ROW) (*ROW, Result, error)
- func (t *Table[ROW]) Many(ctx context.Context, tx TxProcessor, filter *Filter) (result []*ROW, err error)
- func (t *Table[ROW]) One(ctx context.Context, tx TxProcessor, keys ...any) (*ROW, error)
- func (t *Table[ROW]) SQLs() sqlTexts
- func (t *Table[ROW]) Upd(ctx context.Context, tx TxProcessor, row *ROW) (*ROW, Result, error)
- type TableDefinition
- type TableField
- type TableFields
- type TableFlags
- type TxProcessor
Constants ¶
This section is empty.
Variables ¶
var ( // SQLiteDialect — предопределённый диалект SQLite. // EN: SQLiteDialect — predefined SQLite dialect. SQLiteDialect = dialect.SQLiteDialect{} // PostgreSQLDialect — предопределённый диалект PostgreSQL. // EN: PostgreSQLDialect — predefined PostgreSQL dialect. PostgreSQLDialect = dialect.PostgreSQLDialect{} )
var JoinModeNames = map[string]JoinMode{ "left": JoinModeLeft, "right": JoinModeRight, "inner": JoinModeInner, }
Functions ¶
This section is empty.
Types ¶
type ConditionNode ¶ added in v0.2.0
ConditionNode — лист дерева фильтра: одно условие над полем. EN: ConditionNode — filter tree leaf: a single condition on a field.
func Cond ¶ added in v0.2.0
func Cond(fieldIdx int, op CommandOp, value any) *ConditionNode
Cond создаёт узел условия: fieldIdx — индекс поля в TableFields, op — оператор, value — значение. EN: Cond creates a condition node: fieldIdx — field index in TableFields, op — operator, value — value.
func (ConditionNode) Build ¶ added in v0.2.0
func (cn ConditionNode) Build(tf TableFields, d dialect.DialectProvider, argIdx *int) (string, []any, error)
type FieldFlags ¶ added in v0.2.0
type FieldFlags struct {
IsPK bool // keyPK
ReadOnly bool // keyRO
AutoGen bool // keyAuto
Embed bool
ForceUpdate bool
ForceInsert bool
SkipReading bool
ColName string // keyColName
Prefix string // keyPrefix
Ref string
SortPos int
SortBackward bool
}
func (*FieldFlags) Merge ¶ added in v0.2.0
func (f *FieldFlags) Merge(parent FieldFlags)
type Filter ¶
type Filter struct {
Offset uint32
Limit uint32
Range FilterNode
}
Filter — структура фильтра для Many(). Offset и Limit задают пагинацию, Range — дерево условий. EN: Filter — filter structure for Many(). Offset and Limit set pagination, Range — condition tree.
func (*Filter) BuildOffsetAndLimit ¶ added in v0.2.0
func (f *Filter) BuildOffsetAndLimit(d dialect.DialectProvider) string
func (*Filter) BuildWhere ¶ added in v0.2.0
func (f *Filter) BuildWhere(tf TableFields, d dialect.DialectProvider) (query string, args []any, err error)
type FilterNode ¶ added in v0.2.0
type FilterNode interface {
Build(tf TableFields, d dialect.DialectProvider, argIdx *int) (clause string, args []any, err error)
}
FilterNode — интерфейс узла дерева фильтра. Реализации: ConditionNode (условие), GroupNode (And/Or/Not-группа). EN: FilterNode — filter tree node interface. Implementations: ConditionNode (condition), GroupNode (And/Or/Not group).
type GroupNode ¶ added in v0.2.0
type GroupNode struct {
Logic LogicOp
Children []FilterNode
}
GroupNode — группа условий с логическим оператором. EN: GroupNode — group of conditions with a logical operator.
func And ¶
func And(children ...FilterNode) *GroupNode
And создаёт группу с логическим AND. EN: And creates a logical AND group.
func Not ¶ added in v0.2.0
func Not(child FilterNode) *GroupNode
Not создаёт группу с логическим NOT (ровно один ребёнок). EN: Not creates a logical NOT group (exactly one child).
func Or ¶
func Or(children ...FilterNode) *GroupNode
Or создаёт группу с логическим OR. EN: Or creates a logical OR group.
func (GroupNode) Build ¶ added in v0.2.0
func (gn GroupNode) Build(tf TableFields, d dialect.DialectProvider, argIdx *int) (string, []any, error)
type Query ¶ added in v0.1.4
type Query[QROW any] struct { // contains filtered or unexported fields }
Query — типизированный multi-table SELECT с JOIN. QROW — структура, поля которой — ROW-типы таблиц. JOIN-условия выводятся автоматически из тегов ref= на полях ROW-структур. EN: Query — typed multi-table SELECT with JOIN. QROW — struct whose fields are ROW table types. JOIN conditions are auto-inferred from ref= tags on ROW struct fields.
func NewQuery ¶ added in v0.1.2
func NewQuery[QROW any](d dialect.DialectProvider) *Query[QROW]
NewQuery создаёт типизированный multi-table запрос для типа QROW. Собирает метаданные всех таблиц, строит JOIN-условия и генерирует SQL. EN: NewQuery creates a typed multi-table query for the QROW type. Collects metadata for all tables, builds JOIN conditions and generates SQL.
func NewQueryVal ¶ added in v0.1.15
func NewQueryVal[QROW any](d dialect.DialectProvider) Query[QROW]
func (*Query[QROW]) FlatFields ¶ added in v0.2.0
func (q *Query[QROW]) FlatFields() TableFields
FlatFields возвращает плоский список всех selectable полей всех таблиц. Используется для определения индексов полей в Cond(). EN: FlatFields returns the flat list of all selectable fields from all tables. Used to determine field indices in Cond().
func (*Query[QROW]) Many ¶ added in v0.2.0
func (q *Query[QROW]) Many(ctx context.Context, tx TxProcessor, filter *Filter) (result []*QROW, err error)
Many возвращает срез строк Query с JOIN, фильтрацией и сортировкой. filter может быть nil — тогда возвращаются все строки с ORDER BY из sort-тегов. Для LEFT JOIN без совпадений поля присоединённых таблиц обнуляются. EN: Many returns a slice of Query rows with JOIN, filtering and sorting. filter may be nil — then all rows are returned with ORDER BY from sort tags. For LEFT JOIN with no match, joined table fields are zeroed.
func (*Query[QROW]) One ¶ added in v0.1.14
One возвращает одну строку Query по PK первичной таблицы (и таблиц с тегом pk). Для LEFT JOIN без совпадений поля присоединённых таблиц обнуляются. EN: One returns a single Query row by PK of the primary table (and tables with pk tag). For LEFT JOIN with no match, joined table fields are zeroed.
type Result ¶ added in v0.1.6
Result представляет результат выполнения ExecContext. EN: Result represents the result of ExecContext execution.
type Row ¶ added in v0.1.6
Row представляет одну строку результата запроса. EN: Row represents a single query result row.
type Rows ¶ added in v0.1.6
Rows представляет курсор результатов запроса. EN: Rows represents a query result cursor.
type Table ¶ added in v0.1.4
type Table[ROW any] struct { // contains filtered or unexported fields }
Table — типизированная таблица, параметризованная типом строки ROW. Методы: Ins (вставка), Upd (обновление), One (SELECT по PK), Del (удаление), Many (SELECT с фильтром). EN: Table — a typed table parameterized by row type ROW. Methods: Ins (insert), Upd (update), One (SELECT by PK), Del (delete), Many (SELECT with filter).
func NewTable ¶
func NewTable[ROW any](dialect dialect.DialectProvider) *Table[ROW]
NewTable создаёт типизированную таблицу для типа ROW. ROW должен быть value-типом (структура), не указателем. Собирает метаданные полей и генерирует SQL-запросы (кешируются). EN: NewTable creates a typed table for the ROW type. ROW must be a value type (struct), not a pointer. Collects field metadata and generates SQL queries (cached).
func NewTableVal ¶ added in v0.1.9
func NewTableVal[ROW any](dialect dialect.DialectProvider) Table[ROW]
func (*Table[ROW]) Defs ¶ added in v0.2.0
func (t *Table[ROW]) Defs() TableDefinition
Defs возвращает метаданные таблицы (поля, колонки, индексы). EN: Defs returns table metadata (fields, columns, indexes).
func (*Table[ROW]) Del ¶ added in v0.2.0
Del удаляет строку по первичному ключу. EN: Del deletes a row by primary key.
func (*Table[ROW]) Ins ¶ added in v0.2.0
Ins вставляет строку. Если диалект поддерживает RETURNING — возвращает вставленную строку. EN: Ins inserts a row. If the dialect supports RETURNING — returns the inserted row.
func (*Table[ROW]) Many ¶ added in v0.2.0
func (t *Table[ROW]) Many(ctx context.Context, tx TxProcessor, filter *Filter) (result []*ROW, err error)
Many возвращает срез строк с фильтрацией и сортировкой. filter может быть nil — тогда возвращаются все строки с ORDER BY из sort-тегов. EN: Many returns a slice of rows with filtering and sorting. filter may be nil — then all rows are returned with ORDER BY from sort tags.
func (*Table[ROW]) One ¶ added in v0.2.0
One возвращает одну строку по первичному ключу. EN: One returns a single row by primary key.
func (*Table[ROW]) SQLs ¶ added in v0.2.0
func (t *Table[ROW]) SQLs() sqlTexts
SQLs возвращает сгенерированные SQL-запросы (InsertCmd, UpdateCmd, DeleteCmd, GetOneCmd, ListCmdStart, ListSortString). EN: SQLs returns generated SQL queries (InsertCmd, UpdateCmd, DeleteCmd, GetOneCmd, ListCmdStart, ListSortString).
type TableDefinition ¶ added in v0.2.0
type TableDefinition struct {
TableName string
Fields TableFields
FieldNames map[string]int
Indexes fieldsIndexes
}
type TableField ¶ added in v0.2.0
type TableField struct {
Index []int
Path []string
SQLName string
Flags FieldFlags
}
type TableFields ¶ added in v0.2.0
type TableFields []TableField
func CollectTableFields ¶ added in v0.2.0
func CollectTableFields(t reflect.Type) (TableFields, error)
CollectTableFields -
type TableFlags ¶ added in v0.2.0
type TxProcessor ¶ added in v0.2.1
type TxProcessor interface {
ExecContext(ctx context.Context, query string, args ...any) (Result, error)
QueryContext(ctx context.Context, query string, args ...any) (Rows, error)
QueryRowContext(ctx context.Context, query string, args ...any) Row
}
TxProcessor описывает интерфейс выполнения SQL-запросов. Абстрагирует database/sql.DB, database/sql.Tx, pgx.Conn, pgx.Tx. EN: TxProcessor describes the SQL execution interface. Abstracts database/sql.DB, database/sql.Tx, pgx.Conn, pgx.Tx.