aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sql/date.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/sql/date.c b/sql/date.c
index 14f26a63..612eb5ff 100644
--- a/sql/date.c
+++ b/sql/date.c
@@ -1,5 +1,6 @@
#include "postgres.h"
#include "fmgr.h"
+#include "executor/spi.h"
#include "utils/date.h"
#include "utils/builtins.h"
#include "isda/dateconv.h"
@@ -85,3 +86,51 @@ Datum cds_accrued(PG_FUNCTION_ARGS) {
pfree(currency);
PG_RETURN_FLOAT8((date - date_prev) / 360. * coupon);
}
+
+
+Datum test(PG_FUNCTION_ARGS) {
+ if (SPI_connect() == SPI_ERROR_CONNECT) {
+ elog(ERROR, "pomme");
+ }
+ const text* redindexcode = PG_GETARG_TEXT_PP(0);
+ DateADT maturity = PG_GETARG_DATEADT(1);
+ char* sql_query = "SELECT index, series, tenor::text, coupon, issue_date, indexfactor/100, "
+ "version, cumulativeloss "
+ "FROM index_desc "
+ "WHERE redindexcode=$1 AND maturity=$2";
+ int ret;
+ uint64 proc;
+ int nargs = 2;
+ Oid argtypes[2] = {TEXTOID, DATEOID};
+ char nulls[2] = " ";
+ Datum values[2];
+ values[0] = PointerGetDatum(redindexcode);
+ values[1] = DateADTGetDatum(maturity);
+ ret = SPI_execute_with_args(sql_query, nargs, argtypes, values, nulls, true, 1);
+ proc = SPI_processed;
+ short series, version;
+ int coupon;
+ char *index, *tenor;
+ TDate issue_date;
+ double factor, cumulativeloss;
+ if (ret == SPI_OK_SELECT && SPI_tuptable != NULL) {
+ SPITupleTable *tuptable = SPI_tuptable;
+ TupleDesc tupdesc = tuptable->tupdesc;
+ bool isnull;
+ HeapTuple tuple = tuptable->vals[0];
+ index = text_to_cstring(DatumGetTextPP(SPI_getbinval(tuple, tupdesc, 1, &isnull)));
+ series = DatumGetInt16(SPI_getbinval(tuple, tupdesc, 2, &isnull));
+ tenor = text_to_cstring(DatumGetTextPP(SPI_getbinval(tuple, tupdesc, 3, &isnull)));
+ coupon = DatumGetInt32(SPI_getbinval(tuple, tupdesc, 4, &isnull));
+ issue_date = TDate_from_DateADT(DatumGetDateADT(SPI_getbinval(tuple, tupdesc, 5, &isnull)));
+ factor = DatumGetFloat8(SPI_getbinval(tuple, tupdesc, 6, &isnull));
+ version = DatumGetInt16(SPI_getbinval(tuple, tupdesc, 7, &isnull));
+ cumulativeloss = DatumGetFloat8(SPI_getbinval(tuple, tupdesc, 8, &isnull));
+ elog(ERROR, "index: %s, series: %dh, tenor: %s, coupon: %d, issue_date: %d, factor: %f, version: %dh, cumulativeloss: %f",
+ index, series, tenor, coupon, issue_date, factor, version, cumulativeloss);
+ }
+ SPI_finish();
+ pfree(index);
+ pfree(tenor);
+ PG_RETURN_NULL();
+}