summary refs log tree commit diff stats
path: root/lib/binding.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/binding.cpp')
-rw-r--r--lib/binding.cpp71
1 files changed, 70 insertions, 1 deletions
diff --git a/lib/binding.cpp b/lib/binding.cpp index 349cd6f..0b58785 100644 --- a/lib/binding.cpp +++ b/lib/binding.cpp
@@ -24,6 +24,14 @@ namespace verbly {
24 break; 24 break;
25 } 25 }
26 26
27 case type::field:
28 {
29 new(&field_.table_) std::string(other.field_.table_);
30 new(&field_.column_) std::string(other.field_.column_);
31
32 break;
33 }
34
27 case type::invalid: 35 case type::invalid:
28 { 36 {
29 break; 37 break;
@@ -50,6 +58,8 @@ namespace verbly {
50 type tempType = first.type_; 58 type tempType = first.type_;
51 int tempInteger; 59 int tempInteger;
52 std::string tempString; 60 std::string tempString;
61 std::string tempTable;
62 std::string tempColumn;
53 63
54 switch (first.type_) 64 switch (first.type_)
55 { 65 {
@@ -67,6 +77,14 @@ namespace verbly {
67 break; 77 break;
68 } 78 }
69 79
80 case type::field:
81 {
82 tempTable = std::move(first.field_.table_);
83 tempColumn = std::move(first.field_.column_);
84
85 break;
86 }
87
70 case type::invalid: 88 case type::invalid:
71 { 89 {
72 break; 90 break;
@@ -93,6 +111,14 @@ namespace verbly {
93 break; 111 break;
94 } 112 }
95 113
114 case type::field:
115 {
116 new(&first.field_.table_) std::string(std::move(second.field_.table_));
117 new(&first.field_.column_) std::string(std::move(second.field_.column_));
118
119 break;
120 }
121
96 case type::invalid: 122 case type::invalid:
97 { 123 {
98 break; 124 break;
@@ -119,6 +145,14 @@ namespace verbly {
119 break; 145 break;
120 } 146 }
121 147
148 case type::field:
149 {
150 new(&first.field_.table_) std::string(std::move(tempTable));
151 new(&first.field_.column_) std::string(std::move(tempColumn));
152
153 break;
154 }
155
122 case type::invalid: 156 case type::invalid:
123 { 157 {
124 break; 158 break;
@@ -138,6 +172,15 @@ namespace verbly {
138 break; 172 break;
139 } 173 }
140 174
175 case type::field:
176 {
177 using string_type = std::string;
178 field_.table_.~string_type();
179 field_.column_.~string_type();
180
181 break;
182 }
183
141 case type::integer: 184 case type::integer:
142 case type::invalid: 185 case type::invalid:
143 { 186 {
@@ -164,7 +207,7 @@ namespace verbly {
164 207
165 binding::binding(std::string arg) : type_(type::string) 208 binding::binding(std::string arg) : type_(type::string)
166 { 209 {
167 new(&string_) std::string(arg); 210 new(&string_) std::string(std::move(arg));
168 } 211 }
169 212
170 std::string binding::getString() const 213 std::string binding::getString() const
@@ -177,4 +220,30 @@ namespace verbly {
177 return string_; 220 return string_;
178 } 221 }
179 222
223 binding::binding(std::string table, std::string column) : type_(type::field)
224 {
225 new(&field_.table_) std::string(std::move(table));
226 new(&field_.column_) std::string(std::move(column));
227 }
228
229 std::string binding::getTable() const
230 {
231 if (type_ != type::field)
232 {
233 throw std::domain_error("binding::getTable called on non-field binding");
234 }
235
236 return field_.table_;
237 }
238
239 std::string binding::getColumn() const
240 {
241 if (type_ != type::field)
242 {
243 throw std::domain_error("binding::getColumn called on non-field binding");
244 }
245
246 return field_.column_;
247 }
248
180}; 249};