コード例 #1
0
        public MultiTableUpdateScript GetLinkedDataScript(NameWithSchema basetable)
        {
            var res = new MultiTableUpdateScript();

            if (ResultFields == null || !ResultFields.IsMultiTable())
            {
                return(res);
            }
            var pks = new Dictionary <DmlfSource, List <DmlfColumnRef> >();

            foreach (var row in Rows)
            {
                if (row.RowState != BedRowState.Modified)
                {
                    continue;
                }
                var changed = row.GetChangedColumnRefs();
                if (changed.Length == 0)
                {
                    continue;
                }
                var tbls = new List <DmlfSource>();
                foreach (var ch in changed)
                {
                    if (!tbls.Contains(ch.Source))
                    {
                        tbls.Add(ch.Source);
                    }
                }
                foreach (var src in tbls)
                {
                    if (pks.ContainsKey(src))
                    {
                        continue;
                    }
                    pks[src] = ResultFields.GetPrimaryKey(src);
                }

                foreach (var src in tbls)
                {
                    var cols = new List <DmlfColumnRef>();
                    foreach (var ch in changed)
                    {
                        if (ch.Source != src)
                        {
                            continue;
                        }
                        cols.Add(ch);
                    }
                    var pk = pks[src];
                    res.Update(src == DmlfSource.BaseTable ? basetable : src.TableOrView,
                               (from c in pk select c.ColumnName).ToArray(),
                               row.Original.GetValuesByCols(pk.ToArray(), ResultFields),
                               (from c in cols select c.ColumnName).ToArray(),
                               row.GetValuesByCols(cols.ToArray()));
                }
            }

            return(res);
        }
コード例 #2
0
ファイル: DbDatabase.cs プロジェクト: janproch/datadmin
 public void RenameDomain(NameWithSchema dom, string newname)
 {
     foreach (AbstractObjectStructure obj in this.GetAllObjects())
     {
         obj.NotifyRenameDomain(dom, new NameWithSchema(dom.Schema, newname));
     }
 }
コード例 #3
0
ファイル: DbDatabase.cs プロジェクト: janproch/datadmin
 public void RenameTable(NameWithSchema tbl, string newname)
 {
     foreach (AbstractObjectStructure obj in this.GetAllObjects())
     {
         obj.NotifyRenameTable(tbl, new NameWithSchema(tbl.Schema, newname));
     }
 }
コード例 #4
0
 public override void NotifyRenameColumn(NameWithSchema table, string oldcol, string newcol)
 {
     if (Table.FullName == table && ColumnName == oldcol)
     {
         ColumnName = newcol;
     }
 }
コード例 #5
0
 public override void NotifyRenameDomain(NameWithSchema oldName, NameWithSchema newName)
 {
     if (Domain == oldName)
     {
         Domain = newName;
     }
 }
コード例 #6
0
ファイル: DbTable.cs プロジェクト: janproch/datadmin
 public override void NotifyRenameTable(NameWithSchema oldName, NameWithSchema newName)
 {
     if (FullName == oldName)
     {
         FullName = newName;
     }
 }
コード例 #7
0
ファイル: DbDiff_Database.cs プロジェクト: janproch/datadmin
 public static bool GenerateRename(NameWithSchema oldName, NameWithSchema newName, Action <NameWithSchema, string> changeSchema, Action <NameWithSchema, string> rename, bool allowChangeSchema, bool allowRename, DbDiffOptions opts)
 {
     newName = GenerateNewName(oldName, newName, opts);
     if (DbDiffTool.EqualFullNames(oldName, newName, opts))
     {
         return(true);
     }
     if (!EqualSchemas(oldName.Schema, newName.Schema, opts) && !allowChangeSchema)
     {
         return(false);
     }
     if (oldName.Name != newName.Name && !allowRename)
     {
         return(false);
     }
     if (!EqualSchemas(oldName.Schema, newName.Schema, opts))
     {
         changeSchema(oldName, newName.Schema);
     }
     if (oldName.Name != newName.Name)
     {
         rename(new NameWithSchema(newName.Schema, oldName.Name), newName.Name);
     }
     return(true);
 }
