public void RemoveFromTable(string tableName, string alias) { var table = FromTables.Single(t => t.Alias == alias && t.StoreDefinition.Name == tableName); FromTables.Remove(table); RegenerateTableLinks(); }
public void RegenerateTableLinks() { FromTableLinks = new List <TableLink>(); var joins = GenerateJoins(); var newJoins = joins.Where(j => !FromTableJoins.Any(f => f.Source.GetJoinString() == j.GetJoinString())); FromTableJoins.AddRange(newJoins.Select(j => new TableJoinModel { Source = j, JoinType = "Inner" })); var lostJoins = FromTableJoins.Where(j => !FromTables.Any(t => t.Alias == j.Source.LeftObjectAlias) || !FromTables.Any(t => t.Alias == j.Source.RightObjectAlias)); FromTableJoins = FromTableJoins.Except(lostJoins).ToList(); foreach (var fj in FromTableJoins.Where(f => !f.IsDeleted)) { var join = fj.Source; var pt = FromTables.First(t => t.Alias == join.LeftObjectAlias); var pk = pt.Properties.First(p => p.StoreProperty.Name == join.LeftField); var pkIndex = pt.Properties.IndexOf(pk); var ft = FromTables.First(t => t.Alias == join.RightObjectAlias); var fk = ft.Properties.First(p => p.StoreProperty.Name == join.RightField); var fkIndex = ft.Properties.IndexOf(fk); var link = new TableLink { PrimaryRefId = GenerateObjectId("table_primary", pt.Id, pkIndex), ForeignRefId = GenerateObjectId("table_foreign", ft.Id, fkIndex), Source = join }; FromTableLinks.Add(link); } }
private List <StoreObjectJoin> GenerateJoins() { var joins = new List <StoreObjectJoin>(); var tables = FromTables.ToList(); var foreignKeys = tables.SelectMany(t => t.Properties, (t, p) => new { Tbl = t, Prop = p }).Where(p => p.Prop.StoreProperty.Fk && tables.Any(d => d.StoreDefinition.Name == p.Prop.StoreProperty.ForeignKeys.First().DefinitionName)).ToList(); foreach (var reference in foreignKeys) { var leftTable = tables.First(t => t.StoreDefinition.Name == reference.Prop.StoreProperty.ForeignKeys.First().DefinitionName); var rightTable = tables.First(t => t.StoreDefinition.Name == reference.Tbl.StoreDefinition.Name); var join = new StoreObjectJoin { JoinType = "inner", LeftObjectAlias = leftTable.Alias, LeftField = reference.Prop.StoreProperty.ForeignKeys.First().PropertyName, RightObjectAlias = rightTable.Alias, RightField = reference.Prop.StoreProperty.Name }; joins.Add(join); } return(joins); }
/// <summary> /// Initializes a new instance of the <see cref="Delete<T>"/> class. /// </summary> /// <param name="table">The table.</param> /// <param name="provider">The provider.</param> public Delete(ITable table, IDataProvider provider) { QueryCommandType = QueryType.Delete; _provider = provider; ITable tbl = table; //string tableName = table.ColumnName; FromTables.Add(tbl); }
public void AddFromTable(StoreDefinition table) { var ft = new QueryFromTable(table); ft.Alias = GetDefaultAlias(ft); FromTables.Add(ft); RegenerateTableLinks(); _engine.SelectPropertiesFromNewTable(this, ft); }
private void Init(TableSchema.Table tbl) { if (tbl == null) { throw new SqlQueryException("Can't find the table schema - please specify the provider if there is more than one, or check the spelling"); } Provider = tbl.Provider; FromTables.Add(tbl); QueryCommandType = QueryType.Update; }
public void Clear() { // clear all values in controller StoreParameters.DataService = "MyDataService"; StoreParameters.QueryName = ""; StoreParameters.Namespace = "Default"; StoreParameters.QueryReturnType = ""; FromTables.Clear(); SelectionProperties.Clear(); FromTableLinks.Clear(); FromTableJoins.Clear(); WhereClause = ""; }
private string GetDefaultAlias(QueryFromTable ft) { var count = FromTables.Where(t => t.StoreDefinition.Name == ft.StoreDefinition.Name).Count(); var sfx = count > 0 ? (count + 1).ToString() : ""; var used = FromTables.Select(t => t.Alias).ToList(); for (int i = 1; i <= 5; i++) { var alias = ft.StoreDefinition.Name.Substring(0, i).ToLower() + sfx; if (!used.Contains(alias)) { return(alias); } } // alias not found return(""); }
public void AliasChanged(string oldAlias, string newAlias) { var table = FromTables.Single(t => t.Alias == oldAlias); table.Alias = newAlias; foreach (var j in FromTableJoins) { if (j.Source.LeftObjectAlias == oldAlias) { j.Source.LeftObjectAlias = newAlias; } if (j.Source.RightObjectAlias == oldAlias) { j.Source.RightObjectAlias = newAlias; } } }
public QueryFromTable FindFromTable(string tableName, string alias) { var table = FromTables.SingleOrDefault(t => t.Alias == alias && t.StoreDefinition.Name == tableName); return(table); }