namespace Framework.Cli.Generate
{
using Framework.DataAccessLayer;
using System.Collections.Generic;
using System.Linq;
///
/// Meta information to generate CSharp code.
///
internal class MetaCSharp
{
///
/// Constructor.
///
public MetaCSharp(MetaSqlSchema[] list)
{
SchemaName(list);
}
private void SchemaName(MetaSqlSchema[] dataList)
{
string[] schemaNameList = dataList.GroupBy(item => item.SchemaName, (key, group) => key).ToArray();
List nameExceptList = new List();
foreach (string schemaName in schemaNameList)
{
string schemaNameCSharp = UtilGenerate.NameCSharp(schemaName, nameExceptList);
TableName(dataList, schemaName, schemaNameCSharp);
}
}
private void TableName(MetaSqlSchema[] dataList, string schemaName, string schemaNameCSharp)
{
string[] tableNameList = dataList.Where(item => item.SchemaName == schemaName).GroupBy(item => item.TableName, (key, group) => key).ToArray();
List nameExceptList = new List();
foreach (string tableName in tableNameList)
{
string tableNameCSharp = UtilGenerate.NameCSharp(tableName, nameExceptList);
FieldName(dataList, schemaName, schemaNameCSharp, tableName, tableNameCSharp);
}
}
private void FieldName(MetaSqlSchema[] dataList, string schemaName, string schemaNameCSharp, string tableName, string tableNameCSharp)
{
MetaSqlSchema[] fieldList = dataList.Where(item => item.SchemaName == schemaName && item.TableName == tableName).ToArray();
List nameExceptList = new List();
nameExceptList.Add(tableName); // CSharp propery can not have same name like class.
foreach (MetaSqlSchema field in fieldList)
{
string fieldNameCSharp = UtilGenerate.NameCSharp(field.FieldName, nameExceptList);
FrameworkTypeEnum frameworkTypeEnum = UtilDalType.SqlTypeToFrameworkTypeEnum(field.SqlType);
List.Add(new MetaCSharpSchema()
{
Schema = field,
SchemaNameCSharp = schemaNameCSharp,
TableNameCSharp = tableNameCSharp,
FieldNameCSharp = fieldNameCSharp,
IsPrimaryKey = field.IsPrimaryKey,
FrameworkTypeEnum = frameworkTypeEnum,
});
}
}
public readonly List List = new List();
}
internal class MetaCSharpSchema
{
public MetaSqlSchema Schema { get; set; }
public string SchemaNameCSharp { get; set; }
///
/// Gets TableNameCSharp. For example: "RawWikipediaAircraft". See also property MetaSqlSchema.TableName.
///
public string TableNameCSharp { get; set; }
public string FieldNameCSharp { get; set; }
public bool IsPrimaryKey { get; set; }
public FrameworkTypeEnum FrameworkTypeEnum { get; set; }
}
}