summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-04-05 11:25:18 +0200
committerGitHub <noreply@github.com>2022-04-05 11:25:18 +0200
commita25ada23f00262c55a4283293f8e58a30c9c9b10 (patch)
tree160684ad03cb03eed8cbc3e2053a57ea4da8be1d
parent39c278731fe2df3edaf4cc4c478eb3e3acf72b32 (diff)
parentcc148b2396b922aaf81026f227422f96c44cc87e (diff)
Merge pull request #21977 from vespa-engine/arnej/reference-types-after-all-doc-types
make reference types after all document types
-rw-r--r--document/src/tests/repo/doctype_config_test.cpp10
-rw-r--r--document/src/tests/repo/import-dt.cfg139
-rw-r--r--document/src/vespa/document/repo/documenttyperepo.cpp7
3 files changed, 152 insertions, 4 deletions
diff --git a/document/src/tests/repo/doctype_config_test.cpp b/document/src/tests/repo/doctype_config_test.cpp
index 84ec1414fcc..eab40e04617 100644
--- a/document/src/tests/repo/doctype_config_test.cpp
+++ b/document/src/tests/repo/doctype_config_test.cpp
@@ -659,4 +659,14 @@ TEST("Tensor fields have tensor types") {
EXPECT_TRUE(&tensorField1.getDataType() == tensorFieldValue1->getDataType());
}
+TEST("requireThatImportedFieldsWorks") {
+ DocumentTypeRepo repo(readDocumenttypesConfig(TEST_PATH("import-dt.cfg")));
+ ASSERT_TRUE(repo.getDocumentType("document"));
+ ASSERT_TRUE(repo.getDocumentType("grandparent"));
+ ASSERT_TRUE(repo.getDocumentType("parent_a"));
+ ASSERT_TRUE(repo.getDocumentType("parent_b"));
+ ASSERT_TRUE(repo.getDocumentType("child"));
+}
+
+
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/document/src/tests/repo/import-dt.cfg b/document/src/tests/repo/import-dt.cfg
new file mode 100644
index 00000000000..742f377e65c
--- /dev/null
+++ b/document/src/tests/repo/import-dt.cfg
@@ -0,0 +1,139 @@
+enablecompression false
+usev8geopositions false
+doctype[0].name "document"
+doctype[0].idx 10000
+doctype[0].internalid 8
+doctype[0].contentstruct 10001
+doctype[0].primitivetype[0].idx 10002
+doctype[0].primitivetype[0].name "bool"
+doctype[0].primitivetype[1].idx 10003
+doctype[0].primitivetype[1].name "byte"
+doctype[0].primitivetype[2].idx 10004
+doctype[0].primitivetype[2].name "double"
+doctype[0].primitivetype[3].idx 10005
+doctype[0].primitivetype[3].name "float"
+doctype[0].primitivetype[4].idx 10006
+doctype[0].primitivetype[4].name "float16"
+doctype[0].primitivetype[5].idx 10007
+doctype[0].primitivetype[5].name "int"
+doctype[0].primitivetype[6].idx 10008
+doctype[0].primitivetype[6].name "long"
+doctype[0].primitivetype[7].idx 10010
+doctype[0].primitivetype[7].name "predicate"
+doctype[0].primitivetype[8].idx 10011
+doctype[0].primitivetype[8].name "raw"
+doctype[0].primitivetype[9].idx 10012
+doctype[0].primitivetype[9].name "string"
+doctype[0].primitivetype[10].idx 10014
+doctype[0].primitivetype[10].name "uri"
+doctype[0].wsettype[0].idx 10013
+doctype[0].wsettype[0].elementtype 10012
+doctype[0].wsettype[0].createifnonexistent true
+doctype[0].wsettype[0].removeifzero true
+doctype[0].wsettype[0].internalid 18
+doctype[0].structtype[0].idx 10001
+doctype[0].structtype[0].name "document.header"
+doctype[0].structtype[0].internalid -284186494
+doctype[0].structtype[1].idx 10009
+doctype[0].structtype[1].name "position"
+doctype[0].structtype[1].field[0].name "x"
+doctype[0].structtype[1].field[0].internalid 914677694
+doctype[0].structtype[1].field[0].type 10007
+doctype[0].structtype[1].field[1].name "y"
+doctype[0].structtype[1].field[1].internalid 900009410
+doctype[0].structtype[1].field[1].type 10007
+doctype[0].structtype[1].internalid 1381038251
+doctype[1].name "child"
+doctype[1].idx 10015
+doctype[1].internalid 746267614
+doctype[1].inherits[0].idx 10000
+doctype[1].contentstruct 10016
+doctype[1].fieldsets{myfieldset}.fields[0] "my_ancient_int_field"
+doctype[1].fieldsets{myfieldset}.fields[1] "my_int_field"
+doctype[1].fieldsets{myfieldset}.fields[2] "my_string_field"
+doctype[1].fieldsets{[document]}.fields[0] "a_ref"
+doctype[1].fieldsets{[document]}.fields[1] "b_ref"
+doctype[1].fieldsets{[document]}.fields[2] "b_ref_with_summary"
+doctype[1].importedfield[0].name "my_int_field"
+doctype[1].importedfield[1].name "my_string_field"
+doctype[1].importedfield[2].name "my_int_array_field"
+doctype[1].importedfield[3].name "my_int_wset_field"
+doctype[1].importedfield[4].name "my_ancient_int_field"
+doctype[1].documentref[0].idx 10017
+doctype[1].documentref[0].targettype 10018
+doctype[1].documentref[0].internalid -1586898847
+doctype[1].documentref[1].idx 10019
+doctype[1].documentref[1].targettype 10020
+doctype[1].documentref[1].internalid -1586898816
+doctype[1].structtype[0].idx 10016
+doctype[1].structtype[0].name "child.header"
+doctype[1].structtype[0].field[0].name "a_ref"
+doctype[1].structtype[0].field[0].internalid 16961427
+doctype[1].structtype[0].field[0].type 10017
+doctype[1].structtype[0].field[1].name "b_ref"
+doctype[1].structtype[0].field[1].internalid 590403512
+doctype[1].structtype[0].field[1].type 10019
+doctype[1].structtype[0].field[2].name "b_ref_with_summary"
+doctype[1].structtype[0].field[2].internalid 232360236
+doctype[1].structtype[0].field[2].type 10019
+doctype[1].structtype[0].internalid 81425825
+doctype[2].name "grandparent"
+doctype[2].idx 10021
+doctype[2].internalid -154107656
+doctype[2].inherits[0].idx 10000
+doctype[2].contentstruct 10022
+doctype[2].fieldsets{[document]}.fields[0] "int_field"
+doctype[2].structtype[0].idx 10022
+doctype[2].structtype[0].name "grandparent.header"
+doctype[2].structtype[0].field[0].name "int_field"
+doctype[2].structtype[0].field[0].internalid 2128822283
+doctype[2].structtype[0].field[0].type 10007
+doctype[2].structtype[0].internalid 990971719
+doctype[3].name "parent_a"
+doctype[3].idx 10018
+doctype[3].internalid -244366130
+doctype[3].inherits[0].idx 10000
+doctype[3].contentstruct 10023
+doctype[3].fieldsets{[document]}.fields[0] "grandparent_ref"
+doctype[3].fieldsets{[document]}.fields[1] "int_array_field"
+doctype[3].fieldsets{[document]}.fields[2] "int_field"
+doctype[3].fieldsets{[document]}.fields[3] "int_wset_field"
+doctype[3].importedfield[0].name "ancient_int_field"
+doctype[3].arraytype[0].idx 10025
+doctype[3].arraytype[0].elementtype 10007
+doctype[3].arraytype[0].internalid -1245117006
+doctype[3].wsettype[0].idx 10026
+doctype[3].wsettype[0].elementtype 10007
+doctype[3].wsettype[0].createifnonexistent false
+doctype[3].wsettype[0].removeifzero false
+doctype[3].wsettype[0].internalid 519906144
+doctype[3].documentref[0].idx 10024
+doctype[3].documentref[0].targettype 10021
+doctype[3].documentref[0].internalid -1714181319
+doctype[3].structtype[0].idx 10023
+doctype[3].structtype[0].name "parent_a.header"
+doctype[3].structtype[0].field[0].name "grandparent_ref"
+doctype[3].structtype[0].field[0].internalid 29565679
+doctype[3].structtype[0].field[0].type 10024
+doctype[3].structtype[0].field[1].name "int_field"
+doctype[3].structtype[0].field[1].internalid 2128822283
+doctype[3].structtype[0].field[1].type 10007
+doctype[3].structtype[0].field[2].name "int_array_field"
+doctype[3].structtype[0].field[2].internalid 85807681
+doctype[3].structtype[0].field[2].type 10025
+doctype[3].structtype[0].field[3].name "int_wset_field"
+doctype[3].structtype[0].field[3].internalid 1945161474
+doctype[3].structtype[0].field[3].type 10026
+doctype[3].structtype[0].internalid 236742321
+doctype[4].name "parent_b"
+doctype[4].idx 10020
+doctype[4].internalid -244365169
+doctype[4].inherits[0].idx 10000
+doctype[4].contentstruct 10027
+doctype[4].fieldsets{[document]}.fields[0] "string_field"
+doctype[4].structtype[0].idx 10027
+doctype[4].structtype[0].name "parent_b.header"
+doctype[4].structtype[0].field[0].name "string_field"
+doctype[4].structtype[0].field[0].internalid 1222457840
+doctype[4].structtype[0].field[0].type 10012
+doctype[4].structtype[0].internalid 40228816
diff --git a/document/src/vespa/document/repo/documenttyperepo.cpp b/document/src/vespa/document/repo/documenttyperepo.cpp
index e2947c2b2b2..147e79bbf32 100644
--- a/document/src/vespa/document/repo/documenttyperepo.cpp
+++ b/document/src/vespa/document/repo/documenttyperepo.cpp
@@ -580,14 +580,13 @@ private:
createEmptyStructs(dtInP);
initializeDocTypeAndInheritAnnotations(dtInP);
createEmptyAnnotationTypes(dtInP);
+ }
+ for (auto & [id, dtInP] : _doc_types_in_progress) {
createReferenceTypes(dtInP);
}
createComplexTypes();
fillStructs();
- for (const CDocType & docT : _input) {
- auto iter = _doc_types_in_progress.find(docT.idx);
- LOG_ASSERT(iter != _doc_types_in_progress.end());
- auto & dtInP = iter->second;
+ for (auto & [id, dtInP] : _doc_types_in_progress) {
fillDocument(dtInP);
fillAnnotationTypes(dtInP);
}