diff options
Diffstat (limited to 'lib/binding.cpp')
-rw-r--r-- | lib/binding.cpp | 71 |
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 | }; |