@@ -220,110 +220,52 @@ class Statement
220
220
*/
221
221
void bind (const int aIndex);
222
222
223
- /* *
224
- * @brief Bind an int value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
225
- */
226
- void bind (const char * apName, const int aValue)
227
- {
228
- bind (getIndex (apName), aValue);
229
- }
230
- /* *
231
- * @brief Bind a 32bits unsigned int value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
232
- */
233
- void bind (const char * apName, const unsigned aValue)
223
+ template <typename T>
224
+ inline void bind (const char * apName, const T &aValue)
234
225
{
235
226
bind (getIndex (apName), aValue);
236
227
}
237
228
238
- #if (LONG_MAX == INT_MAX) // 4 bytes "long" type means the data model is ILP32 or LLP64 (Win64 Visual C++ and MinGW)
239
- /* *
240
- * @brief Bind a 32bits long value to a parameter "?", "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
241
- */
242
- void bind (const char * apName, const long aValue)
229
+ template <typename T> inline void bindNoCopy (const char * apName, const T& aValue)
243
230
{
244
- bind (apName, static_cast <int >(aValue));
245
- }
246
- #else // 8 bytes "long" type means the data model is LP64 (Most Unix-like, Windows when using Cygwin; z/OS)
247
- /* *
248
- * @brief Bind a 64bits long value to a parameter "?", "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
249
- */
250
- void bind (const char * apName, const long aValue)
251
- {
252
- bind (apName, static_cast <long long >(aValue));
253
- }
254
- #endif
255
- /* *
256
- * @brief Bind a 64bits int value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
257
- */
258
- void bind (const char * apName, const long long aValue)
259
- {
260
- bind (getIndex (apName), aValue);
261
- }
262
- /* *
263
- * @brief Bind a double (64bits float) value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
264
- */
265
- void bind (const char * apName, const double aValue)
266
- {
267
- bind (getIndex (apName), aValue);
268
- }
269
- /* *
270
- * @brief Bind a string value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
271
- *
272
- * @note Uses the SQLITE_TRANSIENT flag, making a copy of the data, for SQLite internal use
273
- */
274
- void bind (const char * apName, const std::string& aValue)
275
- {
276
- bind (getIndex (apName), aValue);
231
+ bindNoCopy (getIndex (apName), aValue);
277
232
}
278
- /* *
279
- * @brief Bind a text value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
280
- *
281
- * @note Uses the SQLITE_TRANSIENT flag, making a copy of the data, for SQLite internal use
282
- */
283
- void bind (const char * apName, const char * apValue)
233
+
234
+ #if __cplusplus >= 201103L
235
+ #define ENABLE_IF_CONST_CHAR_OR_VOID \
236
+ template <\
237
+ typename T\
238
+ , class = typename std::enable_if<\
239
+ std::is_same<T, const char >::value\
240
+ || std::is_same<T, const void >::value\
241
+ >::type\
242
+ >
243
+
244
+
245
+ ENABLE_IF_CONST_CHAR_OR_VOID
246
+ void bind (const char * apName, T* apValue)
284
247
{
285
248
bind (getIndex (apName), apValue);
286
249
}
287
- /* *
288
- * @brief Bind a binary blob value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
289
- *
290
- * @note Uses the SQLITE_TRANSIENT flag, making a copy of the data, for SQLite internal use
291
- */
292
- void bind (const char * apName, const void * apValue, const int aSize)
293
- {
294
- bind (getIndex (apName), apValue, aSize);
295
- }
296
- /* *
297
- * @brief Bind a string value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
298
- *
299
- * The string can contain null characters as it is binded using its size.
300
- *
301
- * @warning Uses the SQLITE_STATIC flag, avoiding a copy of the data. The string must remains unchanged while executing the statement.
302
- */
303
- void bindNoCopy (const char * apName, const std::string& aValue)
250
+ ENABLE_IF_CONST_CHAR_OR_VOID
251
+ void bindNoCopy (const char * apName, T* apValue)
304
252
{
305
- bindNoCopy (getIndex (apName), aValue );
253
+ bindNoCopy (getIndex (apName), apValue );
306
254
}
307
- /* *
308
- * @brief Bind a text value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
309
- *
310
- * Main usage is with null-terminated literal text (aka in code static strings)
311
- *
312
- * @warning Uses the SQLITE_STATIC flag, avoiding a copy of the data. The string must remains unchanged while executing the statement.
313
- */
314
- void bindNoCopy (const char * apName, const char * apValue)
255
+
256
+ ENABLE_IF_CONST_CHAR_OR_VOID
257
+ void bind (const char * apName, T* apValue, const int aSize)
315
258
{
316
- bindNoCopy (getIndex (apName), apValue);
259
+ bind (getIndex (apName), apValue, aSize );
317
260
}
318
- /* *
319
- * @brief Bind a binary blob value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
320
- *
321
- * @warning Uses the SQLITE_STATIC flag, avoiding a copy of the data. The string must remains unchanged while executing the statement.
322
- */
323
- void bindNoCopy (const char * apName, const void * apValue, const int aSize)
261
+ ENABLE_IF_CONST_CHAR_OR_VOID
262
+ void bindNoCopy (const char * apName, T* apValue, const int aSize)
324
263
{
325
264
bindNoCopy (getIndex (apName), apValue, aSize);
326
265
}
266
+ #endif
267
+
268
+
327
269
/* *
328
270
* @brief Bind a NULL value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
329
271
*
@@ -334,120 +276,37 @@ class Statement
334
276
bind (getIndex (apName));
335
277
}
336
278
337
-
338
- /* *
339
- * @brief Bind an int value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
340
- */
341
- inline void bind (const std::string& aName, const int aValue)
279
+ template <typename T>
280
+ void bind (const std::string& aName, T &v)
342
281
{
343
- bind (aName.c_str (), aValue);
344
- }
345
- /* *
346
- * @brief Bind a 32bits unsigned int value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
347
- */
348
- inline void bind (const std::string& aName, const unsigned aValue)
349
- {
350
- bind (aName.c_str (), aValue);
282
+ bind (aName.c_str (), v);
351
283
}
352
284
353
- #if (LONG_MAX == INT_MAX) // 4 bytes "long" type means the data model is ILP32 or LLP64 (Win64 Visual C++ and MinGW)
354
- /* *
355
- * @brief Bind a 32bits long value to a parameter "?", "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
356
- */
357
- void bind (const std::string& aName, const long aValue)
358
- {
359
- bind (aName.c_str (), static_cast <int >(aValue));
360
- }
361
- #else // 8 bytes "long" type means the data model is LP64 (Most Unix-like, Windows when using Cygwin; z/OS)
362
- /* *
363
- * @brief Bind a 64bits long value to a parameter "?", "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
364
- */
365
- void bind (const std::string& aName, const long aValue)
366
- {
367
- bind (aName.c_str (), static_cast <long long >(aValue));
368
- }
369
- #endif
370
- /* *
371
- * @brief Bind a 64bits int value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
372
- */
373
- inline void bind (const std::string& aName, const long long aValue)
374
- {
375
- bind (aName.c_str (), aValue);
376
- }
377
- /* *
378
- * @brief Bind a double (64bits float) value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
379
- */
380
- inline void bind (const std::string& aName, const double aValue)
381
- {
382
- bind (aName.c_str (), aValue);
383
- }
384
- /* *
385
- * @brief Bind a string value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
386
- *
387
- * @note Uses the SQLITE_TRANSIENT flag, making a copy of the data, for SQLite internal use
388
- */
389
- inline void bind (const std::string& aName, const std::string& aValue)
390
- {
391
- bind (aName.c_str (), aValue);
392
- }
393
- /* *
394
- * @brief Bind a text value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
395
- *
396
- * @note Uses the SQLITE_TRANSIENT flag, making a copy of the data, for SQLite internal use
397
- */
398
- inline void bind (const std::string& aName, const char * apValue)
399
- {
400
- bind (aName.c_str (), apValue);
401
- }
402
- /* *
403
- * @brief Bind a binary blob value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
404
- *
405
- * @note Uses the SQLITE_TRANSIENT flag, making a copy of the data, for SQLite internal use
406
- */
407
- inline void bind (const std::string& aName, const void * apValue, const int aSize)
285
+ #if __cplusplus >= 201103L
286
+ ENABLE_IF_CONST_CHAR_OR_VOID
287
+ inline void bind (const std::string& aName, T* v)
408
288
{
409
- bind (aName.c_str (), apValue, aSize );
289
+ bind (aName.c_str (), v );
410
290
}
411
- /* *
412
- * @brief Bind a string value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
413
- *
414
- * The string can contain null characters as it is binded using its size.
415
- *
416
- * @warning Uses the SQLITE_STATIC flag, avoiding a copy of the data. The string must remains unchanged while executing the statement.
417
- */
418
- inline void bindNoCopy (const std::string& aName, const std::string& aValue)
419
- {
420
- bindNoCopy (aName.c_str (), aValue);
421
- }
422
- /* *
423
- * @brief Bind a text value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
424
- *
425
- * Main usage is with null-terminated literal text (aka in code static strings)
426
- *
427
- * @warning Uses the SQLITE_STATIC flag, avoiding a copy of the data. The string must remains unchanged while executing the statement.
428
- */
429
- inline void bindNoCopy (const std::string& aName, const char * apValue)
291
+
292
+ ENABLE_IF_CONST_CHAR_OR_VOID
293
+ inline void bind (const std::string& aName, T* v, const int aSize)
430
294
{
431
- bindNoCopy (aName.c_str (), apValue );
295
+ bind (aName.c_str (), v, aSize );
432
296
}
433
- /* *
434
- * @brief Bind a binary blob value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
435
- *
436
- * @warning Uses the SQLITE_STATIC flag, avoiding a copy of the data. The string must remains unchanged while executing the statement.
437
- */
438
- inline void bindNoCopy (const std::string& aName, const void * apValue, const int aSize)
297
+
298
+ ENABLE_IF_CONST_CHAR_OR_VOID
299
+ inline void bindNoCopy (const std::string& aName, T* v)
439
300
{
440
- bindNoCopy (aName.c_str (), apValue, aSize );
301
+ bindNoCopy (aName.c_str (), v );
441
302
}
442
- /* *
443
- * @brief Bind a NULL value to a named parameter "?NNN", ":VVV", "@VVV" or "$VVV" in the SQL prepared statement (aIndex >= 1)
444
- *
445
- * @see clearBindings() to set all bound parameters to NULL.
446
- */
447
- inline void bind (const std::string& aName) // bind NULL value
303
+
304
+ ENABLE_IF_CONST_CHAR_OR_VOID
305
+ inline void bindNoCopy (const std::string& aName, T* v, const int aSize)
448
306
{
449
- bind (aName.c_str ());
307
+ bindNoCopy (aName.c_str (), v, aSize );
450
308
}
309
+ #endif
451
310
452
311
// //////////////////////////////////////////////////////////////////////////
453
312
0 commit comments