commit 8180725ce2f763fc62910eadf7d151d61ea6e91f
parent b460ec7d8aefd76a26f954ddd3f5073e20ae6bef
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
Date: Fri, 31 May 2024 22:34:18 +0200
fix db bug
Diffstat:
3 files changed, 29 insertions(+), 28 deletions(-)
diff --git a/src/donaudb/0002-donau_receipts_submitted.sql b/src/donaudb/0002-donau_receipts_submitted.sql
@@ -17,8 +17,8 @@
CREATE TABLE receipts_submitted
(receipt_id BIGINT GENERATED BY DEFAULT AS IDENTITY UNIQUE
,h_tax_number BYTEA NOT NULL
- ,nonce BYTEA NOT NULL UNIQUE CHECK (LENGTH(nonce)=32)
- ,donation_unit_pub BYTEA NOT NULL REFERENCES donation_units (donation_unit_pub)
+ ,nonce INT4 NOT NULL UNIQUE
+ ,h_donation_unit_pub BYTEA NOT NULL REFERENCES donation_units (h_donation_unit_pub)
,donation_unit_sig BYTEA NOT NULL UNIQUE
,donation_year INT8 NOT NULL
);
@@ -28,7 +28,7 @@ COMMENT ON COLUMN receipts_submitted.h_tax_number
IS 'The hash of the tax number and salt.';
COMMENT ON COLUMN receipts_submitted.nonce
IS 'The nonce used in the Unique Donor Identifier.';
-COMMENT ON COLUMN receipts_submitted.donation_unit_pub
+COMMENT ON COLUMN receipts_submitted.h_donation_unit_pub
IS 'Reference to public key used to sign.';
COMMENT ON COLUMN receipts_submitted.donation_unit_sig
IS 'The unblided signature the Donau made.';
diff --git a/src/donaudb/donau_do_insert_submitted_receipts.sql b/src/donaudb/donau_do_insert_submitted_receipts.sql
@@ -16,7 +16,7 @@
CREATE OR REPLACE FUNCTION do_insert_submitted_receipts(
IN in_h_tax_number BYTEA,
IN ina_h_donation_unit_pubs BYTEA[],
- IN ina_nonces BYTEA[],
+ IN ina_nonces INT4[],
IN ina_donation_unit_sigs BYTEA[],
IN in_donation_year INT8,
--
@@ -26,7 +26,7 @@ LANGUAGE plpgsql
AS $$
DECLARE
i INT4;
- ini_nonce BYTEA;
+ ini_nonce INT4;
ini_h_donation_unit_pub BYTEA;
ini_donation_unit_sig BYTEA;
BEGIN
@@ -44,7 +44,7 @@ LOOP
INSERT INTO receipts_submitted
(h_tax_number
,nonce
- ,donation_unit_pub
+ ,h_donation_unit_pub
,donation_unit_sig
,donation_year
)
@@ -64,6 +64,6 @@ LOOP
AND donation_unit_sig=ini_donation_unit_sig; -- if signature matches, everything must match
out_conflict[i] = NOT FOUND;
END IF;
-END LOOP; -- end FOR all coins
+END LOOP; -- end FOR all receipts
END $$;
diff --git a/src/donaudb/pg_insert_submitted_receipts.c b/src/donaudb/pg_insert_submitted_receipts.c
@@ -36,47 +36,48 @@ DH_PG_insert_submitted_receipts (
uint64_t donation_year)
{
struct PostgresClosure *pg = cls;
- struct DONAU_DonationUnitHashP h_donation_unit_pubs[GNUNET_NZL (num_dr)];
- struct DONAU_UniqueDonorIdentifierNonce nonces[GNUNET_NZL (num_dr)];
+ struct GNUNET_HashCode h_donation_unit_pubs[GNUNET_NZL (num_dr)];
+ uint32_t nonces[GNUNET_NZL (num_dr)];
struct DONAU_DonationUnitSignature donation_unit_sigs[GNUNET_NZL (num_dr)];
+
+ for (unsigned int i = 0; i < num_dr; i++)
+ {
+ const struct DONAU_DonationReceipt *dr = &donation_receipts[i];
+
+ h_donation_unit_pubs[i] = dr->h_donation_unit_pub.hash;
+ nonces[i] = dr->nonce.value;
+ donation_unit_sigs[i] = dr->donation_unit_sig;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Do insert submitted receipt\n");
+ }
+
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (h_donor_tax_id),
GNUNET_PQ_query_param_array_auto_from_type (num_dr,
h_donation_unit_pubs,
pg->conn),
- GNUNET_PQ_query_param_array_auto_from_type (num_dr,
+ GNUNET_PQ_query_param_array_uint32 (num_dr,
nonces,
pg->conn),
DONAU_PQ_query_param_array_donation_unit_sig (num_dr,
donation_unit_sigs,
pg->conn),
- GNUNET_PQ_query_param_uint64 (&donation_year),
+ GNUNET_PQ_query_param_uint64 (&donation_year),
GNUNET_PQ_query_param_end
};
- bool conflicted[GNUNET_NZL (num_dr)];
+ bool *conflicted;
struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_array_from_type (pg->conn,
+ GNUNET_PQ_result_spec_array_bool (pg->conn,
"conflicted",
&num_dr,
- conflicted),
+ &conflicted),
GNUNET_PQ_result_spec_end
};
enum GNUNET_DB_QueryStatus qs;
- for (unsigned int i = 0; i < num_dr; i++)
- {
- const struct DONAU_DonationReceipt *dr = &donation_receipts[i];
-
- h_donation_unit_pubs[i] = dr->h_donation_unit_pub;
- nonces[i] = dr->nonce;
- donation_unit_sigs[i] = dr->donation_unit_sig;
-
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Do insert submitted receipt\n");
- }
-
PREPARE (pg,
"call_insert_submitted_receipts",
"SELECT "
@@ -92,8 +93,8 @@ DH_PG_insert_submitted_receipts (
for (size_t i = 0; i < num_dr; i++)
{
- if (conflicted[i])
- {
+ if (conflicted[i])
+ {
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Submitted donation receipt at index %ld already present!\n",
i);