mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 02:43:03 +01:00
More details about arithmetical exceptions.
This commit is contained in:
parent
c741f654a2
commit
60fcb5886c
@ -2862,7 +2862,12 @@ static dsc* binary_value(thread_db* tdbb, const jrd_nod* node, impure_value* imp
|
|||||||
{
|
{
|
||||||
const double divisor = MOV_get_double(desc2);
|
const double divisor = MOV_get_double(desc2);
|
||||||
if (divisor == 0)
|
if (divisor == 0)
|
||||||
ERR_post(isc_arith_except, 0);
|
{
|
||||||
|
ERR_post(isc_arith_except,
|
||||||
|
isc_arg_gds, isc_exception_float_divide_by_zero,
|
||||||
|
isc_arg_sql_state, "22012",
|
||||||
|
0);
|
||||||
|
}
|
||||||
impure->vlu_misc.vlu_double =
|
impure->vlu_misc.vlu_double =
|
||||||
DOUBLE_DIVIDE(MOV_get_double(desc1), divisor);
|
DOUBLE_DIVIDE(MOV_get_double(desc1), divisor);
|
||||||
impure->vlu_desc.dsc_dtype = DEFAULT_DOUBLE;
|
impure->vlu_desc.dsc_dtype = DEFAULT_DOUBLE;
|
||||||
@ -4200,7 +4205,12 @@ static dsc* divide2(const dsc* desc, impure_value* value, const jrd_nod* node)
|
|||||||
if (node->nod_flags & nod_double) {
|
if (node->nod_flags & nod_double) {
|
||||||
const double d2 = MOV_get_double(desc);
|
const double d2 = MOV_get_double(desc);
|
||||||
if (d2 == 0.0)
|
if (d2 == 0.0)
|
||||||
ERR_post(isc_arith_except, 0);
|
{
|
||||||
|
ERR_post(isc_arith_except,
|
||||||
|
isc_arg_gds, isc_exception_float_divide_by_zero,
|
||||||
|
isc_arg_sql_state, "22012",
|
||||||
|
0);
|
||||||
|
}
|
||||||
const double d1 = MOV_get_double(&value->vlu_desc);
|
const double d1 = MOV_get_double(&value->vlu_desc);
|
||||||
value->vlu_misc.vlu_double = DOUBLE_DIVIDE(d1, d2);
|
value->vlu_misc.vlu_double = DOUBLE_DIVIDE(d1, d2);
|
||||||
value->vlu_desc.dsc_dtype = DEFAULT_DOUBLE;
|
value->vlu_desc.dsc_dtype = DEFAULT_DOUBLE;
|
||||||
@ -4249,7 +4259,12 @@ static dsc* divide2(const dsc* desc, impure_value* value, const jrd_nod* node)
|
|||||||
*/
|
*/
|
||||||
SINT64 i2 = MOV_get_int64(desc, desc->dsc_scale);
|
SINT64 i2 = MOV_get_int64(desc, desc->dsc_scale);
|
||||||
if (i2 == 0)
|
if (i2 == 0)
|
||||||
ERR_post(isc_arith_except, 0);
|
{
|
||||||
|
ERR_post(isc_arith_except,
|
||||||
|
isc_arg_gds, isc_exception_integer_divide_by_zero,
|
||||||
|
isc_arg_sql_state, "22012",
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
SINT64 i1 = MOV_get_int64(&value->vlu_desc, node->nod_scale - desc->dsc_scale);
|
SINT64 i1 = MOV_get_int64(&value->vlu_desc, node->nod_scale - desc->dsc_scale);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user