mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-14 18:12:05 +08:00
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:
@ -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, '.');
|
||||||
|
Reference in New Issue
Block a user