mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 14:19:31 +02:00
142 lines
3.4 KiB
ObjectPascal
142 lines
3.4 KiB
ObjectPascal
unit TestSpecificTSqlite3Dataset;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, ToolsUnit, Sqlite3DS;
|
|
|
|
type
|
|
|
|
{ TTestSpecificTSqlite3Dataset }
|
|
|
|
TTestSpecificTSqlite3Dataset = class(TDBBasicsTestCase)
|
|
private
|
|
function CreateMemoryDataset: TSqlite3Dataset;
|
|
protected
|
|
published
|
|
procedure TestApplyUpdates;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
testregistry;
|
|
|
|
|
|
{ TTestSpecificTSqlite3Dataset }
|
|
|
|
function TTestSpecificTSqlite3Dataset.CreateMemoryDataset: TSqlite3Dataset;
|
|
begin
|
|
Result := TSqlite3Dataset.Create(nil);
|
|
Result.FileName := ':memory:';
|
|
Result.TableName := 'Test';
|
|
Result.PrimaryKey := 'Id';
|
|
Result.ExecSQL('Create Table Test (Id INTEGER PRIMARY KEY, Name VARCHAR);');
|
|
end;
|
|
|
|
procedure TTestSpecificTSqlite3Dataset.TestApplyUpdates;
|
|
var
|
|
Dataset: TSqlite3Dataset;
|
|
ExceptionRaised: Boolean;
|
|
begin
|
|
Dataset := CreateMemoryDataset;
|
|
try
|
|
// insert
|
|
Dataset.Open;
|
|
CheckEquals(0, Dataset.RecordCount, 'Dataset should be empty');
|
|
Dataset.Append;
|
|
Dataset.FieldByName('Name').AsString := 'Luiz';
|
|
Dataset.Post;
|
|
Dataset.ApplyUpdates;
|
|
Dataset.Close;
|
|
Dataset.Open;
|
|
CheckEquals(1, Dataset.RecordCount, 'Record count should increase after apply insert updates');
|
|
CheckEquals('Luiz', Dataset.FieldByName('Name').AsString, 'Record field should be set');
|
|
// update
|
|
Dataset.Edit;
|
|
Dataset.FieldByName('Name').AsString := 'New';
|
|
Dataset.Post;
|
|
Dataset.ApplyUpdates;
|
|
Dataset.Close;
|
|
Dataset.Open;
|
|
CheckEquals(1, Dataset.RecordCount, 'Record count should not change after apply update updates');
|
|
CheckEquals('New', Dataset.FieldByName('Name').AsString, 'Record field should be updated');
|
|
//delete
|
|
Dataset.Delete;
|
|
Dataset.ApplyUpdates;
|
|
Dataset.Close;
|
|
Dataset.Open;
|
|
CheckEquals(0, Dataset.RecordCount, 'Record count should decrease after apply delete updates');
|
|
finally
|
|
Dataset.Destroy;
|
|
end;
|
|
|
|
Dataset := CreateMemoryDataset;
|
|
try
|
|
Dataset.Open;
|
|
CheckEquals(0, Dataset.RecordCount, 'Dataset should be empty');
|
|
Dataset.Append;
|
|
Dataset.FieldByName('Name').AsString := 'Luiz';
|
|
Dataset.Post;
|
|
Dataset.TableName := 'NonExistentTable';
|
|
ExceptionRaised := False;
|
|
try
|
|
Dataset.ApplyUpdates;
|
|
except
|
|
ExceptionRaised := True;
|
|
end;
|
|
CheckTrue(ExceptionRaised, 'An exception should be raised if TableName is invalid');
|
|
finally
|
|
Dataset.Destroy;
|
|
end;
|
|
|
|
Dataset := CreateMemoryDataset;
|
|
try
|
|
Dataset.Open;
|
|
Dataset.Append;
|
|
Dataset.FieldByName('Name').AsString := 'Luiz';
|
|
Dataset.Post;
|
|
Dataset.ApplyUpdates;
|
|
|
|
Dataset.Close;
|
|
Dataset.PrimaryKey := '';
|
|
Dataset.Open;
|
|
Dataset.Edit;
|
|
Dataset.FieldByName('Name').AsString := 'New';
|
|
Dataset.Post;
|
|
ExceptionRaised := False;
|
|
try
|
|
Dataset.ApplyUpdates;
|
|
except
|
|
ExceptionRaised := True;
|
|
end;
|
|
CheckTrue(ExceptionRaised, 'An exception should be raised if PrimaryKey is empty');
|
|
|
|
Dataset.Close;
|
|
Dataset.PrimaryKey := 'NonExistingKey';
|
|
Dataset.Open;
|
|
Dataset.Edit;
|
|
Dataset.FieldByName('Name').AsString := 'New';
|
|
Dataset.Post;
|
|
ExceptionRaised := False;
|
|
try
|
|
Dataset.ApplyUpdates;
|
|
except
|
|
ExceptionRaised := True;
|
|
end;
|
|
CheckTrue(ExceptionRaised, 'An exception should be raised if PrimaryKey is invalid');
|
|
finally
|
|
Dataset.Destroy;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
|
|
if UpperCase(dbconnectorname) = 'SQLITE3DS' then
|
|
RegisterTestDecorator(TDBBasicsTestSetup, TTestSpecificTSqlite3Dataset);
|
|
|
|
end.
|
|
|