func (et *TableEntityType) LoadByCode(dbrSess *dbr.Session, code string, cbs ...csdb.DbrSelectCb) error { s, err := TableCollection.Structure(TableIndexEntityType) if err != nil { return errgo.Mask(err) } sb := dbrSess.Select(s.AllColumnAliasQuote(csdb.MainTable)...).From(s.Name, csdb.MainTable).Where("entity_type_code = ?", code) for _, cb := range cbs { sb = cb(sb) } return errgo.Mask(sb.LoadStruct(et)) }
func InitEntityStoreMap(dbrSess *dbr.Session) error { if atomic.LoadUint32(&initMapDone.done) == 1 { return ErrStoreMapInitialized } initMapDone.m.Lock() defer initMapDone.m.Unlock() if initMapDone.done == 0 { defer atomic.StoreUint32(&initMapDone.done, 1) s, err := TableCollection.Structure(TableIndexEntityStore) if err != nil { return errgo.Mask(err) } var ess TableEntityStoreSlice _, err = dbrSess. Select(s.Columns.FieldNames()...). From(s.Name). LoadStructs(&ess) if err != nil { return errgo.Mask(err) } for _, es := range ess { EntityStoreMap.Set(es.EntityTypeID, es.StoreID, es) } ess = ess[:len(ess)-1] // delete Struct Slice https://code.google.com/p/go-wiki/wiki/SliceTricks return nil } return ErrStoreMapInitialized }
// getEntityTypeData retrieves all EAV models from table eav_entity_type but only those listed in variable // codegen.ConfigEntityType. It then applies the mapping data from codegen.ConfigEntityType to the entity_type struct. // Depends on generated code from tableToStruct. func getEntityTypeData(dbrSess *dbr.Session) (etc eav.TableEntityTypeSlice, err error) { s, err := eav.TableCollection.Structure(eav.TableIndexEntityType) if err != nil { return nil, errgo.Mask(err) } _, err = dbrSess. Select(s.AllColumnAliasQuote(s.Name)...). From(s.Name). Where("entity_type_code IN ?", codegen.ConfigEntityType.Keys()). LoadStructs(&etc) if err != nil { return nil, errgo.Mask(err) } for typeCode, mapData := range codegen.ConfigEntityType { // map the fields from the config struct to the data retrieved from the database. et, err := etc.GetByCode(typeCode) codegen.LogFatal(err) et.EntityModel = codegen.ParseString(mapData.EntityModel, et) et.AttributeModel.String = codegen.ParseString(mapData.AttributeModel, et) et.EntityTable.String = codegen.ParseString(mapData.EntityTable, et) et.IncrementModel.String = codegen.ParseString(mapData.IncrementModel, et) et.AdditionalAttributeTable.String = codegen.ParseString(mapData.AdditionalAttributeTable, et) et.EntityAttributeCollection.String = codegen.ParseString(mapData.EntityAttributeCollection, et) } return etc, nil }