Issue #12: fix row count always -1 on SQLite, in "copy table" dialog

This commit is contained in:
Ansgar Becker
2020-01-22 13:04:39 +01:00
parent feeb17e7d4
commit 103a61dc52
3 changed files with 9 additions and 6 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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