| 2066 | |
| 2067 | |
| 2068 | dsc* 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 | |
| 2125 | dsc* evlAsciiChar(thread_db* tdbb, const SysFunction*, const NestValueArray& args, |
nothing calls this directly
no test coverage detected