101 |
|
procedure SetAsFloat(Value: Float); override; |
102 |
|
procedure SetAsCurrency(Value: Currency); override; |
103 |
|
procedure SetAsBcd(aValue: tBCD); override; |
104 |
< |
procedure SetAsNumeric(Value: Int64; aScale: integer); override; |
104 |
> |
procedure SetAsNumeric(Value: IFBNumeric); override; |
105 |
|
end; |
106 |
|
|
107 |
|
{ TFBArrayMetaData } |
247 |
|
|
248 |
|
implementation |
249 |
|
|
250 |
< |
uses FBMessages, IBUtils; |
250 |
> |
uses FBMessages, IBUtils, FBNumeric; |
251 |
|
|
252 |
|
{ TFBArrayElement } |
253 |
|
|
367 |
|
CheckActive; |
368 |
|
case GetSQLType of |
369 |
|
SQL_LONG: |
370 |
< |
PLong(SQLData)^ := AdjustScaleToInt64(Value,getScale); |
370 |
> |
PLong(SQLData)^ := NumericFromRawValues(Value,getScale).getRawValue; |
371 |
|
SQL_SHORT: |
372 |
< |
PShort(SQLData)^ := AdjustScaleToInt64(Value,getScale); |
372 |
> |
PShort(SQLData)^ := NumericFromRawValues(Value,getScale).getRawValue; |
373 |
|
SQL_INT64: |
374 |
< |
PInt64(SQLData)^ := AdjustScaleToInt64(Value,getScale); |
374 |
> |
PInt64(SQLData)^ := NumericFromRawValues(Value,getScale).getRawValue; |
375 |
|
SQL_TEXT, SQL_VARYING: |
376 |
|
SetAsString(IntToStr(Value)); |
377 |
|
SQL_D_FLOAT, |
431 |
|
SQL_LONG, |
432 |
|
SQL_INT64: |
433 |
|
if TryStrToNumeric(Value,Int64Value,aScale) then |
434 |
< |
SetAsNumeric(Int64Value,AScale) |
434 |
> |
SetAsNumeric(NumericFromRawValues(Int64Value,aScale)) |
435 |
|
else |
436 |
|
SetAsCurrency(StrToCurr(Value)); |
437 |
|
|
439 |
|
SQL_DOUBLE, |
440 |
|
SQL_FLOAT: |
441 |
|
if TryStrToNumeric(Value,Int64Value,aScale) then |
442 |
< |
SetAsDouble(NumericToDouble(Int64Value,aScale)) |
442 |
> |
SetAsDouble(NumericToDouble(Int64Value,AScale)) |
443 |
|
else |
444 |
|
IBError(ibxeInvalidDataConversion,[nil]); |
445 |
|
|
474 |
|
PSingle(SQLData)^ := Value; |
475 |
|
SQL_SHORT: |
476 |
|
if Scale < 0 then |
477 |
< |
PShort(SQLData)^ := AdjustScaleFromDouble(Value,Scale) |
477 |
> |
PShort(SQLData)^ := SafeSmallInt(DoubleToNumeric(Value).AdjustScaleTo(Scale).getRawValue) |
478 |
|
else |
479 |
|
IBError(ibxeInvalidDataConversion, [nil]); |
480 |
|
SQL_LONG: |
481 |
|
if Scale < 0 then |
482 |
< |
PLong(SQLData)^ := AdjustScaleFromDouble(Value,Scale) |
482 |
> |
PLong(SQLData)^ := SafeInteger(DoubleToNumeric(Value).AdjustScaleTo(Scale).getRawValue) |
483 |
|
else |
484 |
|
IBError(ibxeInvalidDataConversion, [nil]); |
485 |
|
SQL_INT64: |
486 |
|
if Scale < 0 then |
487 |
< |
PInt64(SQLData)^ := AdjustScaleFromDouble(Value,Scale) |
487 |
> |
PInt64(SQLData)^ := DoubleToNumeric(Value).AdjustScaleTo(Scale).getRawValue |
488 |
|
else |
489 |
|
IBError(ibxeInvalidDataConversion, [nil]); |
490 |
|
SQL_TEXT, SQL_VARYING: |
510 |
|
if Scale = -4 then |
511 |
|
PCurrency(SQLData)^ := Value |
512 |
|
else |
513 |
< |
PInt64(SQLData)^ := AdjustScaleFromCurrency(Value,Scale); |
513 |
> |
PInt64(SQLData)^ := CurrToNumeric(Value).AdjustScaleTo(Scale).getRawValue; |
514 |
|
Changed; |
515 |
|
end |
516 |
|
end; |
538 |
|
Changed; |
539 |
|
end; |
540 |
|
|
541 |
< |
procedure TFBArrayElement.SetAsNumeric(Value: Int64; aScale: integer); |
541 |
> |
procedure TFBArrayElement.SetAsNumeric(Value: IFBNumeric); |
542 |
|
begin |
543 |
|
CheckActive; |
544 |
|
case GetSQLType of |
545 |
|
SQL_LONG: |
546 |
< |
PLong(SQLData)^ := AdjustScaleToInt64(Value,aScale - getScale); |
546 |
> |
PLong(SQLData)^ := SafeInteger(Value.AdjustScaleTo(Scale).getRawValue); |
547 |
|
SQL_SHORT: |
548 |
< |
PShort(SQLData)^ := AdjustScaleToInt64(Value,aScale - getScale); |
548 |
> |
PShort(SQLData)^ := SafeSmallInt(Value.AdjustScaleTo(Scale).getRawValue); |
549 |
|
SQL_INT64: |
550 |
< |
PInt64(SQLData)^ := AdjustScaleToInt64(Value,aScale - getScale); |
550 |
> |
PInt64(SQLData)^ := Value.AdjustScaleTo(Scale).getRawValue; |
551 |
|
SQL_TEXT, SQL_VARYING: |
552 |
< |
SetAsString(AdjustScaleToStr(Value,aScale)); |
552 |
> |
SetAsString(Value.getAsString); |
553 |
|
SQL_D_FLOAT, |
554 |
|
SQL_DOUBLE: |
555 |
< |
PDouble(SQLData)^ := AdjustScale(Value,aScale); |
555 |
> |
PDouble(SQLData)^ := Value.getAsDouble; |
556 |
|
SQL_FLOAT: |
557 |
< |
PSingle(SQLData)^ := AdjustScale(Value,aScale); |
557 |
> |
PSingle(SQLData)^ := Value.getAsDouble; |
558 |
|
else |
559 |
|
IBError(ibxeInvalidDataConversion, [nil]); |
560 |
|
end; |