475 lines
13 KiB
C#
475 lines
13 KiB
C#
private string FKSelectName(ITable tbl,IForeignKey FK,string sAlias)
|
|
{
|
|
if(tbl.Name == FK.PrimaryTable.Name)return ChildName(FK) + ClassesName(tbl.Name);
|
|
//return ClassesName(tbl.Name) + "By" + ClassName(FK.PrimaryTable) + sAlias;
|
|
return ClassesName(tbl.Name) + "By" + ForeignKeyName(FK) + sAlias;
|
|
}
|
|
private string ForeignKeyName(IForeignKey FK)
|
|
{
|
|
string retval="";
|
|
string sep = "";
|
|
|
|
foreach(IColumn col in FK.ForeignColumns)
|
|
{
|
|
retval = retval + sep + ClassName(col.Name);
|
|
sep = "_And_";
|
|
}
|
|
return retval;
|
|
}
|
|
private string FKFieldName(IForeignKey fk)
|
|
{
|
|
string cName = ClassName( fk.ForeignTable );
|
|
string className=ClassName( fk.PrimaryTable );
|
|
if(className==cName)return ChildName(fk);
|
|
return ClassName( fk.ForeignTable );
|
|
}
|
|
private string FKFieldsName(IForeignKey fk)
|
|
{
|
|
string cName = ClassesName( fk.ForeignTable );
|
|
string className=ClassesName( fk.PrimaryTable );
|
|
if(className==cName)return ChildrenName(fk);
|
|
return cName;
|
|
}
|
|
private string FKClassesName(IForeignKey fk)
|
|
{
|
|
string cName = ClassesName( fk.ForeignTable );
|
|
string className=ClassesName( fk.PrimaryTable );
|
|
if(className==cName)return ChildName(fk) + ClassesName( fk.PrimaryTable );
|
|
return ClassName( fk.PrimaryTable ) + cName;
|
|
}
|
|
private string FKClassName(string className,IForeignKey fk)
|
|
{
|
|
string cName = ClassName( fk.ForeignTable );
|
|
if(className==cName)return ChildName(fk) + cName;
|
|
return className + cName;
|
|
}
|
|
private string FKClassName(IForeignKey fk)
|
|
{
|
|
string className=ClassName(fk.PrimaryTable);
|
|
return FKClassName(className,fk);
|
|
}
|
|
private string FKClassName1(string className,IForeignKey fk)
|
|
{
|
|
string cName = ClassName( fk.ForeignTable);
|
|
if(className==cName)return ChildName(fk) + cName;
|
|
return className + cName + GetAlias(fk);
|
|
}
|
|
private string FKClassName1(IForeignKey fk)
|
|
{
|
|
string className=ClassName(fk.PrimaryTable);
|
|
return FKClassName1(className,fk);
|
|
}
|
|
private string FKBy(IForeignKey fk)
|
|
{
|
|
if(fk.PrimaryTable.Name==fk.ForeignTable.Name)return ChildrenName(fk);
|
|
return "By" +FormatColumns("{prop}",fk.ForeignColumns,"_","");
|
|
}
|
|
private string FKAndString(string className,IForeignKey fk,string str)
|
|
{
|
|
string cName = ClassName( fk.ForeignTable );
|
|
if(className==cName)return str;
|
|
return "";
|
|
}
|
|
private string FKCountName(ITable tbl,IForeignKey FK,string sAlias)
|
|
{
|
|
if(tbl.Name == FK.ForeignTable.Name)return ChildName(FK);
|
|
return ClassName(FK.ForeignTable) + sAlias;
|
|
}
|
|
private bool FKParent(ITable tbl)
|
|
{
|
|
foreach(IForeignKey fk in tbl.ForeignKeys)
|
|
{
|
|
if(fk.PrimaryTable == fk.ForeignTable)return true;
|
|
}
|
|
return false;
|
|
}
|
|
private IForeignKey FKParentFK(ITable tbl)
|
|
{
|
|
foreach(IForeignKey fk in tbl.ForeignKeys)
|
|
{
|
|
if(fk.PrimaryTable == fk.ForeignTable)return fk;
|
|
}
|
|
return null;
|
|
}
|
|
private bool IsParentCol(IColumn col)
|
|
{
|
|
IForeignKey fk = FKParentFK(col.Table);
|
|
if(fk==null)return false;
|
|
foreach(IColumn col1 in fk.ForeignColumns)
|
|
{
|
|
if(col.Name==col1.Name)return true;
|
|
}
|
|
return false;
|
|
}
|
|
private string parentName(IColumn col)
|
|
{
|
|
IColumn colp = ParentCol(col);
|
|
if (colp == null)
|
|
{
|
|
if(IsRelObj(col))return LocalName(RelObjProp(col)) + "." + RelObjCol(col);
|
|
return LocalName(RelObjProp(col));
|
|
}
|
|
return "my" + ParentName(col.ForeignKeys[0]) + "." + PropertyName(colp.Name);
|
|
}
|
|
private string ParentName(IColumn col)
|
|
{
|
|
IColumn colp = ParentCol(col);
|
|
if (colp == null)
|
|
{
|
|
if(IsRelObj(col))return PropertyName(col);
|
|
return MemberName(RelObjProp(col));
|
|
}
|
|
return PropertyName(col.Name);
|
|
}
|
|
private string ParentRef(IColumn col)
|
|
{
|
|
IColumn colp = ParentCol(col);
|
|
if (colp != null) return ClassName(col.Table) + ".Get(" + RelObjTypeCast(col) + MemberName(col) + ")";
|
|
return null;
|
|
}
|
|
private string ParentTypeName(IColumn col)
|
|
{
|
|
IColumn colp = ParentCol(col);
|
|
if (colp != null) return ClassName(col.Table) + " myParent";
|
|
return null;
|
|
}
|
|
private IColumn ParentCol(IColumn col)
|
|
{
|
|
IForeignKey fk = FKParentFK(col.Table);
|
|
if(fk==null)return null;
|
|
return RelatedColumnF(col,fk);
|
|
}
|
|
private bool IsParentColumn(IColumn col)
|
|
{
|
|
IForeignKey fk = FKParentFK(col.Table);
|
|
if(fk==null)return false;
|
|
foreach(IColumn colf in fk.ForeignColumns)
|
|
if(colf.Name == col.Name)return true;
|
|
return false;
|
|
}
|
|
private string AutoSeed(IColumn col)
|
|
{
|
|
IForeignKey fk = FKParentFK(col.Table);
|
|
if(fk==null)return null;
|
|
IColumn colp = RelatedColumnF(col,fk);
|
|
if(colp==null)return "";
|
|
return (colp.IsAutoKey?colp.AutoKeySeed.ToString():"");
|
|
}
|
|
|
|
private IColumn RelatedColumn(IColumn column,IForeignKey fk){
|
|
if(column.Table.Name == fk.PrimaryTable.Name && fk.ForeignColumns.Count == 1){
|
|
return fk.ForeignColumns[0];
|
|
}
|
|
if(column.Table.Name == fk.ForeignTable.Name && fk.PrimaryColumns.Count == 1){
|
|
return fk.PrimaryColumns[0];
|
|
}
|
|
return null;
|
|
}
|
|
private IColumn RelatedColumnF(IColumn col,IForeignKey fk){
|
|
for(int i =0; i < fk.PrimaryColumns.Count;i++) // Loop through the related columns
|
|
{
|
|
IColumn pcol=fk.PrimaryColumns[i]; // This is the primary column
|
|
IColumn fcol=fk.ForeignColumns[i]; // This is the foreign column
|
|
//if(pcol.Name == col.Name && pcol.Table.Name == col.Table.Name)return fcol;
|
|
if(fcol.Name == col.Name && fcol.Table.Name == col.Table.Name)return pcol;
|
|
}
|
|
return null;
|
|
}
|
|
private IColumn RelatedColumnP(IColumn col,IForeignKey fk){
|
|
for(int i =0; i < fk.PrimaryColumns.Count;i++) // Loop through the related columns
|
|
{
|
|
IColumn pcol=fk.PrimaryColumns[i]; // This is the primary column
|
|
IColumn fcol=fk.ForeignColumns[i]; // This is the foreign column
|
|
if(pcol.Name == col.Name && pcol.Table.Name == col.Table.Name)return fcol;
|
|
//if(fcol.Name == col.Name && fcol.Table.Name == col.Table.Name)return pcol;
|
|
}
|
|
return null;
|
|
}
|
|
private IColumn RelatedColumnB(IColumn col,IForeignKey fk){
|
|
for(int i =0; i < fk.PrimaryColumns.Count;i++) // Loop through the related columns
|
|
{
|
|
IColumn pcol=fk.PrimaryColumns[i]; // This is the primary column
|
|
IColumn fcol=fk.ForeignColumns[i]; // This is the foreign column
|
|
if(pcol.Name == col.Name && pcol.Table.Name == col.Table.Name)return fcol;
|
|
if(fcol.Name == col.Name && fcol.Table.Name == col.Table.Name)return pcol;
|
|
}
|
|
return null;
|
|
}
|
|
private string ProcessName(Match m)
|
|
{
|
|
return m.Value.TrimStart("-_ ".ToCharArray()).ToUpper();
|
|
}
|
|
private string Suffix(IColumn col)
|
|
{
|
|
//return (PropertyName(col.Name)==_className?"Fld":"");
|
|
return (PropertyName(col.Name)==ClassName(col.Table.Name)?"Fld":"");
|
|
}
|
|
private string PropertyName(IColumn col)
|
|
{
|
|
return PropertyName(col.Name)+Suffix(col);
|
|
}
|
|
private string PropertyName(string name)
|
|
{
|
|
return Regex.Replace(name, "^[a-z]|[-_ ][a-zA-Z0-9]",new MatchEvaluator(ProcessName));
|
|
}
|
|
private bool MixedCase(string s)
|
|
{
|
|
bool hasUpper = false;
|
|
bool hasLower = false;
|
|
foreach (char c in s.ToCharArray())
|
|
{
|
|
hasUpper |= Char.IsUpper(c);
|
|
hasLower |= char.IsLower(c);
|
|
if (hasLower && hasUpper) return true;
|
|
}
|
|
return false;
|
|
}
|
|
private string MemberName(string name)
|
|
{
|
|
return _prefix + name;
|
|
}
|
|
private string MemberName(IColumn c)
|
|
{
|
|
return MemberName(PropertyName(c));
|
|
}
|
|
private string LocalName(IColumn col)
|
|
{
|
|
return LocalName(col.Name)+Suffix(col);
|
|
}
|
|
private string LocalName(string s)
|
|
{
|
|
s=PropertyName(s);
|
|
if(MixedCase(s))return ToLeadingLower(s);
|
|
else return s.ToLower();
|
|
}
|
|
private string ClassName(string name)
|
|
{
|
|
return SingularName(PropertyName(name));
|
|
}
|
|
private string ClassName(ITable table)
|
|
{
|
|
return ClassName(table.Alias);
|
|
}
|
|
private string ClassName(IView view)
|
|
{
|
|
return ClassName(view.Alias);
|
|
}
|
|
private string ClassName(IColumn column)
|
|
{
|
|
if(column.Table != null)return ClassName(column.Table);
|
|
if(column.View != null)return ClassName(column.View);
|
|
return null;
|
|
}
|
|
private string ClassesName(string name)
|
|
{
|
|
return PluralName(PropertyName(name));
|
|
}
|
|
private string ClassesName(ITable table)
|
|
{
|
|
return ClassesName(table.Alias);
|
|
}
|
|
private string ClassesName(IView view)
|
|
{
|
|
return ClassesName(view.Name);
|
|
}
|
|
private string ClassesName(IColumn column)
|
|
{
|
|
if(column.Table != null)return ClassesName(column.Table);
|
|
if(column.View != null)return ClassesName(column.View);
|
|
return null;
|
|
}
|
|
private string SingularName(string s)
|
|
{
|
|
if(Regex.IsMatch(s,"crises$"))return Regex.Replace(s,"crises$","crisis");
|
|
if(Regex.IsMatch(s,"uses$"))return Regex.Replace(s,"uses$","us");
|
|
if(Regex.IsMatch(s,"is$"))return s;
|
|
if(Regex.IsMatch(s,"us$"))return s;
|
|
if(Regex.IsMatch(s,"sses$"))return Regex.Replace(s,"sses$","ss");
|
|
if(Regex.IsMatch(s,"ches$"))return Regex.Replace(s,"ches$","ch");
|
|
if(Regex.IsMatch(s,"ies$"))return Regex.Replace(s,"ies$","y");
|
|
if(Regex.IsMatch(s,"ss$"))return s;
|
|
return Regex.Replace(s,"s$","");
|
|
}
|
|
private string PluralName(string s)
|
|
{
|
|
s=SingularName(s);
|
|
if(Regex.IsMatch(s,"crisis$"))return Regex.Replace(s,"crisis$","crises");
|
|
if(Regex.IsMatch(s,"us$"))return Regex.Replace(s,"us$","uses");
|
|
if(Regex.IsMatch(s,"ises$"))return s;
|
|
if(Regex.IsMatch(s,"uses$"))return s;
|
|
if(Regex.IsMatch(s,"ss$"))return Regex.Replace(s,"ss$","sses");
|
|
if(Regex.IsMatch(s,"ch$"))return Regex.Replace(s,"ch$","ches");
|
|
if(Regex.IsMatch(s,"y$"))return Regex.Replace(s,"y$","ies");
|
|
return s + "s";
|
|
}
|
|
private string ReturnType(string type)
|
|
{
|
|
if(type=="SmartDate")type="string";
|
|
return type;
|
|
}
|
|
private string ReturnMember(string type)
|
|
{
|
|
string member="";
|
|
return member;
|
|
}
|
|
private string CSLAType(IColumn column)
|
|
{
|
|
return CSLAType(column,(column.IsNullable? "?":""));
|
|
}
|
|
private string CSLAType(IColumn column,string suffix)
|
|
{
|
|
string type = column.LanguageType;
|
|
switch( column.LanguageType )
|
|
{
|
|
case "DateTime":
|
|
if(column.Description.IndexOf("{datetime}")>=0)
|
|
type="DateTime" + suffix;
|
|
else
|
|
type = "SmartDate";
|
|
break;
|
|
case "short":
|
|
type="Int16" + suffix;
|
|
break;
|
|
case "string":
|
|
break;
|
|
case "byte[]":
|
|
break; default:
|
|
type += suffix;
|
|
break;
|
|
// case "uint":
|
|
// retVal = "int";
|
|
// break;
|
|
// case "ulong":
|
|
// retVal = "long";
|
|
// break;
|
|
// case "ushort":
|
|
// retVal = "short";
|
|
// break;
|
|
|
|
}
|
|
return type;
|
|
}
|
|
string DefaultValue(IColumn column)
|
|
{
|
|
string s = RemoveParens(column.Default);
|
|
switch(s)
|
|
{
|
|
case "getdate()":
|
|
if(CSLAType(column)=="DateTime")
|
|
s="DateTime.Now";
|
|
else
|
|
s="DateTime.Now.ToShortDateString()";
|
|
break;
|
|
case "upper(suser_sname())":
|
|
s= "Environment.UserName.ToUpper()";
|
|
break;
|
|
case "suser_sname()":
|
|
s="Environment.UserName";
|
|
break;
|
|
default:
|
|
if(IsNumeric(s))
|
|
s = "" + s;
|
|
else
|
|
{
|
|
if(s.StartsWith("N'"))
|
|
s = "\"" + s.Substring(2,s.Length-3) + "\"";
|
|
}
|
|
//else s="";
|
|
break;
|
|
}
|
|
return s;
|
|
}
|
|
private string InitializeValue( IColumn Column )
|
|
{
|
|
string retVal=";";
|
|
if(Column.DataTypeName=="timestamp")
|
|
{
|
|
retVal = " = new byte[8];//timestamp";
|
|
}
|
|
else
|
|
{
|
|
//if(Column.Default != ""){
|
|
// retVal = ConvertDefault(Column) + ";// TODO: Default from DB " + RemoveParens(Column.Default) + " ";
|
|
//}
|
|
//else
|
|
//{
|
|
switch( CSLAType(Column ) )
|
|
{
|
|
case "string":
|
|
retVal = " = string.Empty;";
|
|
break;
|
|
case "DateTime":
|
|
retVal = " = new DateTime();";
|
|
break;
|
|
case "SmartDate":
|
|
retVal = " = string.Empty;";
|
|
break;
|
|
//case "Guid":
|
|
// retVal = "=new Guid();";
|
|
// break;
|
|
default:
|
|
// nothing to do here
|
|
break;
|
|
}
|
|
//}
|
|
}
|
|
return retVal;
|
|
}
|
|
public static bool IsNumeric(string stringToTest)
|
|
{
|
|
double newVal;
|
|
return double.TryParse(stringToTest, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out newVal);
|
|
}
|
|
private string RemoveParens(string s)
|
|
{
|
|
while(s.StartsWith("(") && s.EndsWith(")"))
|
|
s=s.Substring(1,s.Length-2);
|
|
return s;
|
|
}
|
|
private string ParameterName(IColumn column)
|
|
{
|
|
return "@" + PropertyName(column.Name);
|
|
}
|
|
private string NewParameterName(IColumn column)
|
|
{
|
|
return "@new" + PropertyName(column.Name);
|
|
}
|
|
private string ParamKeyName(IColumn column)
|
|
{
|
|
if(column.IsAutoKey)return NewParameterName(column);
|
|
return ParameterName(column);
|
|
}
|
|
private string ToLeadingLower( string name )
|
|
{
|
|
char[] chars = name.ToCharArray();
|
|
chars[0] = Char.ToLower( chars[0] );
|
|
return new string( chars );
|
|
}
|
|
private string DBType(IColumn column)
|
|
{
|
|
string s=column.DataTypeNameComplete;
|
|
switch(s){
|
|
case "text":
|
|
s="varchar(MAX)";
|
|
break;
|
|
case "ntext":
|
|
s="nvarchar(MAX)";
|
|
break;
|
|
}
|
|
return s;
|
|
}
|
|
// Old ----------------------------------------------
|
|
// private string ToClassName(string name)
|
|
// {
|
|
// return Regex.Replace(ToPascalCase(name),"s$","");
|
|
// }
|
|
// private string ColumnToMemberVariable( IColumn Column )
|
|
// {
|
|
// return _prefix + UniqueColumn( Column ).ToLower();
|
|
// }
|
|
//
|
|
// private string ColumnToPropertyName( IColumn Column )
|
|
// {
|
|
// return ToPascalCase( UniqueColumn( Column ) );
|
|
// }
|