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

Comparing ibx/trunk/fbintf/client/FBArray.pas (file contents):
Revision 401 by tony, Mon Jan 10 10:13:17 2022 UTC vs.
Revision 402 by tony, Mon Aug 1 10:07:24 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(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:
# 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)^ := CurrToNumeric(Value).AdjustScaleTo(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.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;
# Line 822 | Line 822 | begin
822    InternalPutSlice(Force);
823    FModified := false;
824    FIsNew := false;
825 +  FLoaded := true;
826   end;
827  
828   function TFBArray.GetOffset(index: array of integer): PByte;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines