sync tables "extensions" and "extension_details" with auditor

This commit is contained in:
Özgür Kesim 2022-03-05 13:36:50 +01:00
parent 43f8ab6b48
commit 8a906bf96c
Signed by: oec
GPG Key ID: 3D76A56D79EDD9D7
5 changed files with 215 additions and 1 deletions

View File

@ -111,6 +111,8 @@ static struct Table tables[] = {
{ .rt = TALER_EXCHANGEDB_RT_WIRE_FEE},
{ .rt = TALER_EXCHANGEDB_RT_RECOUP},
{ .rt = TALER_EXCHANGEDB_RT_RECOUP_REFRESH },
{ .rt = TALER_EXCHANGEDB_RT_EXTENSIONS},
{ .rt = TALER_EXCHANGEDB_RT_EXTENSION_DETAILS },
{ .end = true }
};

View File

@ -702,4 +702,55 @@ irbt_cb_table_recoup_refresh (struct PostgresClosure *pg,
}
/**
* Function called with extensions records to insert into table.
*
* @param pg plugin context
* @param td record to insert
*/
static enum GNUNET_DB_QueryStatus
irbt_cb_table_extensions (struct PostgresClosure *pg,
const struct TALER_EXCHANGEDB_TableData *td)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_uint64 (&td->serial),
GNUNET_PQ_query_param_string (td->details.extensions.name),
NULL == td->details.extensions.config ?
GNUNET_PQ_query_param_null () :
GNUNET_PQ_query_param_string (td->details.extensions.config),
GNUNET_PQ_query_param_end
};
return GNUNET_PQ_eval_prepared_non_select (pg->conn,
"insert_into_table_extensions",
params);
}
/**
* Function called with extension_details records to insert into table.
*
* @param pg plugin context
* @param td record to insert
*/
static enum GNUNET_DB_QueryStatus
irbt_cb_table_extension_details (struct PostgresClosure *pg,
const struct TALER_EXCHANGEDB_TableData *td)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_uint64 (&td->serial),
NULL ==
td->details.extension_details.extension_options ?
GNUNET_PQ_query_param_null () :
GNUNET_PQ_query_param_string (
td->details.extension_details.extension_options),
GNUNET_PQ_query_param_end
};
return GNUNET_PQ_eval_prepared_non_select (pg->conn,
"insert_into_table_extension_details",
params);
}
/* end of irbt_callbacks.c */

View File

@ -1306,4 +1306,99 @@ lrbt_cb_table_recoup_refresh (void *cls,
}
/**
* Function called with extensions table entries.
*
* @param cls closure
* @param result the postgres result
* @param num_results the number of results in @a result
*/
static void
lrbt_cb_table_extensions (void *cls,
PGresult *result,
unsigned int num_results)
{
struct LookupRecordsByTableContext *ctx = cls;
struct TALER_EXCHANGEDB_TableData td = {
.table = TALER_EXCHANGEDB_RT_EXTENSIONS
};
bool no_config = false;
for (unsigned int i = 0; i<num_results; i++)
{
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_uint64 ("extension_id",
&td.serial),
GNUNET_PQ_result_spec_string ("name",
&td.details.extensions.name),
GNUNET_PQ_result_spec_allow_null (
GNUNET_PQ_result_spec_string ("config",
&td.details.extensions.config),
&no_config),
GNUNET_PQ_result_spec_end
};
if (GNUNET_OK !=
GNUNET_PQ_extract_result (result,
rs,
i))
{
GNUNET_break (0);
ctx->error = true;
return;
}
ctx->cb (ctx->cb_cls,
&td);
GNUNET_PQ_cleanup_result (rs);
}
}
/**
* Function called with extension_details table entries.
*
* @param cls closure
* @param result the postgres result
* @param num_results the number of results in @a result
*/
static void
lrbt_cb_table_extension_details (void *cls,
PGresult *result,
unsigned int num_results)
{
struct LookupRecordsByTableContext *ctx = cls;
struct TALER_EXCHANGEDB_TableData td = {
.table = TALER_EXCHANGEDB_RT_EXTENSION_DETAILS
};
bool no_config = false;
for (unsigned int i = 0; i<num_results; i++)
{
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_uint64 ("extension_details_serial_id",
&td.serial),
GNUNET_PQ_result_spec_allow_null (
GNUNET_PQ_result_spec_string ("extension_options",
&td.details.extension_details.
extension_options),
&no_config),
GNUNET_PQ_result_spec_end
};
if (GNUNET_OK !=
GNUNET_PQ_extract_result (result,
rs,
i))
{
GNUNET_break (0);
ctx->error = true;
return;
}
ctx->cb (ctx->cb_cls,
&td);
GNUNET_PQ_cleanup_result (rs);
}
}
/* end of lrbt_callbacks.c */

View File

@ -2123,6 +2123,22 @@ prepare_statements (struct PostgresClosure *pg)
" ORDER BY recoup_refresh_uuid DESC"
" LIMIT 1;",
0),
GNUNET_PQ_make_prepare (
"select_serial_by_table_extensions",
"SELECT"
" extension_id AS serial"
" FROM extensions"
" ORDER BY extension_id DESC"
" LIMIT 1;",
0),
GNUNET_PQ_make_prepare (
"select_serial_by_table_extension_details",
"SELECT"
" extension_details_serial_id AS serial"
" FROM extension_details"
" ORDER BY extension_details_serial_id DESC"
" LIMIT 1;",
0),
/* For postgres_lookup_records_by_table */
GNUNET_PQ_make_prepare (
"select_above_serial_by_table_denominations",
@ -2727,6 +2743,23 @@ prepare_statements (struct PostgresClosure *pg)
") VALUES "
"($1, $2, $3, $4, $5, $6, $7, $8);",
8),
GNUNET_PQ_make_prepare (
"insert_into_table_extensions",
"INSERT INTO extensions"
"(extension_id"
",name"
",config"
") VALUES "
"($1, $2, $3);",
3),
GNUNET_PQ_make_prepare (
"insert_into_table_extension_details",
"INSERT INTO extension_details"
"(extension_details_serial_id"
",extension_options"
") VALUES "
"($1, $2);",
2),
/* Used in #postgres_begin_shard() */
GNUNET_PQ_make_prepare (
@ -10807,6 +10840,12 @@ postgres_lookup_serial_by_table (void *cls,
case TALER_EXCHANGEDB_RT_RECOUP_REFRESH:
statement = "select_serial_by_table_recoup_refresh";
break;
case TALER_EXCHANGEDB_RT_EXTENSIONS:
statement = "select_serial_by_table_extensions";
break;
case TALER_EXCHANGEDB_RT_EXTENSION_DETAILS:
statement = "select_serial_by_table_extension_details";
break;
default:
GNUNET_break (0);
return GNUNET_DB_STATUS_HARD_ERROR;
@ -10972,6 +11011,14 @@ postgres_lookup_records_by_table (void *cls,
statement = "select_above_serial_by_table_recoup_refresh";
rh = &lrbt_cb_table_recoup_refresh;
break;
case TALER_EXCHANGEDB_RT_EXTENSIONS:
statement = "select_above_serial_by_table_extensions";
rh = &lrbt_cb_table_extensions;
break;
case TALER_EXCHANGEDB_RT_EXTENSION_DETAILS:
statement = "select_above_serial_by_table_extension_details";
rh = &lrbt_cb_table_extension_details;
break;
default:
GNUNET_break (0);
return GNUNET_DB_STATUS_HARD_ERROR;
@ -11097,6 +11144,12 @@ postgres_insert_records_by_table (void *cls,
case TALER_EXCHANGEDB_RT_RECOUP_REFRESH:
rh = &irbt_cb_table_recoup_refresh;
break;
case TALER_EXCHANGEDB_RT_EXTENSIONS:
rh = &irbt_cb_table_extensions;
break;
case TALER_EXCHANGEDB_RT_EXTENSION_DETAILS:
rh = &irbt_cb_table_extension_details;
break;
default:
GNUNET_break (0);
return GNUNET_DB_STATUS_HARD_ERROR;

View File

@ -169,7 +169,9 @@ enum TALER_EXCHANGEDB_ReplicatedTable
TALER_EXCHANGEDB_RT_AGGREGATION_TRACKING,
TALER_EXCHANGEDB_RT_WIRE_FEE,
TALER_EXCHANGEDB_RT_RECOUP,
TALER_EXCHANGEDB_RT_RECOUP_REFRESH
TALER_EXCHANGEDB_RT_RECOUP_REFRESH,
TALER_EXCHANGEDB_RT_EXTENSIONS,
TALER_EXCHANGEDB_RT_EXTENSION_DETAILS,
};
@ -407,6 +409,17 @@ struct TALER_EXCHANGEDB_TableData
uint64_t rrc_serial;
} recoup_refresh;
struct
{
char *name;
char *config;
} extensions;
struct
{
char *extension_options;
} extension_details;
} details;
};