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; DEFAULT_DATALIMITSTART = 0;
REGNAME_DATALIMITEND = 'DataLimitEnd'; REGNAME_DATALIMITEND = 'DataLimitEnd';
DEFAULT_DATALIMITEND = 5000; 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'; REGNAME_LOGSQLNUM = 'logsqlnum';
DEFAULT_LOGSQLNUM = 300; DEFAULT_LOGSQLNUM = 300;
REGNAME_LOGSQLWIDTH = 'logsqlwidth'; REGNAME_LOGSQLWIDTH = 'logsqlwidth';
@ -180,11 +184,6 @@ const
REGPREFIX_WHERECLAUSE = 'WHERECLAUSE_'; REGPREFIX_WHERECLAUSE = 'WHERECLAUSE_';
REGPREFIX_ORDERCLAUSE = 'ORDERCLAUSE_'; 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 // Various iconindexes
ICONINDEX_PRIMARYKEY = 25; ICONINDEX_PRIMARYKEY = 25;
ICONINDEX_FIELD = 42; ICONINDEX_FIELD = 42;

View File

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

View File

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

View File

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