ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/testsuite/Test27.pas
Revision: 323
Committed: Thu Feb 25 12:14:35 2021 UTC (3 years, 9 months ago) by tony
Content type: text/x-pascal
File size: 5181 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 Test27;
28    
29     {$mode objfpc}{$H+}
30    
31     {Test 27: create, bring up-to-date and read from local database}
32    
33     {
34     Requires Firebird Embedded Server - with FB 2.5 and lower this implies FBEmbedded
35    
36     Creates a new local database from a backup archive.
37    
38     Updates the schema
39    
40     Prints out results of a query.
41     }
42    
43     interface
44    
45     uses
46     Classes, SysUtils, TestApplication, IBXTestBase, IB, IBCMLocalDBSupport, IBSQL,
47     IBQuery, IBDatabase;
48    
49     const
50     aTestID = '27';
51     aTestTitle = 'create, bring up-to-date and read from local database';
52    
53     type
54    
55     { TTest27 }
56    
57     TTest27 = class(TIBXTestBase)
58     private
59     FLocalDB: TIBCMLocalDBSupport;
60     procedure HandleGetDBVersionNo(Sender: TObject; var VersionNo: integer);
61     procedure HandleLogMessage(Sender: TObject; Msg: string);
62     procedure GetSharedDirectory(Sender: TObject; var SharedDataDir: string);
63     protected
64     procedure CreateObjects(Application: TTestApplication); override;
65     function GetTestID: AnsiString; override;
66     function GetTestTitle: AnsiString; override;
67     procedure InitTest; override;
68     public
69     procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
70     end;
71    
72    
73     implementation
74    
75     const
76     sqlExample =
77     'with recursive Depts As ( '+
78     'Select DEPT_NO, DEPARTMENT, HEAD_DEPT, cast(DEPARTMENT as VarChar(256)) as DEPT_PATH,'+
79     'cast(DEPT_NO as VarChar(64)) as DEPT_KEY_PATH '+
80     'From DEPARTMENT Where HEAD_DEPT is NULL '+
81     'UNION ALL '+
82     'Select D.DEPT_NO, D.DEPARTMENT, D.HEAD_DEPT, Depts.DEPT_PATH || '' / '' || D.DEPARTMENT as DEPT_PATH,'+
83     'Depts.DEPT_KEY_PATH || '';'' || D.DEPT_NO as DEPT_KEY_PATH '+
84     'From DEPARTMENT D '+
85     'JOIN Depts On D.HEAD_DEPT = Depts.DEPT_NO '+
86     ')'+
87    
88     'Select First 2 A.EMP_NO, A.FIRST_NAME, A.LAST_NAME, A.PHONE_EXT, A.HIRE_DATE, A.DEPT_NO, A.JOB_CODE,'+
89     'A.JOB_GRADE, A.JOB_COUNTRY, A.SALARY, A.FULL_NAME, A.PHOTO, D.DEPT_PATH, D.DEPT_KEY_PATH '+
90     'From EMPLOYEE A '+
91     'JOIN Depts D On D.DEPT_NO = A.DEPT_NO';
92    
93     { TTest27 }
94    
95     procedure TTest27.HandleGetDBVersionNo(Sender: TObject; var VersionNo: integer);
96     begin
97     VersionNo := 0;
98     IBTransaction.Active := true;
99     try
100     with TIBSQL.Create(Owner) do
101     try
102     Database := IBDatabase;
103     Transaction := IBTransaction;
104     SQL.Text := 'Select * From RDB$RELATIONS Where RDB$RELATION_NAME = ''DBVERSIONINFO''';
105     ExecQuery;
106     try
107     if EOF then Exit;
108     finally
109     Close;
110     end;
111     finally
112     Free
113     end;
114    
115     with TIBSQL.Create(Owner) do
116     try
117     Database := IBDatabase;
118     Transaction := IBTransaction;
119     SQL.Text := 'Select VersionNo From DBVersionInfo';
120     ExecQuery;
121     try
122     VersionNo := FieldByName('VersionNo').AsInteger;
123     finally
124     Close;
125     end;
126     finally
127     Free;
128     end;
129     finally
130     IBTransaction.Commit;
131     end;
132     end;
133    
134     procedure TTest27.HandleLogMessage(Sender: TObject; Msg: string);
135     begin
136     writeln(OutFile,Msg);
137     end;
138    
139     procedure TTest27.GetSharedDirectory(Sender: TObject; var SharedDataDir: string);
140     begin
141     SharedDataDir := 'resources/Test27';
142     end;
143    
144     procedure TTest27.CreateObjects(Application: TTestApplication);
145     begin
146     inherited CreateObjects(Application);
147     FLocalDB := TIBCMLocalDBSupport.Create(Application);
148     FLocalDB.Database := IBDatabase;
149     FLocalDB.VendorName := 'MWA Software';
150     FLocalDB.OnGetDBVersionNo := @HandleGetDBVersionNo;
151     FLocalDB.OnLogMessage := @HandleLogMessage;
152     FLocalDB.OnGetSharedDataDir := @GetSharedDirectory;
153     end;
154    
155     function TTest27.GetTestID: AnsiString;
156     begin
157     Result := aTestID;
158     end;
159    
160     function TTest27.GetTestTitle: AnsiString;
161     begin
162     Result := aTestTitle;
163     end;
164    
165     procedure TTest27.InitTest;
166     begin
167     IBDatabase.DatabaseName := 'nemo';
168     FLocalDB.DatabaseName := ExtractDBName(Owner.GetNewDatabaseName);
169     FLocalDB.EmptyDBArchive := 'employee.gbk';
170     FLocalDB.RequiredVersionNo := 2;
171     FLocalDB.UpgradeConfFile := 'upgrade.conf';
172     ReadOnlyTransaction;
173     end;
174    
175     procedure TTest27.RunTest(CharSet: AnsiString; SQLDialect: integer);
176     begin
177     try
178     IBDatabase.Connected := true;
179     with IBQuery do
180     begin
181     AllowAutoActivateTransaction := true;
182     SQL.Text := sqlExample;
183     Active := true;
184     PrintDataSet(IBQuery);
185     end;
186     finally
187     IBDatabase.DropDatabase;
188     end;
189     end;
190    
191     initialization
192     RegisterTest(TTest27);
193    
194     end.
195