示例#1
0
        // utility function for loading details about choosed specific objects
        protected void LoadSpecificObjectDetail(string objtype, Action <SpecificObjectStructure> loadFunc)
        {
            List <NameWithSchema> objfilter;

            if (!WantSpecificObjectDetail(objtype, out objfilter))
            {
                return;
            }
            m_db.SpecByType(objtype);
            if (objfilter != null)
            {
                foreach (var oname in objfilter)
                {
                    SpecificObjectStructure speco = (SpecificObjectStructure)m_db.FindSpecificObject(objtype, oname);
                    if (speco == null)
                    {
                        speco = m_db.AddSpecificObject(objtype, DialectName, oname);
                    }
                    loadFunc(speco);
                }
            }
            else
            {
                // load all specific objects of given type
                foreach (SpecificObjectStructure o in m_db.SpecificObjects[objtype])
                {
                    loadFunc(o);
                }
            }
        }
示例#2
0
        public void ChangeSpecificObject(ISpecificObjectStructure obj, ISpecificObjectStructure newobj)
        {
            SpecificObjectStructure o = Structure.FindOrCreateSpecificObject(obj);

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

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

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

            AddOperation(new AlterOperation_CreateSpecificObject {
                NewObject = o
            }, pos);
        }
示例#6
0
        public void ChangeSpecificObjectSchema(ISpecificObjectStructure obj, string newschema)
        {
            SpecificObjectStructure spec = FindSpecificObject(obj);

            if (spec != null)
            {
                spec.ObjectName = new NameWithSchema(newschema, spec.ObjectName.Name);
            }
        }
示例#7
0
        public void RenameSpecificObject(ISpecificObjectStructure obj, string newname)
        {
            SpecificObjectStructure spec = FindSpecificObject(obj);

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

            if (spec != null)
            {
                ((SpecificObjectCollection)SpecificObjects[spec.ObjectType]).Remove(spec);
            }
        }
示例#9
0
        public SpecificObjectStructure AddSpecificObject(string objtype, string dialect, NameWithSchema name)
        {
            SpecificObjectStructure res = new SpecificObjectStructure();

            res.ObjectName      = name;
            res.ObjectType      = objtype;
            res.SpecificDialect = dialect;
            SpecByType(res.ObjectType).Add(res);
            return(res);
        }
示例#10
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);
        }
示例#11
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
        }
示例#12
0
        ISpecificObjectStructure CreateStructure(NameWithSchema name)
        {
            SpecificObjectStructure res = new SpecificObjectStructure();

            if (m_obj != null)
            {
                res.GroupId = m_obj.GroupId;
            }
            res.ObjectType      = m_objtype;
            res.CreateSql       = codeEditor1.Text;
            res.ObjectName      = name;
            res.Comment         = tbxComment.Text;
            res.SpecificDialect = Dialect.DialectName;
            return(res);
        }
        public void Edit()
        {
            if (!EditEnabled())
            {
                return;
            }
            var dbconn = this.FindDatabaseConnection(ConnPack);

            if (dbconn.DatabaseCaps.ExecuteSql)
            {
                OpenQueryParameters pars    = new OpenQueryParameters();
                IPhysicalConnection newconn = Connection.CreateConnection();
                string dbname = DatabaseName;
                if (dbname != null)
                {
                    newconn.AfterOpen += ConnTools.ChangeDatabaseCallback(dbname);
                }
                pars.GenerateSql = delegate(IPhysicalConnection conn)
                {
                    var props = new SqlFormatProperties {
                        OmitVersionTests = true
                    };
                    var dbs = conn.PhysicalFactory.CreateDatabaseSource(conn, dbname);
                    var so  = new SpecificObjectStructure(dbs.LoadSpecificObjectDetail(DbObjectType, DbObjectName));
                    if (dbconn.Dialect != null)
                    {
                        so.CreateSql = dbconn.Dialect.ReformatSpecificObject(so.ObjectType, so.CreateSql);
                    }
                    string drop   = newconn.Dialect.GenerateScript(dmp => { dmp.DropSpecificObject(so); }, props);
                    string create = newconn.Dialect.GenerateScript(dmp => { dmp.CreateSpecificObject(so); }, props);
                    return(drop + "\n\nGO\n\n" + create);
                };
                MainWindow.Instance.OpenContent(new QueryFrame(newconn, pars));
            }
            else
            {
                var frm = new SpecificObjectFrame(dbconn.CloneSource(), LoadStructure(), new ObjectEditorPars {
                });
                MainWindow.Instance.OpenContent(frm);
            }
        }
示例#14
0
        protected void LoadSpecificObjectListAndDetail(string objtype, string query, Action <DataRow, SpecificObjectStructure> loadFunc)
        {
            List <NameWithSchema> objfilter;

            if (!WantSpecificObjectList(objtype) && !WantSpecificObjectDetail(objtype, out objfilter))
            {
                return;
            }

            m_db.SpecByType(objtype);
            foreach (DataRow row in query.StartsWith("@") ? CachedSchemaRows(query.Substring(1)) : CachedQueryRows(query))
            {
                SpecificObjectStructure so = new SpecificObjectStructure();
                so.ObjectType      = objtype;
                so.SpecificDialect = m_dialect.DialectName;
                loadFunc(row, so);
                if (m_members.IgnoreSystemObjects && m_dialect.IsSystemObject(objtype, so.ObjectName))
                {
                    continue;
                }
                m_db.AddSpecificObject(so, true);
            }
        }
示例#15
0
 protected virtual void LoadViewRow(DataRow row, SpecificObjectStructure so)
 {
     so.CreateSql = row["VIEW_DEFINITION"].SafeToString();
 }