1370 lines
44 KiB
ObjectPascal
1370 lines
44 KiB
ObjectPascal
|
|
unit DataAbstract3_Intf;
|
||
|
|
|
||
|
|
{----------------------------------------------------------------------------}
|
||
|
|
{ This unit was automatically generated by the RemObjects SDK after reading }
|
||
|
|
{ the RODL file associated with this project . }
|
||
|
|
{ }
|
||
|
|
{ Do not modify this unit manually, or your changes will be lost when this }
|
||
|
|
{ unit is regenerated the next time you compile the project. }
|
||
|
|
{----------------------------------------------------------------------------}
|
||
|
|
|
||
|
|
{$I DataAbstract.inc}
|
||
|
|
|
||
|
|
interface
|
||
|
|
|
||
|
|
uses
|
||
|
|
{vcl:} Classes, TypInfo,
|
||
|
|
{RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf;
|
||
|
|
|
||
|
|
const
|
||
|
|
{ Library ID }
|
||
|
|
LibraryUID = '{2966A4BF-569C-45AA-8F34-CF1E155FD77A}';
|
||
|
|
TargetNamespace = '';
|
||
|
|
|
||
|
|
{ Service Interface ID's }
|
||
|
|
IDARemoteService_IID : TGUID = '{C532E842-0AA9-4253-A9BF-AFCF22885B97}';
|
||
|
|
IDALoginService_IID : TGUID = '{58550AA0-B64F-495A-B2F8-C981D4C39180}';
|
||
|
|
|
||
|
|
{ Event ID's }
|
||
|
|
|
||
|
|
type
|
||
|
|
{ Forward declarations }
|
||
|
|
IDARemoteService = interface;
|
||
|
|
IDALoginService = interface;
|
||
|
|
|
||
|
|
TDADatasetParamArray = class;
|
||
|
|
TDADatasetRequestInfoArray = class;
|
||
|
|
TDAStringArray = class;
|
||
|
|
|
||
|
|
TDADatasetParam = class;
|
||
|
|
TDADatasetRequestInfo = class;
|
||
|
|
TDALoginInfo = class;
|
||
|
|
|
||
|
|
|
||
|
|
{ TDADatasetParam }
|
||
|
|
TDADatasetParam = class(TROComplexType)
|
||
|
|
private
|
||
|
|
fName: String;
|
||
|
|
fValue: Variant;
|
||
|
|
public
|
||
|
|
procedure Assign(iSource: TPersistent); override;
|
||
|
|
procedure ReadComplex(ASerializer: TObject); override;
|
||
|
|
procedure WriteComplex(ASerializer: TObject); override;
|
||
|
|
published
|
||
|
|
property Name:String read fName write fName;
|
||
|
|
property Value:Variant read fValue write fValue;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetParamCollection }
|
||
|
|
TDADatasetParamCollection = class(TROCollection)
|
||
|
|
protected
|
||
|
|
constructor Create(aItemClass: TCollectionItemClass); overload;
|
||
|
|
function GetItems(aIndex: integer): TDADatasetParam;
|
||
|
|
procedure SetItems(aIndex: integer; const Value: TDADatasetParam);
|
||
|
|
public
|
||
|
|
constructor Create; overload;
|
||
|
|
function Add: TDADatasetParam; reintroduce;
|
||
|
|
procedure SaveToArray(anArray: TDADatasetParamArray);
|
||
|
|
procedure LoadFromArray(anArray: TDADatasetParamArray);
|
||
|
|
property Items[Index: integer]:TDADatasetParam read GetItems write SetItems; default;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetRequestInfo }
|
||
|
|
TDADatasetRequestInfo = class(TROComplexType)
|
||
|
|
private
|
||
|
|
fDatasetName: String;
|
||
|
|
fIncludeSchema: Boolean;
|
||
|
|
fMaxRecords: Integer;
|
||
|
|
fParams: TDADatasetParamArray;
|
||
|
|
function GetParams: TDADatasetParamArray;
|
||
|
|
public
|
||
|
|
procedure Assign(iSource: TPersistent); override;
|
||
|
|
procedure ReadComplex(ASerializer: TObject); override;
|
||
|
|
procedure WriteComplex(ASerializer: TObject); override;
|
||
|
|
published
|
||
|
|
property DatasetName:String read fDatasetName write fDatasetName;
|
||
|
|
property IncludeSchema:Boolean read fIncludeSchema write fIncludeSchema;
|
||
|
|
property MaxRecords:Integer read fMaxRecords write fMaxRecords;
|
||
|
|
property Params:TDADatasetParamArray read GetParams write fParams;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetRequestInfoCollection }
|
||
|
|
TDADatasetRequestInfoCollection = class(TROCollection)
|
||
|
|
protected
|
||
|
|
constructor Create(aItemClass: TCollectionItemClass); overload;
|
||
|
|
function GetItems(aIndex: integer): TDADatasetRequestInfo;
|
||
|
|
procedure SetItems(aIndex: integer; const Value: TDADatasetRequestInfo);
|
||
|
|
public
|
||
|
|
constructor Create; overload;
|
||
|
|
function Add: TDADatasetRequestInfo; reintroduce;
|
||
|
|
procedure SaveToArray(anArray: TDADatasetRequestInfoArray);
|
||
|
|
procedure LoadFromArray(anArray: TDADatasetRequestInfoArray);
|
||
|
|
property Items[Index: integer]:TDADatasetRequestInfo read GetItems write SetItems; default;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDALoginInfo }
|
||
|
|
TDALoginInfo = class(TROComplexType)
|
||
|
|
private
|
||
|
|
fSessionID: String;
|
||
|
|
fUserID: String;
|
||
|
|
fPrivileges: TDAStringArray;
|
||
|
|
fAttributes: TDAStringArray;
|
||
|
|
fData: Binary;
|
||
|
|
function GetPrivileges: TDAStringArray;
|
||
|
|
function GetAttributes: TDAStringArray;
|
||
|
|
function GetData: Binary;
|
||
|
|
public
|
||
|
|
procedure Assign(iSource: TPersistent); override;
|
||
|
|
procedure ReadComplex(ASerializer: TObject); override;
|
||
|
|
procedure WriteComplex(ASerializer: TObject); override;
|
||
|
|
published
|
||
|
|
property SessionID:String read fSessionID write fSessionID;
|
||
|
|
property UserID:String read fUserID write fUserID;
|
||
|
|
property Privileges:TDAStringArray read GetPrivileges write fPrivileges;
|
||
|
|
property Attributes:TDAStringArray read GetAttributes write fAttributes;
|
||
|
|
property Data:Binary read GetData write fData;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDALoginInfoCollection }
|
||
|
|
TDALoginInfoCollection = class(TROCollection)
|
||
|
|
protected
|
||
|
|
constructor Create(aItemClass: TCollectionItemClass); overload;
|
||
|
|
function GetItems(aIndex: integer): TDALoginInfo;
|
||
|
|
procedure SetItems(aIndex: integer; const Value: TDALoginInfo);
|
||
|
|
public
|
||
|
|
constructor Create; overload;
|
||
|
|
function Add: TDALoginInfo; reintroduce;
|
||
|
|
property Items[Index: integer]:TDALoginInfo read GetItems write SetItems; default;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetParamArray }
|
||
|
|
TDADatasetParamArray_TDADatasetParam = array of TDADatasetParam;
|
||
|
|
TDADatasetParamArray = class(TROArray)
|
||
|
|
private
|
||
|
|
fCount: Integer;
|
||
|
|
fItems : TDADatasetParamArray_TDADatasetParam;
|
||
|
|
protected
|
||
|
|
procedure Grow; virtual;
|
||
|
|
function GetItems(aIndex: integer): TDADatasetParam;
|
||
|
|
procedure SetItems(aIndex: integer; const Value: TDADatasetParam);
|
||
|
|
function GetCount: integer; override;
|
||
|
|
public
|
||
|
|
class function GetItemType: PTypeInfo; override;
|
||
|
|
class function GetItemClass: TClass; override;
|
||
|
|
class function GetItemSize: integer; override;
|
||
|
|
|
||
|
|
function GetItemRef(aIndex: integer): pointer; override;
|
||
|
|
procedure SetItemRef(aIndex: integer; Ref: pointer); override;
|
||
|
|
procedure Clear; override;
|
||
|
|
procedure Delete(aIndex: integer); override;
|
||
|
|
procedure Resize(ElementCount: integer); override;
|
||
|
|
|
||
|
|
procedure Assign(iSource:TPersistent); override;
|
||
|
|
procedure ReadComplex(ASerializer: TObject); override;
|
||
|
|
procedure WriteComplex(ASerializer: TObject); override;
|
||
|
|
function Add: TDADatasetParam; overload;
|
||
|
|
function Add(const Value: TDADatasetParam):integer; overload;
|
||
|
|
|
||
|
|
property Count : integer read GetCount;
|
||
|
|
property Items[Index: integer]:TDADatasetParam read GetItems write SetItems; default;
|
||
|
|
property InnerArray: TDADatasetParamArray_TDADatasetParam read fItems;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetRequestInfoArray }
|
||
|
|
TDADatasetRequestInfoArray_TDADatasetRequestInfo = array of TDADatasetRequestInfo;
|
||
|
|
TDADatasetRequestInfoArray = class(TROArray)
|
||
|
|
private
|
||
|
|
fCount: Integer;
|
||
|
|
fItems : TDADatasetRequestInfoArray_TDADatasetRequestInfo;
|
||
|
|
protected
|
||
|
|
procedure Grow; virtual;
|
||
|
|
function GetItems(aIndex: integer): TDADatasetRequestInfo;
|
||
|
|
procedure SetItems(aIndex: integer; const Value: TDADatasetRequestInfo);
|
||
|
|
function GetCount: integer; override;
|
||
|
|
public
|
||
|
|
class function GetItemType: PTypeInfo; override;
|
||
|
|
class function GetItemClass: TClass; override;
|
||
|
|
class function GetItemSize: integer; override;
|
||
|
|
|
||
|
|
function GetItemRef(aIndex: integer): pointer; override;
|
||
|
|
procedure SetItemRef(aIndex: integer; Ref: pointer); override;
|
||
|
|
procedure Clear; override;
|
||
|
|
procedure Delete(aIndex: integer); override;
|
||
|
|
procedure Resize(ElementCount: integer); override;
|
||
|
|
|
||
|
|
procedure Assign(iSource:TPersistent); override;
|
||
|
|
procedure ReadComplex(ASerializer: TObject); override;
|
||
|
|
procedure WriteComplex(ASerializer: TObject); override;
|
||
|
|
function Add: TDADatasetRequestInfo; overload;
|
||
|
|
function Add(const Value: TDADatasetRequestInfo):integer; overload;
|
||
|
|
|
||
|
|
property Count : integer read GetCount;
|
||
|
|
property Items[Index: integer]:TDADatasetRequestInfo read GetItems write SetItems; default;
|
||
|
|
property InnerArray: TDADatasetRequestInfoArray_TDADatasetRequestInfo read fItems;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDAStringArray }
|
||
|
|
TDAStringArray_String = array of String;
|
||
|
|
TDAStringArray = class(TROArray)
|
||
|
|
private
|
||
|
|
fCount: Integer;
|
||
|
|
fItems : TDAStringArray_String;
|
||
|
|
protected
|
||
|
|
procedure Grow; virtual;
|
||
|
|
function GetItems(aIndex: integer): String;
|
||
|
|
procedure SetItems(aIndex: integer; const Value: String);
|
||
|
|
function GetCount: integer; override;
|
||
|
|
public
|
||
|
|
class function GetItemType: PTypeInfo; override;
|
||
|
|
class function GetItemSize: integer; override;
|
||
|
|
|
||
|
|
function GetItemRef(aIndex: integer): pointer; override;
|
||
|
|
procedure Clear; override;
|
||
|
|
procedure Delete(aIndex: integer); override;
|
||
|
|
procedure Resize(ElementCount: integer); override;
|
||
|
|
|
||
|
|
procedure Assign(iSource:TPersistent); override;
|
||
|
|
procedure ReadComplex(ASerializer: TObject); override;
|
||
|
|
procedure WriteComplex(ASerializer: TObject); override;
|
||
|
|
function Add(const Value:String): integer;
|
||
|
|
function GetIndex(const aPropertyName : string;
|
||
|
|
const aPropertyValue : Variant;
|
||
|
|
StartFrom : integer = 0;
|
||
|
|
Options : TROSearchOptions = [soIgnoreCase]) : integer; override;
|
||
|
|
|
||
|
|
property Count : integer read GetCount;
|
||
|
|
property Items[Index: integer]:String read GetItems write SetItems; default;
|
||
|
|
property InnerArray: TDAStringArray_String read fItems;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ IDARemoteService }
|
||
|
|
IDARemoteService = interface
|
||
|
|
['{C532E842-0AA9-4253-A9BF-AFCF22885B97}']
|
||
|
|
function GetDatasetSchema(const aDatasetName: String): Binary;
|
||
|
|
function GetDatasetScripts(const DatasetNames: String): String;
|
||
|
|
function GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer): Binary;
|
||
|
|
function GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean;
|
||
|
|
const MaxRecords: Integer): Binary;
|
||
|
|
function UpdateData(const Delta: Binary): Binary;
|
||
|
|
function ExecuteSQLCommand(const SQL: String): Integer;
|
||
|
|
function GetSchemaAsXML: String;
|
||
|
|
function GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): Binary;
|
||
|
|
function ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray): Integer;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ CoDARemoteService }
|
||
|
|
CoDARemoteService = class
|
||
|
|
class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDARemoteService;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDARemoteService_Proxy }
|
||
|
|
TDARemoteService_Proxy = class(TROProxy, IDARemoteService)
|
||
|
|
protected
|
||
|
|
function __GetInterfaceName:string; override;
|
||
|
|
|
||
|
|
function GetDatasetSchema(const aDatasetName: String): Binary;
|
||
|
|
function GetDatasetScripts(const DatasetNames: String): String;
|
||
|
|
function GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer): Binary;
|
||
|
|
function GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean;
|
||
|
|
const MaxRecords: Integer): Binary;
|
||
|
|
function UpdateData(const Delta: Binary): Binary;
|
||
|
|
function ExecuteSQLCommand(const SQL: String): Integer;
|
||
|
|
function GetSchemaAsXML: String;
|
||
|
|
function GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): Binary;
|
||
|
|
function ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray): Integer;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ IDALoginService }
|
||
|
|
IDALoginService = interface(IDARemoteService)
|
||
|
|
['{58550AA0-B64F-495A-B2F8-C981D4C39180}']
|
||
|
|
function Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean;
|
||
|
|
procedure Logout;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ CoDALoginService }
|
||
|
|
CoDALoginService = class
|
||
|
|
class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDALoginService;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDALoginService_Proxy }
|
||
|
|
TDALoginService_Proxy = class(TDARemoteService_Proxy, IDALoginService)
|
||
|
|
protected
|
||
|
|
function __GetInterfaceName:string; override;
|
||
|
|
|
||
|
|
function Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean;
|
||
|
|
procedure Logout;
|
||
|
|
end;
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
uses
|
||
|
|
{vcl:} SysUtils,
|
||
|
|
{RemObjects:} uROEventRepository, uROSerializer, uRORes;
|
||
|
|
|
||
|
|
{ TDADatasetParamArray }
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.Assign(iSource: TPersistent);
|
||
|
|
var lSource:TDADatasetParamArray;
|
||
|
|
i:integer;
|
||
|
|
begin
|
||
|
|
if (iSource is TDADatasetParamArray) then begin
|
||
|
|
lSource := TDADatasetParamArray(iSource);
|
||
|
|
Clear();
|
||
|
|
Resize(lSource.Count);
|
||
|
|
|
||
|
|
for i := 0 to Count-1 do begin
|
||
|
|
if Assigned(lSource.Items[i]) then begin
|
||
|
|
Items[i].Assign(lSource.Items[i]);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
inherited Assign(iSource);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
class function TDADatasetParamArray.GetItemType: PTypeInfo;
|
||
|
|
begin
|
||
|
|
result := TypeInfo(TDADatasetParam);
|
||
|
|
end;
|
||
|
|
|
||
|
|
class function TDADatasetParamArray.GetItemClass: TClass;
|
||
|
|
begin
|
||
|
|
result := TDADatasetParam;
|
||
|
|
end;
|
||
|
|
|
||
|
|
class function TDADatasetParamArray.GetItemSize: integer;
|
||
|
|
begin
|
||
|
|
result := SizeOf(TDADatasetParam);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetParamArray.GetItems(aIndex: integer): TDADatasetParam;
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
result := fItems[aIndex];
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetParamArray.GetItemRef(aIndex: integer): pointer;
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
result := fItems[aIndex];
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.SetItemRef(aIndex: integer; Ref: pointer);
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
if Ref <> fItems[aIndex] then begin
|
||
|
|
if fItems[aIndex] <> nil then fItems[aIndex].Free;
|
||
|
|
fItems[aIndex] := Ref;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.Clear;
|
||
|
|
var i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to (Count-1) do fItems[i].Free();
|
||
|
|
SetLength(fItems, 0);
|
||
|
|
FCount := 0;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.Delete(aIndex: integer);
|
||
|
|
var i: integer;
|
||
|
|
begin
|
||
|
|
if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]);
|
||
|
|
|
||
|
|
fItems[aIndex].Free();
|
||
|
|
|
||
|
|
if (aIndex<Count-1) then
|
||
|
|
for i := aIndex to Count-2 do fItems[i] := fItems[i+1];
|
||
|
|
|
||
|
|
SetLength(fItems, Count-1);
|
||
|
|
Dec(FCount);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.SetItems(aIndex: integer; const Value: TDADatasetParam);
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
if fItems[aIndex] <> Value then begin
|
||
|
|
fItems[aIndex].Free;
|
||
|
|
fItems[aIndex] := Value;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.Resize(ElementCount: integer);
|
||
|
|
var i: Integer;
|
||
|
|
begin
|
||
|
|
if fCount = ElementCount then Exit;
|
||
|
|
for i := FCount -1 downto ElementCount do
|
||
|
|
FItems[i].Free;
|
||
|
|
SetLength(fItems, ElementCount);
|
||
|
|
for i := FCount to ElementCount -1 do
|
||
|
|
FItems[i] := TDADatasetParam.Create;
|
||
|
|
FCount := ElementCount;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetParamArray.GetCount: integer;
|
||
|
|
begin
|
||
|
|
result := FCount;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.Grow;
|
||
|
|
var
|
||
|
|
Delta, Capacity: Integer;
|
||
|
|
begin
|
||
|
|
Capacity := Length(fItems);
|
||
|
|
if Capacity > 64 then
|
||
|
|
Delta := Capacity div 4
|
||
|
|
else
|
||
|
|
if Capacity > 8 then
|
||
|
|
Delta := 16
|
||
|
|
else
|
||
|
|
Delta := 4;
|
||
|
|
SetLength(fItems, Capacity + Delta);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetParamArray.Add: TDADatasetParam;
|
||
|
|
begin
|
||
|
|
result := TDADatasetParam.Create;
|
||
|
|
Add(Result);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetParamArray.Add(const Value:TDADatasetParam): integer;
|
||
|
|
begin
|
||
|
|
Result := Count;
|
||
|
|
if Length(fItems) = Result then
|
||
|
|
Grow;
|
||
|
|
fItems[result] := Value;
|
||
|
|
Inc(fCount);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.ReadComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
lval: TDADatasetParam;
|
||
|
|
i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to Count-1 do begin
|
||
|
|
with TROSerializer(ASerializer) do
|
||
|
|
ReadStruct(GetArrayElementName(GetItemType, GetItemRef(i)), TDADatasetParam, lval, i);
|
||
|
|
Items[i] := lval;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamArray.WriteComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to Count-1 do
|
||
|
|
with TROSerializer(ASerializer) do
|
||
|
|
WriteStruct(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], TDADatasetParam, i);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetRequestInfoArray }
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.Assign(iSource: TPersistent);
|
||
|
|
var lSource:TDADatasetRequestInfoArray;
|
||
|
|
i:integer;
|
||
|
|
begin
|
||
|
|
if (iSource is TDADatasetRequestInfoArray) then begin
|
||
|
|
lSource := TDADatasetRequestInfoArray(iSource);
|
||
|
|
Clear();
|
||
|
|
Resize(lSource.Count);
|
||
|
|
|
||
|
|
for i := 0 to Count-1 do begin
|
||
|
|
if Assigned(lSource.Items[i]) then begin
|
||
|
|
Items[i].Assign(lSource.Items[i]);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
inherited Assign(iSource);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
class function TDADatasetRequestInfoArray.GetItemType: PTypeInfo;
|
||
|
|
begin
|
||
|
|
result := TypeInfo(TDADatasetRequestInfo);
|
||
|
|
end;
|
||
|
|
|
||
|
|
class function TDADatasetRequestInfoArray.GetItemClass: TClass;
|
||
|
|
begin
|
||
|
|
result := TDADatasetRequestInfo;
|
||
|
|
end;
|
||
|
|
|
||
|
|
class function TDADatasetRequestInfoArray.GetItemSize: integer;
|
||
|
|
begin
|
||
|
|
result := SizeOf(TDADatasetRequestInfo);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetRequestInfoArray.GetItems(aIndex: integer): TDADatasetRequestInfo;
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
result := fItems[aIndex];
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetRequestInfoArray.GetItemRef(aIndex: integer): pointer;
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
result := fItems[aIndex];
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.SetItemRef(aIndex: integer; Ref: pointer);
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
if Ref <> fItems[aIndex] then begin
|
||
|
|
if fItems[aIndex] <> nil then fItems[aIndex].Free;
|
||
|
|
fItems[aIndex] := Ref;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.Clear;
|
||
|
|
var i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to (Count-1) do fItems[i].Free();
|
||
|
|
SetLength(fItems, 0);
|
||
|
|
FCount := 0;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.Delete(aIndex: integer);
|
||
|
|
var i: integer;
|
||
|
|
begin
|
||
|
|
if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]);
|
||
|
|
|
||
|
|
fItems[aIndex].Free();
|
||
|
|
|
||
|
|
if (aIndex<Count-1) then
|
||
|
|
for i := aIndex to Count-2 do fItems[i] := fItems[i+1];
|
||
|
|
|
||
|
|
SetLength(fItems, Count-1);
|
||
|
|
Dec(FCount);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.SetItems(aIndex: integer; const Value: TDADatasetRequestInfo);
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
if fItems[aIndex] <> Value then begin
|
||
|
|
fItems[aIndex].Free;
|
||
|
|
fItems[aIndex] := Value;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.Resize(ElementCount: integer);
|
||
|
|
var i: Integer;
|
||
|
|
begin
|
||
|
|
if fCount = ElementCount then Exit;
|
||
|
|
for i := FCount -1 downto ElementCount do
|
||
|
|
FItems[i].Free;
|
||
|
|
SetLength(fItems, ElementCount);
|
||
|
|
for i := FCount to ElementCount -1 do
|
||
|
|
FItems[i] := TDADatasetRequestInfo.Create;
|
||
|
|
FCount := ElementCount;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetRequestInfoArray.GetCount: integer;
|
||
|
|
begin
|
||
|
|
result := FCount;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.Grow;
|
||
|
|
var
|
||
|
|
Delta, Capacity: Integer;
|
||
|
|
begin
|
||
|
|
Capacity := Length(fItems);
|
||
|
|
if Capacity > 64 then
|
||
|
|
Delta := Capacity div 4
|
||
|
|
else
|
||
|
|
if Capacity > 8 then
|
||
|
|
Delta := 16
|
||
|
|
else
|
||
|
|
Delta := 4;
|
||
|
|
SetLength(fItems, Capacity + Delta);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetRequestInfoArray.Add: TDADatasetRequestInfo;
|
||
|
|
begin
|
||
|
|
result := TDADatasetRequestInfo.Create;
|
||
|
|
Add(Result);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetRequestInfoArray.Add(const Value:TDADatasetRequestInfo): integer;
|
||
|
|
begin
|
||
|
|
Result := Count;
|
||
|
|
if Length(fItems) = Result then
|
||
|
|
Grow;
|
||
|
|
fItems[result] := Value;
|
||
|
|
Inc(fCount);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.ReadComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
lval: TDADatasetRequestInfo;
|
||
|
|
i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to Count-1 do begin
|
||
|
|
with TROSerializer(ASerializer) do
|
||
|
|
ReadStruct(GetArrayElementName(GetItemType, GetItemRef(i)), TDADatasetRequestInfo, lval, i);
|
||
|
|
Items[i] := lval;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoArray.WriteComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to Count-1 do
|
||
|
|
with TROSerializer(ASerializer) do
|
||
|
|
WriteStruct(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], TDADatasetRequestInfo, i);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDAStringArray }
|
||
|
|
|
||
|
|
procedure TDAStringArray.Assign(iSource: TPersistent);
|
||
|
|
var lSource:TDAStringArray;
|
||
|
|
i:integer;
|
||
|
|
begin
|
||
|
|
if (iSource is TDAStringArray) then begin
|
||
|
|
lSource := TDAStringArray(iSource);
|
||
|
|
Clear();
|
||
|
|
Resize(lSource.Count);
|
||
|
|
|
||
|
|
for i := 0 to Count-1 do begin
|
||
|
|
Items[i] := lSource.Items[i];
|
||
|
|
end;
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
inherited Assign(iSource);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
class function TDAStringArray.GetItemType: PTypeInfo;
|
||
|
|
begin
|
||
|
|
result := TypeInfo(String);
|
||
|
|
end;
|
||
|
|
|
||
|
|
class function TDAStringArray.GetItemSize: integer;
|
||
|
|
begin
|
||
|
|
result := SizeOf(String);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDAStringArray.GetItems(aIndex: integer): String;
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
result := fItems[aIndex];
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDAStringArray.GetItemRef(aIndex: integer): pointer;
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
result := @fItems[aIndex];
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDAStringArray.Clear;
|
||
|
|
begin
|
||
|
|
SetLength(fItems, 0);
|
||
|
|
FCount := 0;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDAStringArray.Delete(aIndex: integer);
|
||
|
|
var i: integer;
|
||
|
|
begin
|
||
|
|
if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]);
|
||
|
|
|
||
|
|
if (aIndex<Count-1) then
|
||
|
|
for i := aIndex to Count-2 do fItems[i] := fItems[i+1];
|
||
|
|
|
||
|
|
SetLength(fItems, Count-1);
|
||
|
|
Dec(FCount);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDAStringArray.SetItems(aIndex: integer; const Value: String);
|
||
|
|
begin
|
||
|
|
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
|
||
|
|
if fItems[aIndex] <> Value then begin
|
||
|
|
fItems[aIndex] := Value;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDAStringArray.Resize(ElementCount: integer);
|
||
|
|
begin
|
||
|
|
if fCount = ElementCount then Exit;
|
||
|
|
SetLength(fItems, ElementCount);
|
||
|
|
FCount := ElementCount;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDAStringArray.GetCount: integer;
|
||
|
|
begin
|
||
|
|
result := FCount;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDAStringArray.Grow;
|
||
|
|
var
|
||
|
|
Delta, Capacity: Integer;
|
||
|
|
begin
|
||
|
|
Capacity := Length(fItems);
|
||
|
|
if Capacity > 64 then
|
||
|
|
Delta := Capacity div 4
|
||
|
|
else
|
||
|
|
if Capacity > 8 then
|
||
|
|
Delta := 16
|
||
|
|
else
|
||
|
|
Delta := 4;
|
||
|
|
SetLength(fItems, Capacity + Delta);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDAStringArray.Add(const Value: String): integer;
|
||
|
|
begin
|
||
|
|
Result := Count;
|
||
|
|
if Length(fItems) = Result then
|
||
|
|
Grow;
|
||
|
|
fItems[result] := Value;
|
||
|
|
Inc(fCount);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDAStringArray.GetIndex(const aPropertyName: string;
|
||
|
|
const aPropertyValue: Variant; StartFrom: integer;
|
||
|
|
Options: TROSearchOptions): integer;
|
||
|
|
begin
|
||
|
|
result := -1;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDAStringArray.ReadComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
lval: String;
|
||
|
|
i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to Count-1 do begin
|
||
|
|
with TROSerializer(ASerializer) do
|
||
|
|
ReadUTF8String(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i);
|
||
|
|
Items[i] := lval;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDAStringArray.WriteComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to Count-1 do
|
||
|
|
with TROSerializer(ASerializer) do
|
||
|
|
WriteUTF8String(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetParam }
|
||
|
|
|
||
|
|
procedure TDADatasetParam.Assign(iSource: TPersistent);
|
||
|
|
var lSource: DataAbstract3_Intf.TDADatasetParam;
|
||
|
|
begin
|
||
|
|
inherited Assign(iSource);
|
||
|
|
if (iSource is DataAbstract3_Intf.TDADatasetParam) then begin
|
||
|
|
lSource := DataAbstract3_Intf.TDADatasetParam(iSource);
|
||
|
|
Name := lSource.Name;
|
||
|
|
Value := lSource.Value;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParam.ReadComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
l_Name: String;
|
||
|
|
l_Value: Variant;
|
||
|
|
begin
|
||
|
|
if TROSerializer(ASerializer).RecordStrictOrder then begin
|
||
|
|
l_Name := Name;
|
||
|
|
TROSerializer(ASerializer).ReadUTF8String('Name', l_Name);
|
||
|
|
Name := l_Name;
|
||
|
|
l_Value := Value;
|
||
|
|
TROSerializer(ASerializer).ReadVariant('Value', l_Value);
|
||
|
|
Value := l_Value;
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
l_Name := Name;
|
||
|
|
TROSerializer(ASerializer).ReadUTF8String('Name', l_Name);
|
||
|
|
Name := l_Name;
|
||
|
|
l_Value := Value;
|
||
|
|
TROSerializer(ASerializer).ReadVariant('Value', l_Value);
|
||
|
|
Value := l_Value;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParam.WriteComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
l_Name: String;
|
||
|
|
l_Value: Variant;
|
||
|
|
begin
|
||
|
|
if TROSerializer(ASerializer).RecordStrictOrder then begin
|
||
|
|
TROSerializer(ASerializer).ChangeClass(TDADatasetParam);
|
||
|
|
l_Name := Name;
|
||
|
|
TROSerializer(ASerializer).WriteUTF8String('Name', l_Name);
|
||
|
|
l_Value := Value;
|
||
|
|
TROSerializer(ASerializer).WriteVariant('Value', l_Value);
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
l_Name := Name;
|
||
|
|
TROSerializer(ASerializer).WriteUTF8String('Name', l_Name);
|
||
|
|
l_Value := Value;
|
||
|
|
TROSerializer(ASerializer).WriteVariant('Value', l_Value);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetParamCollection }
|
||
|
|
constructor TDADatasetParamCollection.Create;
|
||
|
|
begin
|
||
|
|
inherited Create(TDADatasetParam);
|
||
|
|
end;
|
||
|
|
|
||
|
|
constructor TDADatasetParamCollection.Create(aItemClass: TCollectionItemClass);
|
||
|
|
begin
|
||
|
|
inherited Create(aItemClass);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetParamCollection.Add: TDADatasetParam;
|
||
|
|
begin
|
||
|
|
result := TDADatasetParam(inherited Add);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetParamCollection.GetItems(aIndex: integer): TDADatasetParam;
|
||
|
|
begin
|
||
|
|
result := TDADatasetParam(inherited Items[aIndex]);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamCollection.LoadFromArray(anArray: TDADatasetParamArray);
|
||
|
|
var i : integer;
|
||
|
|
begin
|
||
|
|
Clear;
|
||
|
|
for i := 0 to (anArray.Count-1) do
|
||
|
|
Add.Assign(anArray[i]);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamCollection.SaveToArray(anArray: TDADatasetParamArray);
|
||
|
|
var i : integer;
|
||
|
|
begin
|
||
|
|
anArray.Clear;
|
||
|
|
anArray.Resize(Count);
|
||
|
|
for i := 0 to (Count-1) do begin
|
||
|
|
anArray[i] := TDADatasetParam.Create;
|
||
|
|
anArray[i].Assign(Items[i]);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetParamCollection.SetItems(aIndex: integer; const Value: TDADatasetParam);
|
||
|
|
begin
|
||
|
|
TDADatasetParam(inherited Items[aIndex]).Assign(Value);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetRequestInfo }
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfo.Assign(iSource: TPersistent);
|
||
|
|
var lSource: DataAbstract3_Intf.TDADatasetRequestInfo;
|
||
|
|
begin
|
||
|
|
inherited Assign(iSource);
|
||
|
|
if (iSource is DataAbstract3_Intf.TDADatasetRequestInfo) then begin
|
||
|
|
lSource := DataAbstract3_Intf.TDADatasetRequestInfo(iSource);
|
||
|
|
DatasetName := lSource.DatasetName;
|
||
|
|
IncludeSchema := lSource.IncludeSchema;
|
||
|
|
MaxRecords := lSource.MaxRecords;
|
||
|
|
Params.Assign(lSource.Params);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetRequestInfo.GetParams: TDADatasetParamArray;
|
||
|
|
begin
|
||
|
|
if (fParams = nil) then fParams := TDADatasetParamArray.Create();
|
||
|
|
result := fParams;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfo.ReadComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
l_DatasetName: String;
|
||
|
|
l_IncludeSchema: Boolean;
|
||
|
|
l_MaxRecords: Integer;
|
||
|
|
l_Params: TDADatasetParamArray;
|
||
|
|
begin
|
||
|
|
if TROSerializer(ASerializer).RecordStrictOrder then begin
|
||
|
|
l_DatasetName := DatasetName;
|
||
|
|
TROSerializer(ASerializer).ReadUTF8String('DatasetName', l_DatasetName);
|
||
|
|
DatasetName := l_DatasetName;
|
||
|
|
l_IncludeSchema := IncludeSchema;
|
||
|
|
TROSerializer(ASerializer).ReadEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema);
|
||
|
|
IncludeSchema := l_IncludeSchema;
|
||
|
|
l_MaxRecords := MaxRecords;
|
||
|
|
TROSerializer(ASerializer).ReadInteger('MaxRecords', otSLong, l_MaxRecords);
|
||
|
|
MaxRecords := l_MaxRecords;
|
||
|
|
l_Params := Params;
|
||
|
|
TROSerializer(ASerializer).ReadArray('Params', TDADatasetParamArray, l_Params);
|
||
|
|
if Params <> l_Params then Params.Free;
|
||
|
|
Params := l_Params;
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
l_DatasetName := DatasetName;
|
||
|
|
TROSerializer(ASerializer).ReadUTF8String('DatasetName', l_DatasetName);
|
||
|
|
DatasetName := l_DatasetName;
|
||
|
|
l_IncludeSchema := IncludeSchema;
|
||
|
|
TROSerializer(ASerializer).ReadEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema);
|
||
|
|
IncludeSchema := l_IncludeSchema;
|
||
|
|
l_MaxRecords := MaxRecords;
|
||
|
|
TROSerializer(ASerializer).ReadInteger('MaxRecords', otSLong, l_MaxRecords);
|
||
|
|
MaxRecords := l_MaxRecords;
|
||
|
|
l_Params := Params;
|
||
|
|
TROSerializer(ASerializer).ReadArray('Params', TDADatasetParamArray, l_Params);
|
||
|
|
if Params <> l_Params then Params.Free;
|
||
|
|
Params := l_Params;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfo.WriteComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
l_DatasetName: String;
|
||
|
|
l_IncludeSchema: Boolean;
|
||
|
|
l_MaxRecords: Integer;
|
||
|
|
l_Params: TDADatasetParamArray;
|
||
|
|
begin
|
||
|
|
if TROSerializer(ASerializer).RecordStrictOrder then begin
|
||
|
|
TROSerializer(ASerializer).ChangeClass(TDADatasetRequestInfo);
|
||
|
|
l_DatasetName := DatasetName;
|
||
|
|
TROSerializer(ASerializer).WriteUTF8String('DatasetName', l_DatasetName);
|
||
|
|
l_IncludeSchema := IncludeSchema;
|
||
|
|
TROSerializer(ASerializer).WriteEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema);
|
||
|
|
l_MaxRecords := MaxRecords;
|
||
|
|
TROSerializer(ASerializer).WriteInteger('MaxRecords', otSLong, l_MaxRecords);
|
||
|
|
l_Params := Params;
|
||
|
|
TROSerializer(ASerializer).WriteArray('Params', l_Params, TDADatasetParamArray);
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
l_DatasetName := DatasetName;
|
||
|
|
TROSerializer(ASerializer).WriteUTF8String('DatasetName', l_DatasetName);
|
||
|
|
l_IncludeSchema := IncludeSchema;
|
||
|
|
TROSerializer(ASerializer).WriteEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema);
|
||
|
|
l_MaxRecords := MaxRecords;
|
||
|
|
TROSerializer(ASerializer).WriteInteger('MaxRecords', otSLong, l_MaxRecords);
|
||
|
|
l_Params := Params;
|
||
|
|
TROSerializer(ASerializer).WriteArray('Params', l_Params, TDADatasetParamArray);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDADatasetRequestInfoCollection }
|
||
|
|
constructor TDADatasetRequestInfoCollection.Create;
|
||
|
|
begin
|
||
|
|
inherited Create(TDADatasetRequestInfo);
|
||
|
|
end;
|
||
|
|
|
||
|
|
constructor TDADatasetRequestInfoCollection.Create(aItemClass: TCollectionItemClass);
|
||
|
|
begin
|
||
|
|
inherited Create(aItemClass);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetRequestInfoCollection.Add: TDADatasetRequestInfo;
|
||
|
|
begin
|
||
|
|
result := TDADatasetRequestInfo(inherited Add);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDADatasetRequestInfoCollection.GetItems(aIndex: integer): TDADatasetRequestInfo;
|
||
|
|
begin
|
||
|
|
result := TDADatasetRequestInfo(inherited Items[aIndex]);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoCollection.LoadFromArray(anArray: TDADatasetRequestInfoArray);
|
||
|
|
var i : integer;
|
||
|
|
begin
|
||
|
|
Clear;
|
||
|
|
for i := 0 to (anArray.Count-1) do
|
||
|
|
Add.Assign(anArray[i]);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoCollection.SaveToArray(anArray: TDADatasetRequestInfoArray);
|
||
|
|
var i : integer;
|
||
|
|
begin
|
||
|
|
anArray.Clear;
|
||
|
|
anArray.Resize(Count);
|
||
|
|
for i := 0 to (Count-1) do begin
|
||
|
|
anArray[i] := TDADatasetRequestInfo.Create;
|
||
|
|
anArray[i].Assign(Items[i]);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDADatasetRequestInfoCollection.SetItems(aIndex: integer; const Value: TDADatasetRequestInfo);
|
||
|
|
begin
|
||
|
|
TDADatasetRequestInfo(inherited Items[aIndex]).Assign(Value);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDALoginInfo }
|
||
|
|
|
||
|
|
procedure TDALoginInfo.Assign(iSource: TPersistent);
|
||
|
|
var lSource: DataAbstract3_Intf.TDALoginInfo;
|
||
|
|
begin
|
||
|
|
inherited Assign(iSource);
|
||
|
|
if (iSource is DataAbstract3_Intf.TDALoginInfo) then begin
|
||
|
|
lSource := DataAbstract3_Intf.TDALoginInfo(iSource);
|
||
|
|
SessionID := lSource.SessionID;
|
||
|
|
UserID := lSource.UserID;
|
||
|
|
Privileges.Assign(lSource.Privileges);
|
||
|
|
Attributes.Assign(lSource.Attributes);
|
||
|
|
Data.Assign(lSource.Data);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDALoginInfo.GetPrivileges: TDAStringArray;
|
||
|
|
begin
|
||
|
|
if (fPrivileges = nil) then fPrivileges := TDAStringArray.Create();
|
||
|
|
result := fPrivileges;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDALoginInfo.GetAttributes: TDAStringArray;
|
||
|
|
begin
|
||
|
|
if (fAttributes = nil) then fAttributes := TDAStringArray.Create();
|
||
|
|
result := fAttributes;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDALoginInfo.GetData: Binary;
|
||
|
|
begin
|
||
|
|
if (fData = nil) then fData := Binary.Create();
|
||
|
|
result := fData;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDALoginInfo.ReadComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
l_Attributes: TDAStringArray;
|
||
|
|
l_Data: Binary;
|
||
|
|
l_Privileges: TDAStringArray;
|
||
|
|
l_SessionID: String;
|
||
|
|
l_UserID: String;
|
||
|
|
begin
|
||
|
|
if TROSerializer(ASerializer).RecordStrictOrder then begin
|
||
|
|
l_SessionID := SessionID;
|
||
|
|
TROSerializer(ASerializer).ReadUTF8String('SessionID', l_SessionID);
|
||
|
|
SessionID := l_SessionID;
|
||
|
|
l_UserID := UserID;
|
||
|
|
TROSerializer(ASerializer).ReadUTF8String('UserID', l_UserID);
|
||
|
|
UserID := l_UserID;
|
||
|
|
l_Privileges := Privileges;
|
||
|
|
TROSerializer(ASerializer).ReadArray('Privileges', TDAStringArray, l_Privileges);
|
||
|
|
if Privileges <> l_Privileges then Privileges.Free;
|
||
|
|
Privileges := l_Privileges;
|
||
|
|
l_Attributes := Attributes;
|
||
|
|
TROSerializer(ASerializer).ReadArray('Attributes', TDAStringArray, l_Attributes);
|
||
|
|
if Attributes <> l_Attributes then Attributes.Free;
|
||
|
|
Attributes := l_Attributes;
|
||
|
|
l_Data := Data;
|
||
|
|
TROSerializer(ASerializer).ReadBinary('Data', l_Data);
|
||
|
|
if Data <> l_Data then Data.Free;
|
||
|
|
Data := l_Data;
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
l_Attributes := Attributes;
|
||
|
|
TROSerializer(ASerializer).ReadArray('Attributes', TDAStringArray, l_Attributes);
|
||
|
|
if Attributes <> l_Attributes then Attributes.Free;
|
||
|
|
Attributes := l_Attributes;
|
||
|
|
l_Data := Data;
|
||
|
|
TROSerializer(ASerializer).ReadBinary('Data', l_Data);
|
||
|
|
if Data <> l_Data then Data.Free;
|
||
|
|
Data := l_Data;
|
||
|
|
l_Privileges := Privileges;
|
||
|
|
TROSerializer(ASerializer).ReadArray('Privileges', TDAStringArray, l_Privileges);
|
||
|
|
if Privileges <> l_Privileges then Privileges.Free;
|
||
|
|
Privileges := l_Privileges;
|
||
|
|
l_SessionID := SessionID;
|
||
|
|
TROSerializer(ASerializer).ReadUTF8String('SessionID', l_SessionID);
|
||
|
|
SessionID := l_SessionID;
|
||
|
|
l_UserID := UserID;
|
||
|
|
TROSerializer(ASerializer).ReadUTF8String('UserID', l_UserID);
|
||
|
|
UserID := l_UserID;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDALoginInfo.WriteComplex(ASerializer: TObject);
|
||
|
|
var
|
||
|
|
l_Attributes: TDAStringArray;
|
||
|
|
l_Data: Binary;
|
||
|
|
l_Privileges: TDAStringArray;
|
||
|
|
l_SessionID: String;
|
||
|
|
l_UserID: String;
|
||
|
|
begin
|
||
|
|
if TROSerializer(ASerializer).RecordStrictOrder then begin
|
||
|
|
TROSerializer(ASerializer).ChangeClass(TDALoginInfo);
|
||
|
|
l_SessionID := SessionID;
|
||
|
|
TROSerializer(ASerializer).WriteUTF8String('SessionID', l_SessionID);
|
||
|
|
l_UserID := UserID;
|
||
|
|
TROSerializer(ASerializer).WriteUTF8String('UserID', l_UserID);
|
||
|
|
l_Privileges := Privileges;
|
||
|
|
TROSerializer(ASerializer).WriteArray('Privileges', l_Privileges, TDAStringArray);
|
||
|
|
l_Attributes := Attributes;
|
||
|
|
TROSerializer(ASerializer).WriteArray('Attributes', l_Attributes, TDAStringArray);
|
||
|
|
l_Data := Data;
|
||
|
|
TROSerializer(ASerializer).WriteBinary('Data', l_Data);
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
l_Attributes := Attributes;
|
||
|
|
TROSerializer(ASerializer).WriteArray('Attributes', l_Attributes, TDAStringArray);
|
||
|
|
l_Data := Data;
|
||
|
|
TROSerializer(ASerializer).WriteBinary('Data', l_Data);
|
||
|
|
l_Privileges := Privileges;
|
||
|
|
TROSerializer(ASerializer).WriteArray('Privileges', l_Privileges, TDAStringArray);
|
||
|
|
l_SessionID := SessionID;
|
||
|
|
TROSerializer(ASerializer).WriteUTF8String('SessionID', l_SessionID);
|
||
|
|
l_UserID := UserID;
|
||
|
|
TROSerializer(ASerializer).WriteUTF8String('UserID', l_UserID);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDALoginInfoCollection }
|
||
|
|
constructor TDALoginInfoCollection.Create;
|
||
|
|
begin
|
||
|
|
inherited Create(TDALoginInfo);
|
||
|
|
end;
|
||
|
|
|
||
|
|
constructor TDALoginInfoCollection.Create(aItemClass: TCollectionItemClass);
|
||
|
|
begin
|
||
|
|
inherited Create(aItemClass);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDALoginInfoCollection.Add: TDALoginInfo;
|
||
|
|
begin
|
||
|
|
result := TDALoginInfo(inherited Add);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDALoginInfoCollection.GetItems(aIndex: integer): TDALoginInfo;
|
||
|
|
begin
|
||
|
|
result := TDALoginInfo(inherited Items[aIndex]);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDALoginInfoCollection.SetItems(aIndex: integer; const Value: TDALoginInfo);
|
||
|
|
begin
|
||
|
|
TDALoginInfo(inherited Items[aIndex]).Assign(Value);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ CoDARemoteService }
|
||
|
|
|
||
|
|
class function CoDARemoteService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDARemoteService;
|
||
|
|
begin
|
||
|
|
result := TDARemoteService_Proxy.Create(aMessage, aTransportChannel);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDARemoteService_Proxy }
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.__GetInterfaceName:string;
|
||
|
|
begin
|
||
|
|
result := 'DARemoteService';
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.GetDatasetSchema(const aDatasetName: String): Binary;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
result := nil;
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetDatasetSchema');
|
||
|
|
__Message.Write('aDatasetName', TypeInfo(String), aDatasetName, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(Binary), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.GetDatasetScripts(const DatasetNames: String): String;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetDatasetScripts');
|
||
|
|
__Message.Write('DatasetNames', TypeInfo(String), DatasetNames, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(String), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer): Binary;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
result := nil;
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetDatasetData');
|
||
|
|
__Message.Write('DatasetName', TypeInfo(String), DatasetName, []);
|
||
|
|
__Message.Write('Params', TypeInfo(String), Params, []);
|
||
|
|
__Message.Write('IncludeSchema', TypeInfo(Boolean), IncludeSchema, []);
|
||
|
|
__Message.Write('MaxRecords', TypeInfo(Integer), MaxRecords, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(Binary), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean;
|
||
|
|
const MaxRecords: Integer): Binary;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
result := nil;
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetDatasetDataEx');
|
||
|
|
__Message.Write('DatasetName', TypeInfo(String), DatasetName, []);
|
||
|
|
__Message.Write('Params', TypeInfo(DataAbstract3_Intf.TDADatasetParamArray), Params, []);
|
||
|
|
__Message.Write('UserFilter', TypeInfo(String), UserFilter, []);
|
||
|
|
__Message.Write('IncludeSchema', TypeInfo(Boolean), IncludeSchema, []);
|
||
|
|
__Message.Write('MaxRecords', TypeInfo(Integer), MaxRecords, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(Binary), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.UpdateData(const Delta: Binary): Binary;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
result := nil;
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'UpdateData');
|
||
|
|
__Message.Write('Delta', TypeInfo(Binary), Delta, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(Binary), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.ExecuteSQLCommand(const SQL: String): Integer;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'ExecuteSQLCommand');
|
||
|
|
__Message.Write('SQL', TypeInfo(String), SQL, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(Integer), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.GetSchemaAsXML: String;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetSchemaAsXML');
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(String), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): Binary;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
result := nil;
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetMultipleDatasets');
|
||
|
|
__Message.Write('DatasetRequestInfoArray', TypeInfo(DataAbstract3_Intf.TDADatasetRequestInfoArray), DatasetRequestInfoArray, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(Binary), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDARemoteService_Proxy.ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray): Integer;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'ExecuteSQLCommandEx');
|
||
|
|
__Message.Write('CommandName', TypeInfo(String), CommandName, []);
|
||
|
|
__Message.Write('Params', TypeInfo(DataAbstract3_Intf.TDADatasetParamArray), Params, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(Integer), result, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ CoDALoginService }
|
||
|
|
|
||
|
|
class function CoDALoginService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDALoginService;
|
||
|
|
begin
|
||
|
|
result := TDALoginService_Proxy.Create(aMessage, aTransportChannel);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ TDALoginService_Proxy }
|
||
|
|
|
||
|
|
function TDALoginService_Proxy.__GetInterfaceName:string;
|
||
|
|
begin
|
||
|
|
result := 'DALoginService';
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TDALoginService_Proxy.Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
LoginInfo := nil;
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'Login');
|
||
|
|
__Message.Write('UserID', TypeInfo(String), UserID, []);
|
||
|
|
__Message.Write('Password', TypeInfo(String), Password, []);
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
__Message.Read('Result', TypeInfo(Boolean), result, []);
|
||
|
|
__Message.Read('LoginInfo', TypeInfo(DataAbstract3_Intf.TDALoginInfo), LoginInfo, []);
|
||
|
|
finally
|
||
|
|
__Message.UnsetAttributes(__TransportChannel);
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TDALoginService_Proxy.Logout;
|
||
|
|
begin
|
||
|
|
try
|
||
|
|
__Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'Logout');
|
||
|
|
__Message.Finalize;
|
||
|
|
|
||
|
|
__TransportChannel.Dispatch(__Message);
|
||
|
|
|
||
|
|
finally
|
||
|
|
__Message.FreeStream;
|
||
|
|
end
|
||
|
|
end;
|
||
|
|
|
||
|
|
initialization
|
||
|
|
RegisterROClass(TDADatasetParam);
|
||
|
|
RegisterROClass(TDADatasetRequestInfo);
|
||
|
|
RegisterROClass(TDALoginInfo);
|
||
|
|
RegisterROClass(TDADatasetParamArray);
|
||
|
|
RegisterROClass(TDADatasetRequestInfoArray);
|
||
|
|
RegisterROClass(TDAStringArray);
|
||
|
|
RegisterProxyClass(IDARemoteService_IID, TDARemoteService_Proxy);
|
||
|
|
RegisterProxyClass(IDALoginService_IID, TDALoginService_Proxy);
|
||
|
|
|
||
|
|
|
||
|
|
finalization
|
||
|
|
UnregisterROClass(TDADatasetParam);
|
||
|
|
UnregisterROClass(TDADatasetRequestInfo);
|
||
|
|
UnregisterROClass(TDALoginInfo);
|
||
|
|
UnregisterROClass(TDADatasetParamArray);
|
||
|
|
UnregisterROClass(TDADatasetRequestInfoArray);
|
||
|
|
UnregisterROClass(TDAStringArray);
|
||
|
|
UnregisterProxyClass(IDARemoteService_IID);
|
||
|
|
UnregisterProxyClass(IDALoginService_IID);
|
||
|
|
|
||
|
|
end.
|