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
|
// file : odb/relational/context.hxx
// author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : GNU GPL v3; see accompanying LICENSE file
#ifndef ODB_RELATIONAL_CONTEXT_HXX
#define ODB_RELATIONAL_CONTEXT_HXX
#include <odb/context.hxx>
namespace relational
{
class context: public virtual ::context
{
public:
// Return true if an object or value type has members for which
// the image can grow.
//
bool
grow (semantics::class_&);
// The same for a member's value type.
//
bool
grow (semantics::data_member&);
bool
grow (semantics::data_member&, semantics::type&, string const& key_prefix);
public:
// Quote SQL string.
//
string
quote_string (string const&) const;
// Quote SQL identifier.
//
string
quote_id (string const&) const;
// Quoted column and table names.
//
string
column_qname (semantics::data_member& m) const
{
return quote_id (column_name (m));
}
string
column_qname (semantics::data_member& m,
string const& key_prefix,
string const& default_name) const
{
return quote_id (column_name (m, key_prefix, default_name));
}
string
table_qname (semantics::class_& c) const
{
return quote_id (table_name (c));
}
string
table_qname (semantics::data_member& m, table_prefix const& p) const
{
return quote_id (table_name (m, p));
}
protected:
// The default implementation returns false.
//
virtual bool
grow_impl (semantics::class_&);
virtual bool
grow_impl (semantics::data_member&);
virtual bool
grow_impl (semantics::data_member&,
semantics::type&,
string const&);
// The default implementation uses the ISO quoting ('') and
// escapes singe quotes inside the string by double-quoting
// (' -> ''). Some (most?) database systems support escape
// sequences. We may want to provide utilize that to support
// things like \n, \t, etc.
//
virtual string
quote_string_impl (string const&) const;
// The default implementation uses the ISO quoting ("").
//
virtual string
quote_id_impl (string const&) const;
public:
virtual
~context ();
context ();
static context&
current ()
{
return *current_;
}
protected:
struct data;
typedef context base_context;
context (data*);
private:
static context* current_;
protected:
struct data: root_context::data
{
data (std::ostream& os): root_context::data (os) {}
string bind_vector_;
string truncated_vector_;
};
data* data_;
public:
string const& bind_vector;
string const& truncated_vector;
};
}
#include <odb/relational/context.ixx>
#endif // ODB_RELATIONAL_CONTEXT_HXX
|