// AllowedCountries returns a list of all allowed countries per scope. // This function might gets refactored into a SourceModel. // May return nil,nil when it's unable to determine any list of countries. func AllowedCountries(cr config.ScopedReader) (utils.StringSlice, error) { cStr := cr.GetString(PathCountryAllowed) if cStr == "" { field, err := PackageConfiguration.FindFieldByPath(PathCountryAllowed) // get default value if err != nil { return nil, err } var ok bool cStr, ok = field.Default.(string) if cStr == "" || !ok { return nil, fmt.Errorf("Cannot type assert field.Default value to string: %#v", field) } } return utils.StringSlice(strings.Split(cStr, `,`)), nil }
// 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 GetAttributeSelectSql(dbrSess dbr.SessionRunner, aat EntityTypeAdditionalAttributeTabler, entityTypeID, websiteID int64) (*dbr.SelectBuilder, error) { ta, err := TableCollection.Structure(TableIndexAttribute) if err != nil { return nil, log.Error("eav.GetAttributeSelectSql.TableCollection.Structure", "err", err, "entityTypeID", entityTypeID, "websiteID", websiteID) } taa, err := aat.TableAdditionalAttribute() if err != nil { return nil, log.Error("eav.GetAttributeSelectSql.TableAdditionalAttribute", "err", err, "ta", ta, "entityTypeID", entityTypeID, "websiteID", websiteID) } tew, err := aat.TableEavWebsite() if err != nil { return nil, log.Error("eav.GetAttributeSelectSql.TableEavWebsite", "err", err, "ta", ta, "taa", taa, "entityTypeID", entityTypeID, "websiteID", websiteID) } // tew table can now contains columns names which can occur in table eav_attribute and // or [catalog|customer|entity]_eav_attribute var ( ifnull []string tewAddedCols []string taColumnsQuoted = utils.StringSlice(ta.AllColumnAliasQuote(csdb.MainTable)) taaColumnsQuoted = utils.StringSlice(taa.ColumnAliasQuote(csdb.AdditionalTable)) ) if tew != nil { ifnull = make([]string, len(tew.Columns)) for i, tewC := range tew.Columns.ColumnsNoPK().FieldNames() { t := "" switch { case ta.In(tewC): t = csdb.MainTable break case taa.In(tewC): t = csdb.AdditionalTable break default: return nil, log.Error("eav.GetAttributeSelectSql.Columns.FieldNames.default", "err", fmt.Errorf("Cannot find column name %s.%s neither in table %s nor in %s.", tew.Name, tewC, ta.Name, taa.Name), "ta", ta, "taa", taa, "entityTypeID", entityTypeID, "websiteID", websiteID) } ifnull[i] = dbr.IfNullAs(csdb.ScopeTable, tewC, t, tewC, tewC) tewAddedCols = append(tewAddedCols, tewC) } taColumnsQuoted.ReduceContains(tewAddedCols...) taaColumnsQuoted.ReduceContains(tewAddedCols...) } selectSql := dbrSess. Select(taColumnsQuoted...). From(ta.Name, csdb.MainTable). Join( dbr.JoinTable(taa.Name, csdb.AdditionalTable), taaColumnsQuoted, dbr.JoinOn(dbr.Quote+csdb.AdditionalTable+"`.`attribute_id` = `"+csdb.MainTable+"`.`attribute_id`"), dbr.JoinOn(dbr.Quote+csdb.MainTable+"`.`entity_type_id` = ?", entityTypeID), ) if len(tewAddedCols) > 0 { selectSql. LeftJoin( dbr.JoinTable(tew.Name, csdb.ScopeTable), append(ifnull), dbr.JoinOn(dbr.Quote+csdb.ScopeTable+dbr.Quote+"."+dbr.Quote+"attribute_id"+dbr.Quote+" = "+dbr.Quote+csdb.MainTable+dbr.Quote+"."+dbr.Quote+"attribute_id"+dbr.Quote), dbr.JoinOn(dbr.Quote+csdb.ScopeTable+dbr.Quote+"."+dbr.Quote+"website_id"+dbr.Quote+" = ?", websiteID), ) } return selectSql, nil }