anchor.diff:        TableLevel := 7;
         Exclusive := True;
         TableName := 'projects.dbf';
  -      Log('TDbfIndexedStorage projects add columns');
  +      Log('projects add columns');
         with FieldDefs do begin
           Add('project_id', ftAutoInc, 0, True);
           Add('title', ftString, 100, True);
  +        Add('path', ftString, 255, True);
           Add('solution_id', ftInteger, 0, True);
         end;
  -      Log('TDbfIndexedStorage projects write to disk');
  +      Log('projects write to disk');
         CreateTable;
         Open;
  -      Log('TDbfIndexedStorage projects index');
  +      Log('projects index');
         AddIndex('ix_p_pid', 'project_id', [ixPrimary, ixUnique]);
         AddIndex('ix_p_title', 'title', [ixCaseInsensitive, ixUnique]);
  +      AddIndex('ix_p_path', 'path', [ixCaseInsensitive, ixUnique]);
         AddIndex('ix_ps_sid', 'solution_id', []);
       finally
  -      Log('TDbfIndexedStorage close table projects');
  +      Log('close table projects');
         Close;
       end;
     end;
  
positive.code:       TableLevel := 7;
        Exclusive := True;
        TableName := 'solutions.dbf';
        Log('TDbfIndexedStorage solutions add columns');
        with FieldDefs do begin
          Add('solution_id', ftAutoInc, 0, True);
          Add('title', ftString, 100, True);
        end;
        Log('TDbfIndexedStorage solutions write to disk');
        CreateTable;
        Open;
        Log('TDbfIndexedStorage solutions index');
        AddIndex('ix_s_sid', 'solution_id', [ixPrimary, ixUnique]);
        AddIndex('ix_s_title', 'title', [ixCaseInsensitive, ixUnique]);
      finally
        Log('TDbfIndexedStorage close table solutions');
        Close;
      end;
    end;
  
negative.code: 
  procedure TDbfIndexedStorage.CreateTables(path: String);
  begin
    Log('create tables');
    ForceDirectories(path);
    Log('create table solutions');
    CreateSolutionsTable(path);
    Log('create table projects');
    CreateProjectsTable(path);
    Log('create table files');
    CreateFilesTable(path);
    Log('create tables done');
  end;
  
  function TDbfIndexedStorage.AppendSolution(title: String): Integer;
  begin
    Log('append solution ' + title);
    with _solutionsTable do begin
      AppendRecord([nil, title]);
      Result := FieldValues['solution_id'];
    end;
  end;
  
  function TDbfIndexedStorage.AppendProject(
    title: String;
    path: String;
    solutionId: Integer): Integer;
  begin
    Log('append project ' + title);
    with _projectsTable do begin
      AppendRecord([nil, title, path, solutionId]);
      Result := FieldValues['project_id'];
    end;
  end;
  
  function TDbfIndexedStorage.AppendFile(
    title: String;
    path: String;
    solutionId: Integer;
    projectId: Integer): Integer;
  begin
    Log('append file ' + title);
    with _projectsTable do begin
      AppendRecord([nil, title, path, solutionId, projectId]);
      Result := FieldValues['file_id'];
    end;
  end;
  
  procedure TDbfIndexedStorage.CreateSolutionsTable(path: String);
  