aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordanielhanrahan <daniel.hanrahan@est.tech>2023-05-04 22:34:41 +0100
committerdanielhanrahan <daniel.hanrahan@est.tech>2023-05-12 13:17:38 +0100
commitb740156bb50784fc461e2fbda13cd91e3f208b38 (patch)
treeb305c9c827ae7c323e40ac10975a34093e86fecc
parent26a51754dd8aa9b467bcb442e6042f22af2ba001 (diff)
Remove dataspace_id column from Fragment table
- Remove dataspace_id column from fragment table and drop associated index, foreign key constraint and uniqueness constaint. - Add uniqueness constraint using only fragment xpath and anchor_id. - Add not-null constraint to anchor_id. - Update code and test data to remove references to dataspace_id. - Repopulate the dataspace_id in Liquibase rollback (verified with manual testing of update/rollback). Issue-ID: CPS-1677 Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech> Change-Id: I467cccba25ac5d884ec790064ca58150281b7e1d
-rwxr-xr-xcps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntity.java4
-rw-r--r--cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntityArranger.java7
-rw-r--r--cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java1
-rw-r--r--cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentQueryBuilder.java23
-rwxr-xr-xcps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java5
-rw-r--r--cps-ri/src/main/resources/changelog/changelog-master.yaml2
-rw-r--r--cps-ri/src/main/resources/changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml109
-rw-r--r--cps-ri/src/main/resources/changelog/db/changes/19-repopulate-dataspace-id-for-rollback.sql25
-rw-r--r--cps-ri/src/test/resources/data/anchor.sql4
-rwxr-xr-xcps-ri/src/test/resources/data/fragment.sql120
-rw-r--r--cps-ri/src/test/resources/data/perf-test.sql28
-rw-r--r--cps-ri/src/test/resources/data/schemaset.sql6
-rw-r--r--integration-test/src/test/resources/liquibase/test-changelog.yaml36
13 files changed, 247 insertions, 123 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntity.java b/cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntity.java
index 62c8c19cb1..f2cfe6322f 100755
--- a/cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntity.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntity.java
@@ -82,10 +82,6 @@ public class FragmentEntity implements Serializable {
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "dataspace_id")
- private DataspaceEntity dataspace;
-
- @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "anchor_id")
@EqualsAndHashCode.Include
private AnchorEntity anchor;
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntityArranger.java b/cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntityArranger.java
index b7ce98e1ac..c1b1322bb5 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntityArranger.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntityArranger.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2022 Nordix Foundation
+ * Copyright (C) 2022-2023 Nordix Foundation
* Modifications Copyright (C) 2023 TechMahindra Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -71,10 +71,7 @@ public class FragmentEntityArranger {
private static FragmentEntity toFragmentEntity(final AnchorEntity anchorEntity,
final FragmentExtract fragmentExtract) {
final FragmentEntity fragmentEntity = new FragmentEntity();
- if (anchorEntity != null) {
- fragmentEntity.setAnchor(anchorEntity);
- fragmentEntity.setDataspace(anchorEntity.getDataspace());
- }
+ fragmentEntity.setAnchor(anchorEntity);
fragmentEntity.setId(fragmentExtract.getId());
fragmentEntity.setXpath(fragmentExtract.getXpath());
fragmentEntity.setAttributes(fragmentExtract.getAttributes());
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java
index d0154e1163..890941bf33 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java
@@ -218,7 +218,6 @@ public class CpsDataPersistenceServiceImpl implements CpsDataPersistenceService
private FragmentEntity toFragmentEntity(final AnchorEntity anchorEntity, final DataNode dataNode) {
return FragmentEntity.builder()
- .dataspace(anchorEntity.getDataspace())
.anchor(anchorEntity)
.xpath(dataNode.getXpath())
.attributes(jsonObjectMapper.asJsonString(dataNode.getLeaves()))
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentQueryBuilder.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentQueryBuilder.java
index 76cfaa89f8..72750dcc92 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentQueryBuilder.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentQueryBuilder.java
@@ -88,8 +88,14 @@ public class FragmentQueryBuilder {
final StringBuilder sqlStringBuilder = new StringBuilder();
final Map<String, Object> queryParameters = new HashMap<>();
- sqlStringBuilder.append("SELECT * FROM fragment WHERE ");
- addDataspaceOrAnchor(sqlStringBuilder, queryParameters, dataspaceEntity, anchorEntity);
+ if (anchorEntity == ACROSS_ALL_ANCHORS) {
+ sqlStringBuilder.append("SELECT fragment.* FROM fragment JOIN anchor ON anchor.id = fragment.anchor_id"
+ + " WHERE dataspace_id = :dataspaceId");
+ queryParameters.put("dataspaceId", dataspaceEntity.getId());
+ } else {
+ sqlStringBuilder.append("SELECT * FROM fragment WHERE anchor_id = :anchorId");
+ queryParameters.put("anchorId", anchorEntity.getId());
+ }
addXpathSearch(cpsPathQuery, sqlStringBuilder, queryParameters);
addLeafConditions(cpsPathQuery, sqlStringBuilder);
addTextFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters);
@@ -100,19 +106,6 @@ public class FragmentQueryBuilder {
return query;
}
- private static void addDataspaceOrAnchor(final StringBuilder sqlStringBuilder,
- final Map<String, Object> queryParameters,
- final DataspaceEntity dataspaceEntity,
- final AnchorEntity anchorEntity) {
- if (anchorEntity == ACROSS_ALL_ANCHORS) {
- sqlStringBuilder.append("dataspace_id = :dataspaceId");
- queryParameters.put("dataspaceId", dataspaceEntity.getId());
- } else {
- sqlStringBuilder.append("anchor_id = :anchorId");
- queryParameters.put("anchorId", anchorEntity.getId());
- }
- }
-
private static void addXpathSearch(final CpsPathQuery cpsPathQuery,
final StringBuilder sqlStringBuilder,
final Map<String, Object> queryParameters) {
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
index a2763184a6..2691be9844 100755
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
@@ -54,7 +54,10 @@ public interface FragmentRepository extends JpaRepository<FragmentEntity, Long>,
return findByAnchorIdAndXpathIn(anchorEntity.getId(), xpaths.toArray(new String[0]));
}
- List<FragmentEntity> findByDataspaceIdAndXpathIn(int dataspaceId, String[] xpaths);
+ @Query(value = "SELECT fragment.* FROM fragment JOIN anchor ON anchor.id = fragment.anchor_id "
+ + "WHERE dataspace_id = :dataspaceId AND xpath = ANY (:xpaths)", nativeQuery = true)
+ List<FragmentEntity> findByDataspaceIdAndXpathIn(@Param("dataspaceId") int dataspaceId,
+ @Param("xpaths") String[] xpaths);
default List<FragmentEntity> findByDataspaceAndXpathIn(final DataspaceEntity dataspaceEntity,
final Collection<String> xpaths) {
diff --git a/cps-ri/src/main/resources/changelog/changelog-master.yaml b/cps-ri/src/main/resources/changelog/changelog-master.yaml
index bf172d8eae..40e23e2e30 100644
--- a/cps-ri/src/main/resources/changelog/changelog-master.yaml
+++ b/cps-ri/src/main/resources/changelog/changelog-master.yaml
@@ -52,3 +52,5 @@ databaseChangeLog:
file: changelog/db/changes/17-add-index-to-schema-set-yang-resources.yaml
- include:
file: changelog/db/changes/18-cascade-delete-fragment-children.yaml
+ - include:
+ file: changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml
diff --git a/cps-ri/src/main/resources/changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml b/cps-ri/src/main/resources/changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml
new file mode 100644
index 0000000000..7b91bd5b38
--- /dev/null
+++ b/cps-ri/src/main/resources/changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml
@@ -0,0 +1,109 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2023 Nordix Foundation.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+databaseChangeLog:
+
+ - changeSet:
+ id: 19-1
+ author: cps
+ changes:
+ - dropIndex:
+ indexName: FKI_FRAGMENT_DATASPACE_ID_FK
+ tableName: fragment
+ rollback:
+ - createIndex:
+ columns:
+ - column:
+ name: dataspace_id
+ indexName: FKI_FRAGMENT_DATASPACE_ID_FK
+ tableName: fragment
+
+ - changeSet:
+ id: 19-2
+ author: cps
+ changes:
+ - dropUniqueConstraint:
+ constraintName: fragment_dataspace_id_anchor_id_xpath_key
+ tableName: fragment
+ - addUniqueConstraint:
+ columnNames: anchor_id, xpath
+ constraintName: fragment_anchor_id_xpath_key
+ tableName: fragment
+ rollback:
+ - dropUniqueConstraint:
+ constraintName: fragment_anchor_id_xpath_key
+ tableName: fragment
+ - addUniqueConstraint:
+ columnNames: dataspace_id, anchor_id, xpath
+ constraintName: fragment_dataspace_id_anchor_id_xpath_key
+ tableName: fragment
+
+ - changeSet:
+ id: 19-3
+ author: cps
+ changes:
+ - dropForeignKeyConstraint:
+ baseTableName: fragment
+ constraintName: fragment_dataspace_id_fkey
+ rollback:
+ - addForeignKeyConstraint:
+ baseColumnNames: dataspace_id
+ baseTableName: fragment
+ constraintName: fragment_dataspace_id_fkey
+ deferrable: false
+ initiallyDeferred: false
+ onDelete: NO ACTION
+ onUpdate: NO ACTION
+ referencedColumnNames: id
+ referencedTableName: dataspace
+ validate: true
+
+ - changeSet:
+ id: 19-4
+ author: cps
+ changes:
+ - dropColumn:
+ columnName: dataspace_id
+ tableName: fragment
+ rollback:
+ - addColumn:
+ tableName: fragment
+ columns:
+ - column:
+ name: dataspace_id
+ type: INTEGER
+ - sqlFile:
+ path: changelog/db/changes/19-repopulate-dataspace-id-for-rollback.sql
+ - addNotNullConstraint:
+ tableName: fragment
+ columnName: dataspace_id
+ columnDataType: INTEGER
+
+ - changeSet:
+ id: 19-5
+ author: cps
+ changes:
+ - addNotNullConstraint:
+ tableName: fragment
+ columnName: anchor_id
+ columnDataType: BIGINT
+ rollback:
+ - dropNotNullConstraint:
+ tableName: fragment
+ columnName: anchor_id
+ columnDataType: BIGINT
diff --git a/cps-ri/src/main/resources/changelog/db/changes/19-repopulate-dataspace-id-for-rollback.sql b/cps-ri/src/main/resources/changelog/db/changes/19-repopulate-dataspace-id-for-rollback.sql
new file mode 100644
index 0000000000..9c60db0b59
--- /dev/null
+++ b/cps-ri/src/main/resources/changelog/db/changes/19-repopulate-dataspace-id-for-rollback.sql
@@ -0,0 +1,25 @@
+/*
+ ============LICENSE_START=======================================================
+ Copyright (C) 2023 Nordix Foundation.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+*/
+
+UPDATE
+ fragment AS f
+SET
+ dataspace_id = a.dataspace_id
+FROM
+ anchor AS a
+WHERE
+ f.anchor_id = a.id;
diff --git a/cps-ri/src/test/resources/data/anchor.sql b/cps-ri/src/test/resources/data/anchor.sql
index 2ab7966e18..a15d5aed21 100644
--- a/cps-ri/src/test/resources/data/anchor.sql
+++ b/cps-ri/src/test/resources/data/anchor.sql
@@ -35,5 +35,5 @@ INSERT INTO ANCHOR (ID, NAME, DATASPACE_ID, SCHEMA_SET_ID) VALUES
(3002, 'ANCHOR-002', 1001, 2002),
(3003, 'ANCHOR-003', 1001, 2002);
-INSERT INTO FRAGMENT (ID, DATASPACE_ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
- (4001, 1001, 3001, null, '/xpath', '{}');
+INSERT INTO FRAGMENT (ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
+ (4001, 3001, null, '/xpath', '{}');
diff --git a/cps-ri/src/test/resources/data/fragment.sql b/cps-ri/src/test/resources/data/fragment.sql
index caafcd320a..4980073433 100755
--- a/cps-ri/src/test/resources/data/fragment.sql
+++ b/cps-ri/src/test/resources/data/fragment.sql
@@ -1,6 +1,6 @@
/*
============LICENSE_START=======================================================
- Copyright (C) 2021-2022 Nordix Foundation.
+ Copyright (C) 2021-2023 Nordix Foundation.
Modifications Copyright (C) 2021 Pantheon.tech
Modifications Copyright (C) 2021-2022 Bell Canada.
================================================================================
@@ -55,62 +55,62 @@ INSERT INTO ANCHOR (ID, NAME, DATASPACE_ID, SCHEMA_SET_ID) VALUES
(3005, 'ANCHOR-005', 1001, 2001),
(3006, 'ANCHOR-006', 1001, 2001);
-INSERT INTO FRAGMENT (ID, DATASPACE_ID, ANCHOR_ID, PARENT_ID, XPATH) VALUES
- (4001, 1001, 3001, null, '/parent-1'),
- (4002, 1001, 3001, null, '/parent-2'),
- (4003, 1001, 3001, null, '/parent-3'),
- (4004, 1001, 3001, 4001, '/parent-1/child-1'),
- (4005, 1001, 3001, 4002, '/parent-2/child-2'),
- (4006, 1001, 3001, 4004, '/parent-1/child-1/grandchild-1');
-
-INSERT INTO FRAGMENT (ID, DATASPACE_ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
- (5009, 1001, 3005, null, '/parent-207', '{"parent-leaf": "parent-leaf value"}'),
- (5010, 1001, 3005, 5009, '/parent-207/child-001', '{"first-child-leaf": "first-child-leaf value"}'),
- (5011, 1001, 3005, 5009, '/parent-207/child-002', '{"second-child-leaf": "second-child-leaf value"}'),
- (5012, 1001, 3005, 5011, '/parent-207/child-002/grand-child', '{"grand-child-leaf": "grand-child-leaf value"}');
-
-INSERT INTO FRAGMENT (ID, DATASPACE_ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
- (5013, 1001, 3006, null, '/parent-208', '{"parent-leaf-1": "parent-leaf value-1"}'),
- (5014, 1001, 3006, 5013, '/parent-208/child-001', '{"first-child-leaf": "first-child-leaf value"}'),
- (5015, 1001, 3006, 5013, '/parent-208/child-002', '{"second-child-leaf": "second-child-leaf value"}'),
- (5016, 1001, 3006, 5015, '/parent-208/child-002/grand-child', '{"grand-child-leaf": "grand-child-leaf value"}'),
- (5017, 1001, 3006, null, '/parent-209', '{"parent-leaf-2": "parent-leaf value-2"}'),
- (5018, 1001, 3006, 5017, '/parent-209/child-001', '{"first-child-leaf": "first-child-leaf value"}'),
- (5019, 1001, 3006, 5017, '/parent-209/child-002', '{"second-child-leaf": "second-child-leaf value"}'),
- (5020, 1001, 3006, 5019, '/parent-209/child-002/grand-child', '{"grand-child-leaf": "grand-child-leaf value"}');
-
-INSERT INTO FRAGMENT (ID, DATASPACE_ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
- (4201, 1001, 3003, null, '/parent-200', '{"leaf-value": "original"}'),
- (4202, 1001, 3003, 4201, '/parent-200/child-201', '{"leaf-value": "original"}'),
- (4203, 1001, 3003, 4202, '/parent-200/child-201/grand-child', '{"leaf-value": "original"}'),
- (4206, 1001, 3003, null, '/parent-201', '{"leaf-value": "original"}'),
- (4207, 1001, 3003, 4206, '/parent-201/child-203', '{}'),
- (4208, 1001, 3003, 4206, '/parent-201/child-204[@key=''A'']', '{"key": "A"}'),
- (4209, 1001, 3003, 4206, '/parent-201/child-204[@key=''B'']', '{"key": "B"}'),
- (4211, 1001, 3003, null, '/parent-202', '{"leaf-value": "original"}'),
- (4212, 1001, 3003, 4211, '/parent-202/child-205[@key=''A'' and @key2=''B'']', '{"key": "A", "key2": "B"}'),
- (4213, 1001, 3003, 4211, '/parent-202/child-206[@key=''A'']', '{"key": "A"}'),
- (4214, 1001, 3003, null, '/parent-203', '{"leaf-value": "original"}'),
- (4215, 1001, 3003, 4214, '/parent-203/child-203', '{}'),
- (4216, 1001, 3003, 4214, '/parent-203/child-204[@key=''A'']', '{"key": "A"}'),
- (4217, 1001, 3003, 4214, '/parent-203/child-204[@key=''B'']', '{"key": "B"}'),
- (4218, 1001, 3003, 4217, '/parent-203/child-204[@key=''B'']/grand-child-204[@key2=''Y'']', '{"key": "B", "key2": "Y"}'),
- (4226, 1001, 3003, null, '/parent-206', '{"leaf-value": "original"}'),
- (4227, 1001, 3003, 4226, '/parent-206/child-206', '{}'),
- (4228, 1001, 3003, 4227, '/parent-206/child-206/grand-child-206', '{}'),
- (4229, 1001, 3003, 4227, '/parent-206/child-206/grand-child-206[@key=''A'']', '{"key": "A"}'),
- (4230, 1001, 3003, 4227, '/parent-206/child-206/grand-child-206[@key=''X'']', '{"key": "X"}'),
- (4231, 1001, 3003, null, '/parent-206[@key=''A'']', '{"key": "A"}'),
- (4232, 1001, 3003, 4231, '/parent-206[@key=''A'']/child-206', '{}'),
- (4233, 1001, 3003, null, '/parent-206[@key=''B'']', '{"key": "B"}');
-
-INSERT INTO FRAGMENT (ID, DATASPACE_ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
- (5000, 1002, 3004, null, '/dmi-registry/cm-handles[@id=''PNFDemo'']', '{"id": "PNFDemo", "dmi-service-name": "http://172.21.235.14:8783", "dmi-data-service-name": "", "dmi-model-service-name": ""}'),
- (5001, 1002, 3004, null, '/dmi-registry/cm-handles[@id=''PNFDemo2'']', '{"id": "PNFDemo2", "dmi-service-name": "http://172.26.46.68:8783", "dmi-data-service-name": "", "dmi-model-service-name": ""}'),
- (5002, 1002, 3004, null, '/dmi-registry/cm-handles[@id=''PNFDemo3'']', '{"id": "PNFDemo3", "dmi-service-name": "http://172.26.46.68:8783", "dmi-data-service-name": "", "dmi-model-service-name": ""}'),
- (5003, 1002, 3004, null, '/dmi-registry/cm-handles[@id=''PNFDemo4'']', '{"id": "PNFDemo4", "dmi-service-name": "http://172.26.46.68:8783", "dmi-data-service-name": "", "dmi-model-service-name": ""}'),
- (5004, 1002, 3004, 5000, '/dmi-registry/cm-handles[@id=''PNFDemo'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore@bookstore.com"}'),
- (5005, 1002, 3004, 5001, '/dmi-registry/cm-handles[@id=''PNFDemo2'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore@bookstore.com"}'),
- (5006, 1002, 3004, 5002, '/dmi-registry/cm-handles[@id=''PNFDemo3'']/public-properties[@name=''Contact'']', '{"name": "Contact3", "value": "PNF3@bookstore.com"}'),
- (5007, 1002, 3004, 5003, '/dmi-registry/cm-handles[@id=''PNFDemo4'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore@bookstore.com"}'),
- (5008, 1002, 3004, 5004, '/dmi-registry/cm-handles[@id=''PNFDemo4'']/public-properties[@name=''Contact2'']', '{"name": "Contact2", "value": "newemailforstore2@bookstore.com"}');
+INSERT INTO FRAGMENT (ID, ANCHOR_ID, PARENT_ID, XPATH) VALUES
+ (4001, 3001, null, '/parent-1'),
+ (4002, 3001, null, '/parent-2'),
+ (4003, 3001, null, '/parent-3'),
+ (4004, 3001, 4001, '/parent-1/child-1'),
+ (4005, 3001, 4002, '/parent-2/child-2'),
+ (4006, 3001, 4004, '/parent-1/child-1/grandchild-1');
+
+INSERT INTO FRAGMENT (ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
+ (5009, 3005, null, '/parent-207', '{"parent-leaf": "parent-leaf value"}'),
+ (5010, 3005, 5009, '/parent-207/child-001', '{"first-child-leaf": "first-child-leaf value"}'),
+ (5011, 3005, 5009, '/parent-207/child-002', '{"second-child-leaf": "second-child-leaf value"}'),
+ (5012, 3005, 5011, '/parent-207/child-002/grand-child', '{"grand-child-leaf": "grand-child-leaf value"}');
+
+INSERT INTO FRAGMENT (ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
+ (5013, 3006, null, '/parent-208', '{"parent-leaf-1": "parent-leaf value-1"}'),
+ (5014, 3006, 5013, '/parent-208/child-001', '{"first-child-leaf": "first-child-leaf value"}'),
+ (5015, 3006, 5013, '/parent-208/child-002', '{"second-child-leaf": "second-child-leaf value"}'),
+ (5016, 3006, 5015, '/parent-208/child-002/grand-child', '{"grand-child-leaf": "grand-child-leaf value"}'),
+ (5017, 3006, null, '/parent-209', '{"parent-leaf-2": "parent-leaf value-2"}'),
+ (5018, 3006, 5017, '/parent-209/child-001', '{"first-child-leaf": "first-child-leaf value"}'),
+ (5019, 3006, 5017, '/parent-209/child-002', '{"second-child-leaf": "second-child-leaf value"}'),
+ (5020, 3006, 5019, '/parent-209/child-002/grand-child', '{"grand-child-leaf": "grand-child-leaf value"}');
+
+INSERT INTO FRAGMENT (ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
+ (4201, 3003, null, '/parent-200', '{"leaf-value": "original"}'),
+ (4202, 3003, 4201, '/parent-200/child-201', '{"leaf-value": "original"}'),
+ (4203, 3003, 4202, '/parent-200/child-201/grand-child', '{"leaf-value": "original"}'),
+ (4206, 3003, null, '/parent-201', '{"leaf-value": "original"}'),
+ (4207, 3003, 4206, '/parent-201/child-203', '{}'),
+ (4208, 3003, 4206, '/parent-201/child-204[@key=''A'']', '{"key": "A"}'),
+ (4209, 3003, 4206, '/parent-201/child-204[@key=''B'']', '{"key": "B"}'),
+ (4211, 3003, null, '/parent-202', '{"leaf-value": "original"}'),
+ (4212, 3003, 4211, '/parent-202/child-205[@key=''A'' and @key2=''B'']', '{"key": "A", "key2": "B"}'),
+ (4213, 3003, 4211, '/parent-202/child-206[@key=''A'']', '{"key": "A"}'),
+ (4214, 3003, null, '/parent-203', '{"leaf-value": "original"}'),
+ (4215, 3003, 4214, '/parent-203/child-203', '{}'),
+ (4216, 3003, 4214, '/parent-203/child-204[@key=''A'']', '{"key": "A"}'),
+ (4217, 3003, 4214, '/parent-203/child-204[@key=''B'']', '{"key": "B"}'),
+ (4218, 3003, 4217, '/parent-203/child-204[@key=''B'']/grand-child-204[@key2=''Y'']', '{"key": "B", "key2": "Y"}'),
+ (4226, 3003, null, '/parent-206', '{"leaf-value": "original"}'),
+ (4227, 3003, 4226, '/parent-206/child-206', '{}'),
+ (4228, 3003, 4227, '/parent-206/child-206/grand-child-206', '{}'),
+ (4229, 3003, 4227, '/parent-206/child-206/grand-child-206[@key=''A'']', '{"key": "A"}'),
+ (4230, 3003, 4227, '/parent-206/child-206/grand-child-206[@key=''X'']', '{"key": "X"}'),
+ (4231, 3003, null, '/parent-206[@key=''A'']', '{"key": "A"}'),
+ (4232, 3003, 4231, '/parent-206[@key=''A'']/child-206', '{}'),
+ (4233, 3003, null, '/parent-206[@key=''B'']', '{"key": "B"}');
+
+INSERT INTO FRAGMENT (ID, ANCHOR_ID, PARENT_ID, XPATH, ATTRIBUTES) VALUES
+ (5000, 3004, null, '/dmi-registry/cm-handles[@id=''PNFDemo'']', '{"id": "PNFDemo", "dmi-service-name": "http://172.21.235.14:8783", "dmi-data-service-name": "", "dmi-model-service-name": ""}'),
+ (5001, 3004, null, '/dmi-registry/cm-handles[@id=''PNFDemo2'']', '{"id": "PNFDemo2", "dmi-service-name": "http://172.26.46.68:8783", "dmi-data-service-name": "", "dmi-model-service-name": ""}'),
+ (5002, 3004, null, '/dmi-registry/cm-handles[@id=''PNFDemo3'']', '{"id": "PNFDemo3", "dmi-service-name": "http://172.26.46.68:8783", "dmi-data-service-name": "", "dmi-model-service-name": ""}'),
+ (5003, 3004, null, '/dmi-registry/cm-handles[@id=''PNFDemo4'']', '{"id": "PNFDemo4", "dmi-service-name": "http://172.26.46.68:8783", "dmi-data-service-name": "", "dmi-model-service-name": ""}'),
+ (5004, 3004, 5000, '/dmi-registry/cm-handles[@id=''PNFDemo'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore@bookstore.com"}'),
+ (5005, 3004, 5001, '/dmi-registry/cm-handles[@id=''PNFDemo2'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore@bookstore.com"}'),
+ (5006, 3004, 5002, '/dmi-registry/cm-handles[@id=''PNFDemo3'']/public-properties[@name=''Contact'']', '{"name": "Contact3", "value": "PNF3@bookstore.com"}'),
+ (5007, 3004, 5003, '/dmi-registry/cm-handles[@id=''PNFDemo4'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore@bookstore.com"}'),
+ (5008, 3004, 5004, '/dmi-registry/cm-handles[@id=''PNFDemo4'']/public-properties[@name=''Contact2'']', '{"name": "Contact2", "value": "newemailforstore2@bookstore.com"}');
diff --git a/cps-ri/src/test/resources/data/perf-test.sql b/cps-ri/src/test/resources/data/perf-test.sql
new file mode 100644
index 0000000000..48e8b1fbb5
--- /dev/null
+++ b/cps-ri/src/test/resources/data/perf-test.sql
@@ -0,0 +1,28 @@
+/*
+ ============LICENSE_START=======================================================
+ Copyright (C) 2022-2023 Nordix Foundation.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+*/
+
+INSERT INTO DATASPACE (ID, NAME) VALUES (9001, 'PERF-DATASPACE');
+
+INSERT INTO SCHEMA_SET (ID, NAME, DATASPACE_ID) VALUES (9002, 'PERF-SCHEMA-SET', 9001);
+
+INSERT INTO ANCHOR (ID, NAME, DATASPACE_ID, SCHEMA_SET_ID) VALUES (9003, 'PERF-ANCHOR', 9001, 9002);
+
+INSERT INTO FRAGMENT (ID, ANCHOR_ID, PARENT_ID, XPATH) VALUES (0, 9003, null, '/perf-parent-1');
+
diff --git a/cps-ri/src/test/resources/data/schemaset.sql b/cps-ri/src/test/resources/data/schemaset.sql
index ad611664b8..e5bf63b701 100644
--- a/cps-ri/src/test/resources/data/schemaset.sql
+++ b/cps-ri/src/test/resources/data/schemaset.sql
@@ -1,7 +1,7 @@
/*
============LICENSE_START=======================================================
Copyright (C) 2020-2021 Pantheon.tech
- Modifications Copyright (C) 2020-2022 Nordix Foundation.
+ Modifications Copyright (C) 2020-2023 Nordix Foundation.
Modifications Copyright (C) 2020-2021 Bell Canada.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
@@ -53,5 +53,5 @@ INSERT INTO ANCHOR (ID, NAME, DATASPACE_ID, SCHEMA_SET_ID) VALUES -- anchors for
(6002, 'ANCHOR2', 1001, 2101),
(6003, 'ANCHOR3', 1001, 2005);
-INSERT INTO FRAGMENT (ID, XPATH, ANCHOR_ID, DATASPACE_ID) VALUES
- (7001, '/XPATH', 6001, 1001); \ No newline at end of file
+INSERT INTO FRAGMENT (ID, XPATH, ANCHOR_ID) VALUES
+ (7001, '/XPATH', 6001);
diff --git a/integration-test/src/test/resources/liquibase/test-changelog.yaml b/integration-test/src/test/resources/liquibase/test-changelog.yaml
index f53fef70b7..f9e2e2fafb 100644
--- a/integration-test/src/test/resources/liquibase/test-changelog.yaml
+++ b/integration-test/src/test/resources/liquibase/test-changelog.yaml
@@ -116,17 +116,14 @@ databaseChangeLog:
name: attributes
type: JSONB
- column:
+ constraints:
+ nullable: false
name: anchor_id
type: BIGINT
- column:
name: parent_id
type: BIGINT
- column:
- constraints:
- nullable: false
- name: dataspace_id
- type: INTEGER
- - column:
name: schema_node_id
type: INTEGER
tableName: fragment
@@ -324,16 +321,6 @@ databaseChangeLog:
indexName: FKI_FRAGMENT_ANCHOR_ID_FK
tableName: fragment
- changeSet:
- id: 1-18
- author: cps
- changes:
- - createIndex:
- columns:
- - column:
- name: dataspace_id
- indexName: FKI_FRAGMENT_DATASPACE_ID_FK
- tableName: fragment
- - changeSet:
id: 1-19
author: cps
changes:
@@ -358,8 +345,8 @@ databaseChangeLog:
author: cps
changes:
- addUniqueConstraint:
- columnNames: dataspace_id, anchor_id, xpath
- constraintName: fragment_dataspace_id_anchor_id_xpath_key
+ columnNames: anchor_id, xpath
+ constraintName: fragment_anchor_id_xpath_key
tableName: fragment
- changeSet:
id: 1-23
@@ -431,21 +418,6 @@ databaseChangeLog:
constraintName: UQ_NAME
tableName: dataspace
- changeSet:
- id: 1-29
- author: cps
- changes:
- - addForeignKeyConstraint:
- baseColumnNames: dataspace_id
- baseTableName: fragment
- constraintName: fragment_dataspace_id_fkey
- deferrable: false
- initiallyDeferred: false
- onDelete: NO ACTION
- onUpdate: NO ACTION
- referencedColumnNames: id
- referencedTableName: dataspace
- validate: true
- - changeSet:
id: 1-30
author: cps
changes: