summaryrefslogtreecommitdiff
path: root/src/backenddb
diff options
context:
space:
mode:
authorMarcello Stanisci <stanisci.m@gmail.com>2018-12-14 19:00:37 +0100
committerMarcello Stanisci <stanisci.m@gmail.com>2018-12-14 19:00:37 +0100
commitd52b2b0c7ff423ba84f94f53affd6ec793469807 (patch)
treeb02db82fb65c57b951b2ae7879be226563ae0032 /src/backenddb
parent5cab5dc7b7a8dac374bb17108a041ac41d2bb4a9 (diff)
downloadmerchant-d52b2b0c7ff423ba84f94f53affd6ec793469807.tar.gz
merchant-d52b2b0c7ff423ba84f94f53affd6ec793469807.tar.bz2
merchant-d52b2b0c7ff423ba84f94f53affd6ec793469807.zip
/history API mod.
Provide option to return results in ascending order.
Diffstat (limited to 'src/backenddb')
-rw-r--r--src/backenddb/plugin_merchantdb_postgres.c42
-rw-r--r--src/backenddb/test_merchantdb.c2
2 files changed, 42 insertions, 2 deletions
diff --git a/src/backenddb/plugin_merchantdb_postgres.c b/src/backenddb/plugin_merchantdb_postgres.c
index 5fd07d0a..beeeb4eb 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -434,6 +434,22 @@ postgres_initialize (void *cls)
" WHERE merchant_pub=$1"
" AND h_contract_terms=$2",
2),
+
+ GNUNET_PQ_make_prepare ("find_contract_terms_by_date_and_range_asc",
+ "SELECT"
+ " contract_terms"
+ ",order_id"
+ ",row_id"
+ " FROM merchant_contract_terms"
+ " WHERE"
+ " timestamp>$1"
+ " AND merchant_pub=$2"
+ " AND row_id>$3"
+ " AND paid=TRUE"
+ " ORDER BY row_id ASC, timestamp ASC"
+ " LIMIT $4",
+ 4),
+
GNUNET_PQ_make_prepare ("find_contract_terms_by_date_and_range",
"SELECT"
" contract_terms"
@@ -448,6 +464,21 @@ postgres_initialize (void *cls)
" ORDER BY row_id DESC, timestamp DESC"
" LIMIT $4",
4),
+
+ GNUNET_PQ_make_prepare ("find_contract_terms_by_date_and_range_past_asc",
+ "SELECT"
+ " contract_terms"
+ ",order_id"
+ ",row_id"
+ " FROM merchant_contract_terms"
+ " WHERE"
+ " timestamp<$1"
+ " AND merchant_pub=$2"
+ " AND row_id<$3"
+ " AND paid=TRUE"
+ " ORDER BY row_id ASC, timestamp ASC"
+ " LIMIT $4",
+ 4),
GNUNET_PQ_make_prepare ("find_contract_terms_by_date_and_range_past",
"SELECT"
" contract_terms"
@@ -1365,6 +1396,7 @@ find_contracts_cb (void *cls,
* the same timestamp and just go behind in history by tuning `start`.
* @param nrows only nrows rows are returned.
* @param past if set to #GNUNET_YES, retrieves rows older than `date`.
+ * @param ascending if GNUNET_YES, results will be sorted in chronological order.
* This is tipically used to show live updates on the merchant's backoffice
* Web interface.
* @param cb function to call with transaction data, can be NULL.
@@ -1378,6 +1410,7 @@ postgres_find_contract_terms_by_date_and_range (void *cls,
uint64_t start,
uint64_t nrows,
int past,
+ unsigned int ascending,
TALER_MERCHANTDB_ProposalDataCallback cb,
void *cb_cls)
{
@@ -1398,10 +1431,15 @@ postgres_find_contract_terms_by_date_and_range (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"DB serving /history with date %s\n",
GNUNET_STRINGS_absolute_time_to_string (date));
- if (GNUNET_YES == past)
+ if ((GNUNET_YES == past) && (GNUNET_YES == ascending))
+ stmt = "find_contract_terms_by_date_and_range_past_asc";
+ else if ((GNUNET_YES == past) && (GNUNET_NO == ascending))
stmt = "find_contract_terms_by_date_and_range_past";
- else
+
+ else if ((GNUNET_NO == past) && (GNUNET_NO == ascending))
stmt = "find_contract_terms_by_date_and_range";
+ else
+ stmt = "find_contract_terms_by_date_and_range_asc";
check_connection (pg);
qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
stmt,
diff --git a/src/backenddb/test_merchantdb.c b/src/backenddb/test_merchantdb.c
index d60d1e9f..aa3db96a 100644
--- a/src/backenddb/test_merchantdb.c
+++ b/src/backenddb/test_merchantdb.c
@@ -905,6 +905,7 @@ run (void *cls)
2,
1,
GNUNET_YES,
+ GNUNET_NO,
&pd_cb,
NULL));
timestamp = GNUNET_TIME_absolute_get ();
@@ -935,6 +936,7 @@ run (void *cls)
0,
5,
GNUNET_NO,
+ GNUNET_NO,
&pd_cb,
NULL));