MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / evlAbs

Function evlAbs

src/jrd/SysFunction.cpp:2068–2122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2066
2067
2068dsc* evlAbs(thread_db* tdbb, const SysFunction*, const NestValueArray& args, impure_value* impure)
2069{
2070 fb_assert(args.getCount() == 1);
2071
2072 Request* request = tdbb->getRequest();
2073
2074 const dsc* value = EVL_expr(tdbb, request, args[0]);
2075 if (request->req_flags & req_null) // return NULL if value is NULL
2076 return NULL;
2077
2078 EVL_make_value(tdbb, value, impure);
2079
2080 switch (impure->vlu_desc.dsc_dtype)
2081 {
2082 case dtype_real:
2083 impure->vlu_misc.vlu_float = fabs(impure->vlu_misc.vlu_float);
2084 break;
2085
2086 case dtype_double:
2087 impure->vlu_misc.vlu_double = fabs(impure->vlu_misc.vlu_double);
2088 break;
2089
2090 case dtype_dec64:
2091 impure->vlu_misc.vlu_dec64 = impure->vlu_misc.vlu_dec64.abs();
2092 break;
2093
2094 case dtype_dec128:
2095 impure->vlu_misc.vlu_dec128 = impure->vlu_misc.vlu_dec128.abs();
2096 break;
2097
2098 case dtype_int128:
2099 impure->vlu_misc.vlu_int128 = impure->vlu_misc.vlu_int128.abs();
2100 break;
2101
2102 case dtype_short:
2103 case dtype_long:
2104 case dtype_int64:
2105 impure->vlu_misc.vlu_int64 = MOV_get_int64(tdbb, value, value->dsc_scale);
2106
2107 if (impure->vlu_misc.vlu_int64 == MIN_SINT64)
2108 status_exception::raise(Arg::Gds(isc_arith_except) << Arg::Gds(isc_numeric_out_of_range));
2109 else if (impure->vlu_misc.vlu_int64 < 0)
2110 impure->vlu_misc.vlu_int64 = -impure->vlu_misc.vlu_int64;
2111
2112 impure->vlu_desc.makeInt64(value->dsc_scale, &impure->vlu_misc.vlu_int64);
2113 break;
2114
2115 default:
2116 impure->vlu_misc.vlu_double = fabs(MOV_get_double(tdbb, &impure->vlu_desc));
2117 impure->vlu_desc.makeDouble(&impure->vlu_misc.vlu_double);
2118 break;
2119 }
2120
2121 return &impure->vlu_desc;
2122}
2123
2124
2125dsc* evlAsciiChar(thread_db* tdbb, const SysFunction*, const NestValueArray& args,

Callers

nothing calls this directly

Calls 11

EVL_exprFunction · 0.85
EVL_make_valueFunction · 0.85
MOV_get_int64Function · 0.85
raiseFunction · 0.85
GdsClass · 0.85
MOV_get_doubleFunction · 0.85
makeInt64Method · 0.80
makeDoubleMethod · 0.80
getCountMethod · 0.45
getRequestMethod · 0.45
absMethod · 0.45

Tested by

no test coverage detected