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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
// file : odb/pgsql/traits-calls.hxx
// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC
// license : GNU GPL v2; see accompanying LICENSE file
#ifndef ODB_PGSQL_TRAITS_CALLS_HXX
#define ODB_PGSQL_TRAITS_CALLS_HXX
#include <odb/pre.hxx>
#include <cstddef> // std::size_t
#include <odb/forward.hxx>
#include <odb/schema-version.hxx>
#include <odb/traits.hxx>
#include <odb/pgsql/forward.hxx>
#include <odb/pgsql/pgsql-types.hxx>
namespace odb
{
namespace pgsql
{
template <typename T,
bool versioned = object_traits_impl<T, id_pgsql>::versioned>
struct traits_calls;
template <typename T>
struct traits_calls<T, false>
{
typedef object_traits_impl<T, id_pgsql> traits;
typedef typename traits::image_type image_type;
typedef pgsql::bind bind_type;
traits_calls (const schema_version_migration*) {}
const schema_version_migration*
version () const {return 0;}
static bool
grow (image_type& i, bool* t)
{
return traits::grow (i, t);
}
static void
bind (bind_type* b, image_type& i, statement_kind sk)
{
traits::bind (b, i, sk);
}
// Poly-derived version.
//
static void
bind (bind_type* b,
const bind_type* id, std::size_t id_size,
image_type& i,
statement_kind sk)
{
traits::bind (b, id, id_size, i, sk);
}
static void
init (T& o, const image_type& i, odb::database* db)
{
traits::init (o, i, db);
}
static bool
find_ (typename traits::statements_type& sts,
const typename traits::id_type* id)
{
return traits::find_ (sts, id);
}
static void
load_ (typename traits::statements_type& sts, T& o, bool reload)
{
return traits::load_ (sts, o, reload);
}
};
template <typename T>
struct traits_calls<T, true>
{
typedef object_traits_impl<T, id_pgsql> traits;
typedef typename traits::image_type image_type;
typedef pgsql::bind bind_type;
traits_calls (const schema_version_migration* svm): svm_ (*svm) {}
const schema_version_migration*
version () const {return &svm_;}
bool
grow (image_type& i, bool* t) const
{
return traits::grow (i, t, svm_);
}
void
bind (bind_type* b, image_type& i, statement_kind sk) const
{
traits::bind (b, i, sk, svm_);
}
// Poly-derived version.
//
void
bind (bind_type* b,
const bind_type* id, std::size_t id_size,
image_type& i,
statement_kind sk) const
{
traits::bind (b, id, id_size, i, sk, svm_);
}
void
init (T& o, const image_type& i, odb::database* db) const
{
traits::init (o, i, db, svm_);
}
bool
find_ (typename traits::statements_type& sts,
const typename traits::id_type* id) const
{
return traits::find_ (sts, id, svm_);
}
void
load_ (typename traits::statements_type& sts, T& o, bool reload) const
{
return traits::load_ (sts, o, reload, svm_);
}
private:
const schema_version_migration& svm_;
};
}
}
#include <odb/post.hxx>
#endif // ODB_PGSQL_TRAITS_CALLS_HXX
|