Documentation
¶
Index ¶
- Constants
- Variables
- func ActorFromContext(ctx context.Context) string
- func WithActor(ctx context.Context, actor string) context.Context
- type AfterCommitHook
- type Audit
- type BeforeCommitHook
- type BoolColumn
- func (c BoolColumn) Asc() OrderExpr
- func (c BoolColumn) Desc() OrderExpr
- func (c BoolColumn) Eq(v bool) Predicate
- func (c BoolColumn) IsFalse() Predicate
- func (c BoolColumn) IsNotNull() Predicate
- func (c BoolColumn) IsNull() Predicate
- func (c BoolColumn) IsTrue() Predicate
- func (c BoolColumn) NEQ(v bool) Predicate
- func (c BoolColumn) Name() string
- type Column
- func (c Column[T]) Asc() OrderExpr
- func (c Column[T]) Desc() OrderExpr
- func (c Column[T]) Eq(v T) Predicate
- func (c Column[T]) In(vs ...T) Predicate
- func (c Column[T]) IsNotNull() Predicate
- func (c Column[T]) IsNull() Predicate
- func (c Column[T]) NEQ(v T) Predicate
- func (c Column[T]) Name() string
- func (c Column[T]) NotIn(vs ...T) Predicate
- type Engine
- func (e *Engine) Close()
- func (e *Engine) Exec(ctx context.Context, sql string, args ...any) (int64, error)
- func (e *Engine) OnAfterCommit(hook AfterCommitHook)
- func (e *Engine) OnBeforeCommit(hook BeforeCommitHook)
- func (e *Engine) OnQuery(hook QueryHook)
- func (e *Engine) Query(ctx context.Context, sql string, args ...any) (Rows, error)
- func (e *Engine) QueryRow(ctx context.Context, sql string, args ...any) Row
- func (e *Engine) Transaction(ctx context.Context, fn func(tx *Tx) error, opts ...TxOption) (retErr error)
- type EventRecorder
- type FieldChange
- type IncludableQuery
- type IncludeSpec
- type IsolationLevel
- type Model
- type ModelMeta
- type ModelMetaBase
- type MultiColumnMapper
- type NamedFilter
- type Option
- type OrderExpr
- type OrderedColumn
- func (c OrderedColumn[T]) Asc() OrderExpr
- func (c OrderedColumn[T]) Between(low, high T) Predicate
- func (c OrderedColumn[T]) Desc() OrderExpr
- func (c OrderedColumn[T]) Eq(v T) Predicate
- func (c OrderedColumn[T]) GT(v T) Predicate
- func (c OrderedColumn[T]) GTE(v T) Predicate
- func (c OrderedColumn[T]) In(vs ...T) Predicate
- func (c OrderedColumn[T]) IsNotNull() Predicate
- func (c OrderedColumn[T]) IsNull() Predicate
- func (c OrderedColumn[T]) LT(v T) Predicate
- func (c OrderedColumn[T]) LTE(v T) Predicate
- func (c OrderedColumn[T]) NEQ(v T) Predicate
- func (c OrderedColumn[T]) Name() string
- func (c OrderedColumn[T]) NotIn(vs ...T) Predicate
- type Predicate
- type QueryBuilder
- func (q *QueryBuilder[T]) All(ctx context.Context) ([]*T, error)
- func (q *QueryBuilder[T]) BulkDelete(ctx context.Context) (int, error)
- func (q *QueryBuilder[T]) BulkUpdate(ctx context.Context, sets ...SetClause) (int, error)
- func (q *QueryBuilder[T]) Count(ctx context.Context) (int, error)
- func (q *QueryBuilder[T]) Exists(ctx context.Context) (bool, error)
- func (q *QueryBuilder[T]) First(ctx context.Context) (*T, error)
- func (q *QueryBuilder[T]) FirstOrNil(ctx context.Context) (*T, error)
- func (q *QueryBuilder[T]) Limit(n int) *QueryBuilder[T]
- func (q *QueryBuilder[T]) OrderBy(exprs ...OrderExpr) *QueryBuilder[T]
- func (q *QueryBuilder[T]) Skip(n int) *QueryBuilder[T]
- func (q *QueryBuilder[T]) Unscoped() *QueryBuilder[T]
- func (q *QueryBuilder[T]) Where(pred Predicate) *QueryBuilder[T]
- func (q *QueryBuilder[T]) WithoutFilter(name string) *QueryBuilder[T]
- type QueryEvent
- type QueryHook
- type RawExpr
- type Relation
- type RelationInfo
- type RelationType
- type Repository
- func (r *Repository[T]) All(ctx context.Context) ([]*T, error)
- func (r *Repository[T]) BulkInsert(ctx context.Context, entities []*T) (int, error)
- func (r *Repository[T]) BulkUpsert(ctx context.Context, entities []*T, opts ...UpsertOption) (int, error)
- func (r *Repository[T]) Count(ctx context.Context) (int, error)
- func (r *Repository[T]) Exists(ctx context.Context) (bool, error)
- func (r *Repository[T]) Find(ctx context.Context, id any) (*T, error)
- func (r *Repository[T]) First(ctx context.Context) (*T, error)
- func (r *Repository[T]) FirstOrNil(ctx context.Context) (*T, error)
- func (r *Repository[T]) Include(rels ...IncludeSpec) *IncludableQuery[T]
- func (r *Repository[T]) Limit(n int) *QueryBuilder[T]
- func (r *Repository[T]) OrderBy(exprs ...OrderExpr) *QueryBuilder[T]
- func (r *Repository[T]) Unscoped() *QueryBuilder[T]
- func (r *Repository[T]) Where(pred Predicate) *QueryBuilder[T]
- func (r *Repository[T]) WithoutFilter(name string) *QueryBuilder[T]
- type Row
- type Rows
- type SetClause
- type SoftDelete
- type StringColumn
- func (c StringColumn) Asc() OrderExpr
- func (c StringColumn) Contains(substr string) Predicate
- func (c StringColumn) Desc() OrderExpr
- func (c StringColumn) Eq(v string) Predicate
- func (c StringColumn) GT(v string) Predicate
- func (c StringColumn) GTE(v string) Predicate
- func (c StringColumn) HasPrefix(prefix string) Predicate
- func (c StringColumn) HasSuffix(suffix string) Predicate
- func (c StringColumn) ILike(pattern string) Predicate
- func (c StringColumn) In(vs ...string) Predicate
- func (c StringColumn) IsNotNull() Predicate
- func (c StringColumn) IsNull() Predicate
- func (c StringColumn) LT(v string) Predicate
- func (c StringColumn) LTE(v string) Predicate
- func (c StringColumn) Like(pattern string) Predicate
- func (c StringColumn) NEQ(v string) Predicate
- func (c StringColumn) Name() string
- func (c StringColumn) NotIn(vs ...string) Predicate
- type Tx
- type TxOption
- type TxQueryBuilder
- func (q *TxQueryBuilder[T]) All(ctx context.Context) ([]*T, error)
- func (q *TxQueryBuilder[T]) Count(ctx context.Context) (int, error)
- func (q *TxQueryBuilder[T]) Exists(ctx context.Context) (bool, error)
- func (q *TxQueryBuilder[T]) First(ctx context.Context) (*T, error)
- func (q *TxQueryBuilder[T]) FirstOrNil(ctx context.Context) (*T, error)
- func (q *TxQueryBuilder[T]) Limit(n int) *TxQueryBuilder[T]
- func (q *TxQueryBuilder[T]) OrderBy(exprs ...OrderExpr) *TxQueryBuilder[T]
- func (q *TxQueryBuilder[T]) Skip(n int) *TxQueryBuilder[T]
- func (q *TxQueryBuilder[T]) Unscoped() *TxQueryBuilder[T]
- func (q *TxQueryBuilder[T]) Where(pred Predicate) *TxQueryBuilder[T]
- func (q *TxQueryBuilder[T]) WithoutFilter(name string) *TxQueryBuilder[T]
- type TxRepository
- func (r *TxRepository[T]) Add(entity *T)
- func (r *TxRepository[T]) All(ctx context.Context) ([]*T, error)
- func (r *TxRepository[T]) Find(ctx context.Context, id any) (*T, error)
- func (r *TxRepository[T]) Remove(entity *T) error
- func (r *TxRepository[T]) Unscoped() *TxQueryBuilder[T]
- func (r *TxRepository[T]) Where(pred Predicate) *TxQueryBuilder[T]
- func (r *TxRepository[T]) WithoutFilter(name string) *TxQueryBuilder[T]
- type UpsertOption
- type Versioned
Constants ¶
const ( StateUnchanged entityState = iota StateAdded StateModified StateDeleted )
Variables ¶
var ErrBulkDeleteRequiresFilter = fmt.Errorf("drel: BulkDelete requires at least one Where predicate to prevent accidental full-table deletes")
BulkUpsert inserts or updates multiple entities based on conflict resolution. It bypasses change tracking and executes directly against the database. Returns the total number of rows affected. ErrBulkDeleteRequiresFilter is returned when BulkDelete is called without any WHERE predicates or filters.
var ErrConcurrencyConflict = errors.New("drel: concurrency conflict — entity was modified by another transaction")
ErrConcurrencyConflict is returned when an entity was modified by another transaction.
var ErrEntityNotTracked = errors.New("drel: entity is not tracked")
ErrEntityNotTracked is returned when an operation requires a tracked entity but none is found.
var ErrNotFound = errors.New("drel: not found")
ErrNotFound is returned when a query expects a result but finds none.
var SoftDeleteFilter = NamedFilter{ Name: "soft_delete", Clause: ast.WhereClause{ Comparison: &ast.ComparisonNode{Column: "deleted_at", Op: ast.OpIsNull}, }, }
Functions ¶
func ActorFromContext ¶
ActorFromContext extracts the actor identifier from the context, returning an empty string if none is set.
Types ¶
type AfterCommitHook ¶
type BoolColumn ¶
type BoolColumn struct {
// contains filtered or unexported fields
}
func NewBoolCol ¶
func NewBoolCol(name string) BoolColumn
func (BoolColumn) Asc ¶
func (c BoolColumn) Asc() OrderExpr
func (BoolColumn) Desc ¶
func (c BoolColumn) Desc() OrderExpr
func (BoolColumn) Eq ¶
func (c BoolColumn) Eq(v bool) Predicate
func (BoolColumn) IsFalse ¶
func (c BoolColumn) IsFalse() Predicate
func (BoolColumn) IsNotNull ¶
func (c BoolColumn) IsNotNull() Predicate
func (BoolColumn) IsNull ¶
func (c BoolColumn) IsNull() Predicate
func (BoolColumn) IsTrue ¶
func (c BoolColumn) IsTrue() Predicate
func (BoolColumn) NEQ ¶
func (c BoolColumn) NEQ(v bool) Predicate
func (BoolColumn) Name ¶
func (c BoolColumn) Name() string
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine holds a database driver and dialect for executing queries.
func (*Engine) Close ¶
func (e *Engine) Close()
Close shuts down the underlying database connection.
func (*Engine) OnAfterCommit ¶
func (e *Engine) OnAfterCommit(hook AfterCommitHook)
func (*Engine) OnBeforeCommit ¶
func (e *Engine) OnBeforeCommit(hook BeforeCommitHook)
func (*Engine) Query ¶
Query executes a raw SQL query and returns the result rows. The caller must close the returned Rows when done.
func (*Engine) QueryRow ¶
QueryRow executes a raw SQL query that is expected to return at most one row.
func (*Engine) Transaction ¶
func (e *Engine) Transaction(ctx context.Context, fn func(tx *Tx) error, opts ...TxOption) (retErr error)
Transaction runs fn inside a database transaction. If fn returns nil the transaction is committed; otherwise it is rolled back. Pending changes in the Tx change tracker are flushed automatically before commit.
type EventRecorder ¶
type EventRecorder interface {
PendingEvents() []any
ClearEvents()
}
type FieldChange ¶
FieldChange represents a single column value that has changed on an entity.
type IncludableQuery ¶
type IncludableQuery[T any] struct { // contains filtered or unexported fields }
IncludableQuery constructs queries that eagerly load related entities.
type IncludeSpec ¶
type IncludeSpec struct {
// contains filtered or unexported fields
}
IncludeSpec wraps a RelationInfo for use with Include queries.
func NewIncludeSpec ¶
func NewIncludeSpec(rel *RelationInfo) IncludeSpec
NewIncludeSpec creates an IncludeSpec from a RelationInfo.
func (IncludeSpec) Unscoped ¶
func (s IncludeSpec) Unscoped() IncludeSpec
Unscoped returns a copy of the IncludeSpec that bypasses global filters (e.g. soft delete) when loading the related entities.
type IsolationLevel ¶
type IsolationLevel int
IsolationLevel represents the transaction isolation level.
const ( // ReadCommitted is the default isolation level. ReadCommitted IsolationLevel = iota // RepeatableRead prevents non-repeatable reads. RepeatableRead // Serializable provides full serializability. Serializable )
type Model ¶
type Model[K comparable] struct { // contains filtered or unexported fields }
func (*Model[K]) ClearEvents ¶
func (m *Model[K]) ClearEvents()
func (*Model[K]) PendingEvents ¶
func (*Model[K]) RecordEvent ¶
type ModelMeta ¶
type ModelMeta[T any] struct { Table string Columns []string PKColumn string Scan func(Row) (*T, error) Snapshot func(*T) any Diff func(*T, any) []FieldChange PKValue func(*T) any InsertColumns func(*T) ([]string, []any) ScanReturning func(*T, Row) error ColumnValue func(*T, int) any Filters []NamedFilter HasSoftDelete bool HasVersioned bool HasAudit bool VersionValue func(*T) int SetVersion func(*T, int) AuditSetCreate func(*T, string) AuditSetUpdate func(*T, string) }
ModelMeta describes the database mapping for a model type T.
type ModelMetaBase ¶
type ModelMetaBase struct {
Table string
Columns []string
PKColumn string
Snapshot func(entity any) any
Diff func(entity any, snapshot any) []FieldChange
PKValue func(entity any) any
InsertColumns func(entity any) ([]string, []any)
ScanRow func(Row) (any, error)
ScanReturning func(entity any, row Row) error
ColumnValue func(entity any, colIdx int) any
HasSoftDelete bool
HasVersioned bool
HasAudit bool
VersionValue func(entity any) int
SetVersion func(entity any, v int)
AuditSetCreate func(entity any, actor string)
AuditSetUpdate func(entity any, actor string)
Filters []NamedFilter
}
ModelMetaBase is the type-erased version of ModelMeta[T], used internally by the change tracker and relationship loading infrastructure.
func ToMetaBase ¶
func ToMetaBase[T any](meta *ModelMeta[T]) *ModelMetaBase
ToMetaBase converts a typed ModelMeta[T] to a type-erased ModelMetaBase.
type MultiColumnMapper ¶
type MultiColumnMapper interface {
DrelColumns() []string
DrelValues() ([]any, error)
DrelScanMulti(vals []any) error
}
MultiColumnMapper is implemented by value objects that map to multiple database columns (e.g., Money → amount + currency).
type NamedFilter ¶
type NamedFilter struct {
Name string
Clause ast.WhereClause
}
type Option ¶
type Option func(*engineConfig)
Option configures Engine creation.
func WithContext ¶
WithContext sets the context used during engine creation.
type OrderExpr ¶
type OrderExpr struct {
// contains filtered or unexported fields
}
func (OrderExpr) ToAST ¶
func (o OrderExpr) ToAST() ast.OrderByExpr
type OrderedColumn ¶
func NewOrderedCol ¶
func NewOrderedCol[T cmp.Ordered](name string) OrderedColumn[T]
func (OrderedColumn[T]) Asc ¶
func (c OrderedColumn[T]) Asc() OrderExpr
func (OrderedColumn[T]) Between ¶
func (c OrderedColumn[T]) Between(low, high T) Predicate
func (OrderedColumn[T]) Desc ¶
func (c OrderedColumn[T]) Desc() OrderExpr
func (OrderedColumn[T]) Eq ¶
func (c OrderedColumn[T]) Eq(v T) Predicate
func (OrderedColumn[T]) GT ¶
func (c OrderedColumn[T]) GT(v T) Predicate
func (OrderedColumn[T]) GTE ¶
func (c OrderedColumn[T]) GTE(v T) Predicate
func (OrderedColumn[T]) In ¶
func (c OrderedColumn[T]) In(vs ...T) Predicate
func (OrderedColumn[T]) IsNotNull ¶
func (c OrderedColumn[T]) IsNotNull() Predicate
func (OrderedColumn[T]) IsNull ¶
func (c OrderedColumn[T]) IsNull() Predicate
func (OrderedColumn[T]) LT ¶
func (c OrderedColumn[T]) LT(v T) Predicate
func (OrderedColumn[T]) LTE ¶
func (c OrderedColumn[T]) LTE(v T) Predicate
func (OrderedColumn[T]) NEQ ¶
func (c OrderedColumn[T]) NEQ(v T) Predicate
func (OrderedColumn[T]) Name ¶
func (c OrderedColumn[T]) Name() string
func (OrderedColumn[T]) NotIn ¶
func (c OrderedColumn[T]) NotIn(vs ...T) Predicate
type Predicate ¶
type Predicate struct {
// contains filtered or unexported fields
}
func Raw ¶
Raw creates a predicate from a raw SQL expression with bound arguments. Use ? as placeholder for each argument; they are rewritten to $N for Postgres. Panics if the number of ? placeholders does not match the number of arguments.
func (Predicate) ToAST ¶
func (p Predicate) ToAST() ast.WhereClause
type QueryBuilder ¶
type QueryBuilder[T any] struct { // contains filtered or unexported fields }
QueryBuilder constructs and executes typed queries with an immutable builder pattern.
func (*QueryBuilder[T]) All ¶
func (q *QueryBuilder[T]) All(ctx context.Context) ([]*T, error)
All executes the query and returns all matching results.
func (*QueryBuilder[T]) BulkDelete ¶
func (q *QueryBuilder[T]) BulkDelete(ctx context.Context) (int, error)
BulkDelete deletes all rows matching the builder's WHERE conditions. If the model has soft delete, it performs a soft delete instead. Returns the number of affected rows.
func (*QueryBuilder[T]) BulkUpdate ¶
BulkUpdate updates all rows matching the builder's WHERE conditions. Returns the number of affected rows.
func (*QueryBuilder[T]) Count ¶
func (q *QueryBuilder[T]) Count(ctx context.Context) (int, error)
Count returns the number of matching rows.
func (*QueryBuilder[T]) Exists ¶
func (q *QueryBuilder[T]) Exists(ctx context.Context) (bool, error)
Exists returns true if at least one matching row exists.
func (*QueryBuilder[T]) First ¶
func (q *QueryBuilder[T]) First(ctx context.Context) (*T, error)
First returns the first matching result or ErrNotFound if none exist.
func (*QueryBuilder[T]) FirstOrNil ¶
func (q *QueryBuilder[T]) FirstOrNil(ctx context.Context) (*T, error)
FirstOrNil returns the first matching result or nil if none exist.
func (*QueryBuilder[T]) Limit ¶
func (q *QueryBuilder[T]) Limit(n int) *QueryBuilder[T]
Limit restricts the number of results returned.
func (*QueryBuilder[T]) OrderBy ¶
func (q *QueryBuilder[T]) OrderBy(exprs ...OrderExpr) *QueryBuilder[T]
OrderBy sets the ordering for the query.
func (*QueryBuilder[T]) Skip ¶
func (q *QueryBuilder[T]) Skip(n int) *QueryBuilder[T]
Skip sets the offset for the query (number of rows to skip).
func (*QueryBuilder[T]) Unscoped ¶
func (q *QueryBuilder[T]) Unscoped() *QueryBuilder[T]
Unscoped returns a new builder with all global filters removed.
func (*QueryBuilder[T]) Where ¶
func (q *QueryBuilder[T]) Where(pred Predicate) *QueryBuilder[T]
Where adds a filter predicate. Multiple calls are ANDed together.
func (*QueryBuilder[T]) WithoutFilter ¶
func (q *QueryBuilder[T]) WithoutFilter(name string) *QueryBuilder[T]
WithoutFilter returns a new builder with the named filter removed.
type QueryEvent ¶
QueryEvent contains information about an executed query.
type QueryHook ¶
type QueryHook func(ctx context.Context, event QueryEvent)
QueryHook is called after every query execution.
type RawExpr ¶
type RawExpr struct {
SQL string
}
RawExpr represents a raw SQL expression to embed in a query (e.g., NOW()).
type Relation ¶
type Relation[T any] struct { // contains filtered or unexported fields }
func NewRelation ¶
type RelationInfo ¶
type RelationInfo struct {
Name string
Type RelationType
FKColumn string
JoinTable string // pivot table name (many-to-many only)
RefColumn string // target FK column in pivot table (many-to-many only)
RelatedMeta *ModelMetaBase
FieldSetter func(parent any, related any)
}
RelationInfo describes a relationship between two models.
type RelationType ¶
type RelationType int
RelationType describes the kind of relationship between two models.
const ( // HasMany indicates the parent has many related entities (1:N). HasMany RelationType = iota // HasOne indicates the parent has one related entity (1:1). HasOne // BelongsTo indicates the entity references a parent via a foreign key. BelongsTo // ManyToMany indicates a many-to-many relationship via a pivot table. ManyToMany )
type Repository ¶
type Repository[T any] struct { // contains filtered or unexported fields }
Repository provides typed query access for a specific model.
func NewRepository ¶
func NewRepository[T any](engine *Engine, meta ModelMeta[T]) *Repository[T]
NewRepository creates a new Repository for the given model metadata.
func (*Repository[T]) All ¶
func (r *Repository[T]) All(ctx context.Context) ([]*T, error)
All returns all records for this model.
func (*Repository[T]) BulkInsert ¶
func (r *Repository[T]) BulkInsert(ctx context.Context, entities []*T) (int, error)
BulkInsert inserts multiple entities in batches, bypassing change tracking. Returns the total number of rows affected.
func (*Repository[T]) BulkUpsert ¶
func (r *Repository[T]) BulkUpsert(ctx context.Context, entities []*T, opts ...UpsertOption) (int, error)
func (*Repository[T]) Count ¶
func (r *Repository[T]) Count(ctx context.Context) (int, error)
Count returns the total number of records for this model.
func (*Repository[T]) Exists ¶
func (r *Repository[T]) Exists(ctx context.Context) (bool, error)
Exists returns true if any records exist for this model.
func (*Repository[T]) Find ¶
func (r *Repository[T]) Find(ctx context.Context, id any) (*T, error)
Find looks up a single record by its primary key.
func (*Repository[T]) First ¶
func (r *Repository[T]) First(ctx context.Context) (*T, error)
First returns the first record or ErrNotFound.
func (*Repository[T]) FirstOrNil ¶
func (r *Repository[T]) FirstOrNil(ctx context.Context) (*T, error)
FirstOrNil returns the first record or nil.
func (*Repository[T]) Include ¶
func (r *Repository[T]) Include(rels ...IncludeSpec) *IncludableQuery[T]
Include begins a query that will eagerly load the given relationships.
func (*Repository[T]) Limit ¶
func (r *Repository[T]) Limit(n int) *QueryBuilder[T]
Limit starts a query with a row limit.
func (*Repository[T]) OrderBy ¶
func (r *Repository[T]) OrderBy(exprs ...OrderExpr) *QueryBuilder[T]
OrderBy starts an ordered query.
func (*Repository[T]) Unscoped ¶
func (r *Repository[T]) Unscoped() *QueryBuilder[T]
Unscoped returns a query builder with all global filters removed.
func (*Repository[T]) Where ¶
func (r *Repository[T]) Where(pred Predicate) *QueryBuilder[T]
Where starts a filtered query.
func (*Repository[T]) WithoutFilter ¶
func (r *Repository[T]) WithoutFilter(name string) *QueryBuilder[T]
WithoutFilter returns a query builder with the named filter removed.
type SoftDelete ¶
type SoftDelete struct {
// contains filtered or unexported fields
}
func (SoftDelete) DeletedAt ¶
func (s SoftDelete) DeletedAt() *time.Time
func (*SoftDelete) DeletedAtPtr ¶
func (s *SoftDelete) DeletedAtPtr() **time.Time
func (SoftDelete) IsDeleted ¶
func (s SoftDelete) IsDeleted() bool
type StringColumn ¶
type StringColumn struct {
// contains filtered or unexported fields
}
func NewStringCol ¶
func NewStringCol(name string) StringColumn
func (StringColumn) Asc ¶
func (c StringColumn) Asc() OrderExpr
func (StringColumn) Contains ¶
func (c StringColumn) Contains(substr string) Predicate
func (StringColumn) Desc ¶
func (c StringColumn) Desc() OrderExpr
func (StringColumn) Eq ¶
func (c StringColumn) Eq(v string) Predicate
func (StringColumn) GT ¶
func (c StringColumn) GT(v string) Predicate
func (StringColumn) GTE ¶
func (c StringColumn) GTE(v string) Predicate
func (StringColumn) HasPrefix ¶
func (c StringColumn) HasPrefix(prefix string) Predicate
func (StringColumn) HasSuffix ¶
func (c StringColumn) HasSuffix(suffix string) Predicate
func (StringColumn) ILike ¶
func (c StringColumn) ILike(pattern string) Predicate
func (StringColumn) In ¶
func (c StringColumn) In(vs ...string) Predicate
func (StringColumn) IsNotNull ¶
func (c StringColumn) IsNotNull() Predicate
func (StringColumn) IsNull ¶
func (c StringColumn) IsNull() Predicate
func (StringColumn) LT ¶
func (c StringColumn) LT(v string) Predicate
func (StringColumn) LTE ¶
func (c StringColumn) LTE(v string) Predicate
func (StringColumn) Like ¶
func (c StringColumn) Like(pattern string) Predicate
func (StringColumn) NEQ ¶
func (c StringColumn) NEQ(v string) Predicate
func (StringColumn) Name ¶
func (c StringColumn) Name() string
func (StringColumn) NotIn ¶
func (c StringColumn) NotIn(vs ...string) Predicate
type Tx ¶
type Tx struct {
// contains filtered or unexported fields
}
Tx represents an active database transaction with change tracking.
func (*Tx) HardRemove ¶
HardRemove marks a tracked entity for permanent (hard) deletion on the next flush, bypassing soft delete even when the model supports it.
type TxOption ¶
type TxOption func(*txConfig)
TxOption configures transaction behaviour.
func WithIsolation ¶
func WithIsolation(level IsolationLevel) TxOption
WithIsolation sets the isolation level for the transaction.
type TxQueryBuilder ¶
type TxQueryBuilder[T any] struct { // contains filtered or unexported fields }
TxQueryBuilder constructs and executes typed queries within a transaction.
func (*TxQueryBuilder[T]) All ¶
func (q *TxQueryBuilder[T]) All(ctx context.Context) ([]*T, error)
All executes the query and returns all matching results.
func (*TxQueryBuilder[T]) Count ¶
func (q *TxQueryBuilder[T]) Count(ctx context.Context) (int, error)
Count returns the number of matching rows.
func (*TxQueryBuilder[T]) Exists ¶
func (q *TxQueryBuilder[T]) Exists(ctx context.Context) (bool, error)
Exists returns true if at least one matching row exists.
func (*TxQueryBuilder[T]) First ¶
func (q *TxQueryBuilder[T]) First(ctx context.Context) (*T, error)
First returns the first matching result or ErrNotFound if none exist.
func (*TxQueryBuilder[T]) FirstOrNil ¶
func (q *TxQueryBuilder[T]) FirstOrNil(ctx context.Context) (*T, error)
FirstOrNil returns the first matching result or nil if none exist.
func (*TxQueryBuilder[T]) Limit ¶
func (q *TxQueryBuilder[T]) Limit(n int) *TxQueryBuilder[T]
Limit restricts the number of results returned.
func (*TxQueryBuilder[T]) OrderBy ¶
func (q *TxQueryBuilder[T]) OrderBy(exprs ...OrderExpr) *TxQueryBuilder[T]
OrderBy sets the ordering for the query.
func (*TxQueryBuilder[T]) Skip ¶
func (q *TxQueryBuilder[T]) Skip(n int) *TxQueryBuilder[T]
Skip sets the offset for the query (number of rows to skip).
func (*TxQueryBuilder[T]) Unscoped ¶
func (q *TxQueryBuilder[T]) Unscoped() *TxQueryBuilder[T]
Unscoped returns a new builder with all global filters removed.
func (*TxQueryBuilder[T]) Where ¶
func (q *TxQueryBuilder[T]) Where(pred Predicate) *TxQueryBuilder[T]
Where adds a filter predicate. Multiple calls are ANDed together.
func (*TxQueryBuilder[T]) WithoutFilter ¶
func (q *TxQueryBuilder[T]) WithoutFilter(name string) *TxQueryBuilder[T]
WithoutFilter returns a new builder with the named filter removed.
type TxRepository ¶
type TxRepository[T any] struct { // contains filtered or unexported fields }
TxRepository provides tracked query and mutation access within a transaction.
func NewTxRepository ¶
func NewTxRepository[T any](tx *Tx, meta ModelMeta[T]) *TxRepository[T]
NewTxRepository creates a new TxRepository for the given transaction and model metadata.
func (*TxRepository[T]) Add ¶
func (r *TxRepository[T]) Add(entity *T)
Add marks an entity for insertion on the next flush.
func (*TxRepository[T]) All ¶
func (r *TxRepository[T]) All(ctx context.Context) ([]*T, error)
All returns all records for this model within the transaction.
func (*TxRepository[T]) Find ¶
func (r *TxRepository[T]) Find(ctx context.Context, id any) (*T, error)
Find looks up a single record by primary key and begins tracking it.
func (*TxRepository[T]) Remove ¶
func (r *TxRepository[T]) Remove(entity *T) error
Remove marks a tracked entity for deletion on the next flush.
func (*TxRepository[T]) Unscoped ¶
func (r *TxRepository[T]) Unscoped() *TxQueryBuilder[T]
Unscoped returns a query builder with all global filters removed.
func (*TxRepository[T]) Where ¶
func (r *TxRepository[T]) Where(pred Predicate) *TxQueryBuilder[T]
Where starts a filtered query within the transaction.
func (*TxRepository[T]) WithoutFilter ¶
func (r *TxRepository[T]) WithoutFilter(name string) *TxQueryBuilder[T]
WithoutFilter returns a query builder with the named filter removed.
type UpsertOption ¶
type UpsertOption func(*upsertConfig)
UpsertOption configures BulkUpsert behavior.
func ConflictColumns ¶
func ConflictColumns[C interface{ Name() string }](cols ...C) UpsertOption
ConflictColumns specifies which columns form the conflict target for an upsert.
func UpdateOnConflict ¶
func UpdateOnConflict[C interface{ Name() string }](cols ...C) UpsertOption
UpdateOnConflict specifies which columns to update when a conflict is detected.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
drel
command
|
|
|
examples
|
|
|
api
command
Example: api
|
Example: api |
|
bulk-ops
command
Example: bulk-ops
|
Example: bulk-ops |
|
getting-started
command
Example: getting-started
|
Example: getting-started |
|
internals
command
Example: internals
|
Example: internals |
|
model-features
command
Example: model-features
|
Example: model-features |
|
multi-model
command
Example: multi-model
|
Example: multi-model |
|
relationships
command
Example: relationships
|
Example: relationships |
|
internal
|
|