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

Comparing ibx/branches/udr/client/FBSQLData.pas (file contents):
Revision 371 by tony, Wed Jan 5 15:21:22 2022 UTC vs.
Revision 391 by tony, Thu Jan 27 16:34:24 2022 UTC

# Line 535 | Line 535 | type
535      {ISQLParams}
536      function getCount: integer;
537      function getSQLParam(index: integer): ISQLParam;
538 <    function ByName(Idx: AnsiString): ISQLParam ;
538 >    function ParamExists(Idx: AnsiString): boolean;
539 >    function ByName(Idx: AnsiString): ISQLParam ; virtual;
540      function GetModified: Boolean;
541      function GetHasCaseSensitiveParams: Boolean;
542      function GetStatement: IStatement;
# Line 560 | Line 561 | type
561       constructor Create(aResults: TSQLDataArea);
562        {IResults}
563       function getCount: integer;
564 <     function ByName(Idx: AnsiString): ISQLData;
564 >     function ByName(Idx: AnsiString): ISQLData; virtual;
565 >     function FieldExists(Idx: AnsiString): boolean;
566       function getSQLData(index: integer): ISQLData;
567       procedure GetData(index: integer; var IsNull:boolean; var len: short; var data: PByte);
568       function GetStatement: IStatement;
# Line 874 | Line 876 | begin
876    Scale := 0;
877    if  (SQLType <> SQL_VARYING) and (SQLType <> SQL_TEXT) then
878      IBError(ibxeUnableTosetaTextType,[Index,Name,TSQLDataItem.GetSQLTypeName(SQLType)]);
879 +  if not CanChangeMetaData and (Length(aValue) > GetSize) then
880 +    IBError(ibxeStringOverflow,[Length(aValue),DataLength]);
881    SetSQLData(PByte(PAnsiChar(FVarString)),Length(aValue));
882   end;
883  
# Line 1653 | Line 1657 | var aValue: Int64;
1657   begin
1658    case SQLType of
1659     SQL_TEXT, SQL_VARYING:
1660 <     Result := NewNumeric(GetAsString);
1660 >     Result := StrToNumeric(GetAsString);
1661  
1662     SQL_SHORT:
1663       Result := NumericFromRawValues(PShort(SQLData)^, Scale);
# Line 1668 | Line 1672 | begin
1672     SQL_DEC34,
1673     SQL_DEC_FIXED,
1674     SQL_INT128:
1675 <     Result := NewNumeric(GetAsBCD);
1675 >     Result := BCDToNumeric(GetAsBCD);
1676  
1677     else
1678       IBError(ibxeInvalidDataConversion, [nil]);
# Line 1814 | Line 1818 | begin
1818      AsDouble := Value
1819    else
1820    if not CanChangeMetaData and ((SQLType <> SQL_INT64) or (Scale <> -4)) then
1821 <    SetAsNumeric(NewNumeric(Value))
1821 >    SetAsNumeric(CurrToNumeric(Value))
1822    else
1823    begin
1824      Changing;
# Line 1832 | Line 1836 | procedure TSQLDataItem.SetAsInt64(Value:
1836   begin
1837    CheckActive;
1838    if not CanChangeMetaData and ((SQLType <> SQL_INT64) or (Scale <> 0)) then
1839 <    SetAsNumeric(NewNumeric(Value))
1839 >    SetAsNumeric(IntToNumeric(Value))
1840    else
1841    begin
1842      Changing;
# Line 1979 | Line 1983 | end;
1983   procedure TSQLDataItem.SetAsDouble(Value: Double);
1984   begin
1985    CheckActive;
1986 <  if IsNullable then
1987 <    IsNull := False;
1986 >  if not CanChangeMetaData and (SQLType <> SQL_DOUBLE) then
1987 >    SetAsNumeric(DoubleToNumeric(Value))
1988 >  else
1989 >  begin
1990 >    if IsNullable then
1991 >      IsNull := False;
1992  
1993 <  Changing;
1994 <  SQLType := SQL_DOUBLE;
1995 <  DataLength := SizeOf(Double);
1996 <  Scale := 0;
1997 <  PDouble(SQLData)^ := Value;
1998 <  Changed;
1993 >    Changing;
1994 >    SQLType := SQL_DOUBLE;
1995 >    DataLength := SizeOf(Double);
1996 >    Scale := 0;
1997 >    PDouble(SQLData)^ := Value;
1998 >    Changed;
1999 >  end;
2000   end;
2001  
2002   procedure TSQLDataItem.SetAsFloat(Value: Float);
2003   begin
2004    CheckActive;
2005 <  if IsNullable then
2006 <    IsNull := False;
2005 >  if not CanChangeMetaData and (SQLType <> SQL_FLOAT) then
2006 >    SetAsNumeric(DoubleToNumeric(Value))
2007 >  else
2008 >  begin
2009 >    if IsNullable then
2010 >      IsNull := False;
2011  
2012 <  Changing;
2013 <  SQLType := SQL_FLOAT;
2014 <  DataLength := SizeOf(Float);
2015 <  Scale := 0;
2016 <  PSingle(SQLData)^ := Value;
2017 <  Changed;
2012 >    Changing;
2013 >    SQLType := SQL_FLOAT;
2014 >    DataLength := SizeOf(Float);
2015 >    Scale := 0;
2016 >    PSingle(SQLData)^ := Value;
2017 >    Changed;
2018 >  end;
2019   end;
2020  
2021   procedure TSQLDataItem.SetAsLong(Value: Long);
2022   begin
2023    CheckActive;
2024    if not CanChangeMetaData and ((SQLType <> SQL_LONG) or (Scale <> 0)) then
2025 <    SetAsNumeric(NewNumeric(Value))
2025 >    SetAsNumeric(IntToNumeric(Value))
2026    else
2027    begin
2028      if IsNullable then
# Line 2056 | Line 2070 | procedure TSQLDataItem.SetAsShort(Value:
2070   begin
2071    CheckActive;
2072    if not CanChangeMetaData and ((SQLType <> SQL_SHORT) or (Scale <> 0)) then
2073 <    SetAsNumeric(NewNumeric(Value))
2073 >    SetAsNumeric(IntToNumeric(Value))
2074    else
2075    begin
2076      Changing;
# Line 2087 | Line 2101 | begin
2101    else case VarType(Value) of
2102      varEmpty, varNull:
2103        IsNull := True;
2104 <    varSmallint, varInteger, varByte,
2104 >    varSmallint, varInteger, varByte, varLongWord,
2105        varWord, varShortInt, varInt64:
2106 <        SetAsNumeric(NewNumeric(Int64(Value)));
2106 >        SetAsNumeric(IntToNumeric(Int64(Value)));
2107      varSingle, varDouble:
2108        AsDouble := Value;
2109      varCurrency:
2110 <      SetAsNumeric(NewNumeric(Currency(Value)));
2110 >      SetAsNumeric(CurrToNumeric(Currency(Value)));
2111      varBoolean:
2112        AsBoolean := Value;
2113      varDate:
# Line 2130 | Line 2144 | begin
2144    with FFirebirdClientAPI do
2145    case GetSQLType of
2146    SQL_LONG:
2147 <      PLong(SQLData)^ := SafeInteger(Value.clone(Scale).getRawValue);
2147 >      PLong(SQLData)^ := SafeInteger(Value.AdjustScaleTo(Scale).getRawValue);
2148    SQL_SHORT:
2149 <    PShort(SQLData)^ := SafeSmallInt(Value.clone(Scale).getRawValue);
2149 >    PShort(SQLData)^ := SafeSmallInt(Value.AdjustScaleTo(Scale).getRawValue);
2150    SQL_INT64:
2151 <    PInt64(SQLData)^ := Value.clone(Scale).getRawValue;
2151 >    PInt64(SQLData)^ := Value.AdjustScaleTo(Scale).getRawValue;
2152    SQL_TEXT, SQL_VARYING:
2153     SetAsString(Value.getAsString);
2154    SQL_D_FLOAT,
# Line 2163 | Line 2177 | begin
2177  
2178    if not CanChangeMetaData then
2179    begin
2180 <    SetAsNumeric(NewNumeric(aValue));
2180 >    SetAsNumeric(BCDToNumeric(aValue));
2181      Exit;
2182    end;
2183  
# Line 2498 | Line 2512 | begin
2512    SQL_DEC34,
2513    SQL_INT128:
2514      if TryStrToBCD(Value,BCDValue) then
2515 <      SetAsNumeric(NewNumeric(BCDValue))
2515 >      SetAsNumeric(BCDToNumeric(BCDValue))
2516      else
2517        DoSetString;
2518  
# Line 3279 | Line 3293 | begin
3293    end;
3294   end;
3295  
3296 + function TSQLParams.ParamExists(Idx: AnsiString): boolean;
3297 + begin
3298 +  CheckActive;
3299 +  Result := FSQLParams.ColumnByName(Idx) <> nil;
3300 + end;
3301 +
3302   function TSQLParams.ByName(Idx: AnsiString): ISQLParam;
3303   var aIBXSQLVAR: TSQLVarData;
3304   begin
# Line 3398 | Line 3418 | begin
3418    end;
3419   end;
3420  
3421 + function TResults.FieldExists(Idx: AnsiString): boolean;
3422 + begin
3423 +  Result :=  FResults.ColumnByName(Idx) <> nil;
3424 + end;
3425 +
3426   function TResults.getSQLData(index: integer): ISQLData;
3427   begin
3428    CheckActive;

Comparing ibx/branches/udr/client/FBSQLData.pas (property svn:eol-style):
Revision 371 by tony, Wed Jan 5 15:21:22 2022 UTC vs.
Revision 391 by tony, Thu Jan 27 16:34:24 2022 UTC

# Line 0 | Line 1
1 + native

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines