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

Comparing:
ibx/trunk/fbintf/client/FBServices.pas (file contents), Revision 45 by tony, Tue Dec 6 10:33:46 2016 UTC vs.
ibx/branches/journaling/fbintf/client/FBServices.pas (file contents), Revision 362 by tony, Tue Dec 7 13:27:39 2021 UTC

# Line 28 | Line 28
28   *
29   *)
30   unit FBServices;
31 + {$IFDEF MSWINDOWS}
32 + {$DEFINE WINDOWS}
33 + {$ENDIF}
34  
35   {$IFDEF FPC}
36 < {$mode objfpc}{$H+}
36 > {$mode delphi}
37   {$interfaces COM}
38   {$ENDIF}
39  
40   interface
41  
42   uses
43 <  Classes, SysUtils, IB,  FBParamBlock, FBActivityMonitor;
43 >  Classes, SysUtils, IB,  FBParamBlock, FBActivityMonitor, FBClientAPI;
44  
45   type
46  
# Line 47 | Line 50 | type
50    private
51      FFirebirdAPI: IFirebirdAPI;
52      FProtocol: TProtocol;
53 <    FServerName: string;
53 >    FServerName: AnsiString;
54 >    FPort: AnsiString;
55      procedure CheckServerName;
56    protected
57      FSPB: ISPB;
58 <    procedure InternalAttach(ConnectString: string); virtual; abstract;
58 >    procedure InternalAttach(ConnectString: AnsiString); virtual; abstract;
59    public
60 <    constructor Create(ServerName: string; Protocol: TProtocol; SPB: ISPB);
60 >    constructor Create(api: TFBClientAPI; ServerName: AnsiString; Protocol: TProtocol; SPB: ISPB; Port: AnsiString = '');
61      destructor Destroy; override;
62    public
63      {IServiceManager}
64 +    function getFirebirdAPI: IFirebirdAPI;
65      function getSPB: ISPB;
66 <    function getServerName: string;
66 >    function getServerName: AnsiString;
67 >    function getProtocol: TProtocol;
68 >    function getPortNo: AnsiString;
69      procedure Attach;
70      procedure Detach(Force: boolean=false); virtual; abstract;
71      function AllocateSRB: ISRB;
72      function AllocateSQPB: ISQPB;
73 <    function Query(SQPB: ISQPB; Request: ISRB): IServiceQueryResults; virtual; abstract; overload;
74 <    function Query(Request: ISRB): IServiceQueryResults;  overload;
73 >    function Query(SQPB: ISQPB; Request: ISRB; RaiseExceptionOnError: boolean=true): IServiceQueryResults; overload; virtual; abstract;
74 >    function Query(Request: ISRB; RaiseExceptionOnError: boolean=true): IServiceQueryResults;  overload;
75 >  end;
76 >
77 > { TSPBItem }
78 >
79 >  TSPBItem = class(TParamBlockItem,ISPBItem)
80 >  public
81 >   function getParamTypeName: AnsiString; override;
82 >   class function LookupParamTypeName(ParamType: byte): AnsiString;
83 >  end;
84 >
85 > { TSPB }
86 >
87 >  TSPB = class (TCustomParamBlock<TSPBItem,ISPBItem>, ISPB)
88 >  protected
89 >   function LookupItemType(ParamTypeName: AnsiString): byte; override;
90 >  public
91 >   constructor Create(api: TFBClientAPI);
92 >   function GetParamTypeName(ParamType: byte): Ansistring;
93 >   function ISPB.GetDPBParamTypeName = GetParamTypeName;
94    end;
95  
96   implementation
97  
98 < uses FBMessages, FBClientAPI;
98 > uses FBMessages, IBUtils;
99 >
100 > const
101 >  SPBPrefix = 'isc_spb_';
102 >  isc_spb_last_spb_constant = 13;
103 >  SPBConstantNames: array[1..isc_spb_last_spb_constant] of String = (
104 >    'user_name',
105 >    'sys_user_name',
106 >    'sys_user_name_enc',
107 >    'password',
108 >    'password_enc',
109 >    'command_line',
110 >    'db_name',
111 >    'verbose',
112 >    'options',
113 >    'connect_timeout',
114 >    'dummy_packet_interval',
115 >    'sql_role_name',
116 >    'expected_db'
117 >  );
118 >
119 >  SPBConstantValues: array[1..isc_spb_last_spb_constant] of Integer = (
120 >    isc_spb_user_name,
121 >    isc_spb_sys_user_name,
122 >    isc_spb_sys_user_name_enc,
123 >    isc_spb_password,
124 >    isc_spb_password_enc,
125 >    isc_spb_command_line,
126 >    isc_spb_dbname,
127 >    isc_spb_verbose,
128 >    isc_spb_options,
129 >    isc_spb_connect_timeout,
130 >    isc_spb_dummy_packet_interval,
131 >    isc_spb_sql_role_name,
132 >    isc_spb_expected_db
133 >  );
134 >
135 > { TSPBItem }
136 >
137 > function TSPBItem.getParamTypeName: AnsiString;
138 > begin
139 >    Result := LookupParamTypeName(getParamType);
140 > end;
141 >
142 > class function TSPBItem.LookupParamTypeName(ParamType: byte): AnsiString;
143 > var i: integer;
144 > begin
145 >  Result := '';
146 >  for i := 1 to isc_spb_last_spb_constant do
147 >    if SPBConstantValues [i] = ParamType then
148 >    begin
149 >      Result := SPBConstantNames[i];
150 >      break;
151 >    end;
152 > end;
153  
154   { TFBServiceManager }
155  
# Line 79 | Line 159 | begin
159      IBError(ibxeServerNameMissing, [nil]);
160   end;
161  
162 < constructor TFBServiceManager.Create(ServerName: string; Protocol: TProtocol;
163 <  SPB: ISPB);
162 > constructor TFBServiceManager.Create(api: TFBClientAPI; ServerName: AnsiString;
163 >  Protocol: TProtocol; SPB: ISPB; Port: AnsiString);
164   begin
165    inherited Create;
166 <  FFirebirdAPI := FirebirdAPI; {Keep reference to interface}
166 >  FFirebirdAPI := api.getAPI; {Keep reference to interface}
167    FProtocol := Protocol;
168    FSPB := SPB;
169    FServerName := ServerName;
170 +  FPort := Port;
171    Attach;
172   end;
173  
# Line 96 | Line 177 | begin
177    inherited Destroy;
178   end;
179  
180 + function TFBServiceManager.getFirebirdAPI: IFirebirdAPI;
181 + begin
182 +  Result := FFirebirdAPI;
183 + end;
184 +
185   function TFBServiceManager.getSPB: ISPB;
186   begin
187    Result := FSPB;
188   end;
189  
190 < function TFBServiceManager.getServerName: string;
190 > function TFBServiceManager.getServerName: AnsiString;
191   begin
192    Result := FServerName;
193   end;
194  
195 + function TFBServiceManager.getProtocol: TProtocol;
196 + begin
197 +  Result := FProtocol;
198 + end;
199 +
200 + function TFBServiceManager.getPortNo: AnsiString;
201 + begin
202 +  Result := FPort;
203 + end;
204 +
205   procedure TFBServiceManager.Attach;
206 < var ConnectString: String;
206 > var ConnectString: AnsiString;
207   begin
208 <  case FProtocol of
113 <    TCP: ConnectString := FServerName + ':service_mgr'; {do not localize}
114 <    SPX: ConnectString := FServerName + '@service_mgr'; {do not localize}
115 <    NamedPipe: ConnectString := '\\' + FServerName + '\service_mgr'; {do not localize}
116 <    Local: ConnectString := 'service_mgr'; {do not localize}
117 <  end;
208 >  ConnectString := MakeConnectString(FServerName,'service_mgr',FProtocol,FPort);
209    InternalAttach(ConnectString);
210   end;
211  
212   function TFBServiceManager.AllocateSRB: ISRB;
213   begin
214 <  Result := TSRB.Create;
214 >  Result := TSRB.Create(FFirebirdAPI as TFBClientAPI);
215   end;
216  
217   function TFBServiceManager.AllocateSQPB: ISQPB;
218   begin
219 <   Result := TSQPB.Create;
219 >   Result := TSQPB.Create(FFirebirdAPI as TFBClientAPI);
220 > end;
221 >
222 > function TFBServiceManager.Query(Request: ISRB; RaiseExceptionOnError: boolean
223 >  ): IServiceQueryResults;
224 > begin
225 >   Result := Query(nil,Request,RaiseExceptionOnError);
226 > end;
227 >
228 > { TSPB }
229 >
230 > function TSPB.LookupItemType(ParamTypeName: AnsiString): byte;
231 > var i: integer;
232 > begin
233 >  Result := 0;
234 >  ParamTypeName := LowerCase(ParamTypeName);
235 >  if Pos(SPBPrefix,ParamTypeName) = 1 then
236 >    system.Delete(ParamTypeName,1,Length(SPBPrefix));
237 >  for i := 1 to isc_spb_last_spb_constant do
238 >    if SPBConstantNames [i] = ParamTypeName then
239 >    begin
240 >      Result := SPBConstantValues[i];
241 >      break;
242 >    end;
243 > end;
244 >
245 > constructor TSPB.Create(api: TFBClientAPI);
246 > begin
247 >  inherited Create(api);
248 >  FDataLength := 2;
249 >  FBuffer^ := isc_spb_version;
250 >  (FBuffer+1)^ := isc_spb_current_version;
251   end;
252  
253 < function TFBServiceManager.Query(Request: ISRB): IServiceQueryResults;
253 > function TSPB.GetParamTypeName(ParamType: byte): Ansistring;
254   begin
255 <   Result := Query(nil,Request);
255 >  Result := TSPBItem.LookupParamTypeName(ParamType);
256   end;
257  
258   end.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines