Make datasize in LIMIT calculation configurable via preferences (defaults to 5M). Remove rounding to next 1000 in GetCalculatedLimit to avoid overriding low datasize preference.

This commit is contained in:
Ansgar Becker
2008-07-16 22:22:16 +00:00
parent 2d12725550
commit e45c7c3325
4 changed files with 52 additions and 21 deletions

View File

@ -56,6 +56,10 @@ const
DEFAULT_DATALIMITSTART = 0;
REGNAME_DATALIMITEND = 'DataLimitEnd';
DEFAULT_DATALIMITEND = 5000;
// how much memory we're aiming to use for the
// data grid and it's automatic limit function
REGNAME_LOADSIZE = 'DataLoadSize';
DEFAULT_LOADSIZE = 5*1024*1024;
REGNAME_LOGSQLNUM = 'logsqlnum';
DEFAULT_LOGSQLNUM = 300;
REGNAME_LOGSQLWIDTH = 'logsqlwidth';
@ -180,11 +184,6 @@ const
REGPREFIX_WHERECLAUSE = 'WHERECLAUSE_';
REGPREFIX_ORDERCLAUSE = 'ORDERCLAUSE_';
// how much memory we're aiming to use for the
// data grid and it's automatic limit function
// this value should probably be user configurable
LOAD_SIZE = 5*1024*1024;
// Various iconindexes
ICONINDEX_PRIMARYKEY = 25;
ICONINDEX_FIELD = 42;

View File

@ -520,7 +520,8 @@ type
prefConvertHTMLEntities : Boolean;
prefLogsqlnum,
prefLogSqlWidth,
prefDefaultColWidth : Integer;
prefDefaultColWidth,
prefLoadSize : Integer;
prefCSVSeparator,
prefCSVEncloser,
prefCSVTerminator : String[10];
@ -883,6 +884,7 @@ begin
prefCSVTerminator := Mainform.GetRegValue(REGNAME_CSV_TERMINATOR, DEFAULT_CSV_TERMINATOR);
prefRememberFilters := Mainform.GetRegValue(REGNAME_REMEMBERFILTERS, DEFAULT_REMEMBERFILTERS);
prefPreferShowTables := Mainform.GetRegValue(REGNAME_PREFER_SHOWTABLES, DEFAULT_PREFER_SHOWTABLES);
prefLoadSize := Mainform.GetRegValue(REGNAME_LOADSIZE, DEFAULT_LOADSIZE);
// SQL-Font:
fontname := Mainform.GetRegValue(REGNAME_FONTNAME, DEFAULT_FONTNAME);
@ -1198,8 +1200,8 @@ begin
mainform.CheckBoxLimit.Checked := true;
tmpLimitStart := MakeInt(mainform.EditLimitStart.Text);
tmpLimitEnd := MakeInt(mainform.EditLimitEnd.Text);
if (tmpLimitEnd - tmpLimitStart) > limit then
mainform.EditLimitEnd.Text := IntToStr( tmpLimitStart + limit );
if tmpLimitEnd > limit then
mainform.EditLimitEnd.Text := IntToStr(limit);
end;
mainform.Repaint;
end;
@ -3357,9 +3359,9 @@ var
msgtext : String;
begin
// Ask for action when loading a big file
if FileExists(filename) and (_GetFileSize( filename ) > LOAD_SIZE) then
if FileExists(filename) and (_GetFileSize( filename ) > 5*SIZE_MB) then
begin
msgtext := 'The file you are about to load is bigger than '+FormatByteNumber(LOAD_SIZE, 0)+'.' + CRLF + CRLF +
msgtext := 'The file you are about to load is bigger than '+FormatByteNumber(5*SIZE_MB, 0)+'.' + CRLF + CRLF +
'Do you want to just run the file to avoid loading it completely into the query-editor ( = memory ) ?' + CRLF + CRLF +
'Press' + CRLF +
' [Yes] to run the file without loading it into the editor' + CRLF +
@ -4190,8 +4192,6 @@ const
ROW_SIZE_OVERHEAD : Integer = 1150;
// average row size guess for mysql server < 5.0
ROW_SIZE_GUESS: Integer = 2048;
// round to nearest value when deciding limit
ROUNDING: Integer = 1000;
begin
result := -1;
try
@ -4205,10 +4205,9 @@ begin
AvgRowSize := MakeInt( ds.FieldByName( 'Avg_row_length' ).AsString ) + ROW_SIZE_OVERHEAD;
RecordCount := MakeInt( ds.FieldByName( 'Rows' ).AsString );
end;
if AvgRowSize * RecordCount > LOAD_SIZE then
if AvgRowSize * RecordCount > prefLoadSize then
begin
result := Trunc( LOAD_SIZE / AvgRowSize );
result := (Trunc(result / ROUNDING) + 1) * ROUNDING;
result := Trunc( prefLoadSize / AvgRowSize );
if result >= RecordCount then result := -1;
end;
ds.Close;

