aboutsummaryrefslogtreecommitdiffstats
path: root/sql/et_tables.sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql/et_tables.sql')
-rw-r--r--sql/et_tables.sql46
1 files changed, 36 insertions, 10 deletions
diff --git a/sql/et_tables.sql b/sql/et_tables.sql
index 93a2682d..d403252a 100644
--- a/sql/et_tables.sql
+++ b/sql/et_tables.sql
@@ -351,12 +351,12 @@ CREATE OR REPLACE FUNCTION et_cusip_details(p_cusips VARIADIC varchar(10)[])
BEGIN
RETURN QUERY SELECT a.Orig_Moody, a.Curr_Moody, NULL, b."Deal Name", b.manager,NULL,
a.Spread/100, b."Deal Issue Date", b."Reinv End Date", b.Maturity,
- CAST(NULL AS float), Cast(NULL AS float), CAST(NULL AS FLOAT), CAST(NULL AS float),
- a.Curr_Attach/100, (a.Curr_Detach-a.Curr_Attach)/100
+ CAST(NULL AS float), b."CDO Percentage", CAST(NULL AS FLOAT), CAST(NULL AS float),
+ d.subordination, d.thickness
FROM cusip_universe a LEFT JOIN latest_clo_universe b
ON a.dealname = b.dealname
JOIN (SELECT unnest($1) AS cusip, generate_subscripts(p_cusips, 1) AS id) c
- ON a.cusip = c.cusip ORDER BY c.id;
+ ON a.cusip = c.cusip LEFT JOIN et_model_numbers d ON d.cusip = c.cusip ORDER BY c.id;
END;
$$ LANGUAGE plpgsql;
@@ -364,7 +364,8 @@ ALTER FUNCTION et_cusip_details(varchar(10)[])
OWNER TO et_user;
CREATE OR REPLACE FUNCTION et_deal_subordination(p_dealname varchar(10))
- RETURNS TABLE(p_cusip varchar(9), p_orig_subordination float, p_curr_subordination float) AS $$
+ RETURNS TABLE(p_cusip varchar(9), p_orig_subordination float, p_curr_subordination float,
+ p_orig_thickness float, p_curr_thickness float) AS $$
DECLARE
cusip_row RECORD;
curr_cumsum_cusip_bal float;
@@ -375,8 +376,10 @@ CREATE OR REPLACE FUNCTION et_deal_subordination(p_dealname varchar(10))
defaulted_price float:=0.7;
curr_subordination float[];
orig_subordination float[];
+ curr_thickness float[];
+ orig_thickness float[];
deal_info RECORD;
- i int := 0;
+ i int := 1;
previous_moody text;
cusips varchar(9)[];
BEGIN
@@ -396,16 +399,39 @@ CREATE OR REPLACE FUNCTION et_deal_subordination(p_dealname varchar(10))
curr_subordination := curr_subordination || (curr_adjusted_collat_bal-curr_cumsum_cusip_bal)/deal_info."Curr Deal Bal";
orig_subordination := orig_subordination || (orig_adjusted_collat_bal - orig_cumsum_cusip_bal)/deal_info."Orig Deal Bal";
cusips := cusips || cusip_row.Cusip;
- i:=i+1;
- IF i>0 THEN
+ IF i=1 THEN
+ curr_thickness := curr_thickness || 1 - curr_subordination[i];
+ orig_thickness := orig_thickness || 1 - orig_subordination[i];
+ ELSE
+ curr_thickness := curr_thickness || curr_subordination[i-1] - curr_subordination[i];
+ orig_thickness := orig_thickness || orig_subordination[i-1] - orig_subordination[i];
+ END IF;
+ if i>1 THEN
IF cusip_row.orig_moody = previous_moody THEN
- curr_subordination[i-1]:=curr_subordination[i];
- orig_subordination[i-1]:=orig_subordination[i];
+ curr_subordination[i-1] := curr_subordination[i];
+ orig_subordination[i-1] := orig_subordination[i];
+ IF i=2 THEN
+ curr_thickness[i-1] := 1 - curr_subordination[i-1];
+ orig_thickness[i-1] := 1 - orig_subordination[i-1];
+ ELSE
+ curr_thickness[i-1] := curr_subordination[i-2] - curr_subordination[i-1];
+ orig_thickness[i-1] := orig_subordination[i-2] - orig_subordination[i-1];
+ END IF;
END IF;
END IF;
+ i := i+1;
previous_moody := cusip_row.orig_moody;
END LOOP;
- RETURN QUERY SELECT unnest(cusips), unnest(orig_subordination), unnest(curr_subordination);
+ RETURN QUERY SELECT unnest(cusips), unnest(orig_subordination), unnest(curr_subordination), unnest(orig_thickness), unnest(curr_thickness);
END;
$$ LANGUAGE plpgsql;
+CREATE TABLE et_model_numbers(
+ Cusip varchar(9) references cusip_universe(Cusip),
+ subordination float,
+ thickness float,
+ wap_basis float,
+ PRIMARY KEY(Cusip)
+ );
+
+GRANT ALL ON et_model_numbers TO et_user;