Issue #1777: indicate functional key part in table editor with a different icon

This commit is contained in:
Ansgar Becker
2025-01-11 16:40:36 +01:00
parent 8a63ce7c70
commit 4cc6134cb0
2 changed files with 16 additions and 3 deletions

View File

@ -97,6 +97,7 @@ type
function IsUnique: Boolean;
function IsFulltext: Boolean;
function IsSpatial: Boolean;
function IsExpression(KeyPart: Integer): Boolean;
procedure Modification(Sender: TObject);
function SQLCode(TableName: String=''): String;
property InsideCreateCode: Boolean read GetInsideCreateCode;
@ -11168,6 +11169,11 @@ begin
Result := IndexType = SPATIAL;
end;
function TTableKey.IsExpression(KeyPart: Integer): Boolean;
begin
Result := Columns[KeyPart].StartsWith('(');
end;
procedure TTableKey.Modification(Sender: TObject);
begin
@ -11223,8 +11229,8 @@ begin
end;
Result := Result + '(';
for i:=0 to Columns.Count-1 do begin
if Columns[i].StartsWith('(') then
Result := Result + Columns[i] // Functional key part with expression wrapped in parentheses
if IsExpression(i) then
Result := Result + Columns[i] // Don't quote functional key part
else
Result := Result + FConnection.QuoteIdent(Columns[i]);
if (SubParts.Count > i) and (SubParts[i] <> '') then

View File

@ -1944,6 +1944,7 @@ procedure TfrmTableEditor.treeIndexesGetImageIndex(Sender: TBaseVirtualTree;
var Ghosted: Boolean; var ImageIndex: TImageIndex);
var
VT: TVirtualStringTree;
TblKey: TTableKey;
begin
// Icon image showing type of index
VT := Sender as TVirtualStringTree;
@ -1951,7 +1952,13 @@ begin
if not (Kind in [ikNormal, ikSelected]) then Exit;
case VT.GetNodeLevel(Node) of
0: ImageIndex := FKeys[Node.Index].ImageIndex;
1: ImageIndex := 42;
1: begin
TblKey := FKeys[Node.Parent.Index];
if TblKey.IsExpression(Node.Index) then
ImageIndex := 13
else
ImageIndex := 42;
end;
end;
end;