From 1a1fafbd438f3f21a15c990d904e192b045d2391 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 14 Dec 2021 16:04:32 +0100 Subject: introducing GNUNET_TIME_Timestamp, recoup now with amounts --- src/sq/sq_query_helper.c | 160 +++++++---------------------------------------- 1 file changed, 23 insertions(+), 137 deletions(-) (limited to 'src/sq/sq_query_helper.c') diff --git a/src/sq/sq_query_helper.c b/src/sq/sq_query_helper.c index ad5207e27..d4b2d060d 100644 --- a/src/sq/sq_query_helper.c +++ b/src/sq/sq_query_helper.c @@ -36,7 +36,7 @@ * so immediately suitable for passing to `sqlite3_bind`-functions. * @return #GNUNET_SYSERR on error, #GNUNET_OK on success */ -static int +static enum GNUNET_GenericReturnValue qconv_amount (void *cls, const void *data, size_t data_len, @@ -59,18 +59,16 @@ qconv_amount (void *cls, } -/** - * Generate query parameter for a currency, consisting of the - * 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 (const struct TALER_Amount *x) { - struct GNUNET_SQ_QueryParam res = - { &qconv_amount, NULL, x, sizeof (*x), 2 }; + struct GNUNET_SQ_QueryParam res = { + .conv = &qconv_amount, + .data = x, + .size = sizeof (*x), + .num_params = 2 + }; + return res; } @@ -86,7 +84,7 @@ TALER_SQ_query_param_amount (const struct TALER_Amount *x) * so immediately suitable for passing to `sqlite3_bind`-functions. * @return #GNUNET_SYSERR on error, #GNUNET_OK on success */ -static int +static enum GNUNET_GenericReturnValue qconv_amount_nbo (void *cls, const void *data, size_t data_len, @@ -108,18 +106,16 @@ qconv_amount_nbo (void *cls, } -/** - * Generate query parameter for a currency, consisting of the - * 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 }; + struct GNUNET_SQ_QueryParam res = { + .conv = &qconv_amount_nbo, + .data = x, + .size = sizeof (*x), + .num_params = 2 + }; + return res; } @@ -135,7 +131,7 @@ TALER_SQ_query_param_amount_nbo (const struct TALER_AmountNBO *x) * so immediately suitable for passing to `sqlite3_bind`-functions. * @return #GNUNET_SYSERR on error, #GNUNET_OK on success */ -static int +static enum GNUNET_GenericReturnValue qconv_json (void *cls, const void *data, size_t data_len, @@ -162,126 +158,16 @@ qconv_json (void *cls, } -/** - * Generate query parameter for a JSON object (stored as a string - * in the DB). Note that @a x must really be a JSON object or array, - * passing just a value (string, integer) is not supported and will - * result in an abort. - * - * @param x pointer to the json object to pass - */ struct GNUNET_SQ_QueryParam TALER_SQ_query_param_json (const json_t *x) { - struct GNUNET_SQ_QueryParam res = - { &qconv_json, NULL, x, sizeof (*x), 1 }; - return res; -} - - -/** - * Function called to convert input argument into SQL parameters. - * - * @param cls closure - * @param data pointer to input argument, here a `struct TALER_Amount` - * @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_round_time (void *cls, - const void *data, - size_t data_len, - sqlite3_stmt *stmt, - unsigned int off) -{ - const struct GNUNET_TIME_Absolute *at = data; - struct GNUNET_TIME_Absolute tmp; - - (void) cls; - GNUNET_assert (sizeof (struct GNUNET_TIME_AbsoluteNBO) == data_len); - GNUNET_break (NULL == cls); - tmp = *at; - GNUNET_assert (GNUNET_OK == - GNUNET_TIME_round_abs (&tmp)); - if (SQLITE_OK != sqlite3_bind_int64 (stmt, - (int) off, - (sqlite3_int64) at->abs_value_us)) - return GNUNET_SYSERR; - return GNUNET_OK; -} - - -/** - * Generate query parameter for an absolute time value. - * In contrast to - * #GNUNET_SQ_query_param_absolute_time(), this function - * will abort (!) if the time given is not rounded! - * The database must store a 64-bit integer. - * - * @param x pointer to the query parameter to pass - */ -struct GNUNET_SQ_QueryParam -TALER_SQ_query_param_absolute_time (const struct GNUNET_TIME_Absolute *x) -{ - struct GNUNET_SQ_QueryParam res = - { &qconv_round_time, NULL, x, sizeof (*x), 1 }; - return res; -} + struct GNUNET_SQ_QueryParam res = { + .conv = &qconv_json, + .data = x, + .size = sizeof (*x), + .num_params = 1 + }; - -/** - * Function called to convert input argument into SQL parameters. - * - * @param cls closure - * @param data pointer to input argument, here a `struct TALER_Amount` - * @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_round_time_abs (void *cls, - const void *data, - size_t data_len, - sqlite3_stmt *stmt, - unsigned int off) -{ - const struct GNUNET_TIME_AbsoluteNBO *at = data; - struct GNUNET_TIME_Absolute tmp; - - (void) cls; - GNUNET_assert (sizeof (struct GNUNET_TIME_AbsoluteNBO) == data_len); - GNUNET_break (NULL == cls); - tmp = GNUNET_TIME_absolute_ntoh (*at); - GNUNET_assert (GNUNET_OK == - GNUNET_TIME_round_abs (&tmp)); - if (SQLITE_OK != sqlite3_bind_int64 (stmt, - (int) off, - (sqlite3_int64) tmp.abs_value_us)) - return GNUNET_SYSERR; - return GNUNET_OK; -} - - -/** - * Generate query parameter for an absolute time value. - * In contrast to - * #GNUNET_SQ_query_param_absolute_time(), this function - * will abort (!) if the time given is not rounded! - * The database must store a 64-bit integer. - * - * @param x pointer to the query parameter to pass - */ -struct GNUNET_SQ_QueryParam -TALER_SQ_query_param_absolute_time_nbo (const struct - GNUNET_TIME_AbsoluteNBO *x) -{ - struct GNUNET_SQ_QueryParam res = - { &qconv_round_time_abs, NULL, x, sizeof (*x), 1 }; return res; } -- cgit v1.2.3