Documentation ¶
Overview ¶
Package eav contains the logic for the Entity-Attribute-Value pattern (WIP).
To use this library with additional columns in the EAV tables you must run from the tools folder first `tableToStruct` and then build the program `eavToStruct` and run it.
Definition of attribute backend, source, and frontend models:
- Backend: Provides hooks before and after save, load, and delete operations with an attribute value. - Source: Provides option values and labels for select and multi-select attributes. - Frontend: Prepares an attribute value for rendering on the storefront and admin backend.
Backend models can be an alternative to an observer; for example, when you have to do something that depends on an attribute value when an entity is saved.
TODO(CSC): idea to import data quickly: see Entity-Attribute-Value_(EAV)_The_Antipattern_Too_Great_to_Give_Up_-__Andy_Novick_2016-03-19.pdf Break it down to single partition operations • SQLCLR proc breaks the file by attribute_id • SEND attribute_id’s data to a Service Broker QUEUE • Each task is working on ONE attribute_id – That’s one HOBT / Partition • Run 1-2 tasks per core CSC: in our case run a pool goroutines to work on the attribute IDs or for each attribute_id a dedicated goroutine (maybe code generated)
Index ¶
- Constants
- Variables
- func GetAttributeSelectSql(dbrSess dbr.Session, aat EntityTypeAdditionalAttributeTabler, ...) (*dbr.Select, error)
- func IfNull(alias, columnName, defaultVal string, scopeNames ...string) string
- func SetEntityTypeCollection(sc CSEntityTypeSlice)
- type Attribute
- func (a *Attribute) AttributeCode() string
- func (a *Attribute) AttributeID() int64
- func (a *Attribute) BackendModel() AttributeBackendModeller
- func (a *Attribute) BackendTable() string
- func (a *Attribute) BackendType() string
- func (a *Attribute) DefaultValue() string
- func (a *Attribute) EntityType() (*CSEntityType, error)
- func (a *Attribute) EntityTypeID() int64
- func (a *Attribute) FrontendClass() string
- func (a *Attribute) FrontendInput() string
- func (a *Attribute) FrontendLabel() string
- func (a *Attribute) FrontendModel() AttributeFrontendModeller
- func (a *Attribute) IsInGroup(_ int64) bool
- func (a *Attribute) IsInSet(_ int64) bool
- func (a *Attribute) IsRequired() bool
- func (a *Attribute) IsStatic() bool
- func (a *Attribute) IsUnique() bool
- func (a *Attribute) IsUserDefined() bool
- func (a *Attribute) Note() string
- func (a *Attribute) SourceModel() AttributeSourceModeller
- func (a *Attribute) UsesSource() bool
- type AttributeBackend
- func (ab *AttributeBackend) Config(configs ...AttributeBackendConfig) AttributeBackendModeller
- func (ab *AttributeBackend) GetEntityIDField() string
- func (ab *AttributeBackend) GetTable() string
- func (ab *AttributeBackend) GetType() string
- func (ab *AttributeBackend) IsScalar() bool
- func (ab *AttributeBackend) IsStatic() bool
- func (ab *AttributeBackend) Validate() bool
- type AttributeBackendConfig
- type AttributeBackendModeller
- type AttributeData
- func (AttributeData) CompactValue(value []string)
- func (as *AttributeData) Config(configs ...AttributeDataConfig) AttributeDataModeller
- func (AttributeData) ExtractValue(req *http.Request)
- func (AttributeData) OutputValue(format uint8)
- func (AttributeData) RestoreValue(value []string)
- func (AttributeData) ValidateValue(value []string)
- type AttributeDataConfig
- type AttributeDataModeller
- type AttributeFrontend
- type AttributeFrontendConfig
- type AttributeFrontendModeller
- type AttributeGetter
- type AttributeIndex
- type AttributeMapGet
- type AttributeSliceGetter
- type AttributeSource
- type AttributeSourceConfig
- type AttributeSourceModeller
- type AttributeSourceOption
- type AttributeSourceOptions
- type Attributer
- type CSEntityType
- type CSEntityTypeSlice
- type EntityTypeAdditionalAttributeTabler
- type EntityTypeAttributeCollectioner
- type EntityTypeAttributeModeller
- type EntityTypeIncrementModeller
- type EntityTypeModeller
- type EntityTypeTabler
- type FrontendInputRendererIFace
- type Handler
- func (h *Handler) Collection() interface{}
- func (h *Handler) Get(i AttributeIndex) (_ interface{}, ok bool)
- func (h *Handler) GetByCode(code string) (_ interface{}, ok bool)
- func (h *Handler) GetByID(id int64) (_ interface{}, ok bool)
- func (h *Handler) MustGet(i AttributeIndex) interface{}
- func (h *Handler) New() interface{}
- type ValueIndex
- type WSASlice
Constants ¶
const ( OutputFormatJSON uint8 = iota + 1 OutputFormatText OutputFormatHTML OutputFormatPDF OutputFormatOneline OutputFormatArray // not sure about that one )
const ( // TypeStatic use to check if an attribute is static, means part of the eav prefix table TypeStatic string = "static" )
Variables ¶
var DefaultScopeNames = [...]string{"Store", "Group", "Website", "Default"}
DefaultScopeNames specifies the name of the scopes used in all EAV* function to generate scope based hierarchical fall backs.
var ( // TableCollection handles all tables and its columns. init() in generated Go file will set the value. TableCollection csdb.Tables )
Functions ¶
func GetAttributeSelectSql ¶
func GetAttributeSelectSql(dbrSess dbr.Session, aat EntityTypeAdditionalAttributeTabler, entityTypeID, websiteID int64) (*dbr.Select, error)
GetAttributeSelectSql generates the select query to retrieve full attribute configuration Implements the scope on a SQL query basis so that attribute functions does not need to deal with it. Tests see the tools package @see magento2/app/code/Magento/Eav/Model/Resource/Attribute/Collection.php::_initSelect()
func IfNull ¶
IfNull creates a nested IFNULL SQL statement when a scope based fall back hierarchy is required. Alias argument will be used as a prefix for the alias table name and as the final alias name.
func SetEntityTypeCollection ¶
func SetEntityTypeCollection(sc CSEntityTypeSlice)
SetEntityTypeCollection sets the collection. Panics if slice is empty.
Types ¶
type Attribute ¶
type Attribute struct {
// contains filtered or unexported fields
}
Attribute defines properties for an attribute. This struct must be embedded in other EAV attributes.
func NewAttribute ¶
func NewAttribute( wa WSASlice, websiteID int64, attributeCode string, attributeID int64, backendModel AttributeBackendModeller, backendTable string, backendType string, defaultValue string, entityTypeID int64, frontendClass string, frontendInput string, frontendLabel string, frontendModel AttributeFrontendModeller, isRequired bool, isUnique bool, isUserDefined bool, note string, sourceModel AttributeSourceModeller, ) *Attribute
NewAttribute only for use in auto generated code. Looks terrible 8-) TODO: Use functional options because only a few fields are required.
func (*Attribute) AttributeCode ¶
func (*Attribute) AttributeID ¶
func (*Attribute) BackendModel ¶
func (a *Attribute) BackendModel() AttributeBackendModeller
func (*Attribute) BackendTable ¶
BackendTable returns the attribute backend table name. This function panics. @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php::getBackendTable
func (*Attribute) BackendType ¶
func (*Attribute) DefaultValue ¶
func (*Attribute) EntityType ¶
func (a *Attribute) EntityType() (*CSEntityType, error)
EntityType returns EntityType object or an error. Does not consider websiteID.
func (*Attribute) EntityTypeID ¶
func (*Attribute) FrontendClass ¶
func (*Attribute) FrontendInput ¶
func (*Attribute) FrontendLabel ¶
func (*Attribute) FrontendModel ¶
func (a *Attribute) FrontendModel() AttributeFrontendModeller
func (*Attribute) IsRequired ¶
func (*Attribute) IsUserDefined ¶
func (*Attribute) SourceModel ¶
func (a *Attribute) SourceModel() AttributeSourceModeller
func (*Attribute) UsesSource ¶
UsesSource checks whether possible attribute values are retrieved from a finite source
type AttributeBackend ¶
type AttributeBackend struct {
// contains filtered or unexported fields
}
AttributeBackend implements abstract functions @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php
func AttributeBackendDatetime ¶
func AttributeBackendDatetime() *AttributeBackend
AttributeBackendDatetime handles date times @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Backend/Datetime.php
func AttributeBackendTimeCreated ¶
func AttributeBackendTimeCreated() *AttributeBackend
AttributeBackendTimeCreated @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Backend/Time/Created.php
func AttributeBackendTimeUpdated ¶
func AttributeBackendTimeUpdated() *AttributeBackend
AttributeBackendTimeUpdated @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Backend/Time/Updated.php
func NewAttributeBackend ¶
func NewAttributeBackend(cfgs ...AttributeBackendConfig) *AttributeBackend
NewAttributeBackend creates a pointer to a new attribute source
func (*AttributeBackend) Config ¶
func (ab *AttributeBackend) Config(configs ...AttributeBackendConfig) AttributeBackendModeller
Config runs the configuration functions
func (*AttributeBackend) GetEntityIDField ¶
func (ab *AttributeBackend) GetEntityIDField() string
func (*AttributeBackend) GetTable ¶
func (ab *AttributeBackend) GetTable() string
func (*AttributeBackend) GetType ¶
func (ab *AttributeBackend) GetType() string
func (*AttributeBackend) IsScalar ¶
func (ab *AttributeBackend) IsScalar() bool
func (*AttributeBackend) IsStatic ¶
func (ab *AttributeBackend) IsStatic() bool
func (*AttributeBackend) Validate ¶
func (ab *AttributeBackend) Validate() bool
type AttributeBackendConfig ¶
type AttributeBackendConfig func(*AttributeBackend)
func AttributeBackendIdx ¶
func AttributeBackendIdx(i AttributeIndex) AttributeBackendConfig
AttributeBackendIdx only used in generated code to set the current index in the attribute slice
type AttributeBackendModeller ¶
type AttributeBackendModeller interface { // GetTable @todo GetTable() string IsStatic() bool GetType() string // GetEntityIDField @todo GetEntityIDField() string // Validate @todo Validate() bool // IsScalar By default attribute value is considered scalar that can be stored in a generic way IsScalar() bool // Config to configure the current instance Config(...AttributeBackendConfig) AttributeBackendModeller }
AttributeBackendModeller defines the attribute backend model @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Backend/BackendInterface.php
type AttributeData ¶
type AttributeData struct {
// contains filtered or unexported fields
}
func NewAttributeData ¶
func NewAttributeData(cfgs ...AttributeDataConfig) *AttributeData
NewAttributeData creates a pointer to a new attribute source
func (AttributeData) CompactValue ¶
func (AttributeData) CompactValue(value []string)
func (*AttributeData) Config ¶
func (as *AttributeData) Config(configs ...AttributeDataConfig) AttributeDataModeller
func (AttributeData) ExtractValue ¶
func (AttributeData) ExtractValue(req *http.Request)
func (AttributeData) OutputValue ¶
func (AttributeData) OutputValue(format uint8)
func (AttributeData) RestoreValue ¶
func (AttributeData) RestoreValue(value []string)
func (AttributeData) ValidateValue ¶
func (AttributeData) ValidateValue(value []string)
type AttributeDataConfig ¶
type AttributeDataConfig func(*AttributeData)
func AttributeDataIdx ¶
func AttributeDataIdx(i AttributeIndex) AttributeDataConfig
AttributeDataIdx only used in generated code to set the current index in the attribute slice
type AttributeDataModeller ¶
type AttributeDataModeller interface { // ExtractValue Extract data from request and return value ExtractValue(req *http.Request) // ValidateValue Validate data ValidateValue(value []string) // CompactValue Export attribute value to entity model CompactValue(value []string) // RestoreValue Restore attribute value from SESSION to entity model RestoreValue(value []string) //OutputValue return formatted attribute value from entity model OutputValue(format uint8) // Config to configure the current instance Config(...AttributeDataConfig) AttributeDataModeller }
AttributeDataModeller implements methods from magento2/site/app/code/Magento/Eav/Model/Attribute/Data/AbstractData.php All functions: @todo implementation, parameters, returns and if function is really needed.
type AttributeFrontend ¶
type AttributeFrontend struct {
// contains filtered or unexported fields
}
AttributeFrontend implements abstract functions @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php
func AttributeFrontendDatetime ¶
func AttributeFrontendDatetime() *AttributeFrontend
AttributeFrontendDatetime handles date times @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Frontend/Datetime.php
func NewAttributeFrontend ¶
func NewAttributeFrontend(cfgs ...AttributeFrontendConfig) *AttributeFrontend
NewAttributeFrontend creates a pointer to a new attribute source
func (*AttributeFrontend) Config ¶
func (af *AttributeFrontend) Config(configs ...AttributeFrontendConfig) AttributeFrontendModeller
Config runs the configuration functions
func (*AttributeFrontend) GetInputType ¶
func (af *AttributeFrontend) GetInputType() string
func (*AttributeFrontend) GetValue ¶
func (af *AttributeFrontend) GetValue()
func (*AttributeFrontend) InputRenderer ¶
func (af *AttributeFrontend) InputRenderer() FrontendInputRendererIFace
type AttributeFrontendConfig ¶
type AttributeFrontendConfig func(*AttributeFrontend)
func AttributeFrontendIdx ¶
func AttributeFrontendIdx(i AttributeIndex) AttributeFrontendConfig
AttributeFrontendIdx only used in generated code to set the current index in the attribute slice
type AttributeFrontendModeller ¶
type AttributeFrontendModeller interface { InputRenderer() FrontendInputRendererIFace GetValue() GetInputType() string // Config to configure the current instance Config(...AttributeFrontendConfig) AttributeFrontendModeller }
AttributeFrontendModeller defines the attribute frontend model @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Frontend/AbstractFrontend.php
type AttributeGetter ¶
type AttributeGetter interface { // ByID returns an index using the AttributeID. This index identifies an attribute within an AttributeSlice. ByID(id int64) (AttributeIndex, error) // ByCode returns an index using the AttributeCode. This index identifies an attribute within an AttributeSlice. ByCode(code string) (AttributeIndex, error) }
AttributeGetter implements functions on how to retrieve directly a certain attribute. This interface is used in concrete attribute models by generated code. The logic behind this interface is to provide a fast access to the AttributeIndex. We will use as key the id int64 or code string which will then map to the value of an AttributeIndex.
type AttributeIndex ¶
type AttributeIndex uint
AttributeIndex used for index in a slice with constants (iota)
type AttributeMapGet ¶
type AttributeMapGet struct {
// contains filtered or unexported fields
}
AttributeMapGet contains two maps for faster retrieving of the attribute index. Only used in generated code. Implements interface AttributeGetter.
func NewAttributeMapGet ¶
func NewAttributeMapGet(i map[int64]AttributeIndex, c map[string]AttributeIndex) *AttributeMapGet
NewAttributeMapGet returns a new pointer to an AttributeMapGet.
func (*AttributeMapGet) ByCode ¶
func (si *AttributeMapGet) ByCode(code string) (_ AttributeIndex, ok bool)
ByCode returns an attribute index
func (*AttributeMapGet) ByID ¶
func (si *AttributeMapGet) ByID(id int64) (_ AttributeIndex, ok bool)
ByID returns an attribute index by the id from the database table
type AttributeSliceGetter ¶
type AttributeSliceGetter interface { Index(i AttributeIndex) interface{} Len() int ByID(g AttributeGetter, id int64) (interface{}, bool) ByCode(g AttributeGetter, code string) (interface{}, bool) }
type AttributeSource ¶
type AttributeSource struct { // Source is the internal source []string where i%0 is the value and i%1 is the label. Source []string // contains filtered or unexported fields }
AttributeSource should implement all abstract ideas of @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Source/AbstractSource.php maybe extend also the interface
func AttributeSourceBoolean ¶
func AttributeSourceBoolean() *AttributeSource
AttributeSourceBoolean @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Source/Boolean.php
func AttributeSourceTable ¶
func AttributeSourceTable() *AttributeSource
AttributeSourceTable @todo @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php
func NewAttributeSource ¶
func NewAttributeSource(cfgs ...AttributeSourceConfig) *AttributeSource
NewAttributeSource creates a pointer to a new attribute source
func (*AttributeSource) Config ¶
func (as *AttributeSource) Config(configs ...AttributeSourceConfig) AttributeSourceModeller
Config runs the configuration functions
func (*AttributeSource) GetAllOptions ¶
func (as *AttributeSource) GetAllOptions() AttributeSourceOptions
GetAllOptions returns an option slice
func (*AttributeSource) GetOptionText ¶
func (as *AttributeSource) GetOptionText(v string) string
GetOptionText returns for a value v the label
type AttributeSourceConfig ¶
type AttributeSourceConfig func(*AttributeSource)
func AttributeSourceIdx ¶
func AttributeSourceIdx(i AttributeIndex) AttributeSourceConfig
AttributeSourceIdx only used in generated code to set the current index in the attribute slice
type AttributeSourceModeller ¶
type AttributeSourceModeller interface { // GetAllOptions returns all options in a value/label slice GetAllOptions() AttributeSourceOptions // GetOptionText returns for a value the appropriate label // @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Source/AbstractSource.php GetOptionText(value string) string // Config to configure the current instance Config(...AttributeSourceConfig) AttributeSourceModeller }
AttributeSourceModeller interface implements the functions needed to retrieve data from a source model @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/Source/SourceInterface.php and its abstract class plus other default implementations. Refers to tables eav_attribute_option and eav_attribute_option_value OR other tables. @todo
type AttributeSourceOption ¶
type AttributeSourceOption struct { // Value can be any value and is now here a temporary string. @todo check if maybe interface is needed Value string // Label is the name of a value Label string }
AttributeSourceOption contains a value and label mostly for output in the frontend
type AttributeSourceOptions ¶
type AttributeSourceOptions []AttributeSourceOption
AttributeSourceOptions is a slice of AttributeSourceOption structs
type Attributer ¶
type Attributer interface { // IsStatic checks if an attribute is a static one IsStatic() bool // EntityType returns EntityType object or an error EntityType() (*CSEntityType, error) // UsesSource checks whether possible attribute values are retrieved from a finite source UsesSource() bool // IsInSet checks if attribute in specified attribute set IsInSet(int64) bool // IsInGroup checks if attribute in specified attribute group IsInGroup(int64) bool AttributeID() int64 EntityTypeID() int64 AttributeCode() string BackendModel() AttributeBackendModeller BackendType() string BackendTable() string FrontendModel() AttributeFrontendModeller FrontendInput() string FrontendLabel() string FrontendClass() string SourceModel() AttributeSourceModeller IsRequired() bool IsUserDefined() bool DefaultValue() string IsUnique() bool Note() string }
Attributer defines the minimal requirements for one attribute. The interface relates to the table eav_attribute. Developers can even extend this table with additional columns. Additional columns will result into more generated functions. Even other EAV entities can embed this interface to extend an attribute. For example the customer attributes extends this interface two times. The column of func AttributeModel() has been removed because it is not used and misplaced in the eav_attribute table. This interface can be extended to more than 40 functions which is of course not idiomatic but for generated code it provides the best flexibility to extend with other custom structs. @see magento2/site/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php @see magento2/site/app/code/Magento/Eav/Api/Data/AttributeInterface.php
type CSEntityType ¶
type CSEntityType struct { EntityTypeID int64 EntityTypeCode string EntityModel EntityTypeModeller AttributeModel EntityTypeAttributeModeller EntityTable EntityTypeTabler ValueTablePrefix string EntityIDField string IsDataSharing bool DataSharingKey string DefaultAttributeSetID int64 IncrementModel EntityTypeIncrementModeller IncrementPerStore bool IncrementPadLength int64 IncrementPadChar string AdditionalAttributeTable EntityTypeAdditionalAttributeTabler EntityAttributeCollection EntityTypeAttributeCollectioner }
CSEntityType Go Type of the Mage database models and types. The prefix CS indicates that this EntityType is not generated because it contains special interfaces.
func GetEntityTypeByCode ¶
func GetEntityTypeByCode(code string) (*CSEntityType, error)
GetEntityTypeByCode returns an entity type by its code
func GetEntityTypeByID ¶
func GetEntityTypeByID(id int64) (*CSEntityType, error)
GetEntityTypeByID returns an entity type by its id
func (*CSEntityType) GetEntityTablePrefix ¶
func (e *CSEntityType) GetEntityTablePrefix() string
EntityTablePrefix eav table name prefix @see magento2/site/app/code/Magento/Eav/Model/Entity/AbstractEntity.php::getEntityTablePrefix()
func (*CSEntityType) GetValueTablePrefix ¶
func (e *CSEntityType) GetValueTablePrefix() string
ValueTablePrefix returns the table prefix for all value tables @see magento2/site/app/code/Magento/Eav/Model/Entity/AbstractEntity.php::getValueTablePrefix()
type CSEntityTypeSlice ¶
type CSEntityTypeSlice []*CSEntityType
CSEntityTypeSlice Types starting with CS are the CoreStore mappings with the DB data
func GetEntityTypeCollection ¶
func GetEntityTypeCollection() CSEntityTypeSlice
GetEntityTypeCollection to avoid leaking global variable. Maybe returning a copy?
func (CSEntityTypeSlice) GetByCode ¶
func (es CSEntityTypeSlice) GetByCode(code string) (*CSEntityType, error)
GetByCode returns a CSEntityType using the entity code
func (CSEntityTypeSlice) GetByID ¶
func (es CSEntityTypeSlice) GetByID(id int64) (*CSEntityType, error)
GetByID returns a CSEntityType using the entity id
type EntityTypeAdditionalAttributeTabler ¶
type EntityTypeAdditionalAttributeTabler interface { TableAdditionalAttribute() (*csdb.Table, error) // TableEavWebsite gets the table, where website-dependent attribute parameters are stored in. // If an EAV model doesn't demand this functionality, let this function just return nil,nil TableEavWebsite() (*csdb.Table, error) }
EntityTypeAdditionalAttributeTabler implements methods for EAV table structures to retrieve attributes
type EntityTypeAttributeCollectioner ¶
type EntityTypeAttributeCollectioner interface {
Collection() interface{}
}
EntityTypeAttributeCollectioner defines an attribute collection @todo it returns a slice so use type assertion.
type EntityTypeAttributeModeller ¶
type EntityTypeAttributeModeller interface { // Creates a new attribute to the corresponding entity. @todo options? // The return type must embed eav.Attributer interface and of course its custom attribute interface New() interface{} Get(i AttributeIndex) (interface{}, error) MustGet(i AttributeIndex) interface{} GetByID(id int64) (interface{}, error) GetByCode(code string) (interface{}, error) }
EntityTypeAttributeModeller defines an attribute model @todo
type EntityTypeIncrementModeller ¶
type EntityTypeIncrementModeller interface {
TBD()
}
EntityTypeIncrementModeller defines who to increment a number @todo
type EntityTypeModeller ¶
type EntityTypeModeller interface {
TBD()
}
EntityTypeModeller defines an entity type model @todo
type EntityTypeTabler ¶
type EntityTypeTabler interface { // Base returns the base/prefix table name. E.g.: catalog_product_entity TableNameBase() string // Type returns for a type the table name. E.g.: catalog_product_entity_int TableNameValue(ValueIndex) string }
EntityTypeTabler returns the table name
type FrontendInputRendererIFace ¶
type FrontendInputRendererIFace interface { }
FrontendInputRendererIFace see table catalog_eav_attribute.frontend_input_renderer @todo Stupid name :-( Fix later.
type Handler ¶
type Handler struct { // EntityTyeID to load the entity type. @todo implementation EntityTyeID int64 // C collection of a materialized slice C AttributeSliceGetter // G getter knows how to return an AttributeIndex by id or by code G AttributeGetter }
Handler internal wrapper for attribute collection C, getter G and entity type id. must be embedded into a concrete attribute struct. Implements interface EntityTypeAttributeModeller and EntityTypeAttributeCollectioner.
func (*Handler) Collection ¶
func (h *Handler) Collection() interface{}
Collection returns the full attribute collection AttributeSlice. You must use type assertion to convert to custattr.AttributeSlice.
func (*Handler) Get ¶
func (h *Handler) Get(i AttributeIndex) (_ interface{}, ok bool)
Get uses an AttributeIndex to return an attribute or an error. Use type assertion to convert to Attributer.
func (*Handler) GetByCode ¶
GetByCode returns an address attribute by its code Use type assertion to convert to Attributer.
func (*Handler) GetByID ¶
GetByID returns an address attribute by its id Use type assertion to convert to Attributer.
func (*Handler) MustGet ¶
func (h *Handler) MustGet(i AttributeIndex) interface{}
MustGet returns an attribute by AttributeIndex. Panics if not found. Use type assertion to convert to Attributer.
type ValueIndex ¶
type ValueIndex int
const ( EntityTypeDatetime ValueIndex = iota + 1 EntityTypeDecimal EntityTypeInt EntityTypeText EntityTypeVarchar )