--- oup/current/Helper/LevelDB.pas 2007/03/28 01:20:26 131 +++ oup/current/Helper/LevelDB.pas 2007/03/30 00:00:10 137 @@ -65,11 +65,8 @@ var Stream_Body, Stream_Names: TMemoryStream; Stream_Dat, Stream_Raw, Stream_Sep: TFileStream; -// Data, rawdata: Tdata; BeginTime, FileTime: Double; Step: Integer; -// rawlist: TRawDataList; -// datlinks: TDatLinks; OniImage: TOniImage; LevelID: Integer; TimeFormat: TFormatSettings; @@ -90,6 +87,12 @@ var RawLinks: TRawDataList; DatFileStream, RawFileStream: TMemoryStream; + +// ########################### + datsum, linksum, rawsum: Int64; + freq: Int64; + tempticks1, tempticks2: Int64; +// ########################### const Steps: Byte = 3; @@ -280,6 +283,11 @@ begin lbl_estimation.Caption := 'Estimated finishing time: unknown'; Application.ProcessMessages; + QueryPerformanceFrequency(freq); + datsum := 0; + linksum := 0; + rawsum := 0; + FileTime := Time; for FileID := 0 to DatHeader.Files - 1 do begin @@ -288,12 +296,19 @@ begin FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j]; if FileInfo.Size > 0 then begin + QueryPerformanceCounter(tempticks1); + FilesHeader[FileID].DataAddr := Stream_Body.Size + 8; DatFileStream := TMemoryStream.Create; Connection.LoadDatFile(FileID, TStream(DatFileStream)); - DatFileStream.Seek(4, soFromBeginning); + DatFileStream.Seek(0, soFromBeginning); + tempi := FileID * 256 + 1; + DatFileStream.Write(tempi, 4); DatFileStream.Write(LevelID, 4); + QueryPerformanceCounter(tempticks2); + datsum := datsum + (tempticks2 - tempticks1); + DatLinks := Connection.GetDatLinks(FileID); if Length(DatLinks) > 0 then begin @@ -308,6 +323,9 @@ begin end; end; + QueryPerformanceCounter(tempticks1); + linksum := linksum + (tempticks1 - tempticks2); + RawLinks := Connection.GetRawList(FileID); if Length(RawLinks) > 0 then begin @@ -334,19 +352,22 @@ begin end; DatFileStream.Seek(0, soFromBeginning); Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size); + + QueryPerformanceCounter(tempticks2); + rawsum := rawsum + (tempticks2 - tempticks1); end else - FilesHeader[i].DataAddr := 0; + FilesHeader[FileID].DataAddr := 0; if Length(fileinfo.Name) > 0 then begin - FilesHeader[i].NameAddr := Stream_Names.Size; + FilesHeader[FileID].NameAddr := Stream_Names.Size; temps := fileinfo.Extension + fileinfo.Name + Chr(0); Stream_Names.Write(temps[1], Length(temps)); end else - FilesHeader[i].NameAddr := 0; - FilesHeader[i].FileSize := fileinfo.Size; - FilesHeader[i].FileType := fileinfo.FileType; + FilesHeader[FileID].NameAddr := 0; + FilesHeader[FileID].FileSize := fileinfo.Size; + FilesHeader[FileID].FileType := fileinfo.FileType; if ((FileID mod 10) = 0) and (FileID >= 100) then lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr( @@ -356,6 +377,11 @@ begin Application.ProcessMessages; end; + ShowMessage('AvgDats: ' + FloatToStr((datsum / progress.Max) / freq) + #13#10 + + 'AvgLinks: ' + FloatToStr((linksum / progress.Max) / freq) + #13#10 + + 'AvgRaws: ' + FloatToStr((rawsum / progress.Max) / freq) + ); + Stream_Dat.Write(DatHeader, SizeOf(DatHeader)); for i := 0 to High(FilesHeader) do Stream_Dat.Write(FilesHeader[i], SizeOf(FilesHeader[i])); @@ -367,6 +393,7 @@ begin DatHeader.DataSize := Stream_Body.Size; DatHeader.NamesSize := Stream_Names.Size; DatHeader.DataAddr := Stream_Dat.Size; + Stream_Body.Seek(0, soFromBeginning); Stream_Dat.CopyFrom(Stream_Body, Stream_Body.Size); DatHeader.NamesAddr := Stream_Dat.Size; @@ -422,6 +449,8 @@ begin procedure TForm_LevelDB.CreateDatabase(Source, target: String); +var + DataBase: TABSDatabase; { var DataBase: TABSDatabase; @@ -483,6 +512,11 @@ begin absolutebegintime := Time; DataBase := TABSDatabase.Create(Self); +} + DataBase.MaxConnections := 1; + DataBase.PageSize := 8112; + DataBase.PageCountInExtent := 8; +{ DataBase.DatabaseName := 'OLDB'; DataBase.DatabaseFileName := target; DataBase.CreateDatabase; @@ -496,22 +530,30 @@ begin Query := TABSQuery.Create(Self); Query.DatabaseName := 'OLDB'; Query.SQL.Text := - 'CREATE TABLE globals ( id AUTOINC PRIMARY KEY, name STRING(128), value STRING(128) );'; + 'CREATE TABLE globals ( id AUTOINC PRIMARY KEY, name STRING(128), ' + + 'value STRING(128) );'; Query.ExecSQL; Query.SQL.Text := - 'CREATE TABLE linkmap ( id AUTOINC PRIMARY KEY, src_id INTEGER, src_link_offset INTEGER, target_id INTEGER );'; + 'CREATE TABLE linkmap ( id AUTOINC PRIMARY KEY, src_id INTEGER, ' + + 'src_link_offset INTEGER, target_id INTEGER, INDEX idsrcid src_id, ' + + 'INDEX iddestid target_id);'; Query.ExecSQL; Query.SQL.Text := - 'CREATE TABLE rawmap ( id AUTOINC PRIMARY KEY, src_id INTEGER, src_link_offset INTEGER, sep BOOLEAN, size INTEGER, data BLOB BlobCompressionMode 9 BlobBlockSize 1024 BlobCompressionAlgorithm ZLib );'; + 'CREATE TABLE rawmap ( id AUTOINC PRIMARY KEY, src_id INTEGER, ' + + 'src_link_offset INTEGER, sep BOOLEAN, size INTEGER, ' + + 'data BLOB BlobCompressionMode 9 BlobBlockSize 1024 BlobCompressionAlgorithm ZLib, ' + + 'INDEX idsrcid src_id);'; // Query.SQL.Text:='CREATE TABLE rawmap ( id AUTOINC PRIMARY KEY, src_id INTEGER, src_link_offset INTEGER, size INTEGER, data BLOB BlobCompressionAlgorithm None );'; Query.ExecSQL; Query.SQL.Text := - 'CREATE TABLE datfiles ( id INTEGER PRIMARY KEY, extension CHAR(4), name STRING(128), contenttype INTEGER, size INTEGER, data BLOB BlobCompressionMode 9 BlobBlockSize 1024 BlobCompressionAlgorithm ZLib );'; + 'CREATE TABLE datfiles ( id INTEGER PRIMARY KEY, extension CHAR(4), ' + + 'name STRING(128), contenttype INTEGER, size INTEGER, ' + + 'data BLOB BlobCompressionMode 9 BlobBlockSize 1024 BlobCompressionAlgorithm ZLib );'; // Query.SQL.Text:='CREATE TABLE datfiles ( id INTEGER PRIMARY KEY, extension CHAR(4), name STRING(128), contenttype INTEGER, size INTEGER, data BLOB BlobCompressionAlgorithm None );'; Query.ExecSQL; - Query.SQL.Text := - 'CREATE TABLE extlist ( id AUTOINC PRIMARY KEY, ext CHAR(4), ident CHAR(16) );'; - Query.ExecSQL; +// Query.SQL.Text := +// 'CREATE TABLE extlist ( id AUTOINC PRIMARY KEY, ext CHAR(4), ident CHAR(16) );'; +// Query.ExecSQL; Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("dbversion","' + dbversion + '");'; @@ -520,8 +562,8 @@ begin for i := 0 to High(OniDataConnection.LevelInfo.Ident) do Data[i] := OniDataConnection.LevelInfo.Ident[i]; temps := CreateHexString(Data, True); - Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("ident","' + temps + '");'; - Query.ExecSQL; +// Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("ident","' + temps + '");'; +// Query.ExecSQL; Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("lvl","' + IntToStr(OniDataConnection.LevelInfo.LevelNumber) + '");'; Query.ExecSQL;