예제 #1
0
 public override void WriteStructureBeforeData(IDatabaseStructure db)
 {
     if (m_db.DatabaseCaps.ExecuteSql)
     {
         DatabaseStructure dbcopy = new DatabaseStructure(db);
         if (!Dialect.DialectCaps.UncheckedReferences)
         {
             foreach (TableStructure tbl in dbcopy.Tables)
             {
                 tbl.RemoveConstraints <IForeignKey>();
             }
         }
         m_db.InvokeScript(dmp => { dmp.CreateDatabaseObjects(dbcopy); }, ProgressInfo);
         m_db.InvokeScript(dmp => SqlTemplates.GenerateInsertFixedData(dmp, dbcopy), ProgressInfo);
     }
     else
     {
         var d0 = new DatabaseStructure();
         d0.GroupId = db.GroupId;
         m_db.AlterDatabase(d0, db);
     }
     //foreach (var tbl in db.Tables)
     //{
     //    Logging.Debug("Creating table {0}", tbl.FullName);
     //    SetCurWork(String.Format("{0} {1}", Texts.Get("s_creating_table"), tbl.FullName));
     //    TableStructure tsNoFk = new TableStructure(tbl);
     //    tsNoFk.RemoveConstraints<IForeignKey>();
     //    m_db.CreateTable(tsNoFk);
     //}
 }
예제 #2
0
        public static void CreateObject(this IDatabaseSource conn, IAbstractObjectStructure obj)
        {
            DatabaseStructure oldDb = new DatabaseStructure();
            DatabaseStructure newDb = new DatabaseStructure(oldDb);

            newDb.AddObject(obj, true);
            conn.AlterDatabase(oldDb, newDb);
        }
예제 #3
0
        public static void DropObject(this IDatabaseSource conn, IAbstractObjectStructure obj)
        {
            DatabaseStructure oldDb = new DatabaseStructure();

            oldDb.AddObject(obj, true);
            DatabaseStructure newDb = new DatabaseStructure(oldDb);

            newDb.DropObject(obj);
            conn.AlterDatabase(oldDb, newDb, DbDiffOptions.AlterStructureOptions());
        }
예제 #4
0
        public static void ChangeObject(this IDatabaseSource conn, IAbstractObjectStructure oldObj, Action <AbstractObjectStructure> changeFunc)
        {
            DatabaseStructure oldDb = new DatabaseStructure();

            oldDb.AddObject(oldObj, true);
            DatabaseStructure       newDb  = new DatabaseStructure(oldDb);
            AbstractObjectStructure newObj = (AbstractObjectStructure)newDb.FindByGroupId(oldObj);

            changeFunc(newObj);
            conn.AlterDatabase(oldDb, newDb, DbDiffOptions.AlterStructureOptions());
        }
예제 #5
0
        private void btnSynchronize_Click(object sender, EventArgs e)
        {
            if (m_dstDb == null || m_diff == null)
            {
                return;
            }

            if (objectListTables.CheckedItems.Count == 0)
            {
                StdDialog.ShowInfo("s_no_synchronize_action_checked");
                return;
            }

            try
            {
                bool ok = false;
                if (m_dstDb.DatabaseCaps.ExecuteSql)
                {
                    // synchronize using SQL dumping
                    ok = RunActionAsSql(m_diff.Actions);
                }
                else
                {
                    // synchronize using data-sources alter/create/drop methods
                    if (MessageBox.Show(Texts.Get("s_really_change_destination_structure"), VersionInfo.ProgramTitle, MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        var plan = m_diff.Actions.GetPlanForThis(m_dstDb, true);
                        var opts = CreateDbDiffOptions();
                        m_dstDb.AlterDatabase(plan, opts);
                        ok = true;
                    }
                }
                if (ok)
                {
                    RefreshData(false, true);
                    Usage.AddSub("synchronize_ok", m_src.ToString(), m_dst.ToString());
                }
            }
            catch (Exception err)
            {
                Errors.Report(err);
            }
        }
예제 #6
0
        public override bool Save()
        {
            var dialect = m_conn.Dialect ?? GenericDialect.Instance;
            var plan    = new AlterPlan();
            var opts    = new DbDiffOptions();
            var log     = new CachingLogger(LogLevel.Info);

            opts.AlterLogger = log;
            DbDiffTool.AlterDatabase(plan, new DbObjectPairing(m_origDb, m_db), opts);
            string alterSql = dialect.GenerateScript(dmp => plan.CreateRunner().Run(dmp, opts));

            if (!SqlConfirmForm.Run(alterSql, dialect, log))
            {
                return(false);
            }
            m_conn.AlterDatabase(plan, opts);
            objectGridView1.Modified = false;
            UpdateState();
            LoadStructure();
            return(true);
        }
예제 #7
0
        public static void AlterObject(this IDatabaseSource conn, IAbstractObjectStructure oldObj, IAbstractObjectStructure newObj, DbDiffOptions options)
        {
            if (oldObj == null)
            {
                conn.CreateObject(newObj);
                return;
            }
            if (newObj == null)
            {
                conn.DropObject(oldObj);
                return;
            }
            if (oldObj.GroupId != newObj.GroupId)
            {
                throw new InternalError("DAE-00010 Altering object with different groupid");
            }
            DatabaseStructure oldDb = new DatabaseStructure();
            DatabaseStructure newDb = new DatabaseStructure(oldDb);

            oldDb.AddObject(oldObj, true);
            newDb.AddObject(newObj, true);
            conn.AlterDatabase(oldDb, newDb, options);
        }
예제 #8
0
 public static void AlterDatabase(this IDatabaseSource conn, IDatabaseStructure src, IDatabaseStructure dst)
 {
     conn.AlterDatabase(src, dst, new DbDiffOptions());
 }