From cb7a195768374d422c202112bfb50487fab7cfc1 Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Thu, 24 Feb 2022 18:01:23 +0000 Subject: fix "summary" handling * after closer inspection, change handling of the different summary-to, summary: and summary { } variants, to make new unit tests pass. --- .../yahoo/searchdefinition/parser/ParsedField.java | 29 ++++++++++++++++++++++ .../parser/ParsedSummaryField.java | 8 ++++-- 2 files changed, 35 insertions(+), 2 deletions(-) (limited to 'config-model/src/main/java/com/yahoo') diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java index 5066da2acd0..9c7400136ab 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java @@ -62,6 +62,35 @@ class ParsedField extends ParsedBlock { Optional getSorting() { return Optional.ofNullable(sortSettings); } Map getRankTypes() { return Map.copyOf(rankTypes); } + /** get an existing summary field for modification, or create it */ + ParsedSummaryField summaryFieldFor(String name) { + if (summaryFields.containsKey(name)) { + return summaryFields.get(name); + } + var sf = new ParsedSummaryField(name, getType()); + summaryFields.put(name, sf); + return sf; + } + + /** get an existing summary field for modification, or create it */ + ParsedSummaryField summaryFieldFor(String name, ParsedType type) { + if (summaryFields.containsKey(name)) { + var sf = summaryFields.get(name); + if (sf.getType() == null) { + sf.setType(type); + } else { + // TODO check that types are properly equal here + String oldName = sf.getType().name(); + String newName = type.name(); + verifyThat(newName.equals(oldName), "type mismatch for summary field", name, ":", oldName, "/", newName); + } + return sf; + } + var sf = new ParsedSummaryField(name, type); + summaryFields.put(name, sf); + return sf; + } + void addAlias(String from, String to) { verifyThat(! aliases.containsKey(to), "already has alias", to); aliases.put(to, from); diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java index 2de0d402029..40e95045afd 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java @@ -13,7 +13,7 @@ import java.util.List; **/ class ParsedSummaryField extends ParsedBlock { - private final ParsedType type; + private ParsedType type; private boolean isDyn = false; private boolean isMEO = false; private boolean isFull = false; @@ -30,7 +30,7 @@ class ParsedSummaryField extends ParsedBlock { this.type = type; } - ParsedType type() { return type; } + ParsedType getType() { return type; } List getDestinations() { return List.copyOf(destinations); } List getSources() { return List.copyOf(sources); } boolean getBolded() { return isBold; } @@ -44,4 +44,8 @@ class ParsedSummaryField extends ParsedBlock { void setDynamic() { this.isDyn = true; } void setFull() { this.isFull = true; } void setMatchedElementsOnly() { this.isMEO = true; } + void setType(ParsedType value) { + verifyThat(type == null, "Cannot change type from ", type, "to", value); + this.type = value; + } } -- cgit v1.2.3