| 588 | } |
| 589 | |
| 590 | StringVal DecimalOperators::CastToStringVal( |
| 591 | FunctionContext* ctx, const DecimalVal& val) { |
| 592 | if (val.is_null) return StringVal::null(); |
| 593 | int precision = ctx->impl()->GetConstFnAttr(FunctionContextImpl::ARG_TYPE_PRECISION, 0); |
| 594 | int scale = ctx->impl()->GetConstFnAttr(FunctionContextImpl::ARG_TYPE_SCALE, 0); |
| 595 | string s; |
| 596 | switch (ColumnType::GetDecimalByteSize(precision)) { |
| 597 | case 4: |
| 598 | s = Decimal4Value(val.val4).ToString(precision, scale); |
| 599 | break; |
| 600 | case 8: |
| 601 | s = Decimal8Value(val.val8).ToString(precision, scale); |
| 602 | break; |
| 603 | case 16: |
| 604 | s = Decimal16Value(val.val16).ToString(precision, scale); |
| 605 | break; |
| 606 | default: |
| 607 | DCHECK(false); |
| 608 | return StringVal::null(); |
| 609 | } |
| 610 | StringVal result(ctx, s.size()); |
| 611 | memcpy(result.ptr, s.c_str(), s.size()); |
| 612 | return result; |
| 613 | } |
| 614 | |
| 615 | template <typename T> |
| 616 | IR_ALWAYS_INLINE int32_t DecimalOperators::ConvertToNanoseconds( |
nothing calls this directly
no test coverage detected