testbufdatasetstreams.pas 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. unit TestBufDatasetStreams;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. interface
  6. uses
  7. fpcunit, testutils, testregistry, testdecorator,
  8. Classes, SysUtils, db, BufDataset;
  9. type
  10. { TTestBufDatasetStreams }
  11. TUpdDatasetProc = procedure(ADataset : TCustomBufDataset) of object;
  12. TTestBufDatasetStreams = class(TTestCase)
  13. private
  14. procedure CompareDatasets(ADataset1, ADataset2 : TDataset);
  15. procedure TestChangesApplyUpdates(AUpdDatasetProc : TUpdDatasetProc; Inserts: Boolean=False);
  16. procedure TestChangesCancelUpdates(AUpdDatasetProc : TUpdDatasetProc);
  17. procedure TestChanges(AUpdDatasetProc : TUpdDatasetProc; AFormat : TDataPacketFormat=dfBinary);
  18. procedure TestChangesXML(AUpdDatasetProc : TUpdDatasetProc);
  19. procedure SimpleEditChange(ADataset: TCustomBufDataset);
  20. procedure SimpleDeleteChange(ADataset: TCustomBufDataset);
  21. procedure MoreDeletesChange(ADataset: TCustomBufDataset);
  22. procedure SimpleInsertChange(ADataset: TCustomBufDataset);
  23. procedure MoreInsertsChange(ADataset: TCustomBufDataset);
  24. procedure SeveralEditsChange(ADataset: TCustomBufDataset);
  25. procedure DeleteAllChange(ADataset: TCustomBufDataset);
  26. procedure DeleteAllInsertChange(ADataset: TCustomBufDataset);
  27. procedure NullInsertChange(ADataset: TCustomBufDataset);
  28. procedure NullEditChange(ADataset: TCustomBufDataset);
  29. procedure AppendDeleteChange(ADataset: TCustomBufDataset);
  30. protected
  31. procedure SetUp; override;
  32. procedure TearDown; override;
  33. published
  34. procedure TestSimpleEditCancelUpd;
  35. procedure TestSimpleDeleteCancelUpd;
  36. procedure TestMoreDeletesCancelUpd;
  37. procedure TestSimpleInsertCancelUpd;
  38. procedure MoreInsertsCancelUpd;
  39. procedure SeveralEditsCancelUpd;
  40. procedure DeleteAllCancelUpd;
  41. procedure DeleteAllInsertCancelUpd;
  42. procedure AppendDeleteCancelUpd;
  43. procedure TestSimpleEditApplUpd;
  44. procedure TestSimpleDeleteApplUpd;
  45. procedure TestMoreDeletesApplUpd;
  46. procedure TestSimpleInsertApplUpd;
  47. procedure MoreInsertsApplUpd;
  48. procedure SeveralEditsApplUpd;
  49. procedure DeleteAllApplUpd;
  50. procedure DeleteAllInsertApplUpd;
  51. procedure NullInsertUpdateApplUpd;
  52. procedure TestBasicsXML;
  53. procedure TestSimpleEditXML;
  54. procedure TestSimpleDeleteXML;
  55. procedure TestMoreDeletesXML;
  56. procedure TestSimpleInsertXML;
  57. procedure TestMoreInsertsXML;
  58. procedure TestSeveralEditsXML;
  59. procedure TestDeleteAllXML;
  60. procedure TestDeleteAllInsertXML;
  61. procedure TestStreamingBlobFieldsXML;
  62. procedure TestStreamingBigBlobFieldsXML;
  63. procedure TestStreamingCalculatedFieldsXML;
  64. procedure TestAppendDeleteBIN;
  65. procedure TestFileNameProperty;
  66. procedure TestXmlFileRecognition;
  67. procedure TestCloseDatasetNoConnection; // bug 17623
  68. end;
  69. implementation
  70. uses toolsunit, SQLDBToolsUnit, sqldb, XMLDatapacketReader;
  71. const TestXMLFileName = 'test.xml';
  72. TestBINFileName = 'test.dat';
  73. procedure TTestBufDatasetStreams.CompareDatasets(ADataset1,
  74. ADataset2: TDataset);
  75. begin
  76. ADataset1.First;
  77. ADataset2.First;
  78. while not ADataset1.EOF do
  79. begin
  80. AssertEquals(ADataset1.FieldByName('ID').AsInteger,ADataset2.FieldByName('ID').AsInteger);
  81. AssertEquals(ADataset1.FieldByName('NAME').AsString,ADataset2.FieldByName('NAME').AsString);
  82. ADataset1.Next;
  83. ADataset2.Next;
  84. end;
  85. end;
  86. procedure TTestBufDatasetStreams.TestChangesApplyUpdates(
  87. AUpdDatasetProc: TUpdDatasetProc; Inserts : Boolean);
  88. var OrgDs,
  89. ChangedDs : TCustomBufDataset;
  90. begin
  91. OrgDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  92. OrgDs.Open;
  93. AUpdDatasetProc(OrgDs);
  94. OrgDs.ApplyUpdates;
  95. if Inserts then
  96. begin
  97. ChangedDs := TSQLDBConnector(DBConnector).Query;
  98. ChangedDs.Close;
  99. TSQLQuery(ChangedDS).SQL.Text:='SELECT * FROM FPDEV WHERE (ID < 16) or (ID>100) ORDER BY ID';
  100. OrgDs.IndexFieldNames:='ID';
  101. OrgDs.First;
  102. end
  103. else
  104. ChangedDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  105. ChangedDs.Open;
  106. CompareDatasets(OrgDs,ChangedDs);
  107. end;
  108. procedure TTestBufDatasetStreams.TestChangesCancelUpdates(
  109. AUpdDatasetProc: TUpdDatasetProc);
  110. var OrgDs,
  111. ChangedDs : TCustomBufDataset;
  112. begin
  113. OrgDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  114. OrgDs.Open;
  115. AUpdDatasetProc(OrgDs);
  116. OrgDs.CancelUpdates;
  117. ChangedDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  118. ChangedDs.Open;
  119. CompareDatasets(OrgDs,ChangedDs);
  120. end;
  121. procedure TTestBufDatasetStreams.TestChanges(AUpdDatasetProc: TUpdDatasetProc;
  122. AFormat: TDataPacketFormat);
  123. var FileName: string;
  124. SaveDs,
  125. LoadDs : TCustomBufDataset;
  126. begin
  127. case AFormat of
  128. dfBinary: FileName := 'Basics.dat';
  129. else FileName := 'Basics.xml';
  130. end;
  131. SaveDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  132. SaveDs.Open;
  133. AUpdDatasetProc(SaveDs);
  134. SaveDs.SaveToFile(FileName, AFormat);
  135. LoadDs := TCustomBufDataset.Create(nil);
  136. LoadDs.LoadFromFile(FileName);
  137. CompareDatasets(SaveDs,LoadDs);
  138. SaveDs.Close;
  139. SaveDs.Open;
  140. LoadDs.CancelUpdates;
  141. CompareDatasets(SaveDs,LoadDs);
  142. SaveDs.Close;
  143. LoadDs.Free;
  144. DeleteFile(FileName);
  145. end;
  146. procedure TTestBufDatasetStreams.TestChangesXML(AUpdDatasetProc: TUpdDatasetProc);
  147. begin
  148. TestChanges(AUpdDatasetProc, dfXML);
  149. end;
  150. procedure TTestBufDatasetStreams.SimpleEditChange(ADataset: TCustomBufDataset);
  151. begin
  152. ADataset.next;
  153. ADataset.edit;
  154. ADataset.FieldByName('name').AsString:='jojo';
  155. ADataset.Post;
  156. end;
  157. procedure TTestBufDatasetStreams.SimpleDeleteChange(ADataset: TCustomBufDataset);
  158. begin
  159. ADataset.Next;
  160. ADataset.Delete;
  161. end;
  162. procedure TTestBufDatasetStreams.MoreDeletesChange(ADataset: TCustomBufDataset);
  163. begin
  164. with ADataset do
  165. begin
  166. Delete;
  167. Next;
  168. // Next is to test what happens if the delete-buffer of one record is linked
  169. // to another deleted record
  170. Delete;
  171. Delete;
  172. Next;
  173. Next;
  174. Next;
  175. Next;
  176. // Next is to test two delete-update buffers which are linked to one record
  177. Delete;
  178. Prior;
  179. Delete;
  180. Last;
  181. Delete;
  182. end;
  183. end;
  184. procedure TTestBufDatasetStreams.SimpleInsertChange(ADataset: TCustomBufDataset);
  185. begin
  186. ADataset.next;
  187. ADataset.insert;
  188. ADataset.FieldByName('id').AsInteger:=500;
  189. ADataset.FieldByName('name').AsString:='TestName0500';
  190. ADataset.Post;
  191. end;
  192. procedure TTestBufDatasetStreams.MoreInsertsChange(ADataset: TCustomBufDataset);
  193. begin
  194. with ADataset do
  195. begin
  196. insert;
  197. FieldByName('id').AsInteger:=501;
  198. FieldByName('name').AsString:='TestName0501';
  199. Post;
  200. next;
  201. next;
  202. insert;
  203. FieldByName('id').AsInteger:=502;
  204. FieldByName('name').AsString:='TestName0502';
  205. Post;
  206. next;
  207. insert;
  208. FieldByName('id').AsInteger:=503;
  209. FieldByName('name').AsString:='TestName0503';
  210. Post;
  211. next;
  212. insert;
  213. FieldByName('id').AsInteger:=504;
  214. FieldByName('name').AsString:='TestName0504';
  215. Post;
  216. insert;
  217. FieldByName('id').AsInteger:=505;
  218. FieldByName('name').AsString:='TestName0505';
  219. Post;
  220. last;
  221. insert;
  222. FieldByName('id').AsInteger:=506;
  223. FieldByName('name').AsString:='TestName0506';
  224. Post;
  225. Append;
  226. FieldByName('id').AsInteger:=507;
  227. FieldByName('name').AsString:='TestName0507';
  228. Post;
  229. end;
  230. end;
  231. procedure TTestBufDatasetStreams.SeveralEditsChange(ADataset: TCustomBufDataset);
  232. begin
  233. with ADataset do
  234. begin
  235. edit;
  236. fieldbyname('id').asinteger := 500;
  237. fieldbyname('name').AsString := 'JoJo';
  238. post;
  239. next; next;
  240. Delete;
  241. Delete;
  242. next;next;
  243. insert;
  244. fieldbyname('id').asinteger := 501;
  245. post;
  246. end;
  247. end;
  248. procedure TTestBufDatasetStreams.DeleteAllChange(ADataset: TCustomBufDataset);
  249. begin
  250. with ADataset do
  251. while not eof do delete;
  252. end;
  253. procedure TTestBufDatasetStreams.DeleteAllInsertChange(ADataset: TCustomBufDataset);
  254. begin
  255. DeleteAllChange(ADataset);
  256. with ADataset do
  257. begin
  258. insert;
  259. fieldbyname('ID').AsInteger:=5;
  260. post;
  261. end;
  262. end;
  263. procedure TTestBufDatasetStreams.NullInsertChange(ADataset: TCustomBufDataset);
  264. begin
  265. with ADataset do
  266. begin
  267. AssertTrue(Locate('ID',11,[]));
  268. Delete; //11
  269. Delete; //12
  270. Delete; //13
  271. Delete; //14
  272. Append;
  273. FieldByName('ID').AsInteger:=11;
  274. //FieldByName('NAME').Clear;
  275. Post;
  276. AppendRecord([12,'AfterNull']);
  277. AppendRecord([13,null]);
  278. AppendRecord([14,'AfterNull']);
  279. //Append; Post;
  280. end;
  281. end;
  282. procedure TTestBufDatasetStreams.NullEditChange(ADataset: TCustomBufDataset);
  283. var i: integer;
  284. begin
  285. //depends on procedure TTestBufDatasetStreams.NullInsertChange
  286. if ADataSet is TSQLQuery then
  287. with ADataset as TSQLQuery do
  288. begin
  289. AssertTrue(Locate('ID',11,[]));
  290. for i:=11 to 14 do
  291. begin
  292. Edit;
  293. FieldByName('NAME').AsString:='TestName'+inttostr(i);
  294. Post;
  295. Next;
  296. end;
  297. UpdateMode:=upWhereAll; //test when also null fields will be in where
  298. end;
  299. end;
  300. procedure TTestBufDatasetStreams.AppendDeleteChange(ADataset: TCustomBufDataset);
  301. begin
  302. // Tests bugs #19593, #21994
  303. with ADataset do
  304. begin
  305. AppendRecord([16,'TestName16']);
  306. AppendRecord([17,'TestName17']);
  307. Prior;
  308. Prior;
  309. Delete; // 15 update-buffer of deleted record is linked to 16
  310. Delete; // 16 inserted-deleted and linked by 15
  311. AppendRecord([18,'TestName18']); // again append after delete
  312. end;
  313. end;
  314. procedure TTestBufDatasetStreams.TestSimpleEditCancelUpd;
  315. begin
  316. TestChangesCancelUpdates(@SimpleEditChange);
  317. end;
  318. procedure TTestBufDatasetStreams.TestSimpleDeleteCancelUpd;
  319. begin
  320. TestChangesCancelUpdates(@SimpleDeleteChange);
  321. end;
  322. procedure TTestBufDatasetStreams.TestMoreDeletesCancelUpd;
  323. begin
  324. TestChangesCancelUpdates(@MoreDeletesChange);
  325. end;
  326. procedure TTestBufDatasetStreams.TestSimpleInsertCancelUpd;
  327. begin
  328. TestChangesCancelUpdates(@SimpleInsertChange);
  329. end;
  330. procedure TTestBufDatasetStreams.MoreInsertsCancelUpd;
  331. begin
  332. TestChangesCancelUpdates(@MoreInsertsChange);
  333. end;
  334. procedure TTestBufDatasetStreams.SeveralEditsCancelUpd;
  335. begin
  336. TestChangesCancelUpdates(@SeveralEditsChange);
  337. end;
  338. procedure TTestBufDatasetStreams.DeleteAllCancelUpd;
  339. begin
  340. TestChangesCancelUpdates(@DeleteAllChange);
  341. end;
  342. procedure TTestBufDatasetStreams.DeleteAllInsertCancelUpd;
  343. begin
  344. TestChangesCancelUpdates(@DeleteAllInsertChange);
  345. end;
  346. procedure TTestBufDatasetStreams.AppendDeleteCancelUpd;
  347. begin
  348. TestChangesCancelUpdates(@AppendDeleteChange);
  349. end;
  350. procedure TTestBufDatasetStreams.TestBasicsXML;
  351. var SaveDs: TCustomBufDataset;
  352. LoadDs: TCustomBufDataset;
  353. begin
  354. SaveDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  355. SaveDs.Open;
  356. SaveDs.SaveToFile('Basics.xml',dfXML);
  357. LoadDs := TCustomBufDataset.Create(nil);
  358. LoadDs.LoadFromFile('Basics.xml');
  359. CompareDatasets(SaveDs,LoadDs);
  360. LoadDs.Free;
  361. end;
  362. procedure TTestBufDatasetStreams.TestSimpleEditXML;
  363. begin
  364. TestChangesXML(@SimpleEditChange);
  365. end;
  366. procedure TTestBufDatasetStreams.TestSimpleDeleteXML;
  367. begin
  368. TestChangesXML(@SimpleDeleteChange);
  369. end;
  370. procedure TTestBufDatasetStreams.TestMoreDeletesXML;
  371. begin
  372. TestChangesXML(@MoreDeletesChange);
  373. end;
  374. procedure TTestBufDatasetStreams.TestSimpleInsertXML;
  375. begin
  376. TestChangesXML(@SimpleInsertChange);
  377. end;
  378. procedure TTestBufDatasetStreams.TestMoreInsertsXML;
  379. begin
  380. TestChangesXML(@MoreInsertsChange);
  381. end;
  382. procedure TTestBufDatasetStreams.TestSeveralEditsXML;
  383. begin
  384. TestChangesXML(@SeveralEditsChange);
  385. end;
  386. procedure TTestBufDatasetStreams.TestDeleteAllXML;
  387. begin
  388. TestChangesXML(@DeleteAllChange);
  389. end;
  390. procedure TTestBufDatasetStreams.TestDeleteAllInsertXML;
  391. begin
  392. TestChangesXML(@DeleteAllInsertChange);
  393. end;
  394. procedure TTestBufDatasetStreams.TestStreamingBlobFieldsXML;
  395. var SaveDs: TCustomBufDataset;
  396. LoadDs: TCustomBufDataset;
  397. begin
  398. SaveDs := DBConnector.GetFieldDataset as TCustomBufDataset;
  399. SaveDs.Open;
  400. SaveDs.SaveToFile(TestXMLFileName,dfXML);
  401. LoadDs := TCustomBufDataset.Create(nil);
  402. LoadDs.LoadFromFile(TestXMLFileName);
  403. LoadDS.First;
  404. SaveDS.First;
  405. while not LoadDS.EOF do
  406. begin
  407. AssertEquals(LoadDS.FieldByName('FBLOB').AsString,SaveDS.FieldByName('FBLOB').AsString);
  408. AssertEquals(LoadDS.FieldByName('FMEMO').AsString,SaveDS.FieldByName('FMEMO').AsString);
  409. LoadDS.Next;
  410. SaveDS.Next;
  411. end;
  412. LoadDs.Free;
  413. end;
  414. procedure TTestBufDatasetStreams.TestStreamingBigBlobFieldsXML;
  415. var
  416. SaveDs: TCustomBufDataset;
  417. LoadDs: TCustomBufDataset;
  418. j: integer;
  419. i: byte;
  420. s: string;
  421. f: file of byte;
  422. fn: string;
  423. fs: TMemoryStream;
  424. begin
  425. // Create a temp. file with blob-data.
  426. fn := GetTempFileName;
  427. assign(f,fn);
  428. Rewrite(f);
  429. s := 'This is a blob-field test file.';
  430. for j := 0 to 250 do
  431. begin
  432. for i := 1 to length(s) do
  433. write(f,ord(s[i]));
  434. for i := 0 to 255 do
  435. write(f,i);
  436. end;
  437. close(f);
  438. try
  439. // Open dataset and set blob-field-data to content of blob-file.
  440. SaveDs := DBConnector.GetFieldDataset(true) as TCustomBufDataset;
  441. SaveDs.Open;
  442. SaveDs.Edit;
  443. TBlobField(SaveDs.FieldByName('FBLOB')).LoadFromFile(fn);
  444. SaveDs.Post;
  445. // Save this dataset to file.
  446. SaveDs.SaveToFile(TestXMLFileName,dfXML);
  447. // Load this file in another dataset
  448. LoadDs := TCustomBufDataset.Create(nil);
  449. try
  450. LoadDs.LoadFromFile(TestXMLFileName);
  451. LoadDS.First;
  452. // Compare the content of the blob-field with the file on disc
  453. fs := TMemoryStream.Create;
  454. try
  455. TBlobField(SaveDs.FieldByName('FBLOB')).SaveToStream(fs);
  456. fs.Seek(0,soBeginning);
  457. assign(f,fn);
  458. reset(f);
  459. for j := 0 to fs.Size-1 do
  460. begin
  461. read(f,i);
  462. CheckEquals(i,fs.ReadByte);
  463. end;
  464. finally
  465. fs.free;
  466. end;
  467. finally
  468. LoadDs.Free;
  469. end;
  470. finally
  471. DeleteFile(fn);
  472. end;
  473. end;
  474. procedure TTestBufDatasetStreams.TestStreamingCalculatedFieldsXML;
  475. var
  476. ADataset: TCustomBufDataset;
  477. f: tfield;
  478. begin
  479. ADataset := DBConnector.GetNDataset(true,10) as TCustomBufDataset;
  480. f := TIntegerField.Create(ADataset);
  481. f.FieldName:='ID';
  482. f.dataset := ADataset;
  483. f := TIntegerField.Create(ADataset);
  484. f.FieldName:='CalcID';
  485. f.dataset := ADataset;
  486. f.FieldKind:=fkCalculated;
  487. f := TStringField.Create(ADataset);
  488. f.FieldName:='NAME';
  489. f.dataset := ADataset;
  490. ADataset.Open;
  491. ADataset.SaveToFile(TestXMLFileName,dfXML);
  492. ADataset.Close;
  493. ADataset.LoadFromFile(TestXMLFileName,dfXML);
  494. AssertEquals(1, ADataset.FieldByName('ID').AsInteger);
  495. AssertEquals('TestName1', ADataset.FieldByName('NAME').AsString);
  496. ADataset.Close;
  497. end;
  498. procedure TTestBufDatasetStreams.TestAppendDeleteBIN;
  499. begin
  500. TestChanges(@AppendDeleteChange);
  501. end;
  502. procedure TTestBufDatasetStreams.TestFileNameProperty;
  503. var ds : TDataset;
  504. LoadDs: TDataset;
  505. begin
  506. ds := DBConnector.GetNDataset(true,5);
  507. ds.open;
  508. TCustomBufDataset(ds).FileName:=TestBINFileName;
  509. ds.close;
  510. LoadDs := DBConnector.GetNDataset(True,2);
  511. TCustomBufDataset(LoadDs).FileName:=TestBINFileName;
  512. LoadDs.Open;
  513. ds := DBConnector.GetNDataset(true,4);
  514. ds.Open;
  515. CompareDatasets(ds,LoadDs);
  516. ds.close;
  517. LoadDs.close;
  518. end;
  519. procedure TTestBufDatasetStreams.TestXmlFileRecognition;
  520. var ds : TDataset;
  521. LoadDs: TDataset;
  522. begin
  523. ds := DBConnector.GetNDataset(true,5);
  524. ds.open;
  525. TCustomBufDataset(ds).SaveToFile(TestXMLFileName,dfXML);
  526. ds.close;
  527. LoadDs := DBConnector.GetNDataset(True,2);
  528. TCustomBufDataset(LoadDs).FileName:=TestXMLFileName;
  529. LoadDs.Open;
  530. ds := DBConnector.GetNDataset(true,4);
  531. ds.Open;
  532. CompareDatasets(ds,LoadDs);
  533. ds.close;
  534. LoadDs.close;
  535. end;
  536. procedure TTestBufDatasetStreams.TestCloseDatasetNoConnection;
  537. var SaveDs: TCustomBufDataset;
  538. LoadDs: TCustomBufDataset;
  539. Conn: TSQLConnection;
  540. begin
  541. SaveDs := DBConnector.GetNDataset(true,15) as TSQLQuery;
  542. SaveDs.Open;
  543. SaveDs.SaveToFile(TestXMLFileName,dfXML);
  544. SaveDs.Close;
  545. Conn := TSQLConnectionClass(TSQLDBConnector(DBConnector).Connection.ClassType).Create(nil);
  546. LoadDs := TSQLQuery.Create(nil);
  547. LoadDs.DataBase:=Conn;
  548. LoadDs.LoadFromFile(TestXMLFileName);
  549. LoadDs.Next;
  550. LoadDs.Close;
  551. LoadDs.Free;
  552. Conn.Free;
  553. end;
  554. procedure TTestBufDatasetStreams.TestSimpleEditApplUpd;
  555. begin
  556. TestChangesApplyUpdates(@SimpleEditChange);
  557. end;
  558. procedure TTestBufDatasetStreams.TestSimpleDeleteApplUpd;
  559. begin
  560. TestChangesApplyUpdates(@SimpleDeleteChange);
  561. end;
  562. procedure TTestBufDatasetStreams.TestMoreDeletesApplUpd;
  563. begin
  564. TestChangesApplyUpdates(@MoreDeletesChange);
  565. end;
  566. procedure TTestBufDatasetStreams.TestSimpleInsertApplUpd;
  567. begin
  568. TestChangesApplyUpdates(@SimpleInsertChange,True);
  569. end;
  570. procedure TTestBufDatasetStreams.MoreInsertsApplUpd;
  571. begin
  572. TestChangesApplyUpdates(@MoreInsertsChange,True);
  573. end;
  574. procedure TTestBufDatasetStreams.SeveralEditsApplUpd;
  575. begin
  576. TestChangesApplyUpdates(@SeveralEditsChange, True);
  577. end;
  578. procedure TTestBufDatasetStreams.DeleteAllApplUpd;
  579. begin
  580. TestChangesApplyUpdates(@DeleteAllChange, False);
  581. end;
  582. procedure TTestBufDatasetStreams.DeleteAllInsertApplUpd;
  583. begin
  584. TestChangesApplyUpdates(@DeleteAllInsertChange, False);
  585. end;
  586. procedure TTestBufDatasetStreams.NullInsertUpdateApplUpd;
  587. begin
  588. TestChangesApplyUpdates(@NullInsertChange, True);
  589. TestChangesApplyUpdates(@NullEditChange, True);
  590. end;
  591. procedure TTestBufDatasetStreams.SetUp;
  592. begin
  593. DBConnector.StartTest;
  594. end;
  595. procedure TTestBufDatasetStreams.TearDown;
  596. begin
  597. DBConnector.StopTest;
  598. end;
  599. initialization
  600. if uppercase(dbconnectorname)='SQL' then
  601. RegisterTestDecorator(TDBBasicsTestSetup, TTestBufDatasetStreams);
  602. end.