From e45c7c33251ea5c9075ca4ab4b44ca49867b5b6e Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Wed, 16 Jul 2008 22:22:16 +0000 Subject: [PATCH] Make datasize in LIMIT calculation configurable via preferences (defaults to 5M). Remove rounding to next 1000 in GetCalculatedLimit to avoid overriding low datasize preference. --- components/heidisql/include/const.inc | 9 +++---- source/childwin.pas | 19 +++++++------ source/options.dfm | 39 ++++++++++++++++++++++----- source/options.pas | 6 +++++ 4 files changed, 52 insertions(+), 21 deletions(-) diff --git a/components/heidisql/include/const.inc b/components/heidisql/include/const.inc index 5d266eaa..a978df2d 100644 --- a/components/heidisql/include/const.inc +++ b/components/heidisql/include/const.inc @@ -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; diff --git a/source/childwin.pas b/source/childwin.pas index 1c18061b..dbb78863 100644 --- a/source/childwin.pas +++ b/source/childwin.pas @@ -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; diff --git a/source/options.dfm b/source/options.dfm index 27d2a82a..9d62cf65 100644 --- a/source/options.dfm +++ b/source/options.dfm @@ -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 diff --git a/source/options.pas b/source/options.pas index dfade0c8..376af479 100644 --- a/source/options.pas +++ b/source/options.pas @@ -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);