Include database name in foreign key code only if it differs from the database in which it resides. Closes #1419

This commit is contained in:
Ansgar Becker
2021-12-10 07:29:52 +01:00
parent 829b89db2d
commit 50ddf24337

View File

@ -101,7 +101,7 @@ type
private private
FConnection: TDBConnection; FConnection: TDBConnection;
public public
KeyName, OldKeyName, ReferenceDb, ReferenceTable, OnUpdate, OnDelete: String; KeyName, OldKeyName, Db, ReferenceDb, ReferenceTable, OnUpdate, OnDelete: String;
Columns, ForeignColumns: TStringList; Columns, ForeignColumns: TStringList;
Modified, Added, KeyNameWasCustomized: Boolean; Modified, Added, KeyNameWasCustomized: Boolean;
constructor Create(AOwner: TDBConnection); constructor Create(AOwner: TDBConnection);
@ -5998,6 +5998,7 @@ begin
Result.Add(ForeignKey); Result.Add(ForeignKey);
ForeignKey.KeyName := ForeignQuery.Col('CONSTRAINT_NAME'); ForeignKey.KeyName := ForeignQuery.Col('CONSTRAINT_NAME');
ForeignKey.OldKeyName := ForeignKey.KeyName; ForeignKey.OldKeyName := ForeignKey.KeyName;
ForeignKey.Db := Table.Database;
ForeignKey.ReferenceDb := ForeignQuery.Col('UNIQUE_CONSTRAINT_SCHEMA'); ForeignKey.ReferenceDb := ForeignQuery.Col('UNIQUE_CONSTRAINT_SCHEMA');
ForeignKey.ReferenceTable := ForeignQuery.Col('UNIQUE_CONSTRAINT_SCHEMA') + ForeignKey.ReferenceTable := ForeignQuery.Col('UNIQUE_CONSTRAINT_SCHEMA') +
'.' + ForeignQuery.Col('REFERENCED_TABLE_NAME'); '.' + ForeignQuery.Col('REFERENCED_TABLE_NAME');
@ -6111,6 +6112,7 @@ begin
Result.Add(ForeignKey); Result.Add(ForeignKey);
ForeignKey.KeyName := ForeignQuery.Col('constraint_name'); ForeignKey.KeyName := ForeignQuery.Col('constraint_name');
ForeignKey.OldKeyName := ForeignKey.KeyName; ForeignKey.OldKeyName := ForeignKey.KeyName;
ForeignKey.Db := Table.Schema;
ForeignKey.ReferenceDb := ForeignQuery.Col('ref_schema'); ForeignKey.ReferenceDb := ForeignQuery.Col('ref_schema');
ForeignKey.ReferenceTable := ForeignQuery.Col('ref_schema')+'.'+ForeignQuery.Col('ref_table'); ForeignKey.ReferenceTable := ForeignQuery.Col('ref_schema')+'.'+ForeignQuery.Col('ref_table');
ForeignKey.OnUpdate := ForeignQuery.Col('update_rule'); ForeignKey.OnUpdate := ForeignQuery.Col('update_rule');
@ -10356,6 +10358,7 @@ begin
s := Source as TForeignKey; s := Source as TForeignKey;
KeyName := s.KeyName; KeyName := s.KeyName;
OldKeyName := s.OldKeyName; OldKeyName := s.OldKeyName;
Db := s.Db;
ReferenceDb := s.ReferenceDb; ReferenceDb := s.ReferenceDb;
ReferenceTable := s.ReferenceTable; ReferenceTable := s.ReferenceTable;
OnUpdate := s.OnUpdate; OnUpdate := s.OnUpdate;
@ -10385,7 +10388,10 @@ begin
Result := Result + ') REFERENCES '; Result := Result + ') REFERENCES ';
if (not ReferenceDb.IsEmpty) and (ReferenceTable.StartsWith(ReferenceDb)) then begin if (not ReferenceDb.IsEmpty) and (ReferenceTable.StartsWith(ReferenceDb)) then begin
TablePart := ReferenceTable.Substring(Length(ReferenceDb) + 1); TablePart := ReferenceTable.Substring(Length(ReferenceDb) + 1);
Result := Result + FConnection.QuoteIdent(ReferenceDb) + '.' + FConnection.QuoteIdent(TablePart); if ReferenceDb <> Db then
Result := Result + FConnection.QuoteIdent(ReferenceDb) + '.' + FConnection.QuoteIdent(TablePart)
else
Result := Result + FConnection.QuoteIdent(TablePart);
end end
else begin else begin
Result := Result + FConnection.QuoteIdent(ReferenceTable, True, '.'); Result := Result + FConnection.QuoteIdent(ReferenceTable, True, '.');