blob: 8bc703a3171e5ff9507ddac7a1387f5e37c65f52 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
// file : libbrep/build-package.hxx -*- C++ -*-
// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
// license : MIT; see accompanying LICENSE file
#ifndef LIBBREP_BUILD_PACKAGE_HXX
#define LIBBREP_BUILD_PACKAGE_HXX
#include <odb/core.hxx>
#include <libbrep/types.hxx>
#include <libbrep/utility.hxx>
#include <libbrep/common.hxx> // Must be included last (see assert).
namespace brep
{
// These are "foreign objects" that are mapped to subsets of the package
// database objects using the PostgreSQL foreign table mechanism. Note that
// since we maintain the pair in sync by hand, we should only have a minimal
// subset of "core" members (ideally just the primary key) that are unlikly
// to disappear or change.
//
// The mapping is established in build-extra.sql. We also explicitly mark
// non-primary key foreign-mapped members in the source object.
//
// Foreign object that is mapped to the subset of repository object.
//
#pragma db object table("build_repository") pointer(shared_ptr) readonly
class build_repository
{
public:
string name; // Object id (canonical name).
repository_location location;
optional<string> certificate_fingerprint;
// Database mapping.
//
#pragma db member(name) id
#pragma db member(location) \
set(this.location = std::move (?); \
assert (this.name == this.location.canonical_name ()))
private:
friend class odb::access;
build_repository () = default;
};
// Foreign object that is mapped to the subset of package object.
//
#pragma db object table("build_package") pointer(shared_ptr) readonly
class build_package
{
public:
package_id id;
upstream_version version;
lazy_shared_ptr<build_repository> internal_repository;
// Database mapping.
//
#pragma db member(id) id column("")
#pragma db member(version) set(this.version.init (this.id.version, (?)))
private:
friend class odb::access;
build_package () = default;
};
// Packages that can potentially be built (internal non-stub).
//
#pragma db view \
object(build_package) \
object(build_repository inner: \
build_package::internal_repository == build_repository::name && \
brep::compare_version_ne (build_package::id.version, \
brep::wildcard_version, \
false))
struct buildable_package
{
package_id id;
upstream_version version;
// Database mapping.
//
#pragma db member(version) set(this.version.init (this.id.version, (?)))
};
#pragma db view \
object(build_package) \
object(build_repository inner: \
build_package::internal_repository == build_repository::name && \
brep::compare_version_ne (build_package::id.version, \
brep::wildcard_version, \
false))
struct buildable_package_count
{
size_t result;
operator size_t () const {return result;}
// Database mapping.
//
#pragma db member(result) column("count(" + build_package::id.name + ")")
};
}
#endif // LIBBREP_BUILD_PACKAGE_HXX
|