diff options
Diffstat (limited to 'src/exchangedb/exchange-0001.sql')
-rw-r--r-- | src/exchangedb/exchange-0001.sql | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/src/exchangedb/exchange-0001.sql b/src/exchangedb/exchange-0001.sql index a5998b852..8f44c5664 100644 --- a/src/exchangedb/exchange-0001.sql +++ b/src/exchangedb/exchange-0001.sql @@ -137,90 +137,10 @@ COMMENT ON FUNCTION comment_partitioned_column IS 'Generic function to create a comment on column of a table that is partitioned.'; --------------------------------------------------------------- --- Taler amounts and helper functiosn -------------------------------------------------------------- - - -CREATE PROCEDURE amount_normalize( - IN amount taler_amount - ,OUT normalized taler_amount -) -LANGUAGE plpgsql -AS $$ -BEGIN - normalized.val = amount.val + amount.frac / 100000000; - normalized.frac = amount.frac % 100000000; -END $$; - -COMMENT ON PROCEDURE amount_normalize - IS 'Returns the normalized amount by adding to the .val the value of (.frac / 100000000) and removing the modulus 100000000 from .frac.'; - -CREATE PROCEDURE amount_add( - IN a taler_amount - ,IN b taler_amount - ,OUT sum taler_amount -) -LANGUAGE plpgsql -AS $$ -BEGIN - sum = (a.val + b.val, a.frac + b.frac); - CALL amount_normalize(sum ,sum); - - IF (sum.val > (1<<52)) - THEN - RAISE EXCEPTION 'addition overflow'; - END IF; -END $$; - -COMMENT ON PROCEDURE amount_add - IS 'Returns the normalized sum of two amounts. It raises an exception when the resulting .val is larger than 2^52'; - -CREATE FUNCTION amount_left_minus_right( - IN l taler_amount - ,IN r taler_amount - ,OUT diff taler_amount - ,OUT ok BOOLEAN -) -LANGUAGE plpgsql -AS $$ -BEGIN - -IF (l.val > r.val) -THEN - ok = TRUE; - IF (l.frac >= r.frac) - THEN - diff.val = l.val - r.val; - diff.frac = l.frac - r.frac; - ELSE - diff.val = l.val - r.val - 1; - diff.frac = l.frac + 100000000 - r.frac; - END IF; -ELSE - IF (l.val = r.val) AND (l.frac >= r.frac) - THEN - diff.val = 0; - diff.frac = l.frac - r.frac; - ok = TRUE; - ELSE - diff = (-1, -1); - ok = FALSE; - END IF; -END IF; - -RETURN; -END $$; - -COMMENT ON FUNCTION amount_left_minus_right - IS 'Subtracts the right amount from the left and returns the difference and TRUE, if the left amount is larger than the right, or an invalid amount and FALSE otherwise.'; - - --------------------------------------------------------------------------- -- Main DB setup loop --------------------------------------------------------------------------- - CREATE FUNCTION do_create_tables( num_partitions INTEGER -- NULL: no partitions, add foreign constraints |