-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Expand file tree
/
Copy pathObjectIdentifier.h
More file actions
104 lines (82 loc) · 2.57 KB
/
ObjectIdentifier.h
File metadata and controls
104 lines (82 loc) · 2.57 KB
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
#ifndef OBJECTIDENTIFIER_H
#define OBJECTIDENTIFIER_H
#include <string>
namespace sqlb {
enum escapeQuoting {
DoubleQuotes,
GraveAccents,
SquareBrackets
};
// Set quoting style for escapeIdentifier
void setIdentifierQuoting(escapeQuoting toQuoting);
// Get currently configured quote char
char getIdentifierQuoteChar();
// Add quotes to an identifier
std::string escapeIdentifier(const std::string& id);
// Add SQL quotes to a string literal and escape any single quote character
std::string escapeString(const std::string& literal);
// Object identifier consisting of schema name and object name
class ObjectIdentifier
{
public:
ObjectIdentifier(const std::string& schema, const std::string& name)
: m_schema(schema),
m_name(name)
{
}
ObjectIdentifier()
: m_schema("main")
{
}
explicit ObjectIdentifier(const std::string& variant)
{
// Try to unserialise the parameter first. If that does not work, just assume it's an object name for the main schema
clear();
if(!fromSerialised(variant))
m_name = variant;
}
bool operator==(const ObjectIdentifier& rhs) const
{
return (rhs.m_schema == m_schema && rhs.m_name == m_name);
}
bool operator<(const ObjectIdentifier& rhs) const
{
return toDisplayString() < rhs.toDisplayString();
}
const std::string& schema() const { return m_schema; }
const std::string& name() const { return m_name; }
void setSchema(const std::string& schema) { m_schema = schema; }
void setName(const std::string& name) { m_name = name; }
void clear()
{
m_schema = "main";
m_name.clear();
}
bool isEmpty() const { return m_name.empty(); }
// This returns a string which can be used in SQL statements
std::string toString(bool shortName = false) const
{
if(shortName && m_schema == "main")
return sqlb::escapeIdentifier(m_name);
else
return sqlb::escapeIdentifier(m_schema) + "." + sqlb::escapeIdentifier(m_name);
}
// This returns a string which can be used in the user interface
std::string toDisplayString() const
{
if(m_schema == "main")
return m_name;
else
return m_schema + "." + m_name;
}
std::string toSerialised() const
{
return std::to_string(m_schema.size()) + "," + std::to_string(m_name.size()) + ":" + m_schema + m_name;
}
bool fromSerialised(const std::string& serialised);
private:
std::string m_schema;
std::string m_name;
};
}
#endif