From 103a61dc52e88e6d95f444925eca105474dab0cc Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Wed, 22 Jan 2020 13:04:39 +0100 Subject: [PATCH] Issue #12: fix row count always -1 on SQLite, in "copy table" dialog --- source/copytable.pas | 4 ++-- source/dbconnection.pas | 9 ++++++--- source/main.pas | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/source/copytable.pas b/source/copytable.pas index dd1e5a78..ca80855e 100644 --- a/source/copytable.pas +++ b/source/copytable.pas @@ -255,7 +255,7 @@ begin nColumns: CellText := _('Columns'); nKeys: CellText := _('Indexes'); nForeignKeys: CellText := _('Foreign keys'); - nData: CellText := f_('Data (%s rows)', [FormatNumber(FDBObj.Rows)]); + nData: CellText := f_('Data (%s rows)', [FormatNumber(FDBObj.RowCount(False))]); else raise Exception.Create(_(SUnhandledNodeIndex)); end; if Node.Index <> nData then begin @@ -315,7 +315,7 @@ begin end; if ChildCount > 0 then Include(InitialStates, ivsHasChildren); - if (ChildCount = 0) or ((Node.Index = nData) and (FDBObj.Rows = 0)) then + if (ChildCount = 0) or ((Node.Index = nData) and (FDBObj.RowCount(False) = 0)) then Node.States := Node.States + [vsDisabled] else if AppSettings.ReadBool(Option) then Node.CheckState := csCheckedNormal; diff --git a/source/dbconnection.pas b/source/dbconnection.pas index 3aed15e7..15c21b8b 100644 --- a/source/dbconnection.pas +++ b/source/dbconnection.pas @@ -142,7 +142,7 @@ type function QuotedName(AlwaysQuote: Boolean=True; SeparateSegments: Boolean=True): String; function QuotedDbAndTableName(AlwaysQuote: Boolean=True): String; function QuotedColumn(AlwaysQuote: Boolean=True): String; - function RowCount: Int64; + function RowCount(Reload: Boolean): Int64; function GetCreateCode: String; overload; function GetCreateCode(RemoveAutoInc, RemoveDefiner: Boolean): String; overload; property ObjType: String read GetObjType; @@ -8384,9 +8384,12 @@ begin Result := Connection.QuoteIdent(Column, AlwaysQuote); end; -function TDBObject.RowCount: Int64; +function TDBObject.RowCount(Reload: Boolean): Int64; begin - Result := Connection.GetRowCount(Self); + if (Rows = -1) or Reload then begin + Rows := Connection.GetRowCount(Self); + end; + Result := Rows; end; procedure TDBObject.Drop; diff --git a/source/main.pas b/source/main.pas index 31e4cd24..21875bd3 100644 --- a/source/main.pas +++ b/source/main.pas @@ -5455,7 +5455,7 @@ begin if (not IsLimited) and (not IsFiltered) then RowsTotal := DataGrid.RootNodeCount // No need to fetch via SHOW TABLE STATUS else - RowsTotal := DBObject.RowCount; + RowsTotal := DBObject.RowCount(True); if RowsTotal > -1 then begin cap := cap + ': ' + FormatNumber(RowsTotal) + ' ' + _('rows total'); if DBObject.Engine = 'InnoDB' then