コード例 #8
0
        //public static void RecreateName(this IConstraint cnt)
        //{
        //    if (cnt is IPrimaryKey) cnt.Name = PkName(cnt.Table);
        //    else if (cnt is ForeignKey) cnt.Name = FkName(cnt.Table, ((ForeignKey)cnt).Columns);
        //    else if (cnt is CheckConstraint) cnt.Name = CheckName(cnt.Table);
        //    else if (cnt is UniqueConstraint) cnt.Name = UniqueName(cnt.Table, ((UniqueConstraint)cnt).Columns);
        //}

        public static void RenameTable(TableStructure tbl, IEnumerable tables, NameWithSchema newname)
        {
            var oldname = tbl.FullName;

            tbl.FullName = newname;
            foreach (TableStructure t in tables)
            {
                foreach (Constraint cnt in t.Constraints)
                {
                    var fk = cnt as ForeignKey;
                    if (fk != null)
                    {
                        if (fk.PrimaryKeyTable == oldname)
                        {
                            fk.PrimaryKeyTable = newname;
                            if (fk.Columns.Count == 1 && fk.Columns[0].ColumnName.StartsWith(oldname.Name))
                            {
                                string postfix = fk.Columns[0].ColumnName.Substring(oldname.Name.Length);
                                fk.Columns[0] = new ColumnReference(newname.Name + postfix);
                                ((ColumnStructure)t.Columns[oldname.Name + postfix]).ColumnName = newname.Name + postfix;
                            }
                            fk.Name = DbObjectNameTool.ConstraintName(fk);
                        }
                    }
                }
            }
            foreach (Constraint cnt in tbl.Constraints)
            {
                //cnt.Table = newname;
                cnt.Name = DbObjectNameTool.ConstraintName(cnt);
            }
        }
コード例 #9
0
ファイル: DbDatabase.cs プロジェクト: janproch/datadmin
 public void ChangeTableSchema(NameWithSchema tbl, string schema)
 {
     foreach (AbstractObjectStructure obj in this.GetAllObjects())
     {
         obj.NotifyRenameTable(tbl, new NameWithSchema(schema, tbl.Name));
     }
 }
コード例 #10
0
ファイル: DataStoreFrame.cs プロジェクト: janproch/datadmin
        void editor_ChangedProperties(object sender, EventArgs e)
        {
            var editor = (NewTableChooserFrame)sender;

            m_name = editor.FullName;
            m_db   = editor.Database;
        }
コード例 #11
0
        public override void SetDummyTable(NameWithSchema name)
        {
            TableStructure table = new TableStructure();

            table.FullName = name;
            table._Constraints.Add(this);
        }
コード例 #12
0
ファイル: DbDatabase.cs プロジェクト: janproch/datadmin
 public void ChangeDomainSchema(NameWithSchema dom, string schema)
 {
     foreach (AbstractObjectStructure obj in this.GetAllObjects())
     {
         obj.NotifyRenameDomain(dom, new NameWithSchema(schema, dom.Name));
     }
 }
コード例 #13
0
 public static bool EqualFullNames(NameWithSchema lft, NameWithSchema rgt, DbDiffOptions options)
 {
     if (lft == null || rgt == null)
     {
         return(lft == rgt);
     }
     return(EqualSchemas(lft.Schema, rgt.Schema, options) && EqualNames(lft.Name, rgt.Name, options));
 }
コード例 #14
0
ファイル: NameTransforms.cs プロジェクト: janproch/datadmin
 public override NameWithSchema RenameObject(NameWithSchema name, string objtype)
 {
     if (name.Schema == m_oldSchema)
     {
         return(new NameWithSchema(m_newSchema, name.Name));
     }
     return(name);
 }
コード例 #15
0
ファイル: DbDatabase.cs プロジェクト: janproch/datadmin
        //public void AlterTable(ITableStructure oldTable, ITableStructure newTable, DbDiffOptions opts)
        //{
        //    DbDiffTool.AlterTable(oldTable, newTable, opts, this);
        //}

        //public TableStructure AlterTable(NameWithSchema tableName, ITableStructure newTable)
        //{
        //    TableStructure tbl = (TableStructure)Tables[tableName];
        //    tbl.LoadFrom(newTable);
        //    tbl.RepairInconsistency();
        //    return tbl;
        //}

        public void DropTable(NameWithSchema tableName)
        {
            Tables.RemoveIf(t => t.FullName == tableName);
            foreach (TableStructure t in Tables)
            {
                t.DropReferencesTo(tableName);
            }
        }
コード例 #16
0
        public void RenameSpecificObject(ISpecificObjectStructure obj, NameWithSchema name)
        {
            SpecificObjectStructure o = Structure.FindOrCreateSpecificObject(obj);

            AddOperation(new AlterOperation_RenameSpecificObject {
                OldObject = o, NewName = name
            });
        }
コード例 #17
0
        public void UpdateData(NameWithSchema table, DataScript script)
        {
            TableStructure tbl = Structure.FindOrCreateTable(table);

            AddOperation(new AlterOperation_UpdateData {
                ParentTable = tbl, Script = script
            });
        }
