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
|
// 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);
}
};
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_);
}
private:
const schema_version_migration& svm_;
};
}
}
#include <odb/post.hxx>
#endif // ODB_PGSQL_TRAITS_CALLS_HXX
|