Beispiel #1
0
 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);
 }
Beispiel #2
0
 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);
     //}
 }
Beispiel #3
0
 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);
 }
Beispiel #4
0
 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;
 }
Beispiel #5
0
        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,
     });
 }
Beispiel #7
0
        public void ChangeSpecificObject(ISpecificObjectStructure obj, ISpecificObjectStructure newobj)
        {
            SpecificObjectStructure o = Structure.FindOrCreateSpecificObject(obj);

            AddOperation(new AlterOperation_ChangeSpecificObject {
                OldObject = o, NewObject = new SpecificObjectStructure(newobj)
            });
        }
Beispiel #8
0
        public void RenameSpecificObject(ISpecificObjectStructure obj, NameWithSchema name)
        {
            SpecificObjectStructure o = Structure.FindOrCreateSpecificObject(obj);

            AddOperation(new AlterOperation_RenameSpecificObject {
                OldObject = o, NewName = name
            });
        }
Beispiel #9
0
        public void DropSpecificObject(ISpecificObjectStructure obj, PlanPosition pos)
        {
            SpecificObjectStructure o = Structure.FindOrCreateSpecificObject(obj);

            AddOperation(new AlterOperation_DropSpecificObject {
                OldObject = o
            }, pos);
        }
Beispiel #10
0
        public void CreateSpecificObject(ISpecificObjectStructure obj, PlanPosition pos)
        {
            SpecificObjectStructure o = new SpecificObjectStructure(obj);

            AddOperation(new AlterOperation_CreateSpecificObject {
                NewObject = o
            }, pos);
        }
Beispiel #11
0
        public void RenameSpecificObject(ISpecificObjectStructure obj, string newname)
        {
            SpecificObjectStructure spec = FindSpecificObject(obj);

            if (spec != null)
            {
                spec.ObjectName = new NameWithSchema(spec.ObjectName.Schema, newname);
            }
        }
Beispiel #12
0
        public void DropSpecificObject(ISpecificObjectStructure obj)
        {
            SpecificObjectStructure spec = FindSpecificObject(obj);

            if (spec != null)
            {
                ((SpecificObjectCollection)SpecificObjects[spec.ObjectType]).Remove(spec);
            }
        }
Beispiel #13
0
        public void ChangeSpecificObjectSchema(ISpecificObjectStructure obj, string newschema)
        {
            SpecificObjectStructure spec = FindSpecificObject(obj);

            if (spec != null)
            {
                spec.ObjectName = new NameWithSchema(newschema, spec.ObjectName.Name);
            }
        }
Beispiel #14
0
        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);
            });
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
 public override void CreateSpecificObject(ISpecificObjectStructure obj)
 {
     switch (obj.ObjectType)
     {
     case "view":
     case "sequence":
         WriteRaw(obj.CreateSql);
         EndCommand();
         break;
     }
 }
Beispiel #18
0
        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
        }
Beispiel #19
0
        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();
            }
        }
Beispiel #21
0
 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));
         }
     }
 }
Beispiel #22
0
        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);
            }
        }
Beispiel #24
0
 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();
 }
Beispiel #25
0
        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);
        }
Beispiel #27
0
        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));
        }
Beispiel #28
0
        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("");
        }
Beispiel #29
0
        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;
            }
        }
Beispiel #30
0
        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);
                }
            }
        }