Documentation
¶
Index ¶
- Constants
- Variables
- func ArgsToExpression(querySQL string, from, to int, argIter iter.Seq[ArgWithPosition]) bob.Expression
- type AfterPreloader
- type ArgWithPosition
- type ExecQuery
- type Loadable
- type Loader
- type ModExecQuery
- type ModQuery
- type PreloadAs
- type PreloadExcept
- type PreloadOnly
- type PreloadOption
- type PreloadRel
- type PreloadSettings
- type PreloadSide
- type PreloadWhere
- type Preloadable
- type PreloadableQuery
- type Preloader
- type Query
- func (q Query[Q, T, Ts, Tr]) All(ctx context.Context, exec bob.Executor) (Ts, error)
- func (q Query[Q, T, Ts, Tr]) Clone() Query[Q, T, Ts, Tr]
- func (q Query[Q, T, Ts, Tr]) Cursor(ctx context.Context, exec bob.Executor) (scan.ICursor[T], error)
- func (q Query[Q, T, Ts, Tr]) One(ctx context.Context, exec bob.Executor) (T, error)
- type RelSetDetails
- type RelSetMapping
- type RelSide
- type RelWhere
- type Relationship
- func (r Relationship) Foreign() string
- func (r Relationship) ForeignPosition() int
- func (r Relationship) InsertEarly() bool
- func (r Relationship) IsRemovable() bool
- func (r Relationship) IsToMany() bool
- func (r Relationship) Local() string
- func (r Relationship) LocalPosition() int
- func (r Relationship) NeedsMany(position int) bool
- func (r Relationship) Validate() error
- func (r Relationship) ValuedSides() []RelSetDetails
- type RelationshipChainError
- type SchemaTable
- type Setter
Constants ¶
const ( // A schema to use when non was specified during generation CtxUseSchema ctxKey = iota )
Variables ¶
Functions ¶
func ArgsToExpression ¶ added in v0.32.0
func ArgsToExpression(querySQL string, from, to int, argIter iter.Seq[ArgWithPosition]) bob.Expression
Types ¶
type AfterPreloader ¶ added in v0.35.0
type AfterPreloader struct {
// contains filtered or unexported fields
}
AfterPreloader is embedded in a Preloader to chain loading whenever a preloaded object is scanned, it should be collected with the Collect method The loading functions should be added with AppendLoader later, when this object is called like any other bob.Loader, it calls the appended loaders with the collected objects
func NewAfterPreloader ¶ added in v0.35.0
func NewAfterPreloader[T any, Ts ~[]T]() *AfterPreloader
NewAfterPreloader returns a new AfterPreloader based on the given types
func (*AfterPreloader) AppendLoader ¶ added in v0.35.0
func (a *AfterPreloader) AppendLoader(fs ...bob.Loader)
func (*AfterPreloader) Collect ¶ added in v0.35.0
func (a *AfterPreloader) Collect(v any) error
type ArgWithPosition ¶ added in v0.32.0
type ArgWithPosition struct { Name string Start int Stop int Expression bob.Expression }
type ExecQuery ¶ added in v0.29.0
type ExecQuery[Q bob.Expression] struct { bob.BaseQuery[Q] Hooks *bob.Hooks[Q, bob.SkipQueryHooksKey] }
type Loader ¶ added in v0.35.0
Loader builds a query mod that makes an extra query after the object is retrieved it can be used to prevent N+1 queries by loading relationships in batches
func (Loader[Q]) Apply ¶ added in v0.35.0
func (l Loader[Q]) Apply(q Q)
Apply satisfies the bob.Mod[Q] interface
func (Loader[Q]) ModifyPreloadSettings ¶ added in v0.35.0
func (l Loader[Q]) ModifyPreloadSettings(s *PreloadSettings[Q])
modifyPreloader makes a Loader also work as a mod for a Preloader
type ModExecQuery ¶ added in v0.32.0
func (ModExecQuery[Q, E]) Apply ¶ added in v0.32.0
func (q ModExecQuery[Q, E]) Apply(e Q)
type ModQuery ¶ added in v0.32.0
type ModQuery[Q any, E bob.Expression, T, Ts any, Tr bob.Transformer[T, Ts]] struct { Query[E, T, Ts, Tr] Mod bob.Mod[Q] }
type PreloadAs ¶ added in v0.35.0
func (PreloadAs[Q]) ModifyPreloadSettings ¶ added in v0.35.0
func (o PreloadAs[Q]) ModifyPreloadSettings(el *PreloadSettings[Q])
type PreloadExcept ¶ added in v0.35.0
func (PreloadExcept[Q]) ModifyPreloadSettings ¶ added in v0.35.0
func (e PreloadExcept[Q]) ModifyPreloadSettings(el *PreloadSettings[Q])
type PreloadOnly ¶ added in v0.35.0
func (PreloadOnly[Q]) ModifyPreloadSettings ¶ added in v0.35.0
func (o PreloadOnly[Q]) ModifyPreloadSettings(el *PreloadSettings[Q])
type PreloadOption ¶ added in v0.35.0
type PreloadOption[Q Loadable] interface { ModifyPreloadSettings(*PreloadSettings[Q]) }
type PreloadRel ¶ added in v0.40.0
type PreloadRel[E bob.Expression] struct { Name string Sides []PreloadSide[E] }
type PreloadSettings ¶ added in v0.35.0
type PreloadSettings[Q Loadable] struct { Columns []string SubLoaders []Preloader[Q] ExtraLoader *AfterPreloader Mods [][]preloadfilter Alias string }
func NewPreloadSettings ¶ added in v0.35.0
func NewPreloadSettings[T any, Ts ~[]T, Q Loadable](cols []string) PreloadSettings[Q]
type PreloadSide ¶ added in v0.40.0
type PreloadWhere ¶ added in v0.35.0
type PreloadWhere[Q Loadable] []preloadfilter
func (PreloadWhere[Q]) ModifyPreloadSettings ¶ added in v0.35.0
func (filters PreloadWhere[Q]) ModifyPreloadSettings(el *PreloadSettings[Q])
type Preloadable ¶ added in v0.35.0
type PreloadableQuery ¶ added in v0.40.0
type Preloader ¶ added in v0.35.0
Preloader builds a query mod that modifies the original query to retrieve related fields while it can be used as a queryMod, it does not have any direct effect. if using manually, the ApplyPreload method should be called with the query's context AFTER other mods have been applied
func Preload ¶ added in v0.40.0
func Preload[T Preloadable, Ts ~[]T, E bob.Expression, Q PreloadableQuery](rel PreloadRel[E], cols []string, opts ...PreloadOption[Q]) Preloader[Q]
func (Preloader[Q]) Apply ¶ added in v0.35.0
func (l Preloader[Q]) Apply(q Q)
Apply satisfies bob.Mod[*dialect.SelectQuery]. 1. It modifies the query to join the preloading table and the extra columns to retrieve 2. It modifies the mapper to scan the new columns. 3. It calls the original object's Preload method with the loaded object
func (Preloader[Q]) ModifyPreloadSettings ¶ added in v0.35.0
func (l Preloader[Q]) ModifyPreloadSettings(s *PreloadSettings[Q])
modifyPreloader makes a Loader also work as a mod for a Preloader
type Query ¶ added in v0.29.0
type Query[Q bob.Expression, T, Ts any, Tr bob.Transformer[T, Ts]] struct { ExecQuery[Q] Scanner scan.Mapper[T] }
type RelSetDetails ¶ added in v0.6.1
type RelSetDetails struct { TableName string Mapped []RelSetMapping Position int Start bool End bool }
func (RelSetDetails) Columns ¶ added in v0.23.0
func (r RelSetDetails) Columns() []string
func (RelSetDetails) UniqueExternals ¶ added in v0.22.0
func (r RelSetDetails) UniqueExternals() []RelSetMapping
type RelSetMapping ¶ added in v0.6.1
type RelSetMapping struct { Column string Value [2]string // [0] is the SQL value, [1] is the Go value ExternalTable string ExternalColumn string ExtPosition int ExternalStart bool ExternalEnd bool }
func (RelSetMapping) HasValue ¶ added in v0.23.0
func (r RelSetMapping) HasValue() bool
type RelSide ¶ added in v0.2.1
type RelSide struct { From string `yaml:"from"` To string `yaml:"to"` // To make sure the column lengths match and are in the right order, // a slice of tupules is expected. // bobgen-helpers.GenConfig has a function to spread that into From/ToColumns Columns [][2]string `yaml:"columns"` FromColumns []string `yaml:"-"` ToColumns []string `yaml:"-"` FromWhere []RelWhere `yaml:"from_where"` ToWhere []RelWhere `yaml:"to_where"` // These are columns that exist in the database, but should not be // considered by the relationship when determining if it is a join table // the columns are never set or read, so make sure they have a default value // or operations will fail // the first slice is for the from table, the second is for the to table IgnoredColumns [2][]string `yaml:"-"` // if the origin is unique FromUnique bool `yaml:"-"` // if the destination is unique ToUnique bool `yaml:"-"` // Which side to modify, "from" or "to" // If not set, it will try to "guess" which side to modify // - if only one of the sides contains a primary key, // it will choose to modify the other side // - If (both or none) of them contains a primary key, // it will try with "Unique" columns // - If it still cannot choose, it defaults to "to" Modify string `yaml:"modify"` // If the key is nullable. We need this to know if we can remove the // relationship without deleting it // this is set in Relationships.init() KeyNullable bool `yaml:"-"` }
type Relationship ¶
type Relationship struct { Name string `yaml:"name"` Sides []RelSide `yaml:"sides"` // These can be set through user configuration Ignored bool // Do not create the inverse of a user configured relationship NoReverse bool `yaml:"no_reverse"` // Makes sure the factories does not require the relationship to be set. // Useful if you're not using foreign keys NeverRequired bool `yaml:"never_required"` }
func (Relationship) Foreign ¶ added in v0.6.1
func (r Relationship) Foreign() string
func (Relationship) ForeignPosition ¶ added in v0.22.0
func (r Relationship) ForeignPosition() int
func (Relationship) InsertEarly ¶ added in v0.6.1
func (r Relationship) InsertEarly() bool
func (Relationship) IsRemovable ¶ added in v0.6.1
func (r Relationship) IsRemovable() bool
func (Relationship) IsToMany ¶ added in v0.6.1
func (r Relationship) IsToMany() bool
func (Relationship) Local ¶ added in v0.6.1
func (r Relationship) Local() string
func (Relationship) LocalPosition ¶ added in v0.22.0
func (r Relationship) LocalPosition() int
func (Relationship) NeedsMany ¶ added in v0.23.0
func (r Relationship) NeedsMany(position int) bool
NeedsMany returns true if the table on this side needs to be many
func (Relationship) Validate ¶ added in v0.23.0
func (r Relationship) Validate() error
func (Relationship) ValuedSides ¶ added in v0.6.1
func (r Relationship) ValuedSides() []RelSetDetails
type RelationshipChainError ¶ added in v0.6.1
type RelationshipChainError struct { Table1 string Column1 string Value string Table2 string Column2 string }
RelationshipChainError is the error returned when a wrong value is encountered in a relationship chain
func (*RelationshipChainError) Error ¶ added in v0.6.1
func (e *RelationshipChainError) Error() string
type SchemaTable ¶ added in v0.29.0
type SchemaTable string
type Setter ¶ added in v0.22.0
type Setter[T, InsertQ, UpdateQ any] interface { // SetColumns should return the column names that are set SetColumns() []string // Act as a mod for the insert query // the BeforeInsertHooks MUST be run here bob.Mod[InsertQ] // Return a mod for the update query // this should add "SET col1 = val1, col2 = val2, ..." UpdateMod() bob.Mod[UpdateQ] }