tctestsql.pas 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. unit tctestsql;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testregistry, testu, dbtests, tresults, sqldb, pqconnection;
  6. const
  7. Bools : Array[Boolean] of string = ('f','t');
  8. type
  9. { TTestSQLCase }
  10. { TTestBaseSQLCase }
  11. TTestBaseSQLCase = class(TTestCase)
  12. Protected
  13. function CreateResultData(out aData: TTestRunData; out aResult: TTestResultData; DateOffset: Integer = 0): Int64;
  14. function PreparePlatform(var aData: TTestRunData): Integer;
  15. procedure CreateSource(const aFileName : String);
  16. procedure DeleteSource(const aFileName: String);
  17. procedure AssertTestRunData(aQry: TSQLQuery; aData: TTestRunData);
  18. function GetSQL: TTestSQL; virtual; abstract;
  19. property SQL : TTestSQL Read GetSQL;
  20. end;
  21. TTestSQLCase = class(TTestBaseSQLCase)
  22. const
  23. SQLTestResultFilter = '(TR_ID=%d) and (TR_TESTRUN_FK=%d) and (TR_TEST_FK=%d) and (TR_OK=''%s'') and (TR_SKIP=''%s'') and (TR_RESULT=%d) and (TR_LOG=''%s'')';
  24. protected
  25. function GetSQL: TTestSQL; override;
  26. protected
  27. procedure SetUp; override;
  28. procedure TearDown; override;
  29. published
  30. procedure TestHookUp;
  31. procedure TestAddCPU;
  32. procedure TestAddOS;
  33. procedure TestAddVersion;
  34. procedure TestAddCategory;
  35. procedure TestAddTest;
  36. procedure TestAddPlatform;
  37. Procedure TestAddRun;
  38. procedure TestUpdateRun;
  39. Procedure TestAddTestResult;
  40. Procedure TestAddTestResultTwice;
  41. Procedure TestUpdateTestResult;
  42. Procedure TestAddLastResult;
  43. Procedure TestAddLastResultTwice;
  44. Procedure TestGetLastTestResult;
  45. Procedure TestAddPreviousResult;
  46. Procedure TestAddPreviousResultTwice;
  47. procedure TestGetCPUID;
  48. procedure TestGetOSID;
  49. procedure TestGetCategoryID;
  50. procedure TestGetVersionID;
  51. procedure TestGetTestID;
  52. procedure TestGetRunID;
  53. end;
  54. implementation
  55. uses tcsetup;
  56. { TTestBaseSQLCase }
  57. procedure TTestBaseSQLCase.DeleteSource(const aFileName: String);
  58. begin
  59. if FileExists(aFilename+'.pp') then
  60. if not DeleteFile(aFilename+'.pp') then
  61. Fail('Failed to delete '+aFileName+'.pp');
  62. end;
  63. procedure TTestBaseSQLCase.CreateSource(const aFileName: String);
  64. var
  65. Src : TStrings;
  66. begin
  67. Src:=TStringList.Create;
  68. try
  69. Src.Add('program '+aFileName+';');
  70. Src.Add('begin');
  71. Src.Add('end.');
  72. Src.SaveToFile(afileName+'.pp');
  73. finally
  74. Src.Free;
  75. end;
  76. end;
  77. function TTestBaseSQLCase.PreparePlatform(var aData : TTestRunData) : Integer;
  78. begin
  79. aData.CategoryID:=SQL.GetCategoryID('x');
  80. if aData.CategoryID=-1 then
  81. aData.CategoryID:=SQL.AddCategory('x');
  82. aData.OSID:=SQL.GetOSID('y');
  83. if aData.OSID=-1 then
  84. aData.OSID:=SQL.AddOS('y');
  85. aData.CPUID:=SQL.GetCPUID('z');
  86. if aData.CPUID=-1 then
  87. aData.CPUID:=SQL.AddCPU('z');
  88. aData.VersionID:=SQL.GetVersionID('w');
  89. if aData.VersionID=-1 then
  90. aData.VersionID:=SQL.AddVersion('w',Date);
  91. aData.config:='v';
  92. Result:=SQL.GetPlatformID(aData,False);
  93. if Result=-1 then
  94. Result:=SQL.AddPlatform(aData);
  95. end;
  96. procedure TTestBaseSQLCase.AssertTestRunData(aQry : TSQLQuery; aData : TTestRunData);
  97. var
  98. St : TTestStatus;
  99. begin
  100. With aQry,aData do
  101. begin
  102. AssertEquals('Date',DATE,FieldByName('TU_DATE').AsDateTime);
  103. AssertEquals('Platform',PlatformID,FieldByName('TU_PLATFORM_FK').AsInteger);
  104. AssertEquals('Machine',Machine,FieldByName('TU_MACHINE').AsString);
  105. AssertEquals('Submitter',Submitter,FieldByName('TU_SUBMITTER').AsString);
  106. For St in TTestStatus do
  107. AssertEquals(StatusText[St],StatusCount[st],FieldByName(SQLField[ST]).AsInteger);
  108. AssertEquals('CompilerDate',CompilerDate,FieldByName('TU_COMPILERDATE').AsString);
  109. AssertEquals('CompilerFullVersion',CompilerFullVersion,FieldByName('TU_COMPILERFULLVERSION').AsString);
  110. AssertEquals('CompilerRevision',CompilerRevision,FieldByName('TU_COMPILERREVISION').AsString);
  111. AssertEquals('TestsRevision',TestsRevision,FieldByName('TU_TESTSREVISION').AsString);
  112. AssertEquals('RTLRevision',RTLRevision,FieldByName('TU_RTLREVISION').AsString);
  113. AssertEquals('PackagesRevision',PackagesRevision,FieldByName('TU_PACKAGESREVISION').AsString);
  114. end;
  115. end;
  116. function TTestBaseSQLCase.CreateResultData(out aData: TTestRunData; out aResult: TTestResultData; DateOffset: Integer): Int64;
  117. begin
  118. aData:=Default(TTestRunData);
  119. aData.PlatformID:=PreparePlatform(aData);
  120. aData.Date:=Date-DateOffset;
  121. aData.RunID:=SQL.AddRun(aData);
  122. aResult:=Default(TTestResultData);
  123. aResult.RunID:=aData.RunID;
  124. aResult.PlatformID:=aData.PlatformID;
  125. aResult.Date:=Date-DateOffset;
  126. CreateSource('x');
  127. if SQL.GetTestID('x.pp')=-1 then
  128. aResult.TestID:=SQL.AddTest('x.pp',False);
  129. aResult.TestResult:=stSuccessCompilationFailed;
  130. aResult.Log:='xyz';
  131. With aData do
  132. begin
  133. Result:=SQL.AddTestResult(aResult);
  134. aResult.ID:=Result;
  135. end;
  136. end;
  137. { TTestSQLCase }
  138. procedure TTestSQLCase.TestHookUp;
  139. begin
  140. AssertEquals('Empty testos',0,TDBHelper.CountRecords('TESTOS'));
  141. AssertEquals('Empty TESTCPU',0,TDBHelper.CountRecords('TESTCPU'));
  142. AssertEquals('Empty TESTCATEGORY',0,TDBHelper.CountRecords('TESTCATEGORY'));
  143. AssertEquals('Empty TESTVERSION',0,TDBHelper.CountRecords('TESTVERSION'));
  144. AssertEquals('Empty TESTPLATFORM',0,TDBHelper.CountRecords('TESTPLATFORM'));
  145. AssertEquals('Empty TESTRUN',0,TDBHelper.CountRecords('TESTRUN'));
  146. AssertEquals('Empty TESTS',0,TDBHelper.CountRecords('TESTS'));
  147. AssertEquals('Empty TESTRESULTS',0,TDBHelper.CountRecords('TESTRESULTS'));
  148. AssertEquals('Empty TESTLASTRESULTS',0,TDBHelper.CountRecords('TESTLASTRESULTS'));
  149. AssertEquals('Empty TESTPREVIOUSRESULTS',0,TDBHelper.CountRecords('TESTPREVIOUSRESULTS'));
  150. end;
  151. procedure TTestSQLCase.TestAddCPU;
  152. var
  153. lID : Int64;
  154. begin
  155. lID:=SQL.AddCPU('x');
  156. AssertEquals('exists',1,TDBHelper.CountRecords('TESTCPU',Format('(TC_ID=%d) and (tc_name=''x'')',[lID])));
  157. end;
  158. procedure TTestSQLCase.TestAddOS;
  159. var
  160. lID : Int64;
  161. begin
  162. lID:=SQL.AddOS('x');
  163. AssertEquals('exists',1,TDBHelper.CountRecords('TESTOS',Format('(TO_ID=%d) and (to_name=''x'')',[lID])));
  164. end;
  165. procedure TTestSQLCase.TestAddVersion;
  166. var
  167. lID : Int64;
  168. begin
  169. lID:=SQL.AddVersion('x',date);
  170. AssertEquals('exists',1,TDBHelper.CountRecords('TESTVERSION',Format('(Tv_ID=%d) and (tv_version=''x'')',[lID])));
  171. end;
  172. procedure TTestSQLCase.TestAddCategory;
  173. var
  174. lID : Int64;
  175. begin
  176. lID:=SQL.AddCategory('x');
  177. AssertEquals('exists',1,TDBHelper.CountRecords('TESTCATEGORY',Format('(TA_ID=%d) and (ta_name=''x'')',[lID])));
  178. end;
  179. procedure TTestSQLCase.TestAddTest;
  180. var
  181. lID : Integer;
  182. begin
  183. CreateSource('x');
  184. lID:=SQL.AddTest('x.pp',False);
  185. AssertEquals('exists',1,TDBHelper.CountRecords('TESTS',Format('(T_ID=%d) and (t_name=''x.pp'')',[lID])));
  186. end;
  187. procedure TTestSQLCase.TestAddPlatform;
  188. const
  189. SQLFilter = '(TP_ID=%d) and (TP_OS_FK=%d) and (TP_CPU_FK=%d) '+
  190. 'and (TP_VERSION_FK=%d) and (TP_CONFIG=''%s'')';
  191. var
  192. lData : TTestRunData;
  193. lID : integer;
  194. Flt : String;
  195. begin
  196. lData:=Default(TTestRunData);
  197. lID:=PreparePlatform(lData);
  198. With lData do
  199. flt:=Format(SQLFilter,[lID,OSID,CPUID,VersionID,Config]);
  200. AssertEquals('Platform',1,TDBHelper.CountRecords('TESTPLATFORM',Flt));
  201. end;
  202. procedure TTestSQLCase.TestAddRun;
  203. var
  204. lData : TTestRunData;
  205. lID : Int64;
  206. Qry : TSQLQuery;
  207. begin
  208. lData:=Default(TTestRunData);
  209. lData.PlatformID:=PreparePlatform(lData);
  210. With lData do
  211. begin
  212. machine:='a';
  213. submitter:='b';
  214. description:='c';
  215. Date:=Sysutils.Date;
  216. CompilerDate:='ymd';
  217. CompilerFullVersion:='1.2';
  218. CompilerRevision:='1.3';
  219. TestsRevision:='1.4';
  220. RTLRevision:='1.5';
  221. PackagesRevision:='1.6';
  222. end;
  223. lID:=SQL.AddRun(lData);
  224. Qry:=TDBHelper.CreateQuery(Format('Select * from testrun where (tu_id=%d)',[lID]));
  225. try
  226. Qry.Open;
  227. AssertFalse('Have data',Qry.IsEmpty);
  228. AssertTestRunData(Qry,lData);
  229. finally
  230. Qry.Free;
  231. end;
  232. end;
  233. procedure TTestSQLCase.TestAddTestResult;
  234. var
  235. lData : TTestRunData;
  236. lResult : TTestResultData;
  237. lID : Int64;
  238. flt : String;
  239. OK,Skip : Boolean;
  240. begin
  241. lID:=CreateResultData(lData,lResult);
  242. OK:=TestOK[lResult.TestResult];
  243. Skip:=TestSkipped[lResult.TestResult];
  244. With lResult do
  245. flt:=Format(SQLTestResultFilter,[lID,RunID,TestID,Bools[OK],Bools[Skip],Ord(TestResult),Log]);
  246. AssertEquals('Platform',1,TDBHelper.CountRecords('TESTRESULTS',Flt));
  247. end;
  248. procedure TTestSQLCase.TestAddTestResultTwice;
  249. var
  250. lData : TTestRunData;
  251. lResult : TTestResultData;
  252. lID,lID2 : Int64;
  253. flt : String;
  254. OK,Skip : Boolean;
  255. begin
  256. CreateResultData(lData,lResult);
  257. OK:=TestOK[lResult.TestResult];
  258. Skip:=TestSkipped[lResult.TestResult];
  259. lID:=SQL.AddTestResult(lResult);
  260. // Change result
  261. lResult.TestResult:=stFailedToCompile;
  262. lResult.Log:='xyza';
  263. OK:=TestOK[lResult.TestResult];
  264. Skip:=TestSkipped[lResult.TestResult];
  265. // Insert again...
  266. lID2:=SQL.AddTestResult(lResult);
  267. AssertEquals('Same ID',lID,lID2);
  268. flt:=Format(SQLTestResultFilter,[lID,lResult.RunID,lResult.TestID,Bools[OK],Bools[Skip],Ord(lResult.TestResult),lResult.Log]);
  269. AssertEquals('Result',1,TDBHelper.CountRecords('TESTRESULTS',Flt));
  270. end;
  271. procedure TTestSQLCase.TestUpdateTestResult;
  272. var
  273. lData : TTestRunData;
  274. lResult : TTestResultData;
  275. lID2,lID : Int64;
  276. flt : String;
  277. OK,Skip : Boolean;
  278. begin
  279. lID:=CreateResultData(lData,lResult);
  280. // Change result
  281. lResult.ID:=lID;
  282. lResult.TestResult:=stFailedToCompile;
  283. lResult.Log:='xyza';
  284. OK:=TestOK[lResult.TestResult];
  285. Skip:=TestSkipped[lResult.TestResult];
  286. // Update
  287. lID2:=SQL.UpdateTestResult(lResult);
  288. AssertEquals('Same ID',lID,lID2);
  289. flt:=Format(SQLTestResultFilter,[lID,lResult.RunID,lResult.TestID,Bools[OK],Bools[Skip],Ord(lResult.TestResult),lResult.Log]);
  290. AssertEquals('Result',1,TDBHelper.CountRecords('TESTRESULTS',Flt));
  291. end;
  292. procedure TTestSQLCase.TestAddLastResult;
  293. var
  294. lData : TTestRunData;
  295. lResult : TTestResultData;
  296. lID : Int64;
  297. flt : String;
  298. begin
  299. lID:=CreateResultData(lData,lResult);
  300. AssertTrue('Add',SQL.AddLastResult(lResult.TestID,lData.PlatformID,lID));
  301. flt:=Format('(TL_TEST_FK=%d) and (TL_PLATFORM_FK=%d) and (TL_TESTRESULTS_FK=%d)',[lResult.TestID,lData.PlatformID,lID]);
  302. AssertEquals('Result',1,TDBHelper.CountRecords('TESTLASTRESULTS',Flt));
  303. end;
  304. procedure TTestSQLCase.TestAddLastResultTwice;
  305. var
  306. lData : TTestRunData;
  307. lResult : TTestResultData;
  308. lID,lID2 : Integer;
  309. flt : string;
  310. begin
  311. lID:=CreateResultData(lData,lResult,1);
  312. AssertTrue('Add',SQL.AddLastResult(lResult.TestID,lData.PlatformID,lID));
  313. lID2:=CreateResultData(lData,lResult,0);
  314. AssertTrue('Add',SQL.AddLastResult(lResult.TestID,lData.PlatformID,lID2));
  315. flt:=Format('(TL_TEST_FK=%d) and (TL_PLATFORM_FK=%d) and (TL_TESTRESULTS_FK=%d)',[lResult.TestID,lData.PlatformID,lID2]);
  316. AssertEquals('Result',1,TDBHelper.CountRecords('TESTLASTRESULTS',Flt));
  317. end;
  318. procedure TTestSQLCase.TestGetLastTestResult;
  319. var
  320. lData : TTestRunData;
  321. lResult2,lResult : TTestResultData;
  322. lID : Integer;
  323. begin
  324. lID:=CreateResultData(lData,lResult,1);
  325. AssertTrue('Add',SQL.AddLastResult(lResult.TestID,lData.PlatformID,lID));
  326. lResult2:=SQL.GetLastTestResult(lResult.TestID,lData.PlatformID);
  327. AssertEquals('ID',lID,lResult2.ID);
  328. AssertEquals('Run',lResult.RunID,lResult2.RunID);
  329. AssertTrue('Status',lResult.TestResult=lResult2.TestResult);
  330. AssertEquals('Log',lResult.Log,lResult2.Log);
  331. AssertEquals('Date',Date-1,lResult2.Date);
  332. end;
  333. procedure TTestSQLCase.TestAddPreviousResult;
  334. var
  335. lData : TTestRunData;
  336. lResult : TTestResultData;
  337. lID : Int64;
  338. flt : String;
  339. begin
  340. lID:=CreateResultData(lData,lResult);
  341. AssertTrue('Add',SQL.AddPreviousResult(lResult.TestID,lData.PlatformID,lID));
  342. flt:=Format('(TPR_TEST_FK=%d) and (TPR_PLATFORM_FK=%d) and (TPR_TESTRESULTS_FK=%d)',[lResult.TestID,lData.PlatformID,lID]);
  343. AssertEquals('Result',1,TDBHelper.CountRecords('TESTPREVIOUSRESULTS',Flt));
  344. end;
  345. procedure TTestSQLCase.TestAddPreviousResultTwice;
  346. var
  347. lData : TTestRunData;
  348. lResult : TTestResultData;
  349. lID,lID2 : Integer;
  350. flt : string;
  351. begin
  352. lID:=CreateResultData(lData,lResult,1);
  353. AssertTrue('Add',SQL.AddPreviousResult(lResult.TestID,lData.PlatformID,lID));
  354. lID2:=CreateResultData(lData,lResult,0);
  355. AssertTrue('Add',SQL.AddPreviousResult(lResult.TestID,lData.PlatformID,lID2));
  356. flt:=Format('(TPR_TEST_FK=%d) and (TPR_PLATFORM_FK=%d) and (TPR_TESTRESULTS_FK=%d)',[lResult.TestID,lData.PlatformID,lID2]);
  357. AssertEquals('Result',1,TDBHelper.CountRecords('TESTPREVIOUSRESULTS',Flt));
  358. end;
  359. procedure TTestSQLCase.TestUpdateRun;
  360. var
  361. lData : TTestRunData;
  362. St : TTestStatus;
  363. Qry : TSQLQuery;
  364. begin
  365. lData:=Default(TTestRunData);
  366. lData.PlatformID:=PreparePlatform(lData);
  367. lData.RunID:=SQL.AddRun(lData);
  368. for St in TTestStatus do
  369. lData.StatusCount[st]:=(Ord(st)+1)*100;
  370. AssertTrue('Update',SQL.UpdateTestRun(lData));
  371. Qry:=TDBHelper.CreateQuery(Format('Select * from testrun where (tu_id=%d)',[lData.RunID]));
  372. try
  373. Qry.Open;
  374. AssertFalse('Have data',Qry.IsEmpty);
  375. AssertTestRunData(Qry,lData);
  376. finally
  377. Qry.Free;
  378. end;
  379. end;
  380. procedure TTestSQLCase.TestGetCPUID;
  381. begin
  382. TDBHelper.ExecSQL('INSERT INTO TESTCPU VALUES (1,''x'')');
  383. TDBHelper.ExecSQL('INSERT INTO TESTCPU VALUES (2,''y'')');
  384. AssertEquals('Count',2,TDBHelper.CountRecords('TESTCPU'));
  385. AssertEquals('Get x',1,SQL.GetCPUID('x'));
  386. AssertEquals('Get y',2,SQL.GetCPUID('y'));
  387. AssertEquals('Get z',-1,SQL.GetCPUID('z'));
  388. end;
  389. procedure TTestSQLCase.TestGetOSID;
  390. begin
  391. TDBHelper.ExecSQL('INSERT INTO TESTOS VALUES (1,''x'')');
  392. TDBHelper.ExecSQL('INSERT INTO TESTOS VALUES (2,''y'')');
  393. AssertEquals('Count',2,TDBHelper.CountRecords('TESTOS'));
  394. AssertEquals('Get x',1,SQL.GetOSID('x'));
  395. AssertEquals('Get y',2,SQL.GetOSID('y'));
  396. AssertEquals('Get z',-1,SQL.GetOSID('z'));
  397. end;
  398. procedure TTestSQLCase.TestGetCategoryID;
  399. begin
  400. TDBHelper.ExecSQL('INSERT INTO TESTCategory VALUES (1,''x'')');
  401. TDBHelper.ExecSQL('INSERT INTO TESTCategory VALUES (2,''y'')');
  402. AssertEquals('Count',2,TDBHelper.CountRecords('TESTCategory'));
  403. AssertEquals('Get x',1,SQL.GetCategoryID('x'));
  404. AssertEquals('Get y',2,SQL.GetCategoryID('y'));
  405. AssertEquals('Get z',-1,SQL.GetCategoryID('z'));
  406. end;
  407. procedure TTestSQLCase.TestGetVersionID;
  408. begin
  409. TDBHelper.ExecSQL('INSERT INTO TESTVERSION (TV_ID,TV_VERSION) VALUES (1,''x'')');
  410. TDBHelper.ExecSQL('INSERT INTO TESTVERSION (TV_ID,TV_VERSION) VALUES (2,''y'')');
  411. AssertEquals('Count',2,TDBHelper.CountRecords('TESTVERSION'));
  412. AssertEquals('Get x',1,SQL.GetVersionID('x'));
  413. AssertEquals('Get y',2,SQL.GetVersionID('y'));
  414. AssertEquals('Get z',-1,SQL.GetVersionID('z'));
  415. end;
  416. procedure TTestSQLCase.TestGetTestID;
  417. begin
  418. TDBHelper.ExecSQL('INSERT INTO TESTS (T_ID,T_NAME,T_ADDDATE) VALUES (1,''x.pp'',CURRENT_TIMESTAMP)');
  419. TDBHelper.ExecSQL('INSERT INTO TESTS (T_ID,T_NAME,T_ADDDATE) VALUES (2,''y.pp'',CURRENT_TIMESTAMP)');
  420. AssertEquals('Count',2,TDBHelper.CountRecords('TESTS'));
  421. AssertEquals('Get x',1,SQL.GetTestID('x.pp'));
  422. AssertEquals('Get y',2,SQL.GetTestID('y.pp'));
  423. AssertEquals('Get z',-1,SQL.GetCategoryID('z.pp'));
  424. end;
  425. procedure TTestSQLCase.TestGetRunID;
  426. var
  427. lData : TTestRunData;
  428. lPlatformID : integer;
  429. lRunID : Int64;
  430. begin
  431. lData:=Default(TTestRunData);
  432. lPlatformID:=PreparePlatform(lData);
  433. lData.PlatformID:=lPlatFormID;
  434. lData.Date:=Date;
  435. lRunID:=SQL.AddRun(lData);
  436. AssertEquals('Get run id',lRunID,SQL.GetRunID(lData));
  437. end;
  438. function TTestSQLCase.GetSQL: TTestSQL;
  439. begin
  440. Result:=TDBHelper.SQL;
  441. end;
  442. procedure TTestSQLCase.SetUp;
  443. begin
  444. TDBHelper.ClearAllTables;
  445. SQL.TestSrcDir:='./';
  446. end;
  447. procedure TTestSQLCase.TearDown;
  448. begin
  449. TDBHelper.MaybeRollback;
  450. DeleteSource('x');
  451. end;
  452. initialization
  453. RegisterTestDecorator(TDBDecorator,TTestSQLCase);
  454. end.