diff options
8 files changed, 133 insertions, 811 deletions
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 e62471b005..b2014757d7 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 @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2022-2023 Nordix Foundation + * Copyright (C) 2022-2024 Nordix Foundation * Modifications Copyright (C) 2023 TechMahindra Ltd. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -92,7 +92,8 @@ public class FragmentQueryBuilder { sqlStringBuilder.append("SELECT distinct(fragment.anchor_id) FROM fragment " + "JOIN anchor ON anchor.id = fragment.anchor_id WHERE dataspace_id = :dataspaceId"); queryParameters.put("dataspaceId", dataspaceEntity.getId()); - addXpathSearch(cpsPathQuery, sqlStringBuilder, queryParameters); + addAbsoluteParentXpathSearchCondition(cpsPathQuery, sqlStringBuilder, queryParameters, ACROSS_ALL_ANCHORS); + addXpathSearchCondition(cpsPathQuery, sqlStringBuilder, queryParameters); addLeafConditions(cpsPathQuery, sqlStringBuilder); addTextFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters); addContainsFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters); @@ -125,7 +126,8 @@ public class FragmentQueryBuilder { sqlStringBuilder.append("SELECT * FROM fragment WHERE anchor_id = :anchorId"); queryParameters.put("anchorId", anchorEntity.getId()); } - addXpathSearch(cpsPathQuery, sqlStringBuilder, queryParameters); + addAbsoluteParentXpathSearchCondition(cpsPathQuery, sqlStringBuilder, queryParameters, anchorEntity); + addXpathSearchCondition(cpsPathQuery, sqlStringBuilder, queryParameters); addLeafConditions(cpsPathQuery, sqlStringBuilder); addTextFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters); addContainsFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters); @@ -135,9 +137,9 @@ public class FragmentQueryBuilder { return query; } - private static void addXpathSearch(final CpsPathQuery cpsPathQuery, - final StringBuilder sqlStringBuilder, - final Map<String, Object> queryParameters) { + private static void addXpathSearchCondition(final CpsPathQuery cpsPathQuery, + final StringBuilder sqlStringBuilder, + final Map<String, Object> queryParameters) { sqlStringBuilder.append(" AND (xpath LIKE :escapedXpath OR " + "(xpath LIKE :escapedXpath||'[@%]' AND xpath NOT LIKE :escapedXpath||'[@%]/%[@%]'))"); if (CpsPathPrefixType.ABSOLUTE.equals(cpsPathQuery.getCpsPathPrefixType())) { @@ -147,6 +149,25 @@ public class FragmentQueryBuilder { } } + private static void addAbsoluteParentXpathSearchCondition(final CpsPathQuery cpsPathQuery, + final StringBuilder sqlStringBuilder, + final Map<String, Object> queryParameters, + final AnchorEntity anchorEntity) { + if (CpsPathPrefixType.ABSOLUTE.equals(cpsPathQuery.getCpsPathPrefixType())) { + if (cpsPathQuery.getNormalizedParentPath().isEmpty()) { + sqlStringBuilder.append(" AND parent_id IS NULL"); + } else { + if (anchorEntity == ACROSS_ALL_ANCHORS) { + sqlStringBuilder.append(" AND parent_id IN (SELECT id FROM fragment WHERE xpath = :parentXpath)"); + } else { + sqlStringBuilder.append(" AND parent_id = (SELECT id FROM fragment WHERE xpath = :parentXpath" + + " AND anchor_id = :anchorId)"); + } + queryParameters.put("parentXpath", cpsPathQuery.getNormalizedParentPath()); + } + } + } + private static void addPaginationCondition(final StringBuilder sqlStringBuilder, final Map<String, Object> queryParameters, final PaginationOption paginationOption) { diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 191a04d1aa..779a347332 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -75,6 +75,7 @@ Features -------- - `CPS-1824 <https://jira.onap.org/browse/CPS-1824>`_ CPS Delta between 2 anchors. - `CPS-2072 <https://jira.onap.org/browse/CPS-2072>`_ Add maven classifier to Spring Boot JAR. + - `CPS-1135 <https://jira.onap.org/browse/CPS-1135>`_ Extend CPS Module API to allow retrieval single module definition. Notes ----- diff --git a/integration-test/pom.xml b/integration-test/pom.xml index 6947a94aaa..c3a5eee29c 100644 --- a/integration-test/pom.xml +++ b/integration-test/pom.xml @@ -78,11 +78,6 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.springframework.kafka</groupId> - <artifactId>spring-kafka-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <scope>test</scope> diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy index b59e0ff553..27a9877472 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy @@ -20,64 +20,54 @@ package org.onap.cps.integration.base +import java.time.OffsetDateTime import org.onap.cps.api.CpsAnchorService import org.onap.cps.api.CpsDataService import org.onap.cps.api.CpsDataspaceService import org.onap.cps.api.CpsModuleService import org.onap.cps.api.CpsQueryService import org.onap.cps.integration.DatabaseTestContainer -import org.onap.cps.spi.config.CpsSessionFactory import org.onap.cps.spi.exceptions.DataspaceNotFoundException import org.onap.cps.spi.model.DataNode import org.onap.cps.spi.repository.DataspaceRepository -import org.onap.cps.spi.impl.utils.CpsValidatorImpl import org.onap.cps.spi.utils.SessionManager import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.autoconfigure.domain.EntityScan import org.springframework.boot.test.context.SpringBootTest import org.springframework.context.annotation.ComponentScan -import org.springframework.context.annotation.Lazy import org.springframework.data.jpa.repository.config.EnableJpaRepositories import org.testcontainers.spock.Testcontainers import spock.lang.Shared import spock.lang.Specification -import java.time.OffsetDateTime - -@SpringBootTest(classes = [TestConfig, CpsValidatorImpl, SessionManager, CpsSessionFactory]) +@SpringBootTest(classes = [CpsDataspaceService]) @Testcontainers @EnableAutoConfiguration @EnableJpaRepositories(basePackageClasses = [DataspaceRepository]) -@ComponentScan(basePackages = ['org.onap.cps.api', 'org.onap.cps.spi.repository']) +@ComponentScan(basePackages = ['org.onap.cps']) @EntityScan('org.onap.cps.spi.entities') -class CpsIntegrationSpecBase extends Specification { +abstract class CpsIntegrationSpecBase extends Specification { @Shared DatabaseTestContainer databaseTestContainer = DatabaseTestContainer.getInstance() @Autowired - @Lazy CpsDataspaceService cpsDataspaceService @Autowired - @Lazy CpsAnchorService cpsAnchorService @Autowired - @Lazy CpsDataService cpsDataService @Autowired - @Lazy CpsModuleService cpsModuleService @Autowired - @Lazy CpsQueryService cpsQueryService @Autowired - @Lazy SessionManager sessionManager def static GENERAL_TEST_DATASPACE = 'generalTestDataspace' @@ -90,7 +80,7 @@ class CpsIntegrationSpecBase extends Specification { if (!initialized) { cpsDataspaceService.createDataspace(GENERAL_TEST_DATASPACE) createStandardBookStoreSchemaSet(GENERAL_TEST_DATASPACE) - initialized = true; + initialized = true } } @@ -127,7 +117,7 @@ class CpsIntegrationSpecBase extends Specification { def dataspaceExists(dataspaceName) { try { cpsDataspaceService.getDataspace(dataspaceName) - } catch (DataspaceNotFoundException dataspaceNotFoundException) { + } catch (DataspaceNotFoundException ignored) { return false } return true @@ -141,29 +131,15 @@ class CpsIntegrationSpecBase extends Specification { } def createJsonArray(name, numberOfElements, keyName, keyValuePrefix, dataPerKey) { - def json = '{"' + name + '":[' - (1..numberOfElements).each { - json += '{"' + keyName + '":"' + keyValuePrefix + '-' + it + '"' - if (!dataPerKey.isEmpty()) { - json += ',' + dataPerKey - } - json += '}' - if (it < numberOfElements) { - json += ',' - } - } - json += ']}' + def innerJson = (1..numberOfElements).collect { + '{"' + keyName + '":"' + keyValuePrefix + '-' + it + '"' + (dataPerKey.empty? '': ',' + dataPerKey) + '}' + }.join(',') + return '{"' + name + '":[' + innerJson + ']}' } def createLeafList(name, numberOfElements, valuePrefix) { - def json = '"' + name + '":[' - (1..numberOfElements).each { - json += '"' + valuePrefix + '-' + it + '"' - if (it < numberOfElements) { - json += ',' - } - } - json += ']' + def innerJson = (1..numberOfElements).collect {'"' + valuePrefix + '-' + it + '"'}.join(',') + return '"' + name + '":[' + innerJson + ']' } } diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/base/FunctionalSpecBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/base/FunctionalSpecBase.groovy index b3b5842142..6929a2b678 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/base/FunctionalSpecBase.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/base/FunctionalSpecBase.groovy @@ -23,7 +23,7 @@ package org.onap.cps.integration.base import java.time.OffsetDateTime -class FunctionalSpecBase extends CpsIntegrationSpecBase { +abstract class FunctionalSpecBase extends CpsIntegrationSpecBase { def static FUNCTIONAL_TEST_DATASPACE_1 = 'functionalTestDataspace1' def static FUNCTIONAL_TEST_DATASPACE_2 = 'functionalTestDataspace2' diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/base/TestConfig.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/base/TestConfig.groovy deleted file mode 100644 index 69c2d17445..0000000000 --- a/integration-test/src/test/groovy/org/onap/cps/integration/base/TestConfig.groovy +++ /dev/null @@ -1,131 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2023-2024 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========================================================= - */ - -package org.onap.cps.integration.base - -import com.fasterxml.jackson.databind.ObjectMapper -import org.onap.cps.api.impl.YangTextSchemaSourceSetCache -import org.onap.cps.spi.CpsDataPersistenceService -import org.onap.cps.spi.CpsModulePersistenceService -import org.onap.cps.spi.impl.CpsAdminPersistenceServiceImpl -import org.onap.cps.spi.impl.CpsDataPersistenceServiceImpl -import org.onap.cps.spi.impl.CpsModulePersistenceServiceImpl -import org.onap.cps.spi.repository.AnchorRepository -import org.onap.cps.spi.repository.DataspaceRepository -import org.onap.cps.spi.repository.FragmentRepository -import org.onap.cps.spi.repository.ModuleReferenceRepository -import org.onap.cps.spi.repository.SchemaSetRepository -import org.onap.cps.spi.repository.YangResourceRepository -import org.onap.cps.spi.utils.SessionManager -import org.onap.cps.spi.utils.TimeLimiterProvider -import org.onap.cps.utils.JsonObjectMapper -import org.onap.cps.utils.YangParser -import org.onap.cps.utils.YangParserHelper -import org.onap.cps.yang.TimedYangTextSchemaSourceSetBuilder -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Lazy -import spock.lang.Specification - -@Configuration -class TestConfig extends Specification{ - @Autowired - @Lazy - DataspaceRepository dataspaceRepository - - @Autowired - @Lazy - AnchorRepository anchorRepository - - @Autowired - @Lazy - SchemaSetRepository schemaSetRepository - - @Autowired - @Lazy - YangResourceRepository yangResourceRepository - - @Autowired - @Lazy - FragmentRepository fragmentRepository - - @Autowired - @Lazy - ModuleReferenceRepository moduleReferenceRepository - - @Autowired - @Lazy - JsonObjectMapper jsonObjectMapper - - @Autowired - @Lazy - SessionManager sessionManager - - @Autowired - @Lazy - YangParserHelper yangParserHelper - - @Autowired - @Lazy - YangTextSchemaSourceSetCache YangTextSchemaSourceSetCache - - - @Bean - CpsAdminPersistenceServiceImpl cpsAdminPersistenceService() { - new CpsAdminPersistenceServiceImpl(dataspaceRepository, anchorRepository, schemaSetRepository, yangResourceRepository) - } - - @Bean - CpsDataPersistenceService cpsDataPersistenceService() { - return (CpsDataPersistenceService) new CpsDataPersistenceServiceImpl(dataspaceRepository, anchorRepository, fragmentRepository, jsonObjectMapper, sessionManager) - } - - @Bean - CpsModulePersistenceService cpsModulePersistenceService() { - return (CpsModulePersistenceService) new CpsModulePersistenceServiceImpl(yangResourceRepository, schemaSetRepository, dataspaceRepository, moduleReferenceRepository) - } - - @Bean - JsonObjectMapper jsonObjectMapper() { - return new JsonObjectMapper(new ObjectMapper()) - } - - @Bean - YangParserHelper yangParserHelper() { - return new YangParserHelper() - } - - @Bean - YangParser yangParser() { - return new YangParser(yangParserHelper, yangTextSchemaSourceSetCache) - } - - @Bean - TimedYangTextSchemaSourceSetBuilder textSchemaSourceSetBuilder() { - return new TimedYangTextSchemaSourceSetBuilder() - } - - @Bean - TimeLimiterProvider timeLimiterProvider() { - return new TimeLimiterProvider() - } - -} diff --git a/integration-test/src/test/resources/application.yml b/integration-test/src/test/resources/application.yml index 55560aa626..1a08e542b6 100644 --- a/integration-test/src/test/resources/application.yml +++ b/integration-test/src/test/resources/application.yml @@ -15,14 +15,24 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= +rest: + api: + cps-base-path: /cps/api + ncmp-base-path: /ncmp + ncmp-inventory-base-path: /ncmpInventory + spring: + main: + banner-mode: off + + application: + name: cps-integration-test + jpa: - ddl-auto: create - show-sql: false properties: hibernate.enable_lazy_load_no_trans: true hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect - hibernate.format_sql: true + hibernate.format_sql: false hibernate.show_sql: false # Please ensure these values match those used in cps-application/src/main/resources/application.yml hibernate.id.new_generator_mappings: true @@ -34,6 +44,84 @@ spring: password: ${DB_PASSWORD} driverClassName: org.postgresql.Driver initialization-mode: always + hikari: + minimumIdle: 5 + maximumPoolSize: 80 + idleTimeout: 60000 + connectionTimeout: 120000 + leakDetectionThreshold: 30000 + pool-name: CpsDatabasePool + + cache: + type: caffeine + cache-names: yangSchema + caffeine: + spec: maximumSize=10000,expireAfterAccess=10m liquibase: - change-log: classpath:liquibase/test-changelog.yaml + change-log: classpath:changelog/changelog-master.yaml + + servlet: + multipart: + enabled: true + max-file-size: 100MB + max-request-size: 100MB + + jackson: + default-property-inclusion: NON_NULL + serialization: + FAIL_ON_EMPTY_BEANS: false + + sql: + init: + mode: ALWAYS + +notification: + enabled: false + +springdoc: + swagger-ui: + disable-swagger-default-url: true + urlsPrimaryName: cps-core + urls: + - name: cps-core + url: /api-docs/cps-core/openapi.yaml + - name: cps-ncmp + url: /api-docs/cps-ncmp/openapi.yaml + - name: cps-ncmp-inventory + url: /api-docs/cps-ncmp/openapi-inventory.yaml + +security: + # comma-separated uri patterns which do not require authorization + permit-uri: /actuator/**,/swagger-ui.html,/swagger-ui/**,/swagger-resources/**,/api-docs/**,/v3/api-docs/** + auth: + username: cps + password: cpsr0cks! + +# Actuator +management: + endpoints: + web: + exposure: + include: info,health,loggers,prometheus + endpoint: + health: + show-details: always + # kubernetes probes: liveness and readiness + probes: + enabled: false + +logging: + format: text + level: + org: + springframework: INFO + onap: + cps: INFO + +hazelcast: + cluster-name: cps-and-ncmp-test-caches + mode: + kubernetes: + enabled: false + service-name: cps-and-ncmp-service diff --git a/integration-test/src/test/resources/liquibase/test-changelog.yaml b/integration-test/src/test/resources/liquibase/test-changelog.yaml deleted file mode 100644 index ba639ede01..0000000000 --- a/integration-test/src/test/resources/liquibase/test-changelog.yaml +++ /dev/null @@ -1,628 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2023-2024 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. -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - id: 1-1 - author: cps - changes: - - createTable: - columns: - - column: - autoIncrement: true - constraints: - nullable: false - primaryKey: true - primaryKeyName: anchor_pkey - name: id - type: BIGINT - - column: - name: name - type: TEXT - - column: - name: schema_set_id - type: INTEGER - - column: - constraints: - nullable: false - name: dataspace_id - type: INTEGER - tableName: anchor - - changeSet: - id: 1-2 - author: cps - changes: - - createTable: - columns: - - column: - constraints: - nullable: false - name: from_fragment_id - type: BIGINT - - column: - constraints: - nullable: false - name: to_fragment_id - type: BIGINT - - column: - constraints: - nullable: false - name: relation_type_id - type: INTEGER - - column: - constraints: - nullable: false - name: from_rel_xpath - type: TEXT - - column: - constraints: - nullable: false - name: to_rel_xpath - type: TEXT - tableName: relation - - changeSet: - id: 1-3 - author: cps - changes: - - createTable: - columns: - - column: - constraints: - nullable: false - name: relation_type - type: TEXT - - column: - autoIncrement: true - constraints: - nullable: false - primaryKey: true - primaryKeyName: relation_type_pkey - name: id - type: INTEGER - tableName: relation_type - - changeSet: - id: 1-4 - author: cps - changes: - - createTable: - columns: - - column: - autoIncrement: false - constraints: - nullable: false - primaryKey: true - primaryKeyName: fragment_pkey - name: id - type: BIGINT - - column: - constraints: - nullable: false - name: xpath - type: TEXT - - column: - name: attributes - type: JSONB - - column: - constraints: - nullable: false - name: anchor_id - type: BIGINT - - column: - name: parent_id - type: BIGINT - - column: - name: schema_node_id - type: INTEGER - tableName: fragment - - createSequence: - dataType: BIGINT - incrementBy: 100 - sequenceName: fragment_id_seq - startValue: 100 - - changeSet: - id: 1-5 - author: cps - changes: - - createTable: - columns: - - column: - autoIncrement: true - constraints: - nullable: false - primaryKey: true - primaryKeyName: schema_set_pkey - name: id - type: INTEGER - - column: - constraints: - nullable: false - name: name - type: TEXT - - column: - constraints: - nullable: false - name: dataspace_id - type: INTEGER - tableName: schema_set - - changeSet: - id: 1-6 - author: cps - changes: - - createTable: - columns: - - column: - autoIncrement: true - constraints: - nullable: false - primaryKey: true - primaryKeyName: yang_resource_pkey - name: id - type: INTEGER - - column: - constraints: - nullable: false - name: name - type: TEXT - - column: - constraints: - nullable: false - name: content - type: TEXT - - column: - constraints: - nullable: false - name: checksum - type: TEXT - tableName: yang_resource - - changeSet: - id: 1-7 - author: cps - changes: - - createTable: - columns: - - column: - autoIncrement: true - constraints: - nullable: false - primaryKey: true - primaryKeyName: dataspace_pkey - name: id - type: INTEGER - - column: - constraints: - nullable: false - name: name - type: TEXT - tableName: dataspace - - changeSet: - id: 1-8 - author: cps - changes: - - createTable: - columns: - - column: - constraints: - nullable: false - name: schema_node_identifier - type: TEXT - - column: - autoIncrement: true - constraints: - nullable: false - primaryKey: true - primaryKeyName: schema_node_pkey - name: id - type: INTEGER - tableName: schema_node - - changeSet: - id: 1-9 - author: cps - changes: - - createTable: - columns: - - column: - constraints: - nullable: false - name: schema_set_id - type: INTEGER - - column: - constraints: - nullable: false - name: yang_resource_id - type: INTEGER - tableName: schema_set_yang_resources - - changeSet: - id: 1-10 - author: cps - changes: - - createIndex: - columns: - - column: - name: schema_set_id - indexName: FKI_ANCHOR_SCHEMA_SET_ID_FK - tableName: anchor - - changeSet: - id: 1-11 - author: cps - changes: - - addUniqueConstraint: - columnNames: dataspace_id, name - constraintName: anchor_dataspace_id_name_key - tableName: anchor - - changeSet: - id: 1-12 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: anchor_id - baseTableName: fragment - constraintName: fragment_anchor_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: anchor - validate: true - - changeSet: - id: 1-13 - author: cps - changes: - - createIndex: - columns: - - column: - name: from_fragment_id - indexName: FKI_RELATIONS_FROM_ID_FK - tableName: relation - - changeSet: - id: 1-14 - author: cps - changes: - - createIndex: - columns: - - column: - name: to_fragment_id - indexName: FKI_RELATIONS_TO_ID_FK - tableName: relation - - changeSet: - id: 1-15 - author: cps - changes: - - createIndex: - columns: - - column: - name: relation_type_id - indexName: FKI_RELATION_TYPE_ID_FK - tableName: relation - - changeSet: - id: 1-16 - author: cps - changes: - - addPrimaryKey: - columnNames: to_fragment_id, from_fragment_id, relation_type_id - constraintName: relation_pkey - tableName: relation - - changeSet: - id: 1-17 - author: cps - changes: - - createIndex: - columns: - - column: - name: anchor_id - indexName: FKI_FRAGMENT_ANCHOR_ID_FK - tableName: fragment - - changeSet: - id: 1-19 - author: cps - changes: - - createIndex: - columns: - - column: - name: parent_id - indexName: FKI_FRAGMENT_PARENT_ID_FK - tableName: fragment - - changeSet: - id: 1-20 - author: cps - changes: - - createIndex: - columns: - - column: - name: schema_node_id - indexName: FKI_SCHEMA_NODE_ID_TO_ID - tableName: fragment - - changeSet: - id: 1-22 - author: cps - changes: - - addUniqueConstraint: - columnNames: anchor_id, xpath - constraintName: fragment_anchor_id_xpath_key - tableName: fragment - - changeSet: - id: 1-23 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: from_fragment_id - baseTableName: relation - constraintName: relation_from_fragment_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: fragment - validate: true - - changeSet: - id: 1-24 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: to_fragment_id - baseTableName: relation - constraintName: relation_to_fragment_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: fragment - validate: true - - changeSet: - id: 1-25 - author: cps - changes: - - addUniqueConstraint: - columnNames: name, dataspace_id - constraintName: schema_set_name_dataspace_id_key - tableName: schema_set - - changeSet: - id: 1-26 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: schema_set_id - baseTableName: schema_set_yang_resources - constraintName: schema_set_resource - deferrable: false - initiallyDeferred: false - onDelete: CASCADE - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: schema_set - validate: true - - changeSet: - id: 1-27 - author: cps - changes: - - addUniqueConstraint: - columnNames: checksum - constraintName: yang_resource_checksum_key - tableName: yang_resource - - changeSet: - id: 1-28 - author: cps - changes: - - addUniqueConstraint: - columnNames: name - constraintName: UQ_NAME - tableName: dataspace - - changeSet: - id: 1-30 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: dataspace_id - baseTableName: schema_set - constraintName: schema_set_dataspace - deferrable: false - initiallyDeferred: false - onDelete: CASCADE - onUpdate: CASCADE - referencedColumnNames: id - referencedTableName: dataspace - validate: true - - changeSet: - id: 1-31 - author: cps - changes: - - createIndex: - columns: - - column: - name: schema_node_identifier - indexName: PERF_SCHEMA_NODE_SCHEMA_NODE_ID - tableName: schema_node - - changeSet: - id: 1-32 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: yang_resource_id - baseTableName: schema_set_yang_resources - constraintName: schema_set_yang_resources_yang_resource_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: yang_resource - validate: true - - changeSet: - id: 1-33 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: dataspace_id - baseTableName: anchor - constraintName: anchor_dataspace_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: dataspace - validate: true - - changeSet: - id: 1-34 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: schema_set_id - baseTableName: anchor - constraintName: anchor_schema_set_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: schema_set - validate: true - - changeSet: - id: 1-35 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: relation_type_id - baseTableName: relation - constraintName: relation_relation_type_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: relation_type - validate: true - - changeSet: - id: 1-36 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: parent_id - baseTableName: fragment - constraintName: fragment_parent_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: fragment - validate: true - - changeSet: - id: 1-37 - author: cps - changes: - - addForeignKeyConstraint: - baseColumnNames: schema_node_id - baseTableName: fragment - constraintName: fragment_schema_node_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: schema_node - validate: true - - - - changeSet: - id: 1-38 - label: add-module-name-and-revision-column - author: cps - changes: - - addColumn: - tableName: yang_resource - columns: - - column: - name: module_name - type: TEXT - - column: - name: revision - type: TEXT - - - changeSet: - id: 1-39 - label: update-previous-data-module-name-and-revision - author: cps - changes: - - sql: - sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null - rollback: - sql: update yang_resource set module_name = null, revision = null where module_name = 'dummy_module_name' and revision = '2021-08-04' - - - changeSet: - author: cps - label: yang-resource-rename-column - id: 1-40 - changes: - - renameColumn: - tableName: yang_resource - columnDataType: TEXT - oldColumnName: name - newColumnName: file_name - rollback: - - sql: - sql: alter table yang_resource rename column file_name to name - - - changeSet: - author: cps - id: 1-41 - changes: - - createIndex: - columns: - - column: - name: schema_set_id - indexName: FKI_SCHEMA_SET_YANG_RESOURCES_SCHEMA_SET_ID_FK - tableName: schema_set_yang_resources - rollback: - - dropIndex: - indexName: FKI_SCHEMA_SET_YANG_RESOURCES_SCHEMA_SET_ID_FK - tableName: schema_set_yang_resources - - - changeSet: - author: cps - id: 1-42 - changes: - - dropForeignKeyConstraint: - baseTableName: fragment - constraintName: fragment_parent_id_fkey - - addForeignKeyConstraint: - baseColumnNames: parent_id - baseTableName: fragment - constraintName: fragment_parent_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: CASCADE - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: fragment - validate: true - rollback: - - dropForeignKeyConstraint: - baseTableName: fragment - constraintName: fragment_parent_id_fkey - - addForeignKeyConstraint: - baseColumnNames: parent_id - baseTableName: fragment - constraintName: fragment_parent_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: fragment - validate: true |