diff options
author | Jonathan Buchanan <jonathan.russ.buchanan@gmail.com> | 2020-06-02 11:57:39 -0400 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2020-07-05 16:50:13 +0200 |
commit | ef0e79927cbd64832b7351074cf71853212a331b (patch) | |
tree | 3177b1949477894d89a9c1cc5ecffa62327f01e0 /src/sq/sq_query_helper.c | |
parent | 44c70269e25b86d3ab995b9fbd3366020b6a3c1c (diff) | |
download | exchange-ef0e79927cbd64832b7351074cf71853212a331b.tar.xz |
created taler_sq_lib
Diffstat (limited to 'src/sq/sq_query_helper.c')
-rw-r--r-- | src/sq/sq_query_helper.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/sq/sq_query_helper.c b/src/sq/sq_query_helper.c new file mode 100644 index 000000000..8116622a5 --- /dev/null +++ b/src/sq/sq_query_helper.c @@ -0,0 +1,77 @@ +/* + This file is part of TALER + Copyright (C) 2020 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +*/ +/** + * @file sq/sq_query_helper.c + * @brief helper functions for Taler-specific SQLite3 interactions + * @author Jonathan Buchanan + */ +#include "platform.h" +#include <sqlite3.h> +#include <gnunet/gnunet_util_lib.h> +#include <gnunet/gnunet_sq_lib.h> +#include "taler_sq_lib.h" + + +/** + * Function called to convert input argument into SQL parameters. + * + * @param cls closure + * @param data pointer to input argument, here a `struct TALER_AmountNBO` + * @param data_len number of bytes in @a data (if applicable) + * @param stmt sqlite statement to parameters for + * @param off offset of the argument to bind in @a stmt, numbered from 1, + * so immediately suitable for passing to `sqlite3_bind`-functions. + * @return #GNUNET_SYSERR on error, #GNUNET_OK on success + */ +static int +qconv_amount_nbo (void *cls, + const void *data, + size_t data_len, + sqlite3_stmt *stmt, + unsigned int off) +{ + const struct TALER_AmountNBO *amount = data; + + GNUNET_assert (sizeof (struct TALER_AmountNBO) == data_len); + if (SQLITE_OK != sqlite3_bind_int64 (stmt, + (int) off, + (sqlite3_int64) amount->value)) + return GNUNET_SYSERR; + if (SQLITE_OK != sqlite3_bind_int64 (stmt, + (int) off + 1, + (sqlite3_int64) amount->fraction)) + return GNUNET_SYSERR; + return GNUNET_OK; +} + + +/** + * Generate query parameter for a currency, consisting of the three + * components "value", "fraction" in this order. The + * types must be a 64-bit integer and a 64-bit integer. + * + * @param x pointer to the query parameter to pass + */ +struct GNUNET_SQ_QueryParam +TALER_SQ_query_param_amount_nbo (const struct TALER_AmountNBO *x) +{ + struct GNUNET_SQ_QueryParam res = + { &qconv_amount_nbo, NULL, x, sizeof (*x), 2 }; + return res; +} + + +/* end of sq/sq_query_helper.c */ |