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); //} }
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); }
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()); }
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()); }
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); } }
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); }
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); }
public static void AlterDatabase(this IDatabaseSource conn, IDatabaseStructure src, IDatabaseStructure dst) { conn.AlterDatabase(src, dst, new DbDiffOptions()); }