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

Function evlSqrt

src/jrd/SysFunction.cpp:6616–6656  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6614
6615
6616dsc* evlSqrt(thread_db* tdbb, const SysFunction* function, const NestValueArray& args,
6617 impure_value* impure)
6618{
6619 fb_assert(args.getCount() == 1);
6620
6621 Request* request = tdbb->getRequest();
6622
6623 const dsc* value = EVL_expr(tdbb, request, args[0]);
6624 if (request->req_flags & req_null) // return NULL if value is NULL
6625 return NULL;
6626
6627 if (value->isDecOrInt128())
6628 {
6629 DecimalStatus decSt = tdbb->getAttachment()->att_dec_status;
6630 impure->vlu_misc.vlu_dec128 = MOV_get_dec128(tdbb, value);
6631
6632 if (impure->vlu_misc.vlu_dec128.compare(decSt, CDecimal128(0)) < 0)
6633 {
6634 status_exception::raise(Arg::Gds(isc_expression_eval_err) <<
6635 Arg::Gds(isc_sysf_argmustbe_nonneg) << Arg::Str(function->name));
6636 }
6637
6638 impure->vlu_misc.vlu_dec128 = impure->vlu_misc.vlu_dec128.sqrt(decSt);
6639 impure->vlu_desc.makeDecimal128(&impure->vlu_misc.vlu_dec128);
6640 }
6641 else
6642 {
6643 impure->vlu_misc.vlu_double = MOV_get_double(tdbb, value);
6644
6645 if (impure->vlu_misc.vlu_double < 0)
6646 {
6647 status_exception::raise(Arg::Gds(isc_expression_eval_err) <<
6648 Arg::Gds(isc_sysf_argmustbe_nonneg) << Arg::Str(function->name));
6649 }
6650
6651 impure->vlu_misc.vlu_double = sqrt(impure->vlu_misc.vlu_double);
6652 impure->vlu_desc.makeDouble(&impure->vlu_misc.vlu_double);
6653 }
6654
6655 return &impure->vlu_desc;
6656}
6657
6658
6659dsc* evlTrunc(thread_db* tdbb, const SysFunction* function, const NestValueArray& args,

Callers

nothing calls this directly

Calls 15

EVL_exprFunction · 0.85
MOV_get_dec128Function · 0.85
CDecimal128Class · 0.85
raiseFunction · 0.85
GdsClass · 0.85
StrClass · 0.85
MOV_get_doubleFunction · 0.85
isDecOrInt128Method · 0.80
sqrtMethod · 0.80
makeDecimal128Method · 0.80
makeDoubleMethod · 0.80
getCountMethod · 0.45

Tested by

no test coverage detected