ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/branches/udr/client/FBArray.pas
(Generate patch)

Comparing ibx/branches/udr/client/FBArray.pas (file contents):
Revision 370 by tony, Wed Jan 5 14:59:15 2022 UTC vs.
Revision 371 by tony, Wed Jan 5 15:21:22 2022 UTC

# Line 101 | Line 101 | type
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 }
# Line 247 | Line 247 | type
247  
248   implementation
249  
250 < uses FBMessages, IBUtils;
250 > uses FBMessages, IBUtils, FBNumeric;
251  
252   { TFBArrayElement }
253  
# Line 367 | Line 367 | begin
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,
# Line 431 | Line 431 | begin
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  
# Line 439 | Line 439 | begin
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  
# Line 474 | Line 474 | begin
474      PSingle(SQLData)^ := Value;
475    SQL_SHORT:
476      if Scale < 0 then
477 <      PShort(SQLData)^ := AdjustScaleFromDouble(Value,Scale)
477 >      PShort(SQLData)^ := SafeSmallInt(NewNumeric(Value,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(NewNumeric(Value,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)^ := NewNumeric(Value,Scale).getRawValue
488      else
489        IBError(ibxeInvalidDataConversion, [nil]);
490    SQL_TEXT, SQL_VARYING:
# Line 510 | Line 510 | begin
510      if Scale = -4 then
511        PCurrency(SQLData)^ := Value
512      else
513 <      PInt64(SQLData)^ := AdjustScaleFromCurrency(Value,Scale);
513 >      PInt64(SQLData)^ := NewNumeric(Value).clone(Scale).getRawValue;
514      Changed;
515    end
516   end;
# Line 538 | Line 538 | begin
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.clone(Scale).getRawValue);
547    SQL_SHORT:
548 <    PShort(SQLData)^ := AdjustScaleToInt64(Value,aScale - getScale);
548 >    PShort(SQLData)^ := SafeSmallInt(Value.clone(Scale).getRawValue);
549    SQL_INT64:
550 <    PInt64(SQLData)^ := AdjustScaleToInt64(Value,aScale - getScale);
550 >    PInt64(SQLData)^ := Value.clone(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;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines