Documentation
¶
Overview ¶
Package velox provides core interfaces and types for defining entity schemas in the Velox ORM framework.
Velox is a type-safe Go ORM framework with integrated code generation for GraphQL and gRPC services. It generates production-ready database access code, GraphQL schemas/resolvers, and gRPC proto definitions from declarative schema definitions written in Go.
Schema Definition ¶
To define a schema, embed the Schema type in your entity struct:
type User struct {
velox.Schema
}
func (User) Fields() []velox.Field {
return []velox.Field{
field.String("name"),
field.String("email").Unique(),
}
}
func (User) Edges() []velox.Edge {
return []velox.Edge{
edge.To("posts", Post.Type),
}
}
Core Interfaces ¶
The package defines several core interfaces:
- Field - Describes a field/property of an entity
- Edge - Describes a relationship between entities
- Index - Describes a database index
- Mixin - Provides reusable schema components
- Hook - Defines mutation lifecycle middleware
- Interceptor - Defines query middleware
- Policy - Defines privacy/authorization policies
Mutation Operations ¶
The Mutation interface represents operations that modify the graph:
hook := func(next velox.Mutator) velox.Mutator {
return velox.MutateFunc(func(ctx context.Context, m velox.Mutation) (velox.Value, error) {
fmt.Printf("Type: %s, Op: %s\n", m.Type(), m.Op())
return next.Mutate(ctx, m)
})
}
Query Operations ¶
The Querier and Interceptor interfaces enable query middleware:
interceptor := velox.InterceptFunc(func(next velox.Querier) velox.Querier {
return velox.QuerierFunc(func(ctx context.Context, q velox.Query) (velox.Value, error) {
// Pre-query logic
value, err := next.Query(ctx, q)
// Post-query logic
return value, err
})
})
Privacy Policies ¶
Implement Policy to add authorization rules:
func (User) Policy() velox.Policy {
return privacy.Policy{
Query: privacy.QueryPolicy{privacy.AlwaysAllowQueryRule()},
Mutation: privacy.MutationPolicy{privacy.DenyIfNoViewer()},
}
}
Index ¶
- Constants
- Variables
- func IsConstraintError(err error) bool
- func IsMutationError(err error) bool
- func IsNotFound(err error) bool
- func IsNotLoaded(err error) bool
- func IsNotSingular(err error) bool
- func IsPrivacyError(err error) bool
- func IsQueryError(err error) bool
- func IsValidationError(err error) bool
- func NewAggregateError(errs ...error) error
- func NewConstraintError(msg string, wrap error) error
- func NewQueryContext(parent context.Context, c *QueryContext) context.Context
- type AggregateError
- type Cache
- type CacheKey
- type Configdeprecated
- type ConstraintError
- type Edge
- type Field
- type Hook
- type Index
- type InterceptFunc
- type Interceptor
- type Interface
- type Mixin
- type MutateFunc
- type Mutation
- type MutationError
- type Mutator
- type NotFoundError
- type NotLoadedError
- type NotSingularError
- type Op
- type Policy
- type PrivacyError
- type Querier
- type QuerierFunc
- type Query
- type QueryContext
- type QueryError
- type RollbackError
- type Schema
- func (Schema) Annotations() []schema.Annotation
- func (Schema) Config() Config
- func (Schema) Edges() []Edge
- func (Schema) Fields() []Field
- func (Schema) Hooks() []Hook
- func (Schema) Indexes() []Index
- func (Schema) Interceptors() []Interceptor
- func (Schema) Mixin() []Mixin
- func (Schema) Policy() Policy
- type TraverseFunc
- type Traverser
- type ValidationError
- type Value
- type View
- type Viewer
Constants ¶
const ( OpQueryFirst = "First" OpQueryFirstID = "FirstID" OpQueryOnly = "Only" OpQueryOnlyID = "OnlyID" OpQueryAll = "All" OpQueryIDs = "IDs" OpQueryCount = "Count" OpQueryExist = "Exist" OpQueryGroupBy = "GroupBy" OpQuerySelect = "Select" )
List of query operations used by the codegen.
Variables ¶
var ( // ErrNotFound is returned when a requested entity does not exist. ErrNotFound = errors.New("velox: entity not found") // ErrNotSingular is returned when a query that expects exactly one result // returns zero or multiple results. ErrNotSingular = errors.New("velox: entity not singular") // ErrTxStarted is returned when attempting to start a new transaction // within an existing transaction. ErrTxStarted = errors.New("velox: cannot start a transaction within a transaction") )
Standard sentinel errors for common operations.
Functions ¶
func IsConstraintError ¶
IsConstraintError returns true if the error is a ConstraintError.
func IsMutationError ¶
IsMutationError returns true if the error is a MutationError.
func IsNotFound ¶
IsNotFound returns true if the error is a NotFoundError.
func IsNotLoaded ¶
IsNotLoaded returns true if the error is a NotLoadedError.
func IsNotSingular ¶
IsNotSingular returns true if the error is a NotSingularError.
func IsPrivacyError ¶
IsPrivacyError returns true if the error is a PrivacyError.
func IsQueryError ¶
IsQueryError returns true if the error is a QueryError.
func IsValidationError ¶
IsValidationError returns true if the error is a ValidationError.
func NewAggregateError ¶
NewAggregateError returns a new AggregateError if there are errors, otherwise returns nil.
func NewConstraintError ¶
NewConstraintError returns a new ConstraintError with the given message.
func NewQueryContext ¶
func NewQueryContext(parent context.Context, c *QueryContext) context.Context
NewQueryContext returns a new context with the given QueryContext attached.
Types ¶
type AggregateError ¶
type AggregateError struct {
Errors []error
}
AggregateError represents multiple errors collected during an operation.
func (*AggregateError) Error ¶
func (e *AggregateError) Error() string
Error returns the error string.
type Cache ¶
type Cache interface {
// Get retrieves a value from the cache.
// Returns nil, nil if the key doesn't exist.
Get(ctx context.Context, key string) ([]byte, error)
// Set stores a value in the cache with an optional TTL.
// If ttl is 0, the value should not expire.
Set(ctx context.Context, key string, value []byte, ttl time.Duration) error
// Delete removes a value from the cache.
Delete(ctx context.Context, key string) error
// DeletePrefix removes all values with the given prefix.
DeletePrefix(ctx context.Context, prefix string) error
// Clear removes all values from the cache.
Clear(ctx context.Context) error
}
Cache is the interface for caching query results. Users should implement this interface with their preferred caching solution (e.g., Redis, Memcached, in-memory).
type CacheKey ¶
type CacheKey struct {
Table string
Operation string
Predicates string
OrderBy string
Limit int
Offset int
}
CacheKey generates a cache key for a query.
type Config
deprecated
type Config struct {
// A Table is an optional table name defined for the schema.
Table string
}
A Config structure is used to configure an entity schema. The usage of this structure is as follows:
func (T) Config() velox.Config {
return velox.Config{
Table: "Name",
}
}
Deprecated: the Config object predates the schema.Annotation method and it is planned to be removed in future versions. New code should use Annotations instead.
func (T) Annotations() []schema.Annotation {
return []schema.Annotation{
sqlschema.Annotation{Table: "Name"},
}
}
type ConstraintError ¶
type ConstraintError struct {
// contains filtered or unexported fields
}
ConstraintError represents a database constraint violation error.
func (ConstraintError) Error ¶
func (e ConstraintError) Error() string
Error returns the error string.
func (ConstraintError) Unwrap ¶
func (e ConstraintError) Unwrap() error
Unwrap returns the underlying error.
type Edge ¶
type Edge interface {
Descriptor() *edge.Descriptor
}
An Edge interface returns an edge descriptor for vertex edges. The usage for the interface is as follows:
func (T) Edges() []velox.Edge {
return []velox.Edge{
edge.To("S", S.Type),
}
}
type Field ¶
type Field interface {
Descriptor() *field.Descriptor
}
A Field interface returns a field descriptor for vertex fields/properties. The usage for the interface is as follows:
func (T) Fields() []velox.Field {
return []velox.Field{
field.Int("int"),
}
}
type Hook ¶
Hook defines the "mutation middleware". A function that gets a Mutator and returns a Mutator. For example:
hook := func(next velox.Mutator) velox.Mutator {
return velox.MutateFunc(func(ctx context.Context, m velox.Mutation) (velox.Value, error) {
fmt.Printf("Type: %s, Operation: %s, ConcreteType: %T\n", m.Type(), m.Op(), m)
return next.Mutate(ctx, m)
})
}
type Index ¶
type Index interface {
Descriptor() *index.Descriptor
}
An Index interface returns an index descriptor for vertex indexes. The usage for the interface is as follows:
func (T) Indexes() []velox.Index {
return []velox.Index{
index.Fields("f1", "f2").
Unique(),
}
}
type InterceptFunc ¶
The InterceptFunc type is an adapter to allow the use of ordinary function as Interceptor. If f is a function with the appropriate signature, InterceptFunc(f) is an Interceptor that calls f.
func (InterceptFunc) Intercept ¶
func (f InterceptFunc) Intercept(next Querier) Querier
Intercept calls f(ctx, q).
type Interceptor ¶
type Interceptor interface {
// Intercept is a function that gets a Querier and returns a Querier. For example:
//
// velox.InterceptFunc(func(next velox.Querier) velox.Querier {
// return velox.QuerierFunc(func(ctx context.Context, query velox.Query) (velox.Value, error) {
// // Do something before the query execution.
// value, err := next.Query(ctx, query)
// // Do something after the query execution.
// return value, err
// })
// })
//
// Note that unlike Traverse functions, which are called at each traversal stage, Intercept functions
// are invoked before the query executions. This means that using Traverse functions is a better fit
// for adding default filters, while using Intercept functions is a better fit for implementing logging
// or caching.
//
//
// client.User.Query().
// QueryGroups(). // User traverse functions applied.
// QueryPosts(). // Group traverse functions applied.
// All(ctx) // Post traverse and intercept functions applied.
//
Intercept(Querier) Querier
}
Interceptor defines an execution middleware for various types of Ent queries. Contrary to Hooks, Interceptors are implemented as interfaces, allows them to intercept and modify the query at different stages, providing more fine-grained control over its behavior. For example, see the Traverser interface.
type Interface ¶
type Interface interface {
// Type is a dummy method, that is used in edge declaration.
//
// The Type method should be used as follows:
//
// type S struct { velox.Schema }
//
// type T struct { velox.Schema }
//
// func (T) Edges() []velox.Edge {
// return []velox.Edge{
// edge.To("S", S.Type),
// }
// }
//
Type()
// Fields returns the fields of the schema.
Fields() []Field
// Edges returns the edges of the schema.
Edges() []Edge
// Indexes returns the indexes of the schema.
Indexes() []Index
// Config returns an optional config for the schema.
//
// Deprecated: the Config method predates the Annotations method, and it
// is planned be removed in v0.5.0. New code should use Annotations instead.
//
// func (T) Annotations() []schema.Annotation {
// return []schema.Annotation{
// sqlschema.Annotation{Table: "Name"},
// }
// }
//
Config() Config
// Mixin returns an optional list of Mixin to extends
// the schema.
Mixin() []Mixin
// Hooks returns an optional list of Hook to apply on
// the executed mutations.
Hooks() []Hook
// Interceptors returns an optional list of Interceptor
// to apply on the executed queries.
Interceptors() []Interceptor
// Policy returns the privacy policy of the schema.
Policy() Policy
// Annotations returns a list of schema annotations to be used by
// codegen extensions.
Annotations() []schema.Annotation
}
The Interface type describes the requirements for an exported type defined in the schema package. It functions as the interface between the user's schema types and codegen loader. Users should use the Schema type for embedding as follows:
type T struct {
velox.Schema
}
type Mixin ¶
type Mixin interface {
// Fields returns a slice of fields to add to the schema.
Fields() []Field
// Edges returns a slice of edges to add to the schema.
Edges() []Edge
// Indexes returns a slice of indexes to add to the schema.
Indexes() []Index
// Hooks returns a slice of hooks to add to the schema.
// Note that mixin hooks are executed before schema hooks.
Hooks() []Hook
// Interceptors returns a slice of interceptors to add to the schema.
// Note that mixin interceptors are executed before schema interceptors.
Interceptors() []Interceptor
// Policy returns a privacy policy to add to the schema.
// Note that mixin policy are executed before schema policy.
Policy() Policy
// Annotations returns a list of schema annotations to add
// to the schema annotations.
Annotations() []schema.Annotation
}
The Mixin type describes a set of methods that can extend other methods in the schema without calling them directly.
type TimeMixin struct {}
func (TimeMixin) Fields() []velox.Field {
return []velox.Field{
field.Time("created_at").
Immutable().
Default(time.Now),
field.Time("updated_at").
Default(time.Now).
UpdateDefault(time.Now),
}
}
type T struct {
velox.Schema
}
func(T) Mixin() []velox.Mixin {
return []velox.Mixin{
TimeMixin{},
}
}
type MutateFunc ¶
The MutateFunc type is an adapter to allow the use of ordinary function as Mutator. If f is a function with the appropriate signature, MutateFunc(f) is a Mutator that calls f.
type Mutation ¶
type Mutation interface {
// Op returns the operation name generated by velox.
Op() Op
// Type returns the schema type for this mutation.
Type() string
// Fields returns all fields that were changed during
// this mutation. Note that, in order to get all numeric
// fields that were in/decremented, call AddedFields().
Fields() []string
// Field returns the value of a field with the given name.
// The second boolean value indicates that this field was
// not set, or was not defined in the schema.
Field(name string) (Value, bool)
// SetField sets the value for the given name. It returns an
// error if the field is not defined in the schema, or if the
// type mismatch the field type.
SetField(name string, value Value) error
// AddedFields returns all numeric fields that were incremented
// or decremented during this mutation.
AddedFields() []string
// AddedField returns the numeric value that was in/decremented
// from a field with the given name. The second value indicates
// that this field was not set, or was not define in the schema.
AddedField(name string) (Value, bool)
// AddField adds the value for the given name. It returns an
// error if the field is not defined in the schema, or if the
// type mismatch the field type.
AddField(name string, value Value) error
// ClearedFields returns all nullable fields that were cleared
// during this mutation.
ClearedFields() []string
// FieldCleared returns a bool indicates if this field was
// cleared in this mutation.
FieldCleared(name string) bool
// ClearField clears the value for the given name. It returns an
// error if the field is not defined in the schema.
ClearField(name string) error
// ResetField resets all changes in the mutation regarding the
// given field name. It returns an error if the field is not
// defined in the schema.
ResetField(name string) error
// AddedEdges returns all edge names that were set/added in this
// mutation.
AddedEdges() []string
// AddedIDs returns all ids (to other nodes) that were added for
// the given edge name.
AddedIDs(name string) []Value
// RemovedEdges returns all edge names that were removed in this
// mutation.
RemovedEdges() []string
// RemovedIDs returns all ids (to other nodes) that were removed for
// the given edge name.
RemovedIDs(name string) []Value
// ClearedEdges returns all edge names that were cleared in this
// mutation.
ClearedEdges() []string
// EdgeCleared returns a bool indicates if this edge was
// cleared in this mutation.
EdgeCleared(name string) bool
// ClearEdge clears the value for the given name. It returns an
// error if the edge name is not defined in the schema.
ClearEdge(name string) error
// ResetEdge resets all changes in the mutation regarding the
// given edge name. It returns an error if the edge is not
// defined in the schema.
ResetEdge(name string) error
// OldField returns the old value of the field from the database.
// An error is returned if the mutation operation is not UpdateOne,
// or the query to the database was failed.
OldField(ctx context.Context, name string) (Value, error)
}
Mutation represents an operation that mutate the graph. For example, adding a new node, updating many, or dropping data. The implementation is generated by velox.
type MutationError ¶
type MutationError struct {
Entity string // Entity type being mutated
Op string // Operation (e.g., "create", "update", "delete")
Err error // Underlying error
}
MutationError wraps a mutation error with additional context.
func NewMutationError ¶
func NewMutationError(entity, op string, err error) *MutationError
NewMutationError returns a new MutationError.
func (*MutationError) Error ¶
func (e *MutationError) Error() string
Error returns the error string.
func (*MutationError) Unwrap ¶
func (e *MutationError) Unwrap() error
Unwrap returns the underlying error.
type Mutator ¶
type Mutator interface {
// Mutate apply the given mutation on the graph. The returned
// velox.Value is changing according to the mutation operation:
//
// OpCreate, the returned value is the created node (T).
// OpUpdateOne, the returned value is the updated node (T).
// OpUpdate, the returned value is the amount of updated nodes (int).
// OpDeleteOne, OpDelete, the returned value is the amount of deleted nodes (int).
//
Mutate(context.Context, Mutation) (Value, error)
}
Mutator is the interface that wraps the Mutate method.
type NotFoundError ¶
type NotFoundError struct {
// contains filtered or unexported fields
}
NotFoundError represents an error when an entity is not found.
func NewNotFoundError ¶
func NewNotFoundError(label string) *NotFoundError
NewNotFoundError returns a new NotFoundError for the given entity type.
func NewNotFoundErrorWithID ¶
func NewNotFoundErrorWithID(label string, id any) *NotFoundError
NewNotFoundErrorWithID returns a new NotFoundError with the ID that was searched for.
func (*NotFoundError) Error ¶
func (e *NotFoundError) Error() string
Error returns the error string.
func (*NotFoundError) ID ¶
func (e *NotFoundError) ID() any
ID returns the ID that was searched for, if available.
func (*NotFoundError) Is ¶
func (e *NotFoundError) Is(err error) bool
Is reports whether the target error matches NotFoundError. This allows errors.Is(notFoundErr, ErrNotFound) to return true.
func (*NotFoundError) Label ¶
func (e *NotFoundError) Label() string
Label returns the entity label.
type NotLoadedError ¶
type NotLoadedError struct {
// contains filtered or unexported fields
}
NotLoadedError represents an error when attempting to access an edge that was not loaded (eager-loaded).
func NewNotLoadedError ¶
func NewNotLoadedError(edge string) *NotLoadedError
NewNotLoadedError returns a new NotLoadedError for the given edge name.
func (*NotLoadedError) Error ¶
func (e *NotLoadedError) Error() string
Error returns the error string.
type NotSingularError ¶
type NotSingularError struct {
// contains filtered or unexported fields
}
NotSingularError represents an error when a query expects a singular result but receives zero or multiple results.
func NewNotSingularError ¶
func NewNotSingularError(label string) *NotSingularError
NewNotSingularError returns a new NotSingularError for the given entity type.
func NewNotSingularErrorWithCount ¶
func NewNotSingularErrorWithCount(label string, count int) *NotSingularError
NewNotSingularErrorWithCount returns a new NotSingularError with the result count.
func (*NotSingularError) Count ¶
func (e *NotSingularError) Count() int
Count returns the number of results, or -1 if unknown.
func (*NotSingularError) Error ¶
func (e *NotSingularError) Error() string
Error returns the error string.
func (*NotSingularError) Is ¶
func (e *NotSingularError) Is(err error) bool
Is reports whether the target error matches NotSingularError. This allows errors.Is(notSingularErr, ErrNotSingular) to return true.
func (*NotSingularError) Label ¶
func (e *NotSingularError) Label() string
Label returns the entity label.
type Op ¶
type Op uint
An Op represents a mutation operation.
type Policy ¶
type Policy interface {
EvalMutation(context.Context, Mutation) error
EvalQuery(context.Context, Query) error
}
The Policy type defines the privacy policy of an entity. The usage for the interface is as follows:
type T struct {
velox.Schema
}
func(T) Policy() velox.Policy {
return privacy.AlwaysAllowRule()
}
type PrivacyError ¶
type PrivacyError struct {
Entity string // Entity type
Op string // Operation (query or mutation)
Rule string // Rule that denied the operation
}
PrivacyError represents a privacy policy violation.
func NewPrivacyError ¶
func NewPrivacyError(entity, op, rule string) *PrivacyError
NewPrivacyError returns a new PrivacyError.
type Querier ¶
type Querier interface {
// Query runs the given query on the graph and returns its result.
Query(context.Context, Query) (Value, error)
}
Querier is the interface that wraps the Query method. Calling Querier.Query(velox.Query) triggers the execution of the query.
type QuerierFunc ¶
The QuerierFunc type is an adapter to allow the use of ordinary function as Querier. If f is a function with the appropriate signature, QuerierFunc(f) is a Querier that calls f.
type Query ¶
type Query any
Query represents a query builder of an entity. It is usually one of the following types: <T>Query.
type QueryContext ¶
type QueryContext struct {
// Op defines the operation name. e.g., First, All, Count, etc.
Op string
// Type defines the query type as defined in the generated code.
Type string
// Unique indicates if the Unique modifier was set on the query and
// its value. Calling Unique(false) sets the value of Unique to false.
Unique *bool
// Limit indicates if the Limit modifier was set on the query and
// its value. Calling Limit(10) sets the value of Limit to 10.
Limit *int
// Offset indicates if the Offset modifier was set on the query and
// its value. Calling Offset(10) sets the value of Offset to 10.
Offset *int
// Fields specifies the fields that were selected in the query.
Fields []string
}
QueryContext contains additional information about the context in which the query is executed.
func QueryFromContext ¶
func QueryFromContext(ctx context.Context) *QueryContext
QueryFromContext returns the QueryContext value stored in ctx, if any.
func (*QueryContext) AppendFieldOnce ¶
func (q *QueryContext) AppendFieldOnce(f string) *QueryContext
AppendFieldOnce adds the given field to the spec if it is not already present.
func (*QueryContext) Clone ¶
func (q *QueryContext) Clone() *QueryContext
Clone returns a deep copy of the query context.
type QueryError ¶
type QueryError struct {
Entity string // Entity type being queried
Op string // Operation (e.g., "select", "count", "exist")
Err error // Underlying error
}
QueryError wraps a query error with additional context.
func NewQueryError ¶
func NewQueryError(entity, op string, err error) *QueryError
NewQueryError returns a new QueryError.
func (*QueryError) Unwrap ¶
func (e *QueryError) Unwrap() error
Unwrap returns the underlying error.
type RollbackError ¶
type RollbackError struct {
Err error // Original error that triggered rollback
}
RollbackError wraps an error that occurred during a transaction rollback.
func (*RollbackError) Error ¶
func (e *RollbackError) Error() string
Error returns the error string.
func (*RollbackError) Unwrap ¶
func (e *RollbackError) Unwrap() error
Unwrap returns the underlying error.
type Schema ¶
type Schema struct {
Interface
}
Schema is the default implementation for the schema Interface. It can be embedded in end-user schemas as follows:
type T struct {
velox.Schema
}
func (Schema) Annotations ¶
func (Schema) Annotations() []schema.Annotation
Annotations of the schema.
type TraverseFunc ¶
The TraverseFunc type is an adapter to allow the use of ordinary function as Traverser. If f is a function with the appropriate signature, TraverseFunc(f) is a Traverser that calls f.
func (TraverseFunc) Intercept ¶
func (f TraverseFunc) Intercept(next Querier) Querier
Intercept is a dummy implementation of Intercept that returns the next Querier in the pipeline.
type Traverser ¶
Traverser defines a graph-traversal middleware for various types of Ent queries. Contrary to Interceptors, the Traverse are executed on graph traversals before the query is executed. For example:
velox.TraverseFunc(func(ctx context.Context, q velox.Query) error {
// Filter out deleted pets.
if pq, ok := q.(*gen.PetQuery); ok {
pq.Where(pet.DeletedAtIsNil())
}
return nil
})
client.Pet.Query().
QueryOwner(). // Pet traverse functions are applied and filter deleted pets.
All(ctx) // User traverse and interceptor functions are applied.
type ValidationError ¶
type ValidationError struct {
Name string // Field or entity name
Err error // Underlying validation error
}
ValidationError represents a validation error for field values.
func NewValidationError ¶
func NewValidationError(name string, err error) *ValidationError
NewValidationError returns a new ValidationError for the given field.
func (*ValidationError) Error ¶
func (e *ValidationError) Error() string
Error returns the error string.
func (*ValidationError) Unwrap ¶
func (e *ValidationError) Unwrap() error
Unwrap returns the underlying error.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package compiler provides the Velox code generation API.
|
Package compiler provides the Velox code generation API. |
|
gen
Package gen provides code generation for Velox ORM schemas.
|
Package gen provides code generation for Velox ORM schemas. |
|
gen/cmd/testgen
command
testgen is a simple test program to demonstrate the Jennifer-based code generator.
|
testgen is a simple test program to demonstrate the Jennifer-based code generator. |
|
gen/sql
Package sql provides SQL dialect code generation for the Jennifer generator.
|
Package sql provides SQL dialect code generation for the Jennifer generator. |
|
load
Package load is the interface for loading a velox/schema package into a Go program.
|
Package load is the interface for loading a velox/schema package into a Go program. |
|
contrib
|
|
|
dataloader
Package dataloader provides generic DataLoader utilities for batch loading entities.
|
Package dataloader provides generic DataLoader utilities for batch loading entities. |
|
graphql
Package graphql provides GraphQL code generation for Velox schemas.
|
Package graphql provides GraphQL code generation for Velox schemas. |
|
mixin
Package mixin provides common mixin implementations for Velox schemas.
|
Package mixin provides common mixin implementations for Velox schemas. |
|
Package dialect provides database dialect abstraction for Velox ORM.
|
Package dialect provides database dialect abstraction for Velox ORM. |
|
sql
Package sql provides wrappers around the standard database/sql package to allow the generated code to interact with a statically-typed API.
|
Package sql provides wrappers around the standard database/sql package to allow the generated code to interact with a statically-typed API. |
|
sql/schema
Package schema contains all schema migration logic for SQL dialects.
|
Package schema contains all schema migration logic for SQL dialects. |
|
sql/sqlgraph
Package sqlgraph provides graph abstraction capabilities on top of sql-based databases for ent codegen.
|
Package sqlgraph provides graph abstraction capabilities on top of sql-based databases for ent codegen. |
|
sqlschema
Package sqlschema provides SQL-specific annotations for Velox schemas.
|
Package sqlschema provides SQL-specific annotations for Velox schemas. |
|
examples
|
|
|
basic/schema
Package schema defines the entity schemas for the basic example.
|
Package schema defines the entity schemas for the basic example. |
|
Package graph provides the internal schema representation for Velox ORM code generation.
|
Package graph provides the internal schema representation for Velox ORM code generation. |
|
Package privacy provides privacy layer types and rule implementations for Velox ORM.
|
Package privacy provides privacy layer types and rule implementations for Velox ORM. |
|
Package entql provides an experimental API for interacting dynamically with ent queries.
|
Package entql provides an experimental API for interacting dynamically with ent queries. |
|
internal
command
A codegen cmd for generating builder types from template.
|
A codegen cmd for generating builder types from template. |
|
Package schema provides the building blocks for defining Velox entity schemas.
|
Package schema provides the building blocks for defining Velox entity schemas. |
|
edge
Package edge provides fluent builders for defining entity relationships in Velox ORM.
|
Package edge provides fluent builders for defining entity relationships in Velox ORM. |
|
field
Package field provides fluent builders for defining entity fields in Velox ORM.
|
Package field provides fluent builders for defining entity fields in Velox ORM. |
|
field/internal
command
gen is a codegen cmd for generating numeric build types from template.
|
gen is a codegen cmd for generating numeric build types from template. |
|
mixin
Package mixin provides reusable schema components for Velox ORM.
|
Package mixin provides reusable schema components for Velox ORM. |