(requestedFeatures []*FeatureViewAndRefs, fullFeatureNames bool)
| 299 | } |
| 300 | |
| 301 | func ValidateFeatureRefs(requestedFeatures []*FeatureViewAndRefs, fullFeatureNames bool) error { |
| 302 | featureRefCounter := make(map[string]int) |
| 303 | featureRefs := make([]string, 0) |
| 304 | for _, viewAndFeatures := range requestedFeatures { |
| 305 | for _, feature := range viewAndFeatures.FeatureRefs { |
| 306 | projectedViewName := viewAndFeatures.View.Base.Name |
| 307 | if viewAndFeatures.View.Base.Projection != nil { |
| 308 | projectedViewName = viewAndFeatures.View.Base.Projection.NameToUse() |
| 309 | } |
| 310 | |
| 311 | featureRefs = append(featureRefs, |
| 312 | fmt.Sprintf("%s:%s", projectedViewName, feature)) |
| 313 | } |
| 314 | } |
| 315 | |
| 316 | for _, featureRef := range featureRefs { |
| 317 | if fullFeatureNames { |
| 318 | featureRefCounter[featureRef]++ |
| 319 | } else { |
| 320 | _, featureName, _ := ParseFeatureReference(featureRef) |
| 321 | featureRefCounter[featureName]++ |
| 322 | } |
| 323 | |
| 324 | } |
| 325 | for featureName, occurrences := range featureRefCounter { |
| 326 | if occurrences == 1 { |
| 327 | delete(featureRefCounter, featureName) |
| 328 | } |
| 329 | } |
| 330 | if len(featureRefCounter) >= 1 { |
| 331 | collidedFeatureRefs := make([]string, 0) |
| 332 | for collidedFeatureRef := range featureRefCounter { |
| 333 | if fullFeatureNames { |
| 334 | collidedFeatureRefs = append(collidedFeatureRefs, collidedFeatureRef) |
| 335 | } else { |
| 336 | for _, featureRef := range featureRefs { |
| 337 | _, featureName, _ := ParseFeatureReference(featureRef) |
| 338 | if featureName == collidedFeatureRef { |
| 339 | collidedFeatureRefs = append(collidedFeatureRefs, featureRef) |
| 340 | } |
| 341 | } |
| 342 | } |
| 343 | } |
| 344 | return featureNameCollisionError{collidedFeatureRefs, fullFeatureNames} |
| 345 | } |
| 346 | |
| 347 | return nil |
| 348 | } |
| 349 | |
| 350 | func TransposeFeatureRowsIntoColumns(featureData2D [][]onlinestore.FeatureData, |
| 351 | groupRef *GroupedFeaturesPerEntitySet, |
no test coverage detected