~ubuntu-branches/debian/lenny/fpc/lenny

« back to all changes in this revision

Viewing changes to fpcsrc/packages/fcl-db/tests/sqldbtoolsunit.pas

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-05-17 17:12:11 UTC
  • mfrom: (3.1.9 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080517171211-9qi33xhd9evfa0kg
Tags: 2.2.0-dfsg1-9
[ Torsten Werner ]
* Add Mazen Neifer to Uploaders field.

[ Mazen Neifer ]
* Moved FPC sources into a version dependent directory from /usr/share/fpcsrc
  to /usr/share/fpcsrc/${FPCVERSION}. This allow installing more than on FPC
  release.
* Fixed far call issue in compiler preventing building huge binearies.
  (closes: #477743)
* Updated building dependencies, recomennded and suggested packages.
* Moved fppkg to fp-utils as it is just a helper tool and is not required by
  compiler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
unit SQLDBToolsUnit;
 
2
 
 
3
{$mode objfpc}{$H+}
 
4
 
 
5
interface
 
6
 
 
7
uses
 
8
  Classes, SysUtils, toolsunit,
 
9
  db,
 
10
  sqldb, ibconnection, mysql40conn, mysql41conn, mysql50conn, pqconnection,odbcconn,oracleconnection;
 
11
 
 
12
type TSQLDBTypes = (mysql40,mysql41,mysql50,postgresql,interbase,odbc,oracle);
 
13
 
 
14
const MySQLdbTypes = [mysql40,mysql41,mysql50];
 
15
      DBTypesNames : Array [TSQLDBTypes] of String[19] =
 
16
             ('MYSQL40','MYSQL41','MYSQL50','POSTGRESQL','INTERBASE','ODBC','ORACLE');
 
17
 
 
18
type
 
19
{ TSQLDBConnector }
 
20
  TSQLDBConnector = class(TDBConnector)
 
21
    FConnection   : TSQLConnection;
 
22
    FTransaction  : TSQLTransaction;
 
23
    FQuery        : TSQLQuery;
 
24
  private
 
25
    procedure CreateFConnection;
 
26
    procedure CreateFTransaction;
 
27
    Function CreateQuery : TSQLQuery;
 
28
  protected
 
29
    procedure CreateNDatasets; override;
 
30
    procedure CreateFieldDataset; override;
 
31
    procedure DropNDatasets; override;
 
32
    procedure DropFieldDataset; override;
 
33
    Function InternalGetNDataset(n : integer) : TDataset; override;
 
34
    Function InternalGetFieldDataset : TDataSet; override;
 
35
  public
 
36
    destructor Destroy; override;
 
37
    constructor Create; override;
 
38
    property Connection : TSQLConnection read FConnection;
 
39
    property Transaction : TSQLTransaction read FTransaction;
 
40
    property Query : TSQLQuery read FQuery;
 
41
  end;
 
42
 
 
43
var SQLDbType : TSQLDBTypes;
 
44
 
 
45
implementation
 
46
 
 
47
{ TSQLDBConnector }
 
48
 
 
49
procedure TSQLDBConnector.CreateFConnection;
 
50
var i : TSQLDBTypes;
 
51
begin
 
52
  for i := low(DBTypesNames) to high(DBTypesNames) do
 
53
    if UpperCase(dbconnectorparams) = DBTypesNames[i] then sqldbtype := i;
 
54
    
 
55
  if SQLDbType = MYSQL40 then Fconnection := tMySQL40Connection.Create(nil);
 
56
  if SQLDbType = MYSQL41 then Fconnection := tMySQL41Connection.Create(nil);
 
57
  if SQLDbType = MYSQL50 then Fconnection := tMySQL50Connection.Create(nil);
 
58
  if SQLDbType = POSTGRESQL then Fconnection := tpqConnection.Create(nil);
 
59
  if SQLDbType = INTERBASE then Fconnection := tIBConnection.Create(nil);
 
60
  if SQLDbType = ODBC then Fconnection := tODBCConnection.Create(nil);
 
61
  if SQLDbType = ORACLE then Fconnection := TOracleConnection.Create(nil);
 
62
 
 
63
  if not assigned(Fconnection) then writeln('Invalid database-type, check if a valid database-type was provided in the file ''database.ini''');
 
64
 
 
65
  with Fconnection do
 
66
    begin
 
67
    DatabaseName := dbname;
 
68
    UserName := dbuser;
 
69
    Password := dbpassword;
 
70
    HostName := dbhostname;
 
71
    open;
 
72
    end;
 
73
end;
 
74
 
 
75
procedure TSQLDBConnector.CreateFTransaction;
 
76
 
 
77
begin
 
78
  Ftransaction := tsqltransaction.create(nil);
 
79
  with Ftransaction do
 
80
    database := Fconnection;
 
81
end;
 
82
 
 
83
Function TSQLDBConnector.CreateQuery : TSQLQuery;
 
84
 
 
85
begin
 
86
  Result := TSQLQuery.create(nil);
 
87
  with Result do
 
88
    begin
 
89
    database := Fconnection;
 
90
    transaction := Ftransaction;
 
91
    end;
 
92
end;
 
93
 
 
94
procedure TSQLDBConnector.CreateNDatasets;
 
95
var CountID : Integer;
 
96
begin
 
97
  try
 
98
    Ftransaction.StartTransaction;
 
99
    Fconnection.ExecuteDirect('create table FPDEV (       ' +
 
100
                              '  ID INT NOT NULL,           ' +
 
101
                              '  NAME VARCHAR(50),          ' +
 
102
                              '  PRIMARY KEY (ID)           ' +
 
103
                              ')                            ');
 
104
 
 
105
    FTransaction.CommitRetaining;
 
106
 
 
107
    for countID := 1 to MaxDataSet do
 
108
      Fconnection.ExecuteDirect('insert into FPDEV (ID,NAME)' +
 
109
                                'values ('+inttostr(countID)+',''TestName'+inttostr(countID)+''')');
 
110
 
 
111
    Ftransaction.Commit;
 
112
  except
 
113
    if Ftransaction.Active then Ftransaction.Rollback
 
114
  end;
 
115
end;
 
116
 
 
117
procedure TSQLDBConnector.CreateFieldDataset;
 
118
var CountID : Integer;
 
119
begin
 
120
  try
 
121
    Ftransaction.StartTransaction;
 
122
    Fconnection.ExecuteDirect('create table FPDEV_FIELD (   ' +
 
123
                              '  ID INT NOT NULL,           ' +
 
124
                              '  FSTRING VARCHAR(10),        ' +
 
125
                              '  FINTEGER INT,               ' +
 
126
                              '  FDATE DATE,         ' +
 
127
                              '  FDATETIME TIMESTAMP,        ' +
 
128
                              '  PRIMARY KEY (ID)           ' +
 
129
                              ')                            ');
 
130
 
 
131
    FTransaction.CommitRetaining;
 
132
 
 
133
    for countID := 0 to testValuesCount-1 do
 
134
      Fconnection.ExecuteDirect('insert into FPDEV_FIELD (ID,FSTRING,FINTEGER,FDATE,FDATETIME)' +
 
135
                                'values ('+inttostr(countID)+','''+testStringValues[CountID]+''','''+inttostr(testIntValues[CountID])+''','''+testDateValues[CountID]+''','''+testDateValues[CountID]+''')');
 
136
 
 
137
    Ftransaction.Commit;
 
138
  except
 
139
    if Ftransaction.Active then Ftransaction.Rollback
 
140
  end;
 
141
end;
 
142
 
 
143
procedure TSQLDBConnector.DropNDatasets;
 
144
begin
 
145
  try
 
146
    if Ftransaction.Active then Ftransaction.Rollback;
 
147
    Ftransaction.StartTransaction;
 
148
    Fconnection.ExecuteDirect('DROP TABLE FPDEV');
 
149
    Ftransaction.Commit;
 
150
  Except
 
151
    if Ftransaction.Active then Ftransaction.Rollback
 
152
  end;
 
153
end;
 
154
 
 
155
procedure TSQLDBConnector.DropFieldDataset;
 
156
begin
 
157
  try
 
158
    if Ftransaction.Active then Ftransaction.Rollback;
 
159
    Ftransaction.StartTransaction;
 
160
    Fconnection.ExecuteDirect('DROP TABLE FPDEV_FIELD');
 
161
    Ftransaction.Commit;
 
162
  Except
 
163
    if Ftransaction.Active then Ftransaction.Rollback
 
164
  end;
 
165
end;
 
166
 
 
167
function TSQLDBConnector.InternalGetNDataset(n: integer): TDataset;
 
168
begin
 
169
  Result := CreateQuery;
 
170
  with (Result as TSQLQuery) do
 
171
    begin
 
172
    sql.clear;
 
173
    sql.add('SELECT * FROM FPDEV WHERE ID < '+inttostr(n+1));
 
174
    end;
 
175
end;
 
176
 
 
177
function TSQLDBConnector.InternalGetFieldDataset: TDataSet;
 
178
begin
 
179
  Result := CreateQuery;
 
180
  with (Result as TSQLQuery) do
 
181
    begin
 
182
    sql.clear;
 
183
    sql.add('SELECT * FROM FPDEV_FIELD');
 
184
    end;
 
185
end;
 
186
 
 
187
destructor TSQLDBConnector.Destroy;
 
188
begin
 
189
  try
 
190
    if Ftransaction.Active then Ftransaction.Rollback;
 
191
    Ftransaction.StartTransaction;
 
192
    Fconnection.ExecuteDirect('DROP TABLE FPDEV2');
 
193
    Ftransaction.Commit;
 
194
  Except
 
195
    if Ftransaction.Active then Ftransaction.Rollback
 
196
  end;
 
197
  inherited Destroy;
 
198
 
 
199
  FreeAndNil(FQuery);
 
200
  FreeAndNil(FTransaction);
 
201
  FreeAndNil(FConnection);
 
202
end;
 
203
 
 
204
constructor TSQLDBConnector.Create;
 
205
begin
 
206
  FConnection := nil;
 
207
  CreateFConnection;
 
208
  CreateFTransaction;
 
209
  FQuery := CreateQuery;
 
210
  FConnection.Transaction := FTransaction;
 
211
  Inherited;
 
212
end;
 
213
 
 
214
initialization
 
215
  RegisterClass(TSQLDBConnector);
 
216
end.
 
217