/// <summary> /// Fills the schema. /// </summary> /// <param name="select">The select.</param> /// <param name="tableName">Name of the table.</param> /// <returns>List<TableSchemaModel>.</returns> protected override List <TableSchemaModel> FillSchema(string select, string tableName) { var dataset = ExecuteQuery(select); List <TableSchemaModel> tableSchemaModel = new List <TableSchemaModel>(); var schema = dataset.Tables[0]; TableSchemaModel table = new TableSchemaModel(); tableSchemaModel.Add(table); table.TableName = tableName; DqlDataTypeMap map = new DqlDataTypeMap(); //attr_type, min_length, attr_length, attr_repeating, mandatory int ordinal = 0; var fields = schema.AsEnumerable().Select(s => new FieldSchemaModel { Name = (string)s["attr_name"], MaxLength = (int)s["attr_length"], Type = map[(int)s["attr_type"]].ToString(), IsRepeating = int.Parse(s["attr_repeating"].ToString()) == 0 ? false : true, Ordinal = ordinal++, TableName = tableName }); table.Fields.AddRange(fields); return(tableSchemaModel); }
/// <summary> /// Gets the schema model external. /// </summary> /// <returns>List<TableSchemaModel>.</returns> public List <TableSchemaModel> GetSchemaModelExternal() { DqlDataTypeMap map = new DqlDataTypeMap(); List <TableSchemaModel> tableSchemaModel = new List <TableSchemaModel>(); string select = "select distinct t.name, t.attr_name, t.attr_type, '0' as min_length, t.attr_length, t.attr_repeating, a.not_null as mandatory from dm_type t, dmi_dd_attr_info a where t.name = a.type_name and t.attr_name = a.attr_name enable(row_based)"; var schema = ExecuteQueryExternal(select).Tables[0].AsEnumerable().GroupBy(g => g.Field <string>("name")); foreach (var item in schema) { TableSchemaModel table = new TableSchemaModel(); tableSchemaModel.Add(table); FillSchemaModel(table, item); } return(tableSchemaModel); }
/// <summary> /// Fills the schema model. /// </summary> /// <param name="table">The table.</param> /// <param name="tableName">Name of the table.</param> /// <param name="item">The item.</param> private void FillSchemaModel(TableSchemaModel table, IGrouping <string, DataRow> item) { DqlDataTypeMap map = new DqlDataTypeMap(); table.TableName = item.Key; int ordinal = 0; table.Fields.AddRange(item.Select(s => new FieldSchemaModel() { Name = s.Field <string>("attr_name"), Ordinal = ordinal++, Type = map[(int)s["attr_type"]].ToString(), MaxLength = (int)s["attr_length"], IsRepeating = Convert.ToBoolean(s["attr_repeating"]), TableName = item.Key }).ToArray()); }
/// <summary> /// Gets the schema model. /// </summary> /// <returns>List<TableSchemaModel>.</returns> public override List <TableSchemaModel> GetSchemaModel() { if (UseExternalQueryEngine()) { return(GetSchemaModelExternal()); } DqlDataTypeMap map = new DqlDataTypeMap(); List <TableSchemaModel> tableSchemaModel = new List <TableSchemaModel>(); using (DqlConnection cn = new DqlConnection(ConnectionString)) { cn.Open(); var schema = cn.GetSchema().AsEnumerable().GroupBy(g => g.Field <string>("name")); foreach (var item in schema) { TableSchemaModel table = new TableSchemaModel(); tableSchemaModel.Add(table); FillSchemaModel(table, item); } } return(tableSchemaModel); }