diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-03-14 15:31:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-14 15:31:53 +0100 |
commit | 462da83471926014ea3a0eba7ebf48b570b17316 (patch) | |
tree | cd545279d011d447306ac1f82ee0d2cd921f945a /config-model/src | |
parent | 1156116e41f8541109c7e79ea29d47ccbe73dad3 (diff) | |
parent | a32c40305e4642f1b4c8c3e0c0a655ed473b6acd (diff) |
Merge pull request #21676 from vespa-engine/arnej/fix-duplicate-reference-types
Arnej/fix duplicate reference types
Diffstat (limited to 'config-model/src')
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"); + } + +} + |