mirror of
https://github.com/postgres/postgres.git
synced 2025-08-28 18:48:04 +03:00
Expose internal function for converting int64 to numeric
Existing callers had to take complicated detours via DirectFunctionCall1(). This simplifies a lot of code. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/42b73d2d-da12-ba9f-570a-420e0cce19d9@phystech.edu
This commit is contained in:
@@ -1042,7 +1042,7 @@ cash_numeric(PG_FUNCTION_ARGS)
|
||||
fpoint = 2;
|
||||
|
||||
/* convert the integral money value to numeric */
|
||||
result = DirectFunctionCall1(int8_numeric, Int64GetDatum(money));
|
||||
result = NumericGetDatum(int64_to_numeric(money));
|
||||
|
||||
/* scale appropriately, if needed */
|
||||
if (fpoint > 0)
|
||||
@@ -1056,8 +1056,7 @@ cash_numeric(PG_FUNCTION_ARGS)
|
||||
scale = 1;
|
||||
for (i = 0; i < fpoint; i++)
|
||||
scale *= 10;
|
||||
numeric_scale = DirectFunctionCall1(int8_numeric,
|
||||
Int64GetDatum(scale));
|
||||
numeric_scale = NumericGetDatum(int64_to_numeric(scale));
|
||||
|
||||
/*
|
||||
* Given integral inputs approaching INT64_MAX, select_div_scale()
|
||||
@@ -1107,7 +1106,7 @@ numeric_cash(PG_FUNCTION_ARGS)
|
||||
scale *= 10;
|
||||
|
||||
/* multiply the input amount by scale factor */
|
||||
numeric_scale = DirectFunctionCall1(int8_numeric, Int64GetDatum(scale));
|
||||
numeric_scale = NumericGetDatum(int64_to_numeric(scale));
|
||||
amount = DirectFunctionCall2(numeric_mul, amount, numeric_scale);
|
||||
|
||||
/* note that numeric_int8 will round to nearest integer for us */
|
||||
|
Reference in New Issue
Block a user