From d259750511b3c2aaeace49f8ccb1d7f3ad561452 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 9 Dec 2021 15:47:34 +0300 Subject: Prepare for supporting multiple ids in requirement alternative --- libbrep/build-extra.sql | 17 ++++++++++++++++- libbrep/build-package.hxx | 28 ++++++++++++++++++++++++++-- libbrep/build.hxx | 2 +- libbrep/build.xml | 2 ++ libbrep/common.hxx | 19 +++++++++++++++++-- libbrep/package.hxx | 25 +++++++++++++++++++++++-- libbrep/package.xml | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 131 insertions(+), 8 deletions(-) (limited to 'libbrep') diff --git a/libbrep/build-extra.sql b/libbrep/build-extra.sql index bd3df2b..a8464cf 100644 --- a/libbrep/build-extra.sql +++ b/libbrep/build-extra.sql @@ -12,6 +12,8 @@ DROP FOREIGN TABLE IF EXISTS build_package_builds; DROP FOREIGN TABLE IF EXISTS build_package_tests; +DROP FOREIGN TABLE IF EXISTS build_package_requirement_alternative_requirements; + DROP FOREIGN TABLE IF EXISTS build_package_requirement_alternatives; DROP FOREIGN TABLE IF EXISTS build_package_requirements; @@ -82,9 +84,22 @@ CREATE FOREIGN TABLE build_package_requirement_alternatives ( version_revision INTEGER NOT NULL, requirement_index BIGINT NOT NULL, index BIGINT NOT NULL, - id TEXT NOT NULL) + enable TEXT NULL) SERVER package_server OPTIONS (table_name 'package_requirement_alternatives'); +CREATE FOREIGN TABLE build_package_requirement_alternative_requirements ( + tenant TEXT NOT NULL, + name CITEXT NOT NULL, + version_epoch INTEGER NOT NULL, + version_canonical_upstream TEXT NOT NULL, + version_canonical_release TEXT NOT NULL COLLATE "C", + version_revision INTEGER NOT NULL, + requirement_index BIGINT NOT NULL, + alternative_index BIGINT NOT NULL, + index BIGINT NOT NULL, + id TEXT NOT NULL) +SERVER package_server OPTIONS (table_name 'package_requirement_alternative_requirements'); + -- The foreign table for the build_package object tests member (that is of a -- container type). -- diff --git a/libbrep/build-package.hxx b/libbrep/build-package.hxx index 77520d1..c46119d 100644 --- a/libbrep/build-package.hxx +++ b/libbrep/build-package.hxx @@ -135,17 +135,41 @@ namespace brep // requirements // - #pragma db member(requirement_key::outer) column("requirement_index") - #pragma db member(requirement_key::inner) column("index") + // Note that this is a 2-level nested container (see package.hxx for + // details). + // + // Container of the requirement_alternatives values. + // #pragma db member(requirements) id_column("") value_column("") + + // Container of the requirement_alternative values. + // + #pragma db member(requirement_alternative_key::outer) column("requirement_index") + #pragma db member(requirement_alternative_key::inner) column("index") + #pragma db member(requirement_alternatives) \ virtual(requirement_alternatives_map) \ after(requirements) \ get(odb::nested_get (this.requirements)) \ set(odb::nested_set (this.requirements, std::move (?))) \ + id_column("") key_column("") value_column("") + + // Container of the requirement (string) values. + // + #pragma db member(requirement_key::outer) column("requirement_index") + #pragma db member(requirement_key::middle) column("alternative_index") + #pragma db member(requirement_key::inner) column("index") + + #pragma db member(requirement_alternative_requirements) \ + virtual(requirement_alternative_requirements_map) \ + after(requirement_alternatives) \ + get(odb::nested2_get (this.requirements)) \ + set(odb::nested2_set (this.requirements, std::move (?))) \ id_column("") key_column("") value_column("id") + // tests, builds, and constraints + // #pragma db member(tests) id_column("") value_column("test_") #pragma db member(builds) id_column("") value_column("") #pragma db member(constraints) id_column("") value_column("") diff --git a/libbrep/build.hxx b/libbrep/build.hxx index 29d9890..de12a70 100644 --- a/libbrep/build.hxx +++ b/libbrep/build.hxx @@ -30,7 +30,7 @@ // #define LIBBREP_BUILD_SCHEMA_VERSION_BASE 15 -#pragma db model version(LIBBREP_BUILD_SCHEMA_VERSION_BASE, 15, closed) +#pragma db model version(LIBBREP_BUILD_SCHEMA_VERSION_BASE, 16, closed) // We have to keep these mappings at the global scope instead of inside // the brep namespace because they need to be also effective in the diff --git a/libbrep/build.xml b/libbrep/build.xml index 42de81a..d90f871 100644 --- a/libbrep/build.xml +++ b/libbrep/build.xml @@ -1,4 +1,6 @@ + + diff --git a/libbrep/common.hxx b/libbrep/common.hxx index 98fc4e7..b9b6928 100644 --- a/libbrep/common.hxx +++ b/libbrep/common.hxx @@ -373,13 +373,28 @@ namespace brep // requirements // + // Note that this is a 2-level nested container (see package.hxx for + // details). + // + using bpkg::requirement_alternative; using bpkg::requirement_alternatives; using requirements = vector; + #pragma db value(requirement_alternative) definition #pragma db value(requirement_alternatives) definition - using requirement_key = odb::nested_key; - using requirement_alternatives_map = std::map; + using requirement_alternative_key = + odb::nested_key; + + using requirement_alternatives_map = + std::map; + + #pragma db value(requirement_alternative_key) + + using requirement_key = odb::nested2_key; + + using requirement_alternative_requirements_map = + std::map; #pragma db value(requirement_key) diff --git a/libbrep/package.hxx b/libbrep/package.hxx index 1927298..38ca0ec 100644 --- a/libbrep/package.hxx +++ b/libbrep/package.hxx @@ -607,15 +607,36 @@ namespace brep // requirements // - #pragma db member(requirement_key::outer) column("requirement_index") - #pragma db member(requirement_key::inner) column("index") + // Note that this is a 2-level nested container which is mapped to three + // container tables each containing data of each dimension. + // Container of the requirement_alternatives values. + // #pragma db member(requirements) id_column("") value_column("") + + // Container of the requirement_alternative values. + // + #pragma db member(requirement_alternative_key::outer) column("requirement_index") + #pragma db member(requirement_alternative_key::inner) column("index") + #pragma db member(requirement_alternatives) \ virtual(requirement_alternatives_map) \ after(requirements) \ get(odb::nested_get (this.requirements)) \ set(odb::nested_set (this.requirements, std::move (?))) \ + id_column("") key_column("") value_column("") + + // Container of the requirement (string) values. + // + #pragma db member(requirement_key::outer) column("requirement_index") + #pragma db member(requirement_key::middle) column("alternative_index") + #pragma db member(requirement_key::inner) column("index") + + #pragma db member(requirement_alternative_requirements) \ + virtual(requirement_alternative_requirements_map) \ + after(requirement_alternatives) \ + get(odb::nested2_get (this.requirements)) \ + set(odb::nested2_set (this.requirements, std::move (?))) \ id_column("") key_column("") value_column("id") // tests diff --git a/libbrep/package.xml b/libbrep/package.xml index 9e162ed..956e5d2 100644 --- a/libbrep/package.xml +++ b/libbrep/package.xml @@ -110,6 +110,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.1