summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/fcl-db/tests/sdfdstoolsunit.pas
blob: 6632a4621eccbf8502a6a373ee5af18fde1c9d0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
unit SdfDSToolsUnit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, toolsunit,
  db,
  SdfData;

type

  { TSdfDSDBConnector }

  TSdfDSDBConnector = class(TDBConnector)
    procedure SetNDatasetSchema(Schema : TStringList);
    procedure SetFieldDatasetSchema(Schema : TStringList);
  protected
    procedure CreateNDatasets; override;
    procedure CreateFieldDataset; override;
    procedure DropNDatasets; override;
    procedure DropFieldDataset; override;
    Function InternalGetNDataset(n : integer) : TDataset; override;
    Function InternalGetFieldDataset : TDataSet; override;
  end;

implementation

{ TSdfDSDBConnector }

procedure TSdfDSDBConnector.SetNDatasetSchema(Schema: TStringList);
begin
  Schema.Clear;
  Schema.Add('ID=5');
  Schema.Add('NAME=50');
end;

procedure TSdfDSDBConnector.SetFieldDatasetSchema(Schema: TStringList);
begin
  Schema.Clear;
  Schema.Add('ID=5');
  Schema.Add('FSTRING=10');
end;

procedure TSdfDSDBConnector.CreateNDatasets;
var countID,n : integer;
begin
  if dbname='' then raise Exception.Create('dbname variable not specified. You must specify name= in database.ini');
  for n := 0 to MaxDataSet do
    begin
    with TSdfDataSet.Create(nil) do
      begin
      FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
      // Make sure the directory exists so we can write
      ForceDirectories(dbname);
      DeleteFile(FileName);
      FileMustExist:=False;
      
      SetNDatasetSchema(Schema);

      Open;
      if n > 0 then for countId := 1 to n do
        begin
        Append;
        FieldByName('ID').AsInteger := countID;
        FieldByName('NAME').AsString := 'TestName'+inttostr(countID);
        // Explicitly call .post, since there could be a bug which disturbs
        // the automatic call to post. (example: when TDataset.DataEvent doesn't
        // work properly)
        Post;
        end;
      if state = dsinsert then
        Post;
      Close;
      Free;
      end;
    end;
end;

procedure TSdfDSDBConnector.CreateFieldDataset;
var i : integer;
begin
  if dbname='' then raise Exception.Create('dbname variable not specified. You must specify name= in database.ini');
  with TSdfDataSet.Create(nil) do
    begin
    FileName := dbname+PathDelim+'fpdev_field.dat';
      DeleteFile(FileName);
    // Make sure the directory exists so we can write
    ForceDirectories(dbname);
    FileMustExist:=False;
    
    SetFieldDatasetSchema(Schema);

    Open;
    for i := 0 to testValuesCount-1 do
      begin
      Append;
      FieldByName('ID').AsInteger := i;
      FieldByName('FSTRING').AsString := testStringValues[i];
      Post;
      end;
    Close;
    end;
end;

procedure TSdfDSDBConnector.DropNDatasets;
var n : integer;
begin
  for n := 0 to MaxDataSet do
    DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_'+inttostr(n)+'.dat');
end;

procedure TSdfDSDBConnector.DropFieldDataset;
begin
  DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_field.dat');
end;

function TSdfDSDBConnector.InternalGetNDataset(n: integer): TDataset;
begin
  Result := TSdfDataSet.Create(nil);
  with (result as TSdfDataSet) do
    begin
    FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
    SetNDatasetSchema(Schema);
    end;
end;

function TSdfDSDBConnector.InternalGetFieldDataset : TDataSet;
begin
  Result := TSdfDataSet.Create(nil);
  with (result as TSdfDataSet) do
    begin
    FileName := dbname+PathDelim+'fpdev_field.dat';
    SetFieldDatasetSchema(Schema);
    end;
end;

initialization
  RegisterClass(TSdfDSDBConnector);
end.