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);
        }
示例#4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Delete&lt;T&gt;"/> 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);
        }
示例#6
0
 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);
        }