コード例 #18
0
        public void RenameTable(ITableStructure table, NameWithSchema name)
        {
            TableStructure tbl = Structure.FindOrCreateTable(table.FullName);

            AddOperation(new AlterOperation_RenameTable {
                OldObject = tbl, NewName = name
            });
        }
コード例 #19
0
        public void RenameDomain(IDomainStructure domain, NameWithSchema newname)
        {
            DomainStructure dom = Structure.FindOrCreateDomain(domain);

            AddOperation(new AlterOperation_RenameDomain {
                OldObject = dom, NewName = newname
            });
        }
コード例 #20
0
 public override void NotifyRenameTable(NameWithSchema oldName, NameWithSchema newName)
 {
     base.NotifyRenameTable(oldName, newName);
     if (PrimaryKeyTable == oldName)
     {
         PrimaryKeyTable = newName;
     }
 }
コード例 #21
0
ファイル: DbTable.cs プロジェクト: janproch/datadmin
        //internal void AfterLoadFix()
        //{
        //    foreach (Constraint cnt in Constraints)
        //    {
        //        cnt.Table = FullName;
        //    }
        //}

        public static ITableStructure FromName(NameWithSchema name)
        {
            TableStructure res = new TableStructure();

            res.FullName = name;
            //res.FilledMembers = TableStructureMembers.Name;
            return(res);
        }
コード例 #22
0
        //private void FillBindingTables()
        //{
        //    //colBindingTable.Items.Clear();
        //    //colBindingTable.Items.Add("(SOURCE)");
        //    //for (int i = 0; i < dataGridViewRelations.RowCount; i++)
        //    //{
        //    //    if (dataGridViewRelations.Rows[i].Cells[2].Value == null) continue;
        //    //    string alias = dataGridViewRelations.Rows[i].Cells[4].Value.SafeToString();
        //    //    if (String.IsNullOrEmpty(alias)) colBindingTable.Items.Add(dataGridViewRelations.Rows[i].Cells[2].Value);
        //    //    else colBindingTable.Items.Add(alias);
        //    //}
        //}

        private ITableStructure GetTableStruct(NameWithSchema name)
        {
            if (!m_tables.ContainsKey(name))
            {
                m_tables[name] = m_db.InvokeLoadTableStructure(name, TableStructureMembers.ColumnNames | TableStructureMembers.PrimaryKey);
            }
            return(m_tables[name]);
        }
コード例 #23
0
        public static string CheckName(NameWithSchema table)
        {
            StringBuilder name = new StringBuilder();

            name.Append("CHK_");
            name.Append(table.Name);
            return(name.ToString());
        }
コード例 #24
0
 ITableStructure IDmlfHandler.GetStructure(NameWithSchema name)
 {
     if (name == null)
     {
         return(m_table);
     }
     return(GetTableStruct(name));
 }
コード例 #25
0
ファイル: DatabaseAnalyser.cs プロジェクト: janproch/datadmin
        protected virtual void LoadViewAsTable(NameWithSchema name)
        {
            string sql = "SELECT * FROM " + m_dialect.QuoteFullName(name);
            var    ts  = CachedQueryStructure(sql);

            ts.FullName = name;
            m_db.ViewAsTables.Add(ts);
        }
コード例 #26
0
ファイル: DialectExtension.cs プロジェクト: janproch/datadmin
 public static bool IsSystemObject(this ISqlDialect dialect, string objtype, NameWithSchema name)
 {
     if (name == null)
     {
         return(false);
     }
     return(dialect.IsSystemObject(objtype, name.Schema, name.Name));
 }
コード例 #27
0
 private string GetFullName(NameWithSchema name)
 {
     if (m_settings.AddSchema && !name.Schema.IsEmpty())
     {
         return(GetShortName(name.Schema) + "." + GetShortName(name.Name));
     }
     return(GetShortName(name.Name));
 }
コード例 #28
0
 public static string SafeGetSchema(this NameWithSchema name)
 {
     if (name != null)
     {
         return(name.Schema);
     }
     return(null);
 }
コード例 #29
0
ファイル: DbDatabase.cs プロジェクト: janproch/datadmin
        //DatabaseStructureMembers IDatabaseStructure.FilledMembers
        //{
        //    get { return FilledMembers; }
        //}

        #endregion

        public TableStructure AddTable(NameWithSchema name)
        {
            TableStructure res = new TableStructure();

            //res.FilledMembers = TableStructureMembers.Name;
            res.FullName = name;
            Tables.Add(res);
            return(res);
        }
コード例 #30
0
ファイル: DbDatabase.cs プロジェクト: janproch/datadmin
        public void ReorderColumns(NameWithSchema table, List <string> newColumnOrder)
        {
            var t = FindTable(table);

            if (t != null)
            {
                t.ReorderColumns(newColumnOrder);
            }
        }