public static bool GenerateRenameSpecificObject(ISpecificObjectStructure oldObj, NameWithSchema newName, Action <ISpecificObjectStructure, string> changeSchema, Action <ISpecificObjectStructure, string> rename, bool allowChangeSchema, bool allowRename, DbDiffOptions opts) { newName = GenerateNewName(oldObj.ObjectName, newName, opts); if (DbDiffTool.EqualFullNames(oldObj.ObjectName, newName, opts)) { return(true); } if (!EqualSchemas(oldObj.ObjectName.Schema, newName.Schema, opts) && !allowChangeSchema) { return(false); } if (oldObj.ObjectName.Name != newName.Name && !allowRename) { return(false); } if (!EqualSchemas(oldObj.ObjectName.Schema, newName.Schema, opts)) { changeSchema(oldObj, newName.Schema); } if (oldObj.ObjectName.Name != newName.Name) { var tmpo = (SpecificObjectStructure)oldObj.CloneObject(); tmpo.ObjectName = new NameWithSchema(newName.Schema, oldObj.ObjectName.Name); rename(tmpo, newName.Name); } return(true); }
public static void AlterSpecificObject(ISpecificObjectStructure osrc, ISpecificObjectStructure odst, AlterPlan plan, DbDiffOptions opts, DbObjectPairing pairing) { //bool altered = false; if (osrc.CreateSql == odst.CreateSql) { plan.RenameSpecificObject(osrc, odst.ObjectName); //altered = GenerateRename(osrc.ObjectName, odst.ObjectName, // (old, sch) => // { // var o2 = new SpecificObjectStructure(osrc); // o2.ObjectName = old; // proc.ChangeSpecificObjectSchema(o2, sch); // }, // (old, nam) => // { // var o2 = new SpecificObjectStructure(osrc); // o2.ObjectName = old; // proc.RenameSpecificObject(o2, nam); // }, caps[osrc.ObjectType].ChangeSchema, caps[osrc.ObjectType].Rename, opts); } else { plan.ChangeSpecificObject(osrc, odst); } //if (!altered) //{ // proc.DropSpecificObject(osrc); // SpecificObjectStructure odst2 = new SpecificObjectStructure(odst); // odst2.ObjectName = GenerateNewName(osrc.ObjectName, odst.ObjectName, opts); // proc.CreateSpecificObject(odst); //} }
public static bool EqualsSpecificObjects(ISpecificObjectStructure src, ISpecificObjectStructure dst, DbDiffOptions options) { if (!EqualFullNames(src.ObjectName, dst.ObjectName, options)) { return(false); } if (src.ObjectType != dst.ObjectType) { return(false); } if (src.CreateSql == null || dst.CreateSql == null) { if (src.CreateSql != dst.CreateSql) { return(false); } } else { if (src.SpecificDialect == dst.SpecificDialect && src.SpecificDialect != null) { var dialect = (ISqlDialect)DialectAddonType.Instance.FindHolder(src.SpecificDialect).CreateInstance(); return(dialect.EqualSpecificObjects(src.ObjectType, src.CreateSql, dst.CreateSql)); } else { if (src.CreateSql.Trim() != dst.CreateSql.Trim()) { return(false); } } } return(true); }
public DbDefChooseSpecObjectTreeNode(DbDefChooseSpecObjectsTreeNode parent, ISpecificObjectStructure obj) : base(parent, obj.ObjectName.ToString()) { m_repr = SpecificRepresentationAddonType.Instance.FindRepresentation(obj.ObjectType); m_obj = obj; m_db = parent.m_db; }
public override void DropSpecificObject(ISpecificObjectStructure obj, DropFlags flags) { bool testIfExist = (flags & DropFlags.TestIfExist) != 0; switch (obj.ObjectType) { case "view": PutCmdTest("50010", "^drop ^view%k %f", testIfExist ? " if exists" : "", obj.ObjectName); break; case "procedure": PutCmdTest("50010", "^drop ^procedure%k %f", testIfExist ? " if exists" : "", obj.ObjectName); break; case "function": PutCmdTest("50010", "^drop ^function%k %f", testIfExist ? " if exists" : "", obj.ObjectName); break; case "trigger": PutCmdTest("50017", "^drop ^trigger%k %f", testIfExist ? " if exists" : "", obj.ObjectName); break; case "mysql.event": PutCmdTest("51000", "^drop ^event%k %f", testIfExist ? " if exists" : "", obj.ObjectName); break; default: throw new NotImplementedError("DAE-00145"); } }
public static DependencyItem GetDepencencyItem(this ISpecificObjectStructure obj) { return(new DependencyItem { Name = obj.ObjectName, ObjectType = obj.ObjectType, }); }
public void ChangeSpecificObject(ISpecificObjectStructure obj, ISpecificObjectStructure newobj) { SpecificObjectStructure o = Structure.FindOrCreateSpecificObject(obj); AddOperation(new AlterOperation_ChangeSpecificObject { OldObject = o, NewObject = new SpecificObjectStructure(newobj) }); }
public void RenameSpecificObject(ISpecificObjectStructure obj, NameWithSchema name) { SpecificObjectStructure o = Structure.FindOrCreateSpecificObject(obj); AddOperation(new AlterOperation_RenameSpecificObject { OldObject = o, NewName = name }); }
public void DropSpecificObject(ISpecificObjectStructure obj, PlanPosition pos) { SpecificObjectStructure o = Structure.FindOrCreateSpecificObject(obj); AddOperation(new AlterOperation_DropSpecificObject { OldObject = o }, pos); }
public void CreateSpecificObject(ISpecificObjectStructure obj, PlanPosition pos) { SpecificObjectStructure o = new SpecificObjectStructure(obj); AddOperation(new AlterOperation_CreateSpecificObject { NewObject = o }, pos); }
public void RenameSpecificObject(ISpecificObjectStructure obj, string newname) { SpecificObjectStructure spec = FindSpecificObject(obj); if (spec != null) { spec.ObjectName = new NameWithSchema(spec.ObjectName.Schema, newname); } }
public void DropSpecificObject(ISpecificObjectStructure obj) { SpecificObjectStructure spec = FindSpecificObject(obj); if (spec != null) { ((SpecificObjectCollection)SpecificObjects[spec.ObjectType]).Remove(spec); } }
public void ChangeSpecificObjectSchema(ISpecificObjectStructure obj, string newschema) { SpecificObjectStructure spec = FindSpecificObject(obj); if (spec != null) { spec.ObjectName = new NameWithSchema(newschema, spec.ObjectName.Name); } }
public SpecificObjectStructure FindOrCreateSpecificObject(ISpecificObjectStructure obj) { var res = FindSpecificObject(obj); if (res == null) { res = AddSpecificObject(obj, false); } return(res); }
public override void RenameObject(string newname) { var dbconn = this.FindDatabaseConnection(ConnPack); dbconn.Connection.Invoke((Action) delegate() { ISpecificObjectStructure so = LoadStructure(); dbconn.RenameObject(so, newname); }); }
public SpecificObjectStructure AddSpecificObject(ISpecificObjectStructure obj, bool reuseGroupId) { SpecificObjectStructure res = new SpecificObjectStructure(obj); if (!reuseGroupId) { res.GroupId = Guid.NewGuid().ToString(); } SpecByType(res.ObjectType).Add(res); return(res); }
public override void CreateSpecificObject(ISpecificObjectStructure obj) { switch (obj.ObjectType) { case "view": case "sequence": WriteRaw(obj.CreateSql); EndCommand(); break; } }
public void AlterSpecificObject(ISpecificObjectStructure olddef, ISpecificObjectStructure newdef) { SpecificObjectStructure old = FindSpecificObject(olddef); old.Comment = newdef.Comment; old.CreateSql = newdef.CreateSql; old.ObjectName = newdef.ObjectName; old.SpecificData.Clear(); old.SpecificData.AddAll(newdef.SpecificData); old.SpecificDialect = newdef.SpecificDialect; old.DependsOn = null; // clear dependency information }
public override void CreateSpecificObject(ISpecificObjectStructure obj) { string createsql = obj.CreateSql; if (FormatProperties.CleanupSpecificObjectCode) { string regex = "create\\s*(or\\s*replace)?\\s*" + obj.ObjectType + "\\s*(\\\"[^\\\"]+\\\"\\.)\\\"[^\\\"]+\\\""; createsql = Regex.Replace(createsql, regex, MatchEval, RegexOptions.IgnoreCase); } WriteRaw(createsql); EndCommand(); }
public void ChangeSchema() { var dbconn = this.FindDatabaseConnection(ConnPack); var schemata = StructLoader.SchemaNames(dbmem => dbconn.InvokeLoadStructure(dbmem, null)); string newschema = InputBox.Run("s_new_schema", DbObjectName.Schema, schemata); if (newschema != null) { ISpecificObjectStructure so = LoadStructure(); dbconn.ChangeObjectSchema(so, newschema); //m_conn.RunScript(dmp => { dmp.ChangeSpecificObjectSchema(so, newschema); }); CallCompleteChanged(); } }
public SpecificObjectStructure(ISpecificObjectStructure src) : base(src) { CreateSql = src.CreateSql; ObjectType = src.ObjectType; SpecificDialect = src.SpecificDialect; ObjectName = src.ObjectName; RelatedTable = src.RelatedTable; SpecificData.AddAll(src.SpecificData); if (src.DependsOn != null) { DependsOn = new List <DependencyItem>(); foreach (var p in src.DependsOn) { DependsOn.Add(new DependencyItem(p)); } } }
public override void DropSpecificObject(ISpecificObjectStructure obj, DropFlags flags) { bool testIfExist = (flags & DropFlags.TestIfExist) != 0; switch (obj.ObjectType) { case "view": PutCmd("^drop ^view%k %f", testIfExist ? " if exists" : "", obj.ObjectName); break; case "sequence": PutCmd("^drop ^sequence%k %f", testIfExist ? " if exists" : "", obj.ObjectName); break; default: throw new NotImplementedError("DAE-00147"); } }
public static IEnumerable <ISpecificObjectStructure> GetSpecObjectsOrderByDependency(this IDatabaseStructure db) { List <ISpecificObjectStructure> all = new List <ISpecificObjectStructure>(); all.AddRange(db.GetAllSpecificObjects()); while (all.Count > 0) { ISpecificObjectStructure selected = null; foreach (var obj in all) { bool objIndependent = true; var deps = obj.DependsOn; if (deps == null && db.Dialect != null) { deps = db.Dialect.DetectDependencies(obj); } if (deps != null) { foreach (var dep in deps) { if (DepInList(dep, all)) { objIndependent = false; break; } } } if (objIndependent) { selected = obj; break; } } if (selected == null) { // throw new Exception("Object dependency cycle"); selected = all[0]; } yield return(selected); all.Remove(selected); } }
public SpecificObjectFrame(IDatabaseSource conn, ISpecificObjectStructure obj, ObjectEditorPars pars) { InitializeComponent(); m_pars = pars; m_conn = conn; m_obj = obj; m_objtype = obj.ObjectType; if (m_conn != null) { codeEditor1.Dialect = m_conn.Dialect; m_reformat = new ReformatToolkit(m_conn.Dialect, codeEditor1); } else { m_reformat = new ReformatToolkit(new GenericDialect(), codeEditor1); } m_repr = SpecificRepresentationAddonType.Instance.FindRepresentation(m_obj.ObjectType); FillFromStructure(); }
public override void DropSpecificObject(ISpecificObjectStructure obj, DropFlags flags) { bool testIfExist = (flags & DropFlags.TestIfExist) != 0; switch (obj.ObjectType) { case "view": if (testIfExist) { Put("IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'%f'))&n", obj.ObjectName); } PutCmd("^drop ^view %f", obj.ObjectName); break; case "procedure": if (testIfExist) { Put("IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'%f') AND type in (N'P', N'PC'))&n", obj.ObjectName); } PutCmd("^drop ^procedure %f", obj.ObjectName); break; case "function": if (testIfExist) { Put("IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'%f') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))&n", obj.ObjectName); } PutCmd("^drop ^function %f", obj.ObjectName); break; case "trigger": if (testIfExist) { Put("IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'%f'))&n", obj.ObjectName); } PutCmd("^drop ^trigger %f", obj.ObjectName); break; default: throw new NotImplementedError("DAE-00333"); } }
public static List <DependencyItem> BuildDependencyList(this ISpecificObjectStructure spec, DepsCollector dc) { var res = new List <DependencyItem>(); foreach (var item in dc.Names) { foreach (var obj in spec.Database.GetAllDepItems()) { if (res.Contains(obj)) { continue; } if (item.Match(obj) && !item.Match(spec.GetDepencencyItem())) { res.Add(obj); } } } return(res); }
public override List <DependencyItem> DetectDependencies(ISpecificObjectStructure spec) { if (spec.CreateSql == null) { return(new List <DependencyItem>()); } var dc = new DepsCollector(); MySQLLexer lexer = new MySQLLexer(new ANTLRReaderStream(new StringReader(spec.CreateSql))); CommonTokenStream tokens = new CommonTokenStream(lexer); MySQLParser parser = new MySQLParser(tokens); parser.find_deps(dc); if (parser.Errors != null) { var err = new InternalError("DAE-00057 Error parsing dependencies:" + parser.Errors); err.Data["sql"] = spec.CreateSql; throw err; } return(spec.BuildDependencyList(dc)); }
public override string CreateText(AppObject appobj, ConnectionPack connpack) { ObjectPath objpath = appobj.GetObjectPath(); IDatabaseSource db = appobj.FindDatabaseConnection(connpack); IPhysicalConnection conn = appobj.FindPhysicalConnection(connpack); var sobj = appobj as SpecificObjectAppObject; if (conn != null && objpath != null) { string text = conn.InvokeR <string>((Func <string>) delegate() { ISpecificObjectStructure so = db.LoadSpecificObjectDetail(sobj.DbObjectType, objpath.ObjectName); return(conn.Dialect.GenerateScript(dmp => { dmp.CreateSpecificObject(so); }, AppObjectSqlGeneratorBase.TemplateFormatProps)); }); if (conn.Dialect != null) { text = conn.Dialect.ReformatSpecificObject(sobj.DbObjectType, text); } return(text); } return(""); }
public override void CreateSpecificObject(ISpecificObjectStructure obj) { switch (obj.ObjectType) { case "trigger": DelimChangeBegin(); WriteRawTest("50017", obj.CreateSql); EndCommand(); DelimChangeEnd(); break; case "view": WriteRawTest("50010", RemoveDefiner(obj.CreateSql)); EndCommand(); break; case "procedure": DelimChangeBegin(); WriteRawTest("50010", RemoveDefiner(obj.CreateSql)); EndCommand(); DelimChangeEnd(); break; case "function": DelimChangeBegin(); WriteRawTest("50010", RemoveDefiner(obj.CreateSql)); EndCommand(); DelimChangeEnd(); break; case "mysql.event": DelimChangeBegin(); WriteRawTest("51000", obj.CreateSql); EndCommand(); DelimChangeEnd(); break; } }
public override bool Save() { if (m_obj == null) { return(SaveAs()); } else { try { ISpecificObjectStructure newStructure = CreateStructure(m_obj.ObjectName); if (m_conn.DatabaseCaps.ExecuteSql) { string sql = Dialect.GenerateScript(dmp => { dmp.DropSpecificObject(m_obj); dmp.CreateSpecificObject(newStructure); }); if (!SqlConfirmForm.Run(sql, Dialect)) { return(false); } } m_conn.AlterObject(m_obj, newStructure); if (m_pars != null && m_pars.SavedCallback != null) { m_pars.SavedCallback(); } m_obj = m_conn.InvokeLoadSpecificObjectDetail(m_obj.ObjectType, m_obj.ObjectName); FillFromStructure(); return(true); } catch (Exception e) { Errors.Report(e); return(false); } } }