Skip to content

Commit c2686fa

Browse files
committed
More concept checks
1 parent 6f20dbc commit c2686fa

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

include/tao/pq/parameter.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace tao::pq
2424

2525
namespace internal
2626
{
27-
template< typename A >
27+
template< typename >
2828
inline constexpr bool is_parameter = false;
2929

3030
template< std::size_t Max >

include/tao/pq/result.hpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ namespace tao::pq
225225

226226
[[nodiscard]] auto at( const std::size_t row ) const -> pq::row;
227227

228-
template< typename T >
228+
template< result_type T >
229229
[[nodiscard]] auto as() const -> T
230230
{
231231
switch( size() ) {
@@ -240,7 +240,7 @@ namespace tao::pq
240240
}
241241
}
242242

243-
template< typename T >
243+
template< result_type T >
244244
[[nodiscard]] auto optional() const -> std::optional< T >
245245
{
246246
switch( size() ) {
@@ -255,19 +255,20 @@ namespace tao::pq
255255
}
256256
}
257257

258-
template< typename T, typename U >
258+
template< result_type T, result_type U >
259259
[[nodiscard]] auto pair() const
260260
{
261261
return as< std::pair< T, U > >();
262262
}
263263

264-
template< typename... Ts >
264+
template< result_type... Ts >
265265
[[nodiscard]] auto tuple() const
266266
{
267267
return as< std::tuple< Ts... > >();
268268
}
269269

270270
template< typename T >
271+
requires result_type< typename T::value_type >
271272
[[nodiscard]] auto as_container() const -> T
272273
{
273274
check_has_result_set();
@@ -282,60 +283,70 @@ namespace tao::pq
282283
}
283284

284285
template< typename... Ts >
286+
requires result_type< typename std::vector< Ts... >::value_type >
285287
[[nodiscard]] auto vector() const
286288
{
287289
return as_container< std::vector< Ts... > >();
288290
}
289291

290292
template< typename... Ts >
293+
requires result_type< typename std::list< Ts... >::value_type >
291294
[[nodiscard]] auto list() const
292295
{
293296
return as_container< std::list< Ts... > >();
294297
}
295298

296299
template< typename... Ts >
300+
requires result_type< typename std::set< Ts... >::value_type >
297301
[[nodiscard]] auto set() const
298302
{
299303
return as_container< std::set< Ts... > >();
300304
}
301305

302306
template< typename... Ts >
307+
requires result_type< typename std::multiset< Ts... >::value_type >
303308
[[nodiscard]] auto multiset() const
304309
{
305310
return as_container< std::multiset< Ts... > >();
306311
}
307312

308313
template< typename... Ts >
314+
requires result_type< typename std::unordered_set< Ts... >::value_type >
309315
[[nodiscard]] auto unordered_set() const
310316
{
311317
return as_container< std::unordered_set< Ts... > >();
312318
}
313319

314320
template< typename... Ts >
321+
requires result_type< typename std::unordered_multiset< Ts... >::value_type >
315322
[[nodiscard]] auto unordered_multiset() const
316323
{
317324
return as_container< std::unordered_multiset< Ts... > >();
318325
}
319326

320327
template< typename... Ts >
328+
requires result_type< typename std::map< Ts... >::value_type >
321329
[[nodiscard]] auto map() const
322330
{
323331
return as_container< std::map< Ts... > >();
324332
}
325333

326334
template< typename... Ts >
335+
requires result_type< typename std::multimap< Ts... >::value_type >
327336
[[nodiscard]] auto multimap() const
328337
{
329338
return as_container< std::multimap< Ts... > >();
330339
}
331340

332341
template< typename... Ts >
342+
requires result_type< typename std::unordered_map< Ts... >::value_type >
333343
[[nodiscard]] auto unordered_map() const
334344
{
335345
return as_container< std::unordered_map< Ts... > >();
336346
}
337347

338348
template< typename... Ts >
349+
requires result_type< typename std::unordered_multimap< Ts... >::value_type >
339350
[[nodiscard]] auto unordered_multimap() const
340351
{
341352
return as_container< std::unordered_multimap< Ts... > >();

include/tao/pq/table_reader.hpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ namespace tao::pq
3838
void check_result();
3939

4040
public:
41-
template< typename... As >
41+
template< parameter_type... As >
4242
table_reader( const std::shared_ptr< transaction >& transaction, const internal::zsv statement, As&&... as )
4343
: m_previous( transaction ),
4444
m_transaction( std::make_shared< internal::transaction_guard >( transaction->connection() ) ),
@@ -154,6 +154,7 @@ namespace tao::pq
154154
}
155155

156156
template< typename T >
157+
requires result_type< typename T::value_type >
157158
[[nodiscard]] auto as_container() -> T
158159
{
159160
T nrv;
@@ -164,60 +165,70 @@ namespace tao::pq
164165
}
165166

166167
template< typename... Ts >
168+
requires result_type< typename std::vector< Ts... >::value_type >
167169
[[nodiscard]] auto vector()
168170
{
169171
return as_container< std::vector< Ts... > >();
170172
}
171173

172174
template< typename... Ts >
175+
requires result_type< typename std::list< Ts... >::value_type >
173176
[[nodiscard]] auto list()
174177
{
175178
return as_container< std::list< Ts... > >();
176179
}
177180

178181
template< typename... Ts >
182+
requires result_type< typename std::set< Ts... >::value_type >
179183
[[nodiscard]] auto set()
180184
{
181185
return as_container< std::set< Ts... > >();
182186
}
183187

184188
template< typename... Ts >
189+
requires result_type< typename std::multiset< Ts... >::value_type >
185190
[[nodiscard]] auto multiset()
186191
{
187192
return as_container< std::multiset< Ts... > >();
188193
}
189194

190195
template< typename... Ts >
196+
requires result_type< typename std::unordered_set< Ts... >::value_type >
191197
[[nodiscard]] auto unordered_set()
192198
{
193199
return as_container< std::unordered_set< Ts... > >();
194200
}
195201

196202
template< typename... Ts >
203+
requires result_type< typename std::unordered_multiset< Ts... >::value_type >
197204
[[nodiscard]] auto unordered_multiset()
198205
{
199206
return as_container< std::unordered_multiset< Ts... > >();
200207
}
201208

202209
template< typename... Ts >
210+
requires result_type< typename std::map< Ts... >::value_type >
203211
[[nodiscard]] auto map()
204212
{
205213
return as_container< std::map< Ts... > >();
206214
}
207215

208216
template< typename... Ts >
217+
requires result_type< typename std::multimap< Ts... >::value_type >
209218
[[nodiscard]] auto multimap()
210219
{
211220
return as_container< std::multimap< Ts... > >();
212221
}
213222

214223
template< typename... Ts >
224+
requires result_type< typename std::unordered_map< Ts... >::value_type >
215225
[[nodiscard]] auto unordered_map()
216226
{
217227
return as_container< std::unordered_map< Ts... > >();
218228
}
219229

220230
template< typename... Ts >
231+
requires result_type< typename std::unordered_multimap< Ts... >::value_type >
221232
[[nodiscard]] auto unordered_multimap()
222233
{
223234
return as_container< std::unordered_multimap< Ts... > >();

0 commit comments

Comments
 (0)