aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-03-14 15:31:53 +0100
committerGitHub <noreply@github.com>2022-03-14 15:31:53 +0100
commit462da83471926014ea3a0eba7ebf48b570b17316 (patch)
treecd545279d011d447306ac1f82ee0d2cd921f945a /config-model/src
parent1156116e41f8541109c7e79ea29d47ccbe73dad3 (diff)
parenta32c40305e4642f1b4c8c3e0c0a655ed473b6acd (diff)
Merge pull request #21676 from vespa-engine/arnej/fix-duplicate-reference-types
Arnej/fix duplicate reference types
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java16
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java7
-rw-r--r--config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg8
-rw-r--r--config-model/src/test/derived/reference_from_several/bar.sd15
-rw-r--r--config-model/src/test/derived/reference_from_several/documentmanager.cfg81
-rw-r--r--config-model/src/test/derived/reference_from_several/foo.sd15
-rw-r--r--config-model/src/test/derived/reference_from_several/parent.sd7
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/ImportedFieldsTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/ReferenceFromSeveralTestCase.java31
9 files changed, 160 insertions, 22 deletions
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java b/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java
index 4ff54d7ff1c..d98869e9dd3 100644
--- a/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java
+++ b/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java
@@ -4,10 +4,8 @@ package com.yahoo.documentmodel;
import com.yahoo.document.DataType;
import com.yahoo.document.Document;
import com.yahoo.document.Field;
-import com.yahoo.document.ReferenceDataType;
import com.yahoo.document.StructDataType;
import com.yahoo.document.StructuredDataType;
-import com.yahoo.document.TemporaryStructuredDataType;
import com.yahoo.document.annotation.AnnotationType;
import com.yahoo.document.annotation.AnnotationTypeRegistry;
import com.yahoo.document.datatypes.FieldValue;
@@ -385,18 +383,4 @@ public final class NewDocumentType extends StructuredDataType implements DataTyp
}
- private ReferenceDataType refToThis = null;
-
- @SuppressWarnings("deprecation")
- public ReferenceDataType getReferenceDataType() {
- if (refToThis == null) {
- // super ugly, the APIs for this are horribly inconsistent
- var tmptmp = TemporaryStructuredDataType.create(getName());
- var tmp = ReferenceDataType.createWithInferredId(tmptmp);
- tmp.setTargetType((StructuredDataType) this);
- refToThis = tmp;
- }
- return refToThis;
- }
-
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
index 2d9c81085fe..b71e2498669 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
@@ -291,9 +291,10 @@ public class DocumentModelBuilder {
}
else if (type instanceof ReferenceDataType) {
ReferenceDataType t = (ReferenceDataType) type;
- var tt = t.getTargetType();
- var doc = getDocumentType(docs, tt.getId());
- type = doc.getReferenceDataType();
+ if (t.getTargetType() instanceof TemporaryStructuredDataType) {
+ DataType targetType = resolveTemporariesRecurse(t.getTargetType(), repo, docs, replacements);
+ t.setTargetType((StructuredDataType) targetType);
+ }
}
if (type != original) {
replacements.add(new TypeReplacement(original, type));
diff --git a/config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg b/config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg
index ef1bb4c5ad4..876ed00d0c4 100644
--- a/config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg
+++ b/config-model/src/test/configmodel/types/references/documentmanager_refs_to_same_type.cfg
@@ -47,6 +47,8 @@ doctype[1].fieldsets{[document]}.fields[0] "campaign_ref"
doctype[1].fieldsets{[document]}.fields[1] "other_campaign_ref"
doctype[1].documentref[0].idx 10017
doctype[1].documentref[0].targettype 10018
+doctype[1].documentref[1].idx 10019
+doctype[1].documentref[1].targettype 10018
doctype[1].structtype[0].idx 10016
doctype[1].structtype[0].name "ad.header"
doctype[1].structtype[0].field[0].name "campaign_ref"
@@ -54,10 +56,10 @@ doctype[1].structtype[0].field[0].internalid 23963250
doctype[1].structtype[0].field[0].type 10017
doctype[1].structtype[0].field[1].name "other_campaign_ref"
doctype[1].structtype[0].field[1].internalid 874751172
-doctype[1].structtype[0].field[1].type 10017
+doctype[1].structtype[0].field[1].type 10019
doctype[2].name "campaign"
doctype[2].idx 10018
doctype[2].inherits[0].idx 10000
-doctype[2].contentstruct 10019
-doctype[2].structtype[0].idx 10019
+doctype[2].contentstruct 10020
+doctype[2].structtype[0].idx 10020
doctype[2].structtype[0].name "campaign.header"
diff --git a/config-model/src/test/derived/reference_from_several/bar.sd b/config-model/src/test/derived/reference_from_several/bar.sd
new file mode 100644
index 00000000000..68e1b22da3a
--- /dev/null
+++ b/config-model/src/test/derived/reference_from_several/bar.sd
@@ -0,0 +1,15 @@
+schema bar {
+ document bar {
+ field bpref type reference<parent> {
+ indexing: attribute
+ }
+ field bartitle type string {
+ indexing: attribute
+ }
+ }
+ import field bpref.x as barsximp {}
+ document-summary other {
+ summary bartitle type string {}
+ summary barsximp type int {}
+ }
+}
diff --git a/config-model/src/test/derived/reference_from_several/documentmanager.cfg b/config-model/src/test/derived/reference_from_several/documentmanager.cfg
new file mode 100644
index 00000000000..88dee077539
--- /dev/null
+++ b/config-model/src/test/derived/reference_from_several/documentmanager.cfg
@@ -0,0 +1,81 @@
+enablecompression false
+usev8geopositions false
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 427398467
+datatype[].referencetype[].target_type_id 1175161836
+datatype[].id -2026908534
+datatype[].structtype[].name "bar.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "bpref"
+datatype[].structtype[].field[].datatype 427398467
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "bartitle"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 93505813
+datatype[].documenttype[].name "bar"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -2026908534
+datatype[].documenttype[].bodystruct 0
+datatype[].documenttype[].fieldsets{[document]}.fields[] "bartitle"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "bpref"
+datatype[].documenttype[].importedfield[].name "barsximp"
+datatype[].id -308552393
+datatype[].structtype[].name "foo.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "myref"
+datatype[].structtype[].field[].datatype 427398467
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "foo"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 97614088
+datatype[].documenttype[].name "foo"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -308552393
+datatype[].documenttype[].bodystruct 0
+datatype[].documenttype[].fieldsets{[document]}.fields[] "foo"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "myref"
+datatype[].documenttype[].importedfield[].name "myx"
+datatype[].id 836075987
+datatype[].structtype[].name "parent.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1175161836
+datatype[].documenttype[].name "parent"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 836075987
+datatype[].documenttype[].bodystruct 0
+datatype[].documenttype[].fieldsets{[document]}.fields[] "x"
diff --git a/config-model/src/test/derived/reference_from_several/foo.sd b/config-model/src/test/derived/reference_from_several/foo.sd
new file mode 100644
index 00000000000..bfc4eca28c2
--- /dev/null
+++ b/config-model/src/test/derived/reference_from_several/foo.sd
@@ -0,0 +1,15 @@
+schema foo {
+ document foo {
+ field myref type reference<parent> {
+ indexing: attribute
+ }
+ field foo type string {
+ indexing: attribute | summary
+ }
+ }
+ import field myref.x as myx {}
+ document-summary small {
+ summary myx type int {}
+ summary foo type string {}
+ }
+}
diff --git a/config-model/src/test/derived/reference_from_several/parent.sd b/config-model/src/test/derived/reference_from_several/parent.sd
new file mode 100644
index 00000000000..4b19c46ddec
--- /dev/null
+++ b/config-model/src/test/derived/reference_from_several/parent.sd
@@ -0,0 +1,7 @@
+schema parent {
+ document parent {
+ field x type int {
+ indexing: attribute
+ }
+ }
+}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/ImportedFieldsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/ImportedFieldsTestCase.java
index 5dcb9e4ca01..7559b193fba 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/ImportedFieldsTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/ImportedFieldsTestCase.java
@@ -3,6 +3,7 @@ package com.yahoo.searchdefinition.derived;
import com.yahoo.config.model.deploy.TestProperties;
import com.yahoo.searchdefinition.parser.ParseException;
+import org.junit.Ignore;
import org.junit.Test;
import java.io.IOException;
@@ -25,6 +26,7 @@ public class ImportedFieldsTestCase extends AbstractExportingTestCase {
}
@Test
+ @Ignore
public void configs_for_imported_struct_fields_are_derived_new() throws IOException, ParseException {
assertCorrectDeriving("imported_struct_fields", "child",
new TestProperties().setExperimentalSdParsing(true),
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/ReferenceFromSeveralTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/ReferenceFromSeveralTestCase.java
new file mode 100644
index 00000000000..17684306cce
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/ReferenceFromSeveralTestCase.java
@@ -0,0 +1,31 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition.derived;
+
+import com.yahoo.config.model.deploy.TestProperties;
+import com.yahoo.config.model.application.provider.MockFileRegistry;
+import com.yahoo.searchdefinition.derived.TestableDeployLogger;
+import com.yahoo.searchdefinition.ApplicationBuilder;
+import org.junit.Test;
+
+/**
+ * Tests deriving a configuration with references from multiple .sd files
+ *
+ * @author arnej
+ */
+public class ReferenceFromSeveralTestCase extends AbstractExportingTestCase {
+
+ @Override
+ boolean useV8DocManagerCfg() { return false; }
+
+ @Test
+ public void testDocManConfigs() throws Exception {
+ var logger = new TestableDeployLogger();
+ var props = new TestProperties().setExperimentalSdParsing(false).setUseV8DocManagerCfg(false);
+ ApplicationBuilder builder = ApplicationBuilder.createFromDirectory
+ ("src/test/derived/reference_from_several/", new MockFileRegistry(), logger, props);
+ derive("reference_from_several", builder, builder.getSchema("foo"));
+ assertCorrectConfigFiles("reference_from_several");
+ }
+
+}
+