commit 9b6896eb076c689e17950c2bc5eea0c2110bbbd2
parent 1415c2504d7eedef64e53a92da09994e4a732361
Author: Christian Grothoff <grothoff@gnunet.org>
Date: Thu, 9 Jul 2026 22:08:53 +0200
avoid unnecessary update if increment is zero
Diffstat:
1 file changed, 51 insertions(+), 26 deletions(-)
diff --git a/src/challengerdb/client_check.c b/src/challengerdb/client_check.c
@@ -27,18 +27,13 @@
enum GNUNET_DB_QueryStatus
-CHALLENGERDB_client_check (struct CHALLENGERDB_PostgresContext *ctx,
- uint64_t client_id,
- const char *client_secret,
- uint32_t counter_increment,
- char **client_redirect_uri)
+CHALLENGERDB_client_check (
+ struct CHALLENGERDB_PostgresContext *ctx,
+ uint64_t client_id,
+ const char *client_secret,
+ uint32_t counter_increment,
+ char **client_redirect_uri)
{
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_uint64 (&client_id),
- GNUNET_PQ_query_param_string (client_secret),
- GNUNET_PQ_query_param_uint32 (&counter_increment),
- GNUNET_PQ_query_param_end
- };
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_allow_null (
GNUNET_PQ_result_spec_string ("uri",
@@ -48,25 +43,55 @@ CHALLENGERDB_client_check (struct CHALLENGERDB_PostgresContext *ctx,
};
*client_redirect_uri = NULL;
- PREPARE (ctx,
- "client_check",
- "UPDATE clients SET"
- " validation_counter=validation_counter+CAST($3::INT4 AS INT8)"
- " WHERE client_serial_id=$1"
- " AND client_secret=$2"
- " RETURNING uri;");
- return GNUNET_PQ_eval_prepared_singleton_select (ctx->conn,
- "client_check",
- params,
- rs);
+ if (0 == counter_increment)
+ {
+ struct GNUNET_PQ_QueryParam params[] = {
+ GNUNET_PQ_query_param_uint64 (&client_id),
+ GNUNET_PQ_query_param_string (client_secret),
+ GNUNET_PQ_query_param_end
+ };
+
+ PREPARE (ctx,
+ "client_check_ro",
+ "SELECT uri"
+ " FROM clients"
+ " WHERE client_serial_id=$1"
+ " AND client_secret=$2;");
+ return GNUNET_PQ_eval_prepared_singleton_select (ctx->conn,
+ "client_check_ro",
+ params,
+ rs);
+ }
+ else
+ {
+ struct GNUNET_PQ_QueryParam params[] = {
+ GNUNET_PQ_query_param_uint64 (&client_id),
+ GNUNET_PQ_query_param_string (client_secret),
+ GNUNET_PQ_query_param_uint32 (&counter_increment),
+ GNUNET_PQ_query_param_end
+ };
+
+ PREPARE (ctx,
+ "client_check",
+ "UPDATE clients SET"
+ " validation_counter=validation_counter+CAST($3::INT4 AS INT8)"
+ " WHERE client_serial_id=$1"
+ " AND client_secret=$2"
+ " RETURNING uri;");
+ return GNUNET_PQ_eval_prepared_singleton_select (ctx->conn,
+ "client_check",
+ params,
+ rs);
+ }
}
enum GNUNET_DB_QueryStatus
-CHALLENGERDB_client_check2 (struct CHALLENGERDB_PostgresContext *ctx,
- const char *client_uri,
- const char *client_secret,
- uint64_t *client_id)
+CHALLENGERDB_client_check2 (
+ struct CHALLENGERDB_PostgresContext *ctx,
+ const char *client_uri,
+ const char *client_secret,
+ uint64_t *client_id)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_string (client_uri),