ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/testsuite/Test07.pas
Revision: 323
Committed: Thu Feb 25 12:14:35 2021 UTC (3 years, 2 months ago) by tony
Content type: text/x-pascal
File size: 5379 byte(s)
Log Message:
Fixed Merged

File Contents

# User Rev Content
1 tony 323 (*
2     * IBX Test suite. This program is used to test the IBX non-visual
3     * components and provides a semi-automated pass/fail check for each test.
4     *
5     * The contents of this file are subject to the Initial Developer's
6     * Public License Version 1.0 (the "License"); you may not use this
7     * file except in compliance with the License. You may obtain a copy
8     * of the License here:
9     *
10     * http://www.firebirdsql.org/index.php?op=doc&id=idpl
11     *
12     * Software distributed under the License is distributed on an "AS
13     * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14     * implied. See the License for the specific language governing rights
15     * and limitations under the License.
16     *
17     * The Initial Developer of the Original Code is Tony Whyman.
18     *
19     * The Original Code is (C) 2021 Tony Whyman, MWA Software
20     * (http://www.mwasoftware.co.uk).
21     *
22     * All Rights Reserved.
23     *
24     * Contributor(s): ______________________________________.
25     *
26     *)
27 tony 315 unit Test07;
28    
29     {$mode objfpc}{$H+}
30    
31     {Test 7: Open and read from Employee Database using TIBSQL}
32    
33     { This is a simple use of IBX to access the employee database in console mode.
34     The program opens the database, runs a query and writes the result to stdout.
35    
36     }
37    
38     interface
39    
40     uses
41     Classes, SysUtils, TestApplication, IBXTestBase, IB, IBCustomDataSet, IBDatabase, IBSQL;
42    
43     const
44     aTestID = '07';
45     aTestTitle = 'Open and read from Employee Database using IBSQL';
46    
47     type
48    
49     { TTest07 }
50    
51     TTest07 = class(TIBXTestBase)
52     private
53     FIBSQL: TIBSQL;
54     protected
55     procedure CreateObjects(Application: TTestApplication); override;
56     function GetTestID: AnsiString; override;
57     function GetTestTitle: AnsiString; override;
58     procedure InitTest; override;
59     public
60     procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
61     end;
62    
63    
64     implementation
65    
66     const
67     sqlExample =
68     'with recursive Depts As ( '+
69     'Select DEPT_NO, DEPARTMENT, HEAD_DEPT, cast(DEPARTMENT as VarChar(256)) as DEPT_PATH,'+
70     'cast(DEPT_NO as VarChar(64)) as DEPT_KEY_PATH '+
71     'From DEPARTMENT Where HEAD_DEPT is NULL '+
72     'UNION ALL '+
73     'Select D.DEPT_NO, D.DEPARTMENT, D.HEAD_DEPT, Depts.DEPT_PATH || '' / '' || D.DEPARTMENT as DEPT_PATH,'+
74     'Depts.DEPT_KEY_PATH || '';'' || D.DEPT_NO as DEPT_KEY_PATH '+
75     'From DEPARTMENT D '+
76     'JOIN Depts On D.HEAD_DEPT = Depts.DEPT_NO '+
77     ')'+
78    
79     'Select A.EMP_NO, A.FIRST_NAME, A.LAST_NAME, A.PHONE_EXT, A.HIRE_DATE, A.DEPT_NO, A.JOB_CODE,'+
80     'A.JOB_GRADE, A.JOB_COUNTRY, A.SALARY, A.FULL_NAME, D.DEPT_PATH, D.DEPT_KEY_PATH '+
81     'From EMPLOYEE A '+
82     'JOIN Depts D On D.DEPT_NO = A.DEPT_NO';
83    
84     { TTest07 }
85    
86     procedure TTest07.CreateObjects(Application: TTestApplication);
87     begin
88     inherited CreateObjects(Application);
89     FIBSQL := TIBSQL.Create(Application);
90     FIBSQL.Database := IBDatabase;
91     end;
92    
93     function TTest07.GetTestID: AnsiString;
94     begin
95     Result := aTestID;
96     end;
97    
98     function TTest07.GetTestTitle: AnsiString;
99     begin
100     Result := aTestTitle;
101     end;
102    
103     procedure TTest07.InitTest;
104     begin
105     inherited InitTest;
106     IBDatabase.DatabaseName := Owner.GetEmployeeDatabaseName;
107     ReadWriteTransaction;
108     end;
109    
110     procedure TTest07.RunTest(CharSet: AnsiString; SQLDialect: integer);
111     var stats: TPerfCounters;
112     begin
113     IBDatabase.Connected := true;
114     with FIBSQL do
115     begin
116     SQL.Text := sqlExample + ' Order By 1';
117     Transaction.Active := true;
118     Prepare;
119     PrintMetaData(MetaData);
120     Statement.EnableStatistics(true);
121     writeln(OutFile,Plan);
122     ExecQuery;
123     try
124     while not EOF do
125     begin
126     ReportResult(Current);
127     Next;
128     end;
129     finally
130     Close;
131     end;
132    
133     if Statement.GetPerfStatistics(stats) then
134     WritePerfStats(stats);
135     PrintAffectedRows(IBQuery);
136     writeln(OutFile);
137     writeln(OutFile,'------------------------------------------------------');
138     writeln(OutFile,'With Named Parameter');
139     SQL.Text := sqlExample + ' Where Hire_Date < :HireDate';
140     Transaction.Active := true;
141     ParamByName('HireDate').AsDateTime := StrToDateTime('1/1/1991');
142     ExecQuery;
143     try
144     while not EOF do
145     begin
146     ReportResult(Current);
147     Next;
148     end;
149     finally
150     Close;
151     end;
152     writeln(OutFile);
153     writeln(OutFile,'With Positional Parameter');
154     ParamCheck := false;
155     SQL.Text := sqlExample + ' Where Hire_Date < ?';
156     Transaction.Active := true;
157     Params[0].AsDateTime := StrToDateTime('1/1/1990');
158     ExecQuery;
159     try
160     while not EOF do
161     begin
162     ReportResult(Current);
163     Next;
164     end;
165     finally
166     Close;
167     end;
168    
169     writeln(OutFile);
170     writeln(OutFile,'Get Employee Project');
171     ParamCheck := true;
172     Transaction.Active := true;
173     SQL.Text := 'Select * From GET_EMP_PROJ(:EMP_NO)';
174     ParamByName('EMP_NO').AsInteger := 4;
175     PrintMetaData(MetaData);
176     ExecQuery;
177     try
178     while not EOF do
179     begin
180     ReportResult(Current);
181     Next;
182     end;
183     finally
184     Close;
185     end;
186    
187     writeln(OutFile);
188     writeln(OutFile,'Call Delete Employee - exception expected');
189     SQL.Text := 'Execute Procedure Delete_EMPLOYEE :EMP_NO';
190     ParamByName('EMP_NO').AsInteger := 11;
191     try
192     ExecQuery;
193     except on E:Exception do
194     writeln(OutFile,'Terminated with Exception:',E.Message);
195     end;
196     Transaction.Rollback;
197     end;
198     end;
199    
200     initialization
201     RegisterTest(TTest07);
202    
203     end.
204