diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-04-05 11:25:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-05 11:25:18 +0200 |
commit | a25ada23f00262c55a4283293f8e58a30c9c9b10 (patch) | |
tree | 160684ad03cb03eed8cbc3e2053a57ea4da8be1d | |
parent | 39c278731fe2df3edaf4cc4c478eb3e3acf72b32 (diff) | |
parent | cc148b2396b922aaf81026f227422f96c44cc87e (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.cpp | 10 | ||||
-rw-r--r-- | document/src/tests/repo/import-dt.cfg | 139 | ||||
-rw-r--r-- | document/src/vespa/document/repo/documenttyperepo.cpp | 7 |
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); } |