Skip to content
This repository has been archived by the owner on Dec 10, 2018. It is now read-only.
/ t4models Public archive

Commit

Permalink
Merge pull request #43 from linq2db/duplicate_members
Browse files Browse the repository at this point in the history
Added validation when members may have duplicates.
  • Loading branch information
ili authored Jun 30, 2017
2 parents 4816af3 + baff990 commit 417a9a9
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions Templates/DataModel.ttinclude
Original file line number Diff line number Diff line change
Expand Up @@ -347,18 +347,41 @@ void LoadMetadata(DataConnection dataConnection)
if (col.MemberName == t.TypeName)
col.MemberName += "_Column";
}

var duplicates = t.Columns.Values.ToLookup(c => c.MemberName).Where(g => g.Count() > 1);
foreach (var d in duplicates)
{
var alreadyNamed = new HashSet<string>();
foreach (var col in d)
{
col.MemberName = col.ColumnName;
if (keyWords.Contains(col.MemberName))
col.MemberName = "@" + col.MemberName;

col.MemberName = ConvertToCompilable(col.MemberName, false);

if (col.MemberName == t.TypeName)
col.MemberName += "_Column";

while (alreadyNamed.Contains(col.MemberName))
{
col.MemberName += "_";
}
alreadyNamed.Add(col.MemberName);
}
}
}

AfterLoadMetadata();
}

string ConvertToCompilable(string name)
string ConvertToCompilable(string name, bool mayRemoveUnderscore = true)
{
var query =
from c in name
select char.IsLetterOrDigit(c) || c == '@' ? c : '_';

return ToValidName(new string(query.ToArray()));
return ToValidName(new string(query.ToArray()), mayRemoveUnderscore);
}

Table GetTable(string name)
Expand Down Expand Up @@ -638,9 +661,9 @@ public class Parameter
}

int _counter = 0;
string ToValidName(string name)
string ToValidName(string name, bool mayRemoveUnderscore = true)
{
if (NormalizeNames && name.Contains("_"))
if (NormalizeNames && mayRemoveUnderscore && name.Contains("_"))
{
name = SplitAndJoin(name, "", '_');
}
Expand Down

0 comments on commit 417a9a9

Please sign in to comment.