mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-08-22 15:19:15 +02:00
* out-of-the-box support for custom SQL statement, add databaseconnection property to dataset
This commit is contained in:
parent
643fc182b4
commit
a0351ecfdc
@ -28,6 +28,8 @@ Type
|
|||||||
|
|
||||||
TSQLDBRestConnection = Class(TRestConnection)
|
TSQLDBRestConnection = Class(TRestConnection)
|
||||||
private
|
private
|
||||||
|
FConnectionsResourceName: String;
|
||||||
|
FCustomViewResourceName: String;
|
||||||
FDataProperty: String;
|
FDataProperty: String;
|
||||||
FmetaDataProperty: String;
|
FmetaDataProperty: String;
|
||||||
FMetaDataResourceName: String;
|
FMetaDataResourceName: String;
|
||||||
@ -55,6 +57,8 @@ Type
|
|||||||
Property MetaDataResourceName : String Read FMetaDataResourceName Write FMetaDataResourceName Stored DoStoreMetadata;
|
Property MetaDataResourceName : String Read FMetaDataResourceName Write FMetaDataResourceName Stored DoStoreMetadata;
|
||||||
Property UserName : String Read FUserName Write FUserName;
|
Property UserName : String Read FUserName Write FUserName;
|
||||||
Property Password : String Read FPassword Write FPassword;
|
Property Password : String Read FPassword Write FPassword;
|
||||||
|
Property ConnectionsResourceName : String Read FConnectionsResourceName Write FConnectionsResourceName;
|
||||||
|
Property CustomViewResourceName : String Read FCustomViewResourceName Write FCustomViewResourceName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TSQLDBRestDataset }
|
{ TSQLDBRestDataset }
|
||||||
@ -62,9 +66,16 @@ Type
|
|||||||
TSQLDBRestDataset = Class(TJSONDataset)
|
TSQLDBRestDataset = Class(TJSONDataset)
|
||||||
private
|
private
|
||||||
FConnection: TSQLDBRestConnection;
|
FConnection: TSQLDBRestConnection;
|
||||||
|
FDatabaseConnection: String;
|
||||||
FResourceName: String;
|
FResourceName: String;
|
||||||
|
FSQL: TStrings;
|
||||||
|
function CleanSQL: String;
|
||||||
|
function CustomViewResourceName: String;
|
||||||
|
procedure DoSQLChange(Sender: TObject);
|
||||||
|
function MyURL: String;
|
||||||
procedure SetConnection(AValue: TSQLDBRestConnection);
|
procedure SetConnection(AValue: TSQLDBRestConnection);
|
||||||
procedure SetResourceName(AValue: String);
|
procedure SetResourceName(AValue: String);
|
||||||
|
procedure SetSQL(AValue: TStrings);
|
||||||
Protected
|
Protected
|
||||||
function DataPacketReceived(ARequest: TDataRequest): Boolean; override;
|
function DataPacketReceived(ARequest: TDataRequest): Boolean; override;
|
||||||
function GetStringFieldLength(F: TJSObject; AName: String; AIndex: Integer): integer;virtual;
|
function GetStringFieldLength(F: TJSObject; AName: String; AIndex: Integer): integer;virtual;
|
||||||
@ -72,8 +83,13 @@ Type
|
|||||||
Function DoGetDataProxy: TDataProxy; override;
|
Function DoGetDataProxy: TDataProxy; override;
|
||||||
Procedure MetaDataToFieldDefs; override;
|
Procedure MetaDataToFieldDefs; override;
|
||||||
Public
|
Public
|
||||||
|
Constructor Create(aOwner : TComponent); override;
|
||||||
|
Destructor Destroy; override;
|
||||||
|
Published
|
||||||
Property Connection: TSQLDBRestConnection Read FConnection Write SetConnection;
|
Property Connection: TSQLDBRestConnection Read FConnection Write SetConnection;
|
||||||
Property ResourceName : String Read FResourceName Write SetResourceName;
|
Property ResourceName : String Read FResourceName Write SetResourceName;
|
||||||
|
Property SQL : TStrings Read FSQL Write SetSQL;
|
||||||
|
property DatabaseConnection : String Read FDatabaseConnection Write FDatabaseConnection;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -178,9 +194,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TSQLDBRestConnection.GetReadBaseURL(aRequest: TDataRequest): String;
|
function TSQLDBRestConnection.GetReadBaseURL(aRequest: TDataRequest): String;
|
||||||
|
|
||||||
|
Var
|
||||||
|
DS : TSQLDBRestDataset;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Result:=inherited GetReadBaseURL(aRequest);
|
Result:=inherited GetReadBaseURL(aRequest);
|
||||||
Result:=IncludeTrailingPathDelimiter(Result)+TSQLDBRestDataset(aRequest.Dataset).ResourceName;
|
DS:=TSQLDBRestDataset(aRequest.Dataset);
|
||||||
|
Result:=IncludeTrailingPathDelimiter(Result)+DS.MyURL;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSQLDBRestConnection.DoResources(Sender: TObject);
|
procedure TSQLDBRestConnection.DoResources(Sender: TObject);
|
||||||
@ -256,13 +277,55 @@ begin
|
|||||||
FConnection.FreeNotification(Self);
|
FConnection.FreeNotification(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSQLDBRestDataset.MyURL: String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=DatabaseConnection;
|
||||||
|
if (Result<>'') and (Result[Length(Result)]<>'/') then
|
||||||
|
Result:=Result+'/';
|
||||||
|
Result:=Result+ResourceName;
|
||||||
|
if SameText(ResourceName,CustomViewResourceName) then
|
||||||
|
Result:=Result+'?SQL='+ EncodeURIComponent(CleanSQL);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSQLDBRestDataset.DoSQLChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if Trim(FSQL.Text)<>'' then
|
||||||
|
FResourceName:=CustomViewResourceName;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSQLDBRestDataset.SetResourceName(AValue: String);
|
procedure TSQLDBRestDataset.SetResourceName(AValue: String);
|
||||||
begin
|
begin
|
||||||
if FResourceName=AValue then Exit;
|
if FResourceName=AValue then Exit;
|
||||||
CheckInactive;
|
CheckInactive;
|
||||||
|
if Not SameText(aValue,CustomViewResourceName) then
|
||||||
|
FSQL.Clear;
|
||||||
FResourceName:=AValue;
|
FResourceName:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSQLDBRestDataset.CustomViewResourceName : String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if Assigned(Connection) then
|
||||||
|
Result:=Connection.CustomViewResourceName
|
||||||
|
else
|
||||||
|
Result:='customView';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSQLDBRestDataset.CleanSQL: String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=StringReplace(SQL.Text,#13#10,' ',[rfReplaceAll]);
|
||||||
|
Result:=StringReplace(Result,#10,' ',[rfReplaceAll]);
|
||||||
|
Result:=StringReplace(Result,#10,' ',[rfReplaceAll]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSQLDBRestDataset.SetSQL(AValue: TStrings);
|
||||||
|
begin
|
||||||
|
if FSQL=AValue then Exit;
|
||||||
|
FSQL.Assign(AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
function TSQLDBRestDataset.DoGetDataProxy: TDataProxy;
|
function TSQLDBRestDataset.DoGetDataProxy: TDataProxy;
|
||||||
begin
|
begin
|
||||||
Result:=Connection.DataProxy;
|
Result:=Connection.DataProxy;
|
||||||
@ -372,6 +435,19 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
constructor TSQLDBRestDataset.Create(aOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(aOwner);
|
||||||
|
FSQL:=TStringList.Create;
|
||||||
|
TStringList(FSQL).OnChange:=@DoSQLChange;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TSQLDBRestDataset.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(FSQL);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
function TSQLDBRestDataset.DataPacketReceived(ARequest: TDataRequest): Boolean;
|
function TSQLDBRestDataset.DataPacketReceived(ARequest: TDataRequest): Boolean;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
|
Loading…
Reference in New Issue
Block a user