View File

@ -440,11 +440,18 @@ object optionsform: Toptionsform
ImageIndex = 4
object Label19: TLabel
Left = 8
Top = 44
Top = 33
Width = 177
Height = 13
Caption = 'Maximum column-width in data-grids:'
end
object lblLoadSize: TLabel
Left = 8
Top = 58
Width = 196
Height = 13
Caption = 'Data size for auto calculating LIMIT [KB]:'
end
object GroupBox2: TGroupBox
Left = 0
Top = 80
@ -522,8 +529,8 @@ object optionsform: Toptionsform
end
end
object editDefaultColWidth: TEdit
Left = 188
Top = 41
Left = 219
Top = 30
Width = 42
Height = 21
TabOrder = 1
@ -531,8 +538,8 @@ object optionsform: Toptionsform
OnChange = Modified
end
object updownDefaultColWidth: TUpDown
Left = 230
Top = 41
Left = 261
Top = 30
Width = 16
Height = 21
Associate = editDefaultColWidth
@ -544,7 +551,7 @@ object optionsform: Toptionsform
end
object chkRememberFilters: TCheckBox
Left = 8
Top = 12
Top = 6
Width = 391
Height = 17
Anchors = [akLeft, akTop, akRight]
@ -554,6 +561,26 @@ object optionsform: Toptionsform
TabOrder = 0
OnClick = Modified
end
object editLoadSize: TEdit
Left = 219
Top = 55
Width = 42
Height = 21
TabOrder = 4
Text = '1'
end
object updownLoadSize: TUpDown
Left = 261
Top = 55
Width = 17
Height = 21
Associate = editLoadSize
Min = 1
Max = 32767
Position = 1
TabOrder = 5
Wrap = True
end
end
object TabSheet5: TTabSheet
BorderWidth = 5

View File

@ -92,6 +92,9 @@ type
updownUpdatecheckInterval: TUpDown;
chkPreferShowTables: TCheckBox;
chkUpdateCheckBuilds: TCheckBox;
lblLoadSize: TLabel;
editLoadSize: TEdit;
updownLoadSize: TUpDown;
procedure ButtonCancelClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Modified(Sender: TObject);
@ -173,6 +176,7 @@ begin
reg.WriteBool(REGNAME_DO_UPDATECHECK_BUILDS, chkUpdatecheckBuilds.Checked);
reg.WriteInteger(REGNAME_UPDATECHECK_INTERVAL, updownUpdatecheckInterval.Position);
reg.WriteBool(REGNAME_PREFER_SHOWTABLES, chkPreferShowTables.Checked);
reg.WriteInteger(REGNAME_LOADSIZE, updownLoadSize.Position*SIZE_KB);
// Clean registry from unwanted WHERE clauses if "Remember WHERE filters" was unchecked
if not chkRememberFilters.Checked then begin
@ -231,6 +235,7 @@ begin
cwin.prefCSVTerminator := self.Edit3.text;
cwin.prefConvertHTMLEntities := self.CheckBoxConvertHTMLEntities.Checked;
cwin.prefPreferShowTables := chkPreferShowTables.Checked;
cwin.prefLoadSize := updownLoadSize.Position * SIZE_KB;
end;
// Settings have been applied, send a signal to the user
@ -279,6 +284,7 @@ begin
updownUpdatecheckInterval.Position := Mainform.GetRegValue(REGNAME_UPDATECHECK_INTERVAL, DEFAULT_UPDATECHECK_INTERVAL);
chkUpdatecheckClick(Sender);
chkPreferShowTables.Checked := Mainform.GetRegValue(REGNAME_PREFER_SHOWTABLES, DEFAULT_PREFER_SHOWTABLES);
updownLoadSize.Position := Mainform.GetRegValue(REGNAME_LOADSIZE, DEFAULT_LOADSIZE) div SIZE_KB;
// Default Column-Width in DBGrids:
updownDefaultColWidth.Position := Mainform.GetRegValue(REGNAME_DEFAULTCOLWIDTH, DEFAULT_DEFAULTCOLWIDTH);