Ejemplo n.º 1
0
 public DataSetModel(DatabaseInfo targetDatabase, IShellContext context, IDatabaseFactory factory)
 {
     _targetDatabase = targetDatabase;
     _context = context;
     _factory = factory;
     _dda = _factory.CreateDataAdapter();
 }
Ejemplo n.º 2
0
        public void GetCommands(DmlfBatch res, DatabaseInfo db, IDialectDataAdapter dda, ICdlValueConvertor converter)
        {
            var cmd = new DmlfInsert();
            cmd.InsertTarget = TargetTable;

            var table = db.FindTable(TargetTable);
            if (table == null) return;

            var autoinc = table.FindAutoIncrementColumn();
            bool isAutoInc = autoinc != null && Values.Any(x => x.Column == autoinc.Name);

            GetValues(cmd.Columns, Values, table, dda, converter);

            if (isAutoInc)
            {
                res.AllowIdentityInsert(table.FullName, true);
            }

            res.Commands.Add(cmd);

            if (isAutoInc)
            {
                res.AllowIdentityInsert(table.FullName, false);
            }
        }
 private void setupDbCommand( DbCommand dbCmd, DatabaseInfo databaseInfo )
 {
     dbCmd.CommandText = sproc;
     dbCmd.CommandType = CommandType.StoredProcedure;
     foreach( var p in parameters )
         dbCmd.Parameters.Add( p.GetAdoDotNetParameter( databaseInfo ) );
 }
Ejemplo n.º 4
0
 public List<ChangeSetUpdateItem> GenerateCascadeUpdates(DatabaseInfo db)
 {
     var res = new List<ChangeSetUpdateItem>();
     GenerateCascadeUpdates(db, res);
     res.Reverse();
     return res;
 }
        internal static void Generate(
            DBConnection cn, TextWriter writer, string baseNamespace, Database database, Configuration.SystemDevelopment.Database configuration)
        {
            if( configuration.queries == null )
                return;

            info = cn.DatabaseInfo;
            writer.WriteLine( "namespace " + baseNamespace + "." + database.SecondaryDatabaseName + "Retrieval {" );

            foreach( var query in configuration.queries ) {
                List<Column> columns;
                try {
                    columns = validateQueryAndGetColumns( cn, query );
                }
                catch( Exception e ) {
                    throw new UserCorrectableException( "Column retrieval failed for the " + query.name + " query.", e );
                }

                CodeGenerationStatics.AddSummaryDocComment( writer, "This object holds the values returned from a " + query.name + " query." );
                writer.WriteLine( "public static partial class " + query.name + "Retrieval {" );

                // Write nested classes.
                DataAccessStatics.WriteRowClasses( writer, columns, localWriter => { } );
                writeCacheClass( writer, database, query );

                writer.WriteLine( "private const string selectFromClause = @\"" + query.selectFromClause + " \";" );
                foreach( var postSelectFromClause in query.postSelectFromClauses )
                    writeQueryMethod( writer, database, query, postSelectFromClause );
                writer.WriteLine( "static partial void updateSingleRowCaches( Row row );" );
                writer.WriteLine( "}" ); // class
            }
            writer.WriteLine( "}" ); // namespace
        }
Ejemplo n.º 6
0
        private void GenerateCascadeUpdates(DatabaseInfo db, List<ChangeSetUpdateItem> res)
        {
            if (!IsUpdatingPk(db)) return;
            var table = db.FindTable(TargetTable);
            if (table == null) return;
            foreach (var fk in table.GetReferences())
            {
                var newItem = new ChangeSetUpdateItem
                    {
                        LinkedInfo = LinkedInfo,
                        TargetTable = fk.OwnerTable.FullName,
                    };
                newItem.Conditions.AddRange(GetPrefixedConditions(Conditions, fk.ConstraintName));
                res.Add(newItem);

                for (int i = 0; i < fk.Columns.Count; i++)
                {
                    string pkcol = fk.RefColumns[i].RefColumnName;
                    var val = Values.FirstOrDefault(x => x.Column == pkcol);
                    if (val == null) continue;

                    newItem.Values.Add(new ChangeSetValue
                        {
                            Column = fk.Columns[i].RefColumnName,
                            Value = val.Value,
                        });
                }
            }
        }
Ejemplo n.º 7
0
 public RecreatedItem CloneForStructure(DatabaseInfo s)
 {
     var res = new RecreatedItem();
     res.RecreatedObject = s.FindByGroupId(RecreatedObject.GroupId);
     if (NewVersion != null) res.NewVersion = NewVersion.CloneObject(null);
     return res;
 }
Ejemplo n.º 8
0
        protected static bool GetCondition(DmlfCommandBase cmd, ChangeSetItem item, ChangeSetCondition cond, DatabaseInfo db)
        {
            var source = new DmlfSource
                {
                    Alias = "basetbl",
                    LinkedInfo = item.LinkedInfo,
                    TableOrView = item.TargetTable,
                };
            var colref = cmd.SingleFrom.GetColumnRef(source, item.TargetTable, StructuredIdentifier.Parse(cond.Column), db, DmlfJoinType.Inner);
            if (colref == null) return false;

            //var table = db.FindTable(item.TargetTable);
            //if (table == null) return false;
            //var column = table.FindColumn(cond.Column);
            //if (column == null) return false;

            var colexpr = new DmlfColumnRefExpression
                {
                    Column = colref
                };
            var column = colref.FindSourceColumn(db);

            cmd.AddAndCondition(FilterParser.FilterParser.ParseFilterExpression(column != null ? column.CommonType : new DbTypeString(), colexpr, cond.Expression));
            return true;
        }
        public ValueContainer( string name, Type dataType, string dbTypeString, int size, bool allowsNull, DatabaseInfo databaseInfo )
        {
            this.name = name;
            pascalCasedName = databaseInfo is OracleInfo ? name.OracleToEnglish().EnglishToPascal() : name;
            pascalCasedNameExceptForOracle = databaseInfo is OracleInfo ? name : pascalCasedName;
            unconvertedDataType = dataType;
            this.dbTypeString = dbTypeString;
            nullValueExpression = databaseInfo is OracleInfo && new[] { "Clob", "NClob" }.Contains( dbTypeString ) ? "\"\"" : "";
            this.size = size;

            // MySQL LONGTEXT returns zero for size.
            if( databaseInfo is MySqlInfo && dbTypeString == "Text" && size == 0 )
                this.size = int.MaxValue;

            if( databaseInfo is MySqlInfo && dbTypeString == "Bit" && this.size == 1 ) {
                if( unconvertedDataType != typeof( ulong ) )
                    throw new ApplicationException( "The unconverted data type was not ulong." );

                this.dataType = typeof( bool );
                incomingValueConversionExpressionGetter = valueExpression => "System.Convert.ToBoolean( {0} )".FormatWith( valueExpression );
                incomingValueConverter = value => Convert.ToBoolean( value );
                outgoingValueConversionExpressionGetter = valueExpression => "System.Convert.ToUInt64( {0} )".FormatWith( valueExpression );
            }
            else {
                this.dataType = unconvertedDataType;
                incomingValueConversionExpressionGetter = valueExpression => "({0}){1}".FormatWith( dataType.ToString(), valueExpression );
                incomingValueConverter = value => value;
                outgoingValueConversionExpressionGetter = valueExpression => valueExpression;
            }

            this.allowsNull = allowsNull;
        }
 static DatabaseInfoKeeper()
 {
     var databaseName = WebConfigurationManager.AppSettings["DatabaseName"];
     var filePath = string.Format("{0}{1}.sqlite", HostingEnvironment.ApplicationPhysicalPath, databaseName);
     var connectionString = string.Format("Data Source={0};Version=3;", filePath);
     Main = new DatabaseInfo(databaseName, filePath, connectionString);
 }
Ejemplo n.º 11
0
 public bool IsUpdatingPk(DatabaseInfo db)
 {
     var table = db.FindTable(TargetTable);
     if (table == null) return false;
     if (table.PrimaryKey == null) return false;
     return Values.Any(x => table.PrimaryKey.Columns.Any(y => System.String.Compare(x.Column, y.RefColumnName, System.StringComparison.OrdinalIgnoreCase) == 0));
 }
Ejemplo n.º 12
0
 protected static bool GetConditions(DmlfCommandBase cmd, ChangeSetItem item, List<ChangeSetCondition> conditions, DatabaseInfo db)
 {
     foreach (var cond in conditions)
     {
         if (!GetCondition(cmd, item, cond, db)) return false;
     }
     return true;
 }
Ejemplo n.º 13
0
 public AlterOperation CloneForStructure(DatabaseInfo s)
 {
     Type t = GetType();
     var res = t.GetConstructor(new Type[] { }).Invoke(new object[] { }) as AlterOperation;
     res.AssignFrom(this);
     if (s != null) res.ChangeStructure(s);
     return res;
 }
Ejemplo n.º 14
0
        //public void SaveToXml(XmlElement xml)
        //{
        //    foreach (var elem in Inserts)
        //    {
        //        elem.SaveToXml(xml.AddChild("Insert"));
        //    }
        //    foreach (var elem in Updates)
        //    {
        //        elem.SaveToXml(xml.AddChild("Update"));
        //    }
        //    foreach (var elem in Deletes)
        //    {
        //        elem.SaveToXml(xml.AddChild("Delete"));
        //    }
        //}

        //private void DumpTarget(ISqlDumper dmp, ChangeSetItem item)
        //{
        //    string linkedInfoStr = item.LinkedInfo != null ? item.LinkedInfo.ToString() : "";
        //    dmp.Put("%s%f", linkedInfoStr, item.TargetTable);
        //}

        //private void DumpWhere(ISqlDumper dmp, ChangeSetItem item, List<ChangeSetCondition> conditions, DatabaseInfo db)
        //{
        //    dmp.Put("^ where ");
        //    bool wasCond = false;
        //    foreach(var cond in conditions)
        //    {
        //        if (wasCond) dmp.Put(" ^and ");
        //        wasCond = true;
        //        DumpCondition(dmp, item, cond, db);
        //    }
        //}

        public DmlfBatch GetCommands(DatabaseInfo db, IDatabaseFactory factory)
        {
            var disableFks = new HashSet<Tuple<NameWithSchema, string>>();
            var dda = factory.CreateDataAdapter();
            var converter = new CdlValueConvertor(new DataFormatSettings());

            foreach (var upd in Updates)
            {
                if (upd.DisableReferencedForeignKeys || upd.UpdateReferences || DisableReferencedForeignKeys || UpdateReferences)
                {
                    var table = db.FindTable(upd.TargetTable);
                    if (table == null) continue;
                    foreach (var fk in table.GetReferences())
                    {
                        disableFks.Add(Tuple.Create(fk.OwnerTable.FullName, fk.ConstraintName));
                    }
                }
            }

            var res = new DmlfBatch();

            foreach (var fk in disableFks) res.DisableConstraint(fk.Item1, fk.Item2, true);

            foreach (var ins in Inserts)
            {
                ins.GetCommands(res, db, dda, converter);
            }

            foreach (var upd in Updates)
            {
                upd.GetInsertCommands(res, db, this, dda, converter);
            }

            foreach (var upd in Updates)
            {
                upd.GetCommands(res, db, this, dda, converter);
            }

            foreach (var upd in Updates)
            {
                upd.GetDeleteCommands(res, db, this);
            }

            foreach (var del in Deletes)
            {
                del.GetCommands(res, db, this);
            }

            foreach (var fk in disableFks) res.DisableConstraint(fk.Item1, fk.Item2, false);

            res.Commands.ForEach(x =>
                {
                    var cmd = x as DmlfCommandBase;
                    if (cmd != null) cmd.SimplifyFromAliases();
                });

            return res;
        }
Ejemplo n.º 15
0
 public bool IsDuplicatingIdentity(DatabaseInfo db, ChangeSetModel model)
 {
     if (!UpdateReferences && !model.UpdateReferences) return false;
     if (!IsUpdatingPk(db)) return false;
     var table = db.FindTable(TargetTable);
     if (table == null) return false;
     var autoinc = table.FindAutoIncrementColumn();
     return autoinc != null && Values.Any(x => x.Column == autoinc.Name);
 }
Ejemplo n.º 16
0
 public void FullAnalysis()
 {
     CheckInput();
     if (Structure != null) throw new Exception("DBSH-00126 Structure must not be filled");
     if (ChangeSet != null) throw new Exception("DBSH-00127 ChangeSet must not be filled");
     Structure = new DatabaseInfo();
     if (FilterOptions == null) FilterOptions = new DatabaseAnalyserFilterOptions();
     DoRunAnalysis();
     SortStructureItems();
 }
        void InlineDbCommandCondition.AddToCommand( IDbCommand command, DatabaseInfo databaseInfo, string parameterName )
        {
            var parameter = columnValue.GetParameter( name: parameterName );

            if( parameter.ValueIsNull )
                command.CommandText += columnValue.ColumnName + " IS NULL";
            else {
                command.CommandText += columnValue.ColumnName + " = " + parameter.GetNameForCommandText( databaseInfo );
                command.Parameters.Add( parameter.GetAdoDotNetParameter( databaseInfo ) );
            }
        }
Ejemplo n.º 18
0
        private DmlfSource DoAddOrFindRelation(DmlfSource baseSource, NameWithSchema baseTable, StructuredIdentifier relationJoined, StructuredIdentifier relationToJoin, DatabaseInfo db, DmlfJoinType joinType)
        {
            if (relationToJoin.IsEmpty) return baseSource;
            string relName = relationToJoin.First;
            string alias = String.Format("_REF{0}_{1}", relationJoined.NameItems.Select(x => "_" + x).CreateDelimitedText(""), relName);
            var source = FindSourceByAlias(alias);
            if (source == null)
            {
                var baseTableInfo = db.FindTable(baseTable);
                var fk = baseTableInfo.ForeignKeys.FirstOrDefault(x => System.String.Compare(x.ConstraintName, relName, StringComparison.OrdinalIgnoreCase) == 0);
                if (fk == null)
                {
                    var column = baseTableInfo.FindColumn(relName);
                    if (column != null) fk = column.GetForeignKeys().FirstOrDefault(x => x.Columns.Count == 1);
                }
                if (fk == null) return null;

                source = new DmlfSource
                    {
                        TableOrView = fk.RefTableFullName,
                        Alias = alias,
                    };
                var relation = new DmlfRelation
                    {
                        Reference = source,
                        JoinType = joinType,
                    };
                for (int i = 0; i < fk.Columns.Count; i++)
                {
                    relation.Conditions.Add(new DmlfEqualCondition
                        {
                            LeftExpr = new DmlfColumnRefExpression
                                {
                                    Column = new DmlfColumnRef
                                        {
                                            ColumnName = fk.Columns[0].RefColumnName,
                                            Source = baseSource,
                                        }
                                },
                            RightExpr = new DmlfColumnRefExpression
                                {
                                    Column = new DmlfColumnRef
                                        {
                                            ColumnName = fk.RefColumns[0].RefColumnName,
                                            Source = source,
                                        }
                                },
                        });
                    Relations.Add(relation);
                }
            }
            if (relationToJoin.IsEmpty) return source;
            return DoAddOrFindRelation(source, source.TableOrView, relationJoined/relationToJoin.First, relationToJoin.WithoutFirst, db, joinType);
        }
        /// <summary>
        /// Given a string, returns all instances of @abc in an ordered set containing abc (the token without the @ sign). If a token is used more than once, it
        /// only appears in the list once. A different prefix may be used for certain databases.
        /// </summary>
        internal static ListSet<string> GetNamedParamList( DatabaseInfo info, string statement )
        {
            // We don't want to find parameters in quoted text.
            statement = statement.RemoveTextBetweenStrings( "'", "'" ).RemoveTextBetweenStrings( "\"", "\"" );

            var parameters = new ListSet<string>();
            foreach( Match match in Regex.Matches( statement, getParamRegex( info ) ) )
                parameters.Add( match.Value.Substring( 1 ) );

            return parameters;
        }
Ejemplo n.º 20
0
        public void AddCollectionNodes(DatabaseInfo db, TreeNode dbNode)
        {
            var database = Server.GetDatabase(db.Name);

            foreach(CollectionInfo collection in database.GetAllCollections())
            {
                TreeNode colNode = new TreeNode(collection.Name, 2, 2);

                dbNode.Nodes.Add(colNode);
            }
        }
Ejemplo n.º 21
0
 public DatabaseDiff(DatabaseInfo src, DatabaseInfo dst, DbDiffOptions options, IDatabaseFactory factory)
 {
     _factory = factory;
     _src = src.CloneDatabase();
     _dst = dst.CloneDatabase();
     _actions = new DbDiffAction(this);
     //m_actions = new DiffActionDatabase(this, m_src, m_dst);
     _options = options;
     RebuildGroupIdDictionary();
     if (_src.GroupId != _dst.GroupId) CreatePairing();
     CreateActions();
 }
Ejemplo n.º 22
0
        /// <summary>
        /// Generates the cascade deletions.
        /// </summary>
        /// <param name="db">The db.</param>
        /// <returns></returns>
        public List<ChangeSetDeleteItem> GenerateCascadeDeletions(DatabaseInfo db)
        {
            var res = new List<ChangeSetDeleteItem>();
            DoGenerateCascadeDeletions(db, res);

            var dct = new Dictionary<NameWithSchema, DeleteWrapper>();
            var queue = new List<DeleteWrapper>();
            foreach (var item in res)
            {
                DeleteWrapper wrap;
                if (!dct.ContainsKey(item.TargetTable))
                {
                    wrap = new DeleteWrapper();
                    dct[item.TargetTable] = wrap;
                    wrap.Table = db.FindTable(item.TargetTable);
                    wrap.Refs = wrap.Table.GetReferences().Select(x => x.OwnerTable.FullName).ToList();
                    wrap.Refs.RemoveAll(x => x == wrap.Table.FullName);
                    queue.Add(wrap);
                }
                else
                {
                    wrap = dct[item.TargetTable];
                }
                wrap.Items.Add(item);
            }
            queue.Reverse();

            var resWrappers = new List<DeleteWrapper>();

            while (queue.Any())
            {
                DeleteWrapper selected = null;
                foreach (var wrap in queue)
                {
                    if (wrap.Refs.All(x => resWrappers.Any(y => y.Table.FullName == x)))
                    {
                        selected = wrap;
                        break;
                    }
                }
                if (selected == null)
                {
                    // omit partial ordering, if order is not possible
                    selected = queue.First();
                }
                queue.Remove(selected);
                resWrappers.Add(selected);
            }

            return resWrappers.SelectMany(x => x.Items).ToList();
        }
        /// <summary>
        /// Returns the ADO.NET parameter object for this parameter. The ADO.NET parameter object is created on the first call to this method.
        /// </summary>
        public DbParameter GetAdoDotNetParameter( DatabaseInfo databaseInfo )
        {
            if( parameter != null )
                return parameter;
            parameter = databaseInfo.CreateParameter();

            // SQL Server requires the prefix here. Although Oracle requires it in the command text, it does not require it here and it's questionable whether it is
            // even allowed. We do not know whether MySQL requires it here, but the examples we've seen do include it.
            parameter.ParameterName = ( databaseInfo is OracleInfo ? "" : databaseInfo.ParameterPrefix ) + name;

            parameter.Value = value.Value ?? DBNull.Value;
            if( value.DbTypeString != null )
                databaseInfo.SetParameterType( parameter, value.DbTypeString );
            return parameter;
        }
Ejemplo n.º 24
0
        internal static bool IsProvisioned(DatabaseInfo databaseInfo)
        {
            bool isProvisioned = false;
            try
            {
                using (var repository = Helpers.DataConnectionHelper.CreateRepository(databaseInfo))
                {
                    isProvisioned = repository.GetAllTableNamesForExclusion().Any(
                             t => t == "scope_info" || t == "scope_config" || t == "schema_info");

                }
            }
            catch 
            {}
            return isProvisioned;
        }
Ejemplo n.º 25
0
        private void AddDescription(string description, string parentName, string objectName, DatabaseInfo databaseInfo)
        {
            if (string.IsNullOrWhiteSpace(description))
                return;

            using (IRepository repo = Helpers.DataConnectionHelper.CreateRepository(databaseInfo))
            {
                CreateExtPropsTable(repo);
                string sql = string.Format(insertScript, 
                    (parentName == null ? "NULL" : "'" + parentName + "'"),
                    (objectName == null ? "NULL" : "'" + objectName + "'"),
                    description.Replace("'", "''"));
                repo.ExecuteSql(sql);
            }
        
        }
        public void InsertNewDatabaseNode(DatabaseInfo databaseInfo)
        {
            XmlDocument document = new XmlDocument();
            document.Load(Utilities.CONFIGURATION_LOCATION + "Databases.xml");

            //Create the database node
            XmlNode databaseNode = document.CreateNode(XmlNodeType.Element, "Database", null);
            XmlAttribute databaseNameAttr = document.CreateAttribute("Name");
            databaseNameAttr.InnerText = databaseInfo.DatabaseName.ToLower();
            databaseNode.Attributes.Append(databaseNameAttr);

            //Create the Host node
            XmlNode hostNode = document.CreateElement("Host");
            hostNode.InnerText = databaseInfo.Host;
            databaseNode.AppendChild(hostNode);

            //Create the User node
            XmlNode userNode = document.CreateElement("User");
            userNode.InnerText = databaseInfo.User;
            databaseNode.AppendChild(userNode);

            //Create the Password Node
            XmlNode passwordNode = document.CreateElement("Password");
            passwordNode.InnerText = EncryptionHelper.Encrypt(databaseInfo.Password);
            databaseNode.AppendChild(passwordNode);

            //Create the Backup Settings Node
            XmlNode backupSettingsNode = document.CreateNode(XmlNodeType.Element, "BackupSettings", null);

            //Create the Start Time Node
            XmlNode startTimeNode = document.CreateElement("StartTime");
            startTimeNode.InnerText = databaseInfo.StartTime.ToString();
            backupSettingsNode.AppendChild(startTimeNode);

            //Append backup Settings Node to database node
            databaseNode.AppendChild(backupSettingsNode);

            //Append the database node to the colections element Databases.
            document.DocumentElement.AppendChild(databaseNode);

            //Save the Databases file
            document.Save(Utilities.CONFIGURATION_LOCATION + "Databases.xml");
        }
        internal static void Generate(
            DBConnection cn, TextWriter writer, string baseNamespace, Database database, Configuration.SystemDevelopment.Database configuration)
        {
            info = cn.DatabaseInfo;
            if( configuration.customModifications != null ) {
                writer.WriteLine( "namespace " + baseNamespace + " {" );

                testQueries( cn, configuration.customModifications );

                CodeGenerationStatics.AddSummaryDocComment( writer, "Contains custom modification operations." );
                writer.WriteLine( "public static class " + database.SecondaryDatabaseName + "CustomModifications {" );

                foreach( var mod in configuration.customModifications )
                    writeMethod( writer, database, mod );

                writer.WriteLine( "}" ); // class
                writer.WriteLine( "}" ); // namespace
            }
        }
Ejemplo n.º 28
0
        public ColumnInfo FindOriginalColumn(DatabaseInfo db, NameWithSchema baseName)
        {
            string name = IsAliased ? BaseColumnName : Name;
            if (name == null) return null;

            // determine original table name
            TableInfo table = null;
            if (!String.IsNullOrEmpty(BaseTableName))
            {
                table = db.FindTableLike(String.IsNullOrWhiteSpace(BaseSchemaName) ? null : BaseSchemaName, BaseTableName);
            }
            else
            {
                if (baseName != null) table = db.FindTableLike(baseName.Schema, baseName.Name);
            }
            if (table == null) return null;

            var tableCol = table.FindColumn(name);
            return tableCol;
        }
Ejemplo n.º 29
0
        private Column( DataRow schemaTableRow, bool includeKeyInfo, DatabaseInfo databaseInfo )
        {
            ordinal = (int)schemaTableRow[ "ColumnOrdinal" ];

            // MySQL incorrectly uses one-based ordinals; see http://bugs.mysql.com/bug.php?id=61477.
            if( databaseInfo is MySqlInfo )
                ordinal -= 1;

            valueContainer = new ValueContainer(
                (string)schemaTableRow[ "ColumnName" ],
                (Type)schemaTableRow[ "DataType" ],
                databaseInfo.GetDbTypeString( schemaTableRow[ "ProviderType" ] ),
                (int)schemaTableRow[ "ColumnSize" ],
                (bool)schemaTableRow[ "AllowDBNull" ],
                databaseInfo );
            isIdentity = ( databaseInfo is SqlServerInfo && (bool)schemaTableRow[ "IsIdentity" ] ) ||
                         ( databaseInfo is MySqlInfo && (bool)schemaTableRow[ "IsAutoIncrement" ] );
            isRowVersion = databaseInfo is SqlServerInfo && (bool)schemaTableRow[ "IsRowVersion" ];
            if( includeKeyInfo )
                isKey = (bool)schemaTableRow[ "IsKey" ];
        }
Ejemplo n.º 30
0
 private void DoGenerateCascadeDeletions(DatabaseInfo db, List<ChangeSetDeleteItem> res)
 {
     var table = db.FindTable(TargetTable);
     if (table == null) return;
     foreach (var fk in table.GetReferences())
     {
         if (res.Any(x => x.TargetTable == fk.OwnerTable.FullName))
         {
             // prevent cycling
             continue;
         }
         var newItem = new ChangeSetDeleteItem
             {
                 LinkedInfo = LinkedInfo,
                 TargetTable = fk.OwnerTable.FullName,
             };
         newItem.Conditions.AddRange(GetPrefixedConditions(Conditions, fk.ConstraintName));
         res.Add(newItem);
         newItem.DoGenerateCascadeDeletions(db, res);
     }
 }
 public void SetUp()
 {
     _info = new CoreTestData().TestDatabase;
     _testDatabaseInfoEntityHash = _info.Hash;
     AddTestDataToDb();
 }
 public void TearDown()
 {
     RemoveTestDataFromDb();
     _info = null;
 }
Ejemplo n.º 33
0
 // Token: 0x060000DC RID: 220 RVA: 0x000056C8 File Offset: 0x000038C8
 public override TimeBasedDatabaseDriver CreateDriver(ThrottleGovernor governor, DatabaseInfo databaseInfo, ITimeBasedAssistantType timeBasedAssistantType, PoisonMailboxControl poisonControl, PerformanceCountersPerDatabaseInstance databaseCounters)
 {
     return(new TimeBasedStoreDatabaseDriver(governor, databaseInfo, timeBasedAssistantType, poisonControl, databaseCounters));
 }
Ejemplo n.º 34
0
 // Token: 0x0600146B RID: 5227 RVA: 0x000760E0 File Offset: 0x000742E0
 public ITimeBasedAssistant CreateInstance(DatabaseInfo databaseInfo)
 {
     InferenceDataCollectionAssistantType.tracer.TraceFunction((long)this.GetHashCode(), "InferenceDataCollectionAssistantType.CreateInstance");
     return(new InferenceDataCollectionAssistant(databaseInfo, this.Name, this.NonLocalizedName, this.diagnosticLogger, this.collectionContext));
 }
Ejemplo n.º 35
0
        internal static Dictionary <string, DatabaseInfo> GetDataConnections(EFCorePowerToolsPackage package)
        {
            // http://www.mztools.com/articles/2007/MZ2007018.aspx
            Dictionary <string, DatabaseInfo> databaseList = new Dictionary <string, DatabaseInfo>();
            var  dataExplorerConnectionManager             = package.GetService <IVsDataExplorerConnectionManager>();
            Guid provider40            = new Guid(EFCorePowerTools.Shared.Resources.SqlCompact40Provider);
            Guid provider40Private     = new Guid(EFCorePowerTools.Shared.Resources.SqlCompact40PrivateProvider);
            Guid providerSqLite        = new Guid(EFCorePowerTools.Shared.Resources.SQLiteProvider);
            Guid providerSqlitePrivate = new Guid(EFCorePowerTools.Shared.Resources.SQLitePrivateProvider);
            Guid providerNpgsql        = new Guid(Resources.NpgsqlProvider);
            Guid providerMysql         = new Guid(Resources.MysqlVSProvider);

            bool isV40Installed = RepositoryHelper.IsV40Installed() &&
                                  (DdexProviderIsInstalled(provider40) || DdexProviderIsInstalled(provider40Private));

            if (dataExplorerConnectionManager != null)
            {
                foreach (var connection in dataExplorerConnectionManager.Connections.Values)
                {
                    try
                    {
                        var sConnectionString = DataProtection.DecryptString(connection.EncryptedConnectionString);
                        var info = new DatabaseInfo()
                        {
                            Caption            = connection.DisplayName,
                            FromServerExplorer = true,
                            DatabaseType       = DatabaseType.SQLCE35,
                            ConnectionString   = sConnectionString
                        };
                        var objProviderGuid = connection.Provider;

                        if ((objProviderGuid == provider40 && isV40Installed ||
                             objProviderGuid == provider40Private && isV40Installed) &&
                            !sConnectionString.Contains("Mobile Device"))
                        {
                            info.DatabaseType = DatabaseType.SQLCE40;
                        }
                        if (objProviderGuid == providerSqLite ||
                            objProviderGuid == providerSqlitePrivate)
                        {
                            info.DatabaseType = DatabaseType.SQLite;
                        }
                        if (objProviderGuid == new Guid(Resources.SqlServerDotNetProvider) ||
                            objProviderGuid == providerNpgsql)
                        {
                            info.DatabaseType = objProviderGuid == providerNpgsql ? DatabaseType.Npgsql : DatabaseType.SQLServer;
                        }

                        // This provider depends on https://dev.mysql.com/downloads/windows/visualstudio/
                        if (objProviderGuid == providerMysql)
                        {
                            info.DatabaseType = DatabaseType.Mysql;
                        }

                        if (info.DatabaseType != DatabaseType.SQLCE35 &&
                            !databaseList.ContainsKey(sConnectionString))
                        {
                            databaseList.Add(sConnectionString, info);
                        }
                    }
                    catch (KeyNotFoundException)
                    {
                    }
                    catch (NullReferenceException)
                    {
                    }
                }
            }
            return(databaseList);
        }
Ejemplo n.º 36
0
 // Token: 0x06001216 RID: 4630 RVA: 0x000680D7 File Offset: 0x000662D7
 public ITimeBasedAssistant CreateInstance(DatabaseInfo databaseInfo)
 {
     return(new StoreUrgentMaintenanceAssistant(databaseInfo, this.Name, this.NonLocalizedName));
 }
Ejemplo n.º 37
0
    void Update()
    {
        doubleTapElapsedTime += Time.deltaTime;

        if (Input.GetMouseButtonDown(0))
        {
            if (doubleTapElapsedTime < maxDoubleTapDelay)
            {
                showGear();
            }
            doubleTapElapsedTime = 0.0f;
        }

        // main game loop
        if (state == 0)           // state 0 is NOT idle for Mastercontroller. MasterController has no idle state
        {
            globalFader.setFadeValue(1.0f);
            //controlHub.uiController.hide ();
            loadData();
            loadMoarData();
            loadPlayerChosenDebates();
            loadUserInfoData();
            controlHub.networkAgent.initialize(controlHub.networkAgent.bootstrapData.socketServer, controlHub.networkAgent.bootstrapData.socketServerPort);
            state = 1;
        }
        if (state == 1)           // start logo
        {
            controlHub.logoController.startLogoActivity(this);
            state = 2;
        }
        if (state == 2)
        {
            if (!isWaitingForTaskToComplete)
            {
                retrieveDebatesDB();
            }
        }
        if (state == 3)           // start main game
        {
            globalFader.fadeIn();
            //state = 4;
            controlHub.gameController.startGame(this);
            state = 4;
        }
        if (state == 4)           // wait for main game to finish

        {
            if (controlHub.gameController.playerGroup != -1)
            {
                //network_broadcast ("panelreport:$", controlHub.gameController.playerGroup);
                network_sendMessage("panelreport\n");
                network_sendMessage("regionstatus\n");
                network_sendMessage("labelstatus\n");
                network_sendMessage("secretsreport\n");
                state = 5;
            }
            if (!isWaitingForTaskToComplete)
            {
                state = 0;                 // loop back
            }
        }
        if (state == 5)           // wait for main game to finish
        {
            if (!isWaitingForTaskToComplete)
            {
                state = 0;                 // loop back
            }
        }

        if (state == 200)
        {
            if (www.isDone)
            {
                dbinfo = JsonUtility.FromJson <DatabaseInfo> (www.text);
                if (dbinfo != null)
                {
                    saveDebatesDB();
                }
                state = 3;
            }
        }

        if (state2 == 1)
        {
            if (controlHub.gameController.resumeGameResult == 0)
            {
                //network_broadcast ("panelreport:$", controlHub.gameController.playerGroup);
                network_sendMessage("panelreport\n");
                network_sendMessage("regionstatus\n");
                network_sendMessage("labelstatus\n");
                network_sendMessage("secretsreport\n");
                state2 = 0;
            }
        }

        if (state == 666)
        {
            timer -= Time.deltaTime;
            if (timer < 0.0f)
            {
                controlHub.networkAgent.disconnect();
                timer = 0.25f;
                state = 667;
            }
        }
        if (state == 667)
        {
            timer -= Time.deltaTime;
            if (timer < 0.0f)
            {
                SceneManager.LoadScene("Scenes/Loader");
            }
        }
    }
Ejemplo n.º 38
0
 // Token: 0x06000F86 RID: 3974 RVA: 0x0005C29C File Offset: 0x0005A49C
 public TopNAssistant(DatabaseInfo databaseInfo, LocalizedString name, string nonLocalizedName) : base(databaseInfo, name, nonLocalizedName)
 {
 }
Ejemplo n.º 39
0
 // Token: 0x06000B45 RID: 2885 RVA: 0x000486E6 File Offset: 0x000468E6
 public JunkEmailOptionsCommiterAssistant(DatabaseInfo databaseInfo, LocalizedString name, string nonLocalizedName) : base(databaseInfo, name, nonLocalizedName)
 {
 }
Ejemplo n.º 40
0
 public DbSourceTarget(DatabaseInfo src, DatabaseInfo dst)
 {
     m_src = src;
     m_dst = dst;
 }
Ejemplo n.º 41
0
 public static string GetName(this DatabaseInfo databaseInfo)
 {
     return(databaseInfo.Name.ToDatabaseName());
 }
 // Token: 0x06000B02 RID: 2818 RVA: 0x0004783E File Offset: 0x00045A3E
 public UMPartnerMessageAssistant(DatabaseInfo databaseInfo, LocalizedString name, string nonLocalizedName) : base(databaseInfo, name, nonLocalizedName)
 {
 }
Ejemplo n.º 43
0
 public static IEnumerable <ReferenceInfo> ToReferenceInfo(this IEnumerable <ReferencesEntity> references, DatabaseInfo db)
 {
     return(references
            .SelectMany(reference => db.Tables
                        .SelectMany(table => table.Columns)
                        .Where(table => reference.IsMatch(table)))
            .GroupBy(column => column.Entity)
            .Select(group => new ReferenceInfo
     {
         Entity = group.Key,
         Columns = group.ToArray()
     }));
 }
Ejemplo n.º 44
0
        private void WriteDatabaseInfo(string databaseName, BlittableJsonReaderObject dbRecordBlittable,
                                       TransactionOperationContext context, AbstractBlittableJsonTextWriter writer)
        {
            try
            {
                var online = ServerStore.DatabasesLandlord.DatabasesCache.TryGetValue(databaseName, out Task <DocumentDatabase> dbTask) &&
                             dbTask != null &&
                             dbTask.IsCompleted;

                // Check for exceptions
                if (dbTask != null && dbTask.IsFaulted)
                {
                    var exception = dbTask.Exception.ExtractSingleInnerException();
                    WriteFaultedDatabaseInfo(databaseName, exception, context, writer);
                    return;
                }

                var dbRecord = JsonDeserializationCluster.DatabaseRecord(dbRecordBlittable);
                var db       = online ? dbTask.Result : null;

                var indexingStatus = db?.IndexStore?.Status ?? IndexRunningStatus.Running;
                // Looking for disabled indexing flag inside the database settings for offline database status
                if (dbRecord.Settings.TryGetValue(RavenConfiguration.GetKey(x => x.Indexing.Disabled), out var val) && bool.TryParse(val, out var indexingDisabled) && indexingDisabled)
                {
                    indexingStatus = IndexRunningStatus.Disabled;
                }

                var disabled        = dbRecord.Disabled;
                var topology        = dbRecord.Topology;
                var clusterTopology = ServerStore.GetClusterTopology(context);
                clusterTopology.ReplaceCurrentNodeUrlWithClientRequestedNodeUrlIfNecessary(ServerStore, HttpContext);

                var studioEnvironment = StudioConfiguration.StudioEnvironment.None;
                if (dbRecord.Studio != null && !dbRecord.Studio.Disabled)
                {
                    studioEnvironment = dbRecord.Studio.Environment;
                }

                var nodesTopology = new NodesTopology();

                var statuses = ServerStore.GetNodesStatuses();
                if (topology != null)
                {
                    foreach (var member in topology.Members)
                    {
                        if (dbRecord.DeletionInProgress != null && dbRecord.DeletionInProgress.ContainsKey(member))
                        {
                            continue;
                        }

                        var url  = clusterTopology.GetUrlFromTag(member);
                        var node = new InternalReplication
                        {
                            Database = databaseName,
                            NodeTag  = member,
                            Url      = url
                        };
                        nodesTopology.Members.Add(GetNodeId(node));
                        SetNodeStatus(topology, member, nodesTopology, statuses);
                    }

                    foreach (var promotable in topology.Promotables)
                    {
                        if (dbRecord.DeletionInProgress != null && dbRecord.DeletionInProgress.ContainsKey(promotable))
                        {
                            continue;
                        }

                        topology.PredefinedMentors.TryGetValue(promotable, out var mentorCandidate);
                        var node   = GetNode(databaseName, clusterTopology, promotable, mentorCandidate, out var promotableTask);
                        var mentor = topology.WhoseTaskIsIt(ServerStore.Engine.CurrentState, promotableTask, null);
                        nodesTopology.Promotables.Add(GetNodeId(node, mentor));
                        SetNodeStatus(topology, promotable, nodesTopology, statuses);
                    }

                    foreach (var rehab in topology.Rehabs)
                    {
                        if (dbRecord.DeletionInProgress != null && dbRecord.DeletionInProgress.ContainsKey(rehab))
                        {
                            continue;
                        }

                        var node   = GetNode(databaseName, clusterTopology, rehab, null, out var promotableTask);
                        var mentor = topology.WhoseTaskIsIt(ServerStore.Engine.CurrentState, promotableTask, null);
                        nodesTopology.Rehabs.Add(GetNodeId(node, mentor));
                        SetNodeStatus(topology, rehab, nodesTopology, statuses);
                    }
                }

                if (online == false)
                {
                    // if state of database is found in the cache we can continue
                    if (ServerStore.DatabaseInfoCache.TryGet(databaseName, databaseInfoJson =>
                    {
                        databaseInfoJson.Modifications = new DynamicJsonValue(databaseInfoJson)
                        {
                            [nameof(DatabaseInfo.Disabled)] = disabled,
                            [nameof(DatabaseInfo.IndexingStatus)] = indexingStatus.ToString(),
                            [nameof(DatabaseInfo.NodesTopology)] = nodesTopology.ToJson(),
                            [nameof(DatabaseInfo.DeletionInProgress)] = DynamicJsonValue.Convert(dbRecord.DeletionInProgress),
                            [nameof(DatabaseInfo.Environment)] = studioEnvironment
                        };

                        context.Write(writer, databaseInfoJson);
                    }))
                    {
                        return;
                    }

                    // we won't find it if it is a new database or after a dirty shutdown,
                    // so just report empty values then
                }

                var size = db?.GetSizeOnDisk() ?? (new Size(0), new Size(0));

                var databaseInfo = new DatabaseInfo
                {
                    Name            = databaseName,
                    Disabled        = disabled,
                    TotalSize       = size.Data,
                    TempBuffersSize = size.TempBuffers,

                    IsAdmin     = true,
                    IsEncrypted = dbRecord.Encrypted,
                    UpTime      = online ? (TimeSpan?)GetUptime(db) : null,
                    BackupInfo  = GetBackupInfo(db),

                    Alerts           = db?.NotificationCenter.GetAlertCount() ?? 0,
                    PerformanceHints = db?.NotificationCenter.GetPerformanceHintCount() ?? 0,
                    RejectClients    = false,
                    LoadError        = null,
                    IndexingErrors   = db?.IndexStore?.GetIndexes()?.Sum(index => index.GetErrorCount()) ?? 0,

                    DocumentsCount             = db?.DocumentsStorage.GetNumberOfDocuments() ?? 0,
                    HasRevisionsConfiguration  = db?.DocumentsStorage.RevisionsStorage.Configuration != null,
                    HasExpirationConfiguration = db?.ExpiredDocumentsCleaner != null,
                    IndexesCount   = db?.IndexStore?.GetIndexes()?.Count() ?? 0,
                    IndexingStatus = indexingStatus,
                    Environment    = studioEnvironment,

                    NodesTopology            = nodesTopology,
                    ReplicationFactor        = topology?.ReplicationFactor ?? -1,
                    DynamicNodesDistribution = topology?.DynamicNodesDistribution ?? false,
                    DeletionInProgress       = dbRecord.DeletionInProgress
                };

                var doc = databaseInfo.ToJson();
                context.Write(writer, doc);
            }
            catch (Exception e)
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info($"Failed to get database info for: {databaseName}", e);
                }

                WriteFaultedDatabaseInfo(databaseName, e, context, writer);
            }
        }
 // Token: 0x06001391 RID: 5009 RVA: 0x0007226E File Offset: 0x0007046E
 public DiscoverySearchEventBasedAssistant(DatabaseInfo databaseInfo, LocalizedString name, string nonLocalizedName) : base(databaseInfo, name, nonLocalizedName)
 {
 }
Ejemplo n.º 46
0
        protected override void InitSessionInfo()
        {
            base.InitSessionInfo();

            if (Session == null)
            {
                return;
            }

            AppServerInfo serverInfo = new AppServerInfo();

            serverInfo.Protocol     = "http";
            serverInfo.Address      = "192.168.6.114";
            serverInfo.Port         = 8081;
            serverInfo.SupportHttps = false;
            Session.AppServerInfo   = serverInfo;

            //DatabaseInfo dbInfo = new DatabaseInfo();
            //dbInfo.TypeID = 3;
            //dbInfo.TypeName = "ORCL";
            //dbInfo.Host = "192.168.4.182";
            //dbInfo.Port = 1521;
            //dbInfo.DBName = "PFOrcl";
            //dbInfo.LoginName = "PFDEV";
            //dbInfo.Password = "******";
            //Session.DatabaseInfo = dbInfo;
            //Session.DBType = dbInfo.TypeID;
            //Session.DBConnectionString = dbInfo.GetConnectionString();
            //Session.DBType = 3;

            DatabaseInfo dbInfo = new DatabaseInfo();

            dbInfo.TypeID              = 2;
            dbInfo.TypeName            = "MSSQL";
            dbInfo.Host                = "192.168.4.182";
            dbInfo.Port                = 1433;
            dbInfo.DBName              = "UMPDataDB11251";
            dbInfo.LoginName           = "PFDEV";
            dbInfo.Password            = "******";
            dbInfo.RealPassword        = "******";
            Session.DatabaseInfo       = dbInfo;
            Session.DBType             = dbInfo.TypeID;
            Session.DBConnectionString = dbInfo.GetConnectionString();

            //DatabaseInfo dbInfo = new DatabaseInfo();
            //dbInfo.TypeID = 2;
            //dbInfo.TypeName = "MSSQL";
            //dbInfo.Host = "192.168.7.101";
            //dbInfo.Port = 1433;
            //dbInfo.DBName = "UMPDataDB1031";
            //dbInfo.LoginName = "sa";
            //dbInfo.Password = "******";
            //dbInfo.RealPassword = "******";
            //Session.DatabaseInfo = dbInfo;
            //Session.DBType = dbInfo.TypeID;
            //Session.DBConnectionString = dbInfo.GetConnectionString();

            Session.InstallPath = @"C:\UMPRelease";

            WriteLog("AppInit", string.Format("SessionInfo inited."));
        }
Ejemplo n.º 47
0
        internal static Dictionary <string, DatabaseInfo> GetDataConnections(SqlCeToolboxPackage package,
                                                                             bool includeServerConnections, bool serverConnectionsOnly)
        {
            // http://www.mztools.com/articles/2007/MZ2007018.aspx
            Dictionary <string, DatabaseInfo> databaseList = new Dictionary <string, DatabaseInfo>();
            var dataExplorerConnectionManager =
                package.GetServiceHelper(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager;

            //Test code...

            //var objIVsDataProviderManager = package.GetServiceHelper(typeof(IVsDataProviderManager)) as IVsDataProviderManager;
            //var objIVsDataConnectionManager = package.GetServiceHelper(typeof(IVsDataConnectionManager)) as IVsDataConnectionManager;
            //var objIVsDataSourceManager = package.GetServiceHelper(typeof(IVsDataSourceManager)) as IVsDataSourceManager;

            //IVsDataProvider objIVsDataProvider;
            //foreach (var objIVsDataSource in objIVsDataSourceManager.Sources)
            //{
            //    //System.Diagnostics.Debug.WriteLine(objIVsDataSource.DisplayName);
            //    //System.Diagnostics.Debug.WriteLine(objIVsDataSource.Guid.ToString());

            //    //foreach (var objProviderGuid in objIVsDataSource.GetProviders())
            //    //{
            //    //    objIVsDataProvider = objIVsDataProviderManager.GetDataProvider(objProviderGuid);
            //    //    System.Diagnostics.Debug.WriteLine(objIVsDataProvider.DisplayName);
            //    //    System.Diagnostics.Debug.WriteLine(objIVsDataProvider.Guid.ToString());
            //    //}
            //}

            // End test code

            Guid provider35            = new Guid(Resources.SqlCompact35Provider);
            Guid provider40            = new Guid(Resources.SqlCompact40Provider);
            Guid provider40Private     = new Guid(Resources.SqlCompact40PrivateProvider);
            Guid providerSqLite        = new Guid(Resources.SQLiteProvider);
            Guid providerSqlitePrivate = new Guid(Resources.SqlitePrivateProvider);

            bool isV35Installed = RepositoryHelper.IsV35Installed() && DdexProviderIsInstalled(provider35);
            bool isV40Installed = RepositoryHelper.IsV40Installed() &&
                                  (DdexProviderIsInstalled(provider40) || DdexProviderIsInstalled(provider40Private));

            if (dataExplorerConnectionManager != null)
            {
                foreach (var connection in dataExplorerConnectionManager.Connections.Values)
                {
                    try
                    {
                        var objProviderGuid = connection.Provider;
                        if (!serverConnectionsOnly)
                        {
                            if ((objProviderGuid == provider35 && isV35Installed) ||
                                (objProviderGuid == provider40 && isV40Installed) ||
                                (objProviderGuid == provider40Private && isV40Installed))
                            {
                                DatabaseType dbType = DatabaseType.SQLCE40;
                                if (objProviderGuid == provider35)
                                {
                                    dbType = DatabaseType.SQLCE35;
                                }
                                var serverVersion = "4.0";
                                if (dbType == DatabaseType.SQLCE35)
                                {
                                    serverVersion = "3.5";
                                }

                                var sConnectionString =
                                    DataProtection.DecryptString(connection.EncryptedConnectionString);
                                if (!sConnectionString.Contains("Mobile Device"))
                                {
                                    DatabaseInfo info = new DatabaseInfo()
                                    {
                                        Caption            = connection.DisplayName,
                                        FromServerExplorer = true,
                                        DatabaseType       = dbType,
                                        ServerVersion      = serverVersion,
                                        ConnectionString   = sConnectionString
                                    };
                                    info.FileIsMissing = RepositoryHelper.IsMissing(info);
                                    if (!databaseList.ContainsKey(sConnectionString))
                                    {
                                        databaseList.Add(sConnectionString, info);
                                    }
                                }
                            }

                            if (objProviderGuid == providerSqLite ||
                                objProviderGuid == providerSqlitePrivate)
                            {
                                DatabaseType dbType = DatabaseType.SQLite;

                                var sConnectionString =
                                    DataProtection.DecryptString(connection.EncryptedConnectionString);
                                DatabaseInfo info = new DatabaseInfo()
                                {
                                    Caption            = connection.DisplayName,
                                    FromServerExplorer = true,
                                    DatabaseType       = dbType,
                                    ServerVersion      = SqliteEngineVersion,
                                    ConnectionString   = sConnectionString
                                };
                                info.FileIsMissing = RepositoryHelper.IsMissing(info);
                                if (!databaseList.ContainsKey(sConnectionString))
                                {
                                    databaseList.Add(sConnectionString, info);
                                }
                            }
                        }
                        if (includeServerConnections && objProviderGuid == new Guid(Resources.SqlServerDotNetProvider))
                        {
                            var sConnectionString = DataProtection.DecryptString(connection.EncryptedConnectionString);
                            var info = new DatabaseInfo()
                            {
                                Caption            = connection.DisplayName,
                                FromServerExplorer = true,
                                DatabaseType       = DatabaseType.SQLServer,
                                ServerVersion      = string.Empty,
                                ConnectionString   = sConnectionString
                            };
                            if (!databaseList.ContainsKey(sConnectionString))
                            {
                                databaseList.Add(sConnectionString, info);
                            }
                        }
                    }
                    catch (KeyNotFoundException)
                    {
                    }
                    catch (NullReferenceException)
                    {
                    }
                }
            }
#if SSMS
            try
            {
                if (package.TelemetryVersion().Major == 140)
                {
                    var objectExplorerManager = new ObjectExplorerManager(package);
                    var list = objectExplorerManager.GetAllServerUserDatabases();
                    foreach (var item in list)
                    {
                        if (!databaseList.ContainsKey(item.Key))
                        {
                            databaseList.Add(item.Key, item.Value);
                        }
                    }
                }
            }
            catch (MissingMethodException)
            {
            }
#endif
            return(databaseList);
        }
Ejemplo n.º 48
0
        private void ListDatabases(string tile, string syncdb)
        {
            var dispatcher = Dispatcher;
            var databases  = DatabaseInfo.GetAll();

            var open = tile == null ? null
                : databases.FirstOrDefault(
                x => x.Folder == tile);

            if (open != null)
            {
                dispatcher.BeginInvoke(
                    () => Open(open, true));

                return;
            }

            foreach (var db in databases)
            {
                db.LoadDetails();
            }

            var items = databases
                        .Where(x => x.Details != null)
                        .Select(x => new DatabaseItem(x))
                        .OrderBy(x => x.Name)
                        .ToList();

            foreach (var item in items)
            {
                var local = item;
                dispatcher.BeginInvoke(() =>
                {
                    if (_items.Contains(local))
                    {
                        return;
                    }
                    UpdateItem(local, null);
                    _items.Add(local);
                });
            }

            var hasUpdatables = items
                                .Any(x => x.CanUpdate);

            dispatcher.BeginInvoke(() =>
                                   _RefreshButton.IsEnabled = hasUpdatables);

            if (syncdb != null)
            {
                foreach (var db in items)
                {
                    var test = (DatabaseInfo)db.Info;
                    if (test.Folder == syncdb)
                    {
                        db.IsUpdating = true;
                    }
                }
                var udbi = databases.FirstOrDefault(x => x.Folder == syncdb);
                var udb  = new DatabaseItem(udbi);
                Update(udb);
            }

            var UpdateAbleDBs = items
                                .Where(x => x.CanUpdate);

            // AutoUpdate
            if (!_fAppLoaded)
            {
                _fAppLoaded = true;
                dispatcher.BeginInvoke(() =>
                {
                    if (hasUpdatables)
                    {
                        _RefreshButton.IsEnabled = true;

                        if (AppSettings.Instance.AutoUpdate)
                        {
                            if (AppSettings.Instance.AutoUpdateWLAN)
                            {
                                if (DeviceNetworkInformation.IsWiFiEnabled)
                                {
                                    foreach (var uDB in UpdateAbleDBs)
                                    {
                                        Update(uDB);
                                    }
                                }
                            }
                            else
                            {
                                foreach (var uDB in UpdateAbleDBs)
                                {
                                    Update(uDB);
                                }
                            }
                        }
                    }
                    else
                    {
                        _RefreshButton.IsEnabled = false;
                    }
                });
            }
        }
Ejemplo n.º 49
0
 public static void ShowNewKey(this IRegionDialogService dialogService, DatabaseInfo database, Action <IDialogResult> callback)
 {
     //dialogService.ShowDialog(nameof(NewKeyView), new DialogParameters { { "database_info", database } }, callback);
 }
Ejemplo n.º 50
0
 // Token: 0x060011A6 RID: 4518 RVA: 0x000676AF File Offset: 0x000658AF
 public ITimeBasedAssistant CreateInstance(DatabaseInfo databaseInfo)
 {
     return(new InferenceTrainingAssistant(databaseInfo, this.Name, this.NonLocalizedName, this.trainingStatusLogger, this.truthLabelsStatusLogger, this.groupingModelTrainingConfiguration, this.groupingModelTrainingStatusLogger, InferenceTrainingAssistantType.IsTruthLabelsLoggingEnabled(false)));
 }
Ejemplo n.º 51
0
 public string GetNameForCommandText(DatabaseInfo databaseInfo) => databaseInfo.ParameterPrefix + name;
Ejemplo n.º 52
0
        public DatabaseInfo Get(Database database)
        {
            DatabaseInfo item = new DatabaseInfo();

            using (SqlConnection conn = new SqlConnection(connectioString))
            {
                using (SqlCommand command = new SqlCommand(DatabaseSQLCommand.GetVersion(database), conn))
                {
                    conn.Open();

                    item.Server   = conn.DataSource;
                    item.Database = conn.Database;

                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            string versionValue = reader["Version"] as string;
                            try
                            {
                                // used to use the decimal as well when Azure was 10.25
                                var version = new Version(versionValue);
                                item.VersionNumber = float.Parse(String.Format("{0}.{1}", version.Major, version.Minor), CultureInfo.InvariantCulture);

                                int?edition = null;
                                if (reader.FieldCount > 1 && !reader.IsDBNull(1))
                                {
                                    int    validEdition;
                                    string editionValue = reader[1].ToString();
                                    if (!String.IsNullOrEmpty(editionValue) && int.TryParse(editionValue, out validEdition))
                                    {
                                        edition = validEdition;
                                    }
                                }

                                item.SetEdition(edition);
                            }
                            catch (Exception notAGoodIdeaToCatchAllErrors)
                            {
                                var exception = new SchemaException(
                                    String.Format("Error parsing ProductVersion. ({0})", versionValue ?? "[null]")
                                    , notAGoodIdeaToCatchAllErrors);

                                if (!UseDefaultVersionOnVersionParseError)
                                {
                                    throw exception;
                                }
                            }
                        }
                    }
                }

                using (SqlCommand command = new SqlCommand(DatabaseSQLCommand.Get(item.Version, database), conn))
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            item.Collation          = reader["Collation"].ToString();
                            item.HasFullTextEnabled = ((int)reader["IsFulltextEnabled"]) == 1;
                        }
                    }
                }
            }

            return(item);
        }
Ejemplo n.º 53
0
        public void GenerateServerDgmlFiles()
        {
            try
            {
                if (_package.Dte2.Mode == vsIDEMode.vsIDEModeDebug)
                {
                    EnvDteHelper.ShowError("Cannot generate code while debugging");
                    return;
                }

                var databaseList = EnvDteHelper.GetDataConnections(_package);

                var psd = _package.GetView <IPickServerDatabaseDialog>();
                psd.PublishConnections(databaseList.Select(m => new DatabaseConnectionModel
                {
                    ConnectionName   = m.Value.Caption,
                    ConnectionString = m.Value.ConnectionString,
                    DatabaseType     = m.Value.DatabaseType
                }));

                var pickDataSourceResult = psd.ShowAndAwaitUserResponse(true);
                if (!pickDataSourceResult.ClosedByOK)
                {
                    return;
                }

                _package.Dte2.StatusBar.Text = "Loading schema information...";

                // Reload the database list, in case the user has added a new database in the dialog
                databaseList = EnvDteHelper.GetDataConnections(_package);

                DatabaseInfo dbInfo = null;
                if (pickDataSourceResult.Payload.Connection != null)
                {
                    dbInfo = databaseList.Single(m => m.Value.ConnectionString == pickDataSourceResult.Payload.Connection?.ConnectionString).Value;
                }

                if (dbInfo == null)
                {
                    // User didn't select a database, should be impossible, though
                    return;
                }

                if (dbInfo.DatabaseType == DatabaseType.SQLCE35)
                {
                    EnvDteHelper.ShowError($"Unsupported provider: {dbInfo.ServerVersion}");
                    return;
                }

                var ptd = new PickTablesDialog();
                using (var repository = RepositoryHelper.CreateRepository(dbInfo))
                {
                    var ti     = new List <TableInformation>();
                    var tables = repository.GetAllTableNamesForExclusion();
                    foreach (var table in tables)
                    {
                        ti.Add(TableInformation.Parse(table));
                    }
                    ptd.Tables = ti;
                }

                var res = ptd.ShowModal();
                if (!res.HasValue || !res.Value)
                {
                    return;
                }

                var name = RepositoryHelper.GetClassBasis(dbInfo.ConnectionString, dbInfo.DatabaseType);

                var path = Path.Combine(Path.GetTempPath(),
                                        name + ".schema.dgml");

                if (File.Exists(path))
                {
                    File.SetAttributes(path, FileAttributes.Normal);
                }

                using (var repository = RepositoryHelper.CreateRepository(dbInfo))
                {
                    var generator = RepositoryHelper.CreateGenerator(repository, path, dbInfo.DatabaseType);
                    generator.GenerateSchemaGraph(dbInfo.ConnectionString, ptd.Tables.Select(m => m.UnsafeFullName).ToList());
                    File.SetAttributes(path, FileAttributes.ReadOnly);
                    _package.Dte2.ItemOperations.OpenFile(path);
                    _package.Dte2.ActiveDocument.Activate();
                }
                Telemetry.TrackEvent("PowerTools.GenerateSchemaDgml");
            }
            catch (Exception ex)
            {
                _package.LogError(new List <string>(), ex);
            }
        }
Ejemplo n.º 54
0
        /// <summary>
        /// Control for two Rising Bubble
        /// </summary>
        /// <param name="p"></param>
        /// <param name="kelem"></param>
        /// <param name="_DbPath"></param>
        /// <returns></returns>
        public static XNSE_Control BubbleMerger(int p = 2, int kelem = 40, string _DbPath = null)
        {
            XNSE_Control C = new XNSE_Control();

            _DbPath = @"D:\local\local_test_db";

            // basic database options
            // ======================
            #region db

            C.DbPath             = _DbPath;
            C.savetodb           = C.DbPath != null;
            C.ProjectName        = "XNSE/Bubble";
            C.ProjectDescription = "bubble merger";
            C.Tags.Add("smolianski");

            #endregion

            // DG degrees
            // ==========
            #region degrees

            C.FieldOptions.Add("VelocityX", new FieldOpts()
            {
                Degree   = p,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            C.FieldOptions.Add("VelocityY", new FieldOpts()
            {
                Degree   = p,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            C.FieldOptions.Add("GravityY", new FieldOpts()
            {
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            C.FieldOptions.Add("Pressure", new FieldOpts()
            {
                Degree   = p - 1,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            C.FieldOptions.Add("PhiDG", new FieldOpts()
            {
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            C.FieldOptions.Add("Phi", new FieldOpts()
            {
                Degree   = p,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });
            C.FieldOptions.Add("Curvature", new FieldOpts()
            {
                Degree   = p,
                SaveToDB = FieldOpts.SaveToDBOpt.TRUE
            });


            #endregion

            // grid generation
            // ===============
            #region grid

            double h = 1.0 / (double)kelem;

            C.GridFunc = delegate() {
                double[] Xnodes = GenericBlas.Linspace(0, 1.0, kelem + 1);
                double[] Ynodes = GenericBlas.Linspace(0, 2.0, 2 * kelem + 1);
                var      grd    = Grid2D.Cartesian2DGrid(Xnodes, Ynodes, periodicX: false);

                grd.EdgeTagNames.Add(1, "wall_lower");
                grd.EdgeTagNames.Add(2, "wall_upper");
                grd.EdgeTagNames.Add(3, "freeslip_left");
                grd.EdgeTagNames.Add(4, "freeslip_right");

                grd.DefineEdgeTags(delegate(double[] X) {
                    byte et = 0;
                    if (Math.Abs(X[1]) <= 1.0e-8)
                    {
                        et = 1;
                    }
                    if (Math.Abs(X[1] - 2.0) <= 1.0e-8)
                    {
                        et = 2;
                    }
                    if (Math.Abs(X[0]) <= 1.0e-8)
                    {
                        et = 3;
                    }
                    if (Math.Abs(X[0] - 1.0) <= 1.0e-8)
                    {
                        et = 4;
                    }
                    return(et);
                });

                return(grd);
            };

            #endregion

            // Physical Parameters
            // ===================
            #region physics

            // Bo = 250, Re = 35
            C.PhysicalParameters.rho_A = 1;
            C.PhysicalParameters.rho_B = 100;
            C.PhysicalParameters.mu_A  = 0.01;
            C.PhysicalParameters.mu_B  = 0.1;
            C.PhysicalParameters.Sigma = 0.097;

            C.PhysicalParameters.IncludeConvection = true;
            C.PhysicalParameters.Material          = true;

            #endregion

            // Initial Values
            // ==============
            #region init

            // large bubble above
            double[] center_l = new double[] { 0.5, 1.0 };
            double   radius_l = 0.25;
            Func <double[], double> bubble_l = (X => ((X[0] - center_l[0]).Pow2() + (X[1] - center_l[1]).Pow2()).Sqrt() - radius_l); // signed-distance form

            // small bubble under
            double[] center_s = new double[] { 0.5, 0.5 };
            double   radius_s = 0.2;
            Func <double[], double> bubble_s = (X => ((X[0] - center_s[0]).Pow2() + (X[1] - center_s[1]).Pow2()).Sqrt() - radius_s); // signed-distance form

            Func <double[], double> PhiFunc = (X => Math.Min(bubble_l(X), bubble_s(X)));

            //C.InitialValues_Evaluators.Add("Phi", PhiFunc);

            //C.InitialValues_Evaluators.Add("VelocityX#A", X => 0.0);
            //C.InitialValues_Evaluators.Add("VelocityX#B", X => 0.0);

            //C.InitialValues_Evaluators.Add("GravityY#A", X => -0.981);
            //C.InitialValues_Evaluators.Add("GravityY#B", X => -0.981);

            var  database  = new DatabaseInfo(_DbPath);
            Guid restartID = new Guid("9d1bbcd2-38d0-43d3-90d4-7ac7f535079c");
            C.RestartInfo = new Tuple <Guid, Foundation.IO.TimestepNumber>(restartID, null);


            #endregion

            // boundary conditions
            // ===================
            #region BC

            C.AddBoundaryCondition("wall_lower");
            C.AddBoundaryCondition("wall_upper");
            C.AddBoundaryCondition("freeslip_left");
            C.AddBoundaryCondition("freeslip_right");

            #endregion

            // misc. solver options
            // ====================
            #region solver

            C.LinearSolver = new DirectSolver()
            {
                WhichSolver = DirectSolver._whichSolver.MUMPS
            };

            //C.AdvancedDiscretizationOptions.CellAgglomerationThreshold = 0.2;
            //C.AdvancedDiscretizationOptions.PenaltySafety = 40;
            //C.AdvancedDiscretizationOptions.UseGhostPenalties = true;

            C.LSContiProjectionMethod = ContinuityProjectionOption.SpecFEM;
            //C.option_solver = C.PhysicalParameters.IncludeConvection ? "fixpoint+levelset" : "direct";
            C.VelocityBlockPrecondMode      = MultigridOperator.Mode.SymPart_DiagBlockEquilib_DropIndefinite;
            C.NoOfMultigridLevels           = 1;
            C.Solver_MaxIterations          = 50;
            C.Solver_ConvergenceCriterion   = 1e-8;
            C.LevelSet_ConvergenceCriterion = 1e-6;

            C.Option_LevelSetEvolution = LevelSetEvolution.FastMarching;

            C.AdvancedDiscretizationOptions.FilterConfiguration = CurvatureAlgorithms.FilterConfiguration.Default;
            C.AdvancedDiscretizationOptions.SST_isotropicMode   = Solution.XNSECommon.SurfaceStressTensor_IsotropicMode.Curvature_Projected;
            C.AdvancedDiscretizationOptions.FilterConfiguration.FilterCurvatureCycles = 1;

            #endregion


            // Timestepping
            // ============
            #region time

            C.Timestepper_Scheme           = XNSE_Control.TimesteppingScheme.ImplicitEuler;
            C.Timestepper_BDFinit          = TimeStepperInit.SingleInit;
            C.Timestepper_LevelSetHandling = LevelSetHandling.LieSplitting;

            C.CompMode = AppControl._CompMode.Transient;

            double dt = 2e-4;
            C.dtMax         = dt;
            C.dtMin         = dt;
            C.NoOfTimesteps = 1500;
            C.saveperiod    = 10;

            #endregion


            return(C);
        }
Ejemplo n.º 55
0
 // Token: 0x060011A7 RID: 4519 RVA: 0x000676E1 File Offset: 0x000658E1
 public override void OnWorkCycleStart(DatabaseInfo databaseInfo)
 {
     this.trainingConfiguration = InferenceTrainingConfiguration.Current;
 }
        public async System.Threading.Tasks.Task ReverseEngineerCodeFirstAsync(Project project)
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            try
            {
                var    dteH         = new EnvDteHelper();
                string dacpacSchema = null;

                if (_package.Dte2.Mode == vsIDEMode.vsIDEModeDebug)
                {
                    EnvDteHelper.ShowError("Cannot generate code while debugging");
                    return;
                }

                var projectPath  = project.Properties.Item("FullPath")?.Value.ToString();
                var optionsPaths = project.GetConfigFiles();
                var optionsPath  = optionsPaths.First();
                var renamingPath = project.GetRenamingPath();

                if (optionsPaths.Count > 1)
                {
                    var pcd = _package.GetView <IPickConfigDialog>();
                    pcd.PublishConfigurations(optionsPaths.Select(m => new ConfigModel
                    {
                        ConfigPath  = m,
                        ProjectPath = projectPath
                    }));

                    var pickConfigResult = pcd.ShowAndAwaitUserResponse(true);
                    if (!pickConfigResult.ClosedByOK)
                    {
                        return;
                    }

                    optionsPath = pickConfigResult.Payload.ConfigPath;
                }

                var databaseList = VsDataHelper.GetDataConnections(_package);
                var dacpacList   = _package.Dte2.DTE.GetDacpacFilesInActiveSolution(EnvDteHelper.GetProjectFilesInSolution(_package));
                var options      = ReverseEngineerOptionsExtensions.TryRead(optionsPath);

                var psd = _package.GetView <IPickServerDatabaseDialog>();

                if (databaseList != null && databaseList.Any())
                {
                    psd.PublishConnections(databaseList.Select(m => new DatabaseConnectionModel
                    {
                        ConnectionName   = m.Value.Caption,
                        ConnectionString = m.Value.ConnectionString,
                        DatabaseType     = m.Value.DatabaseType,
                        DataConnection   = m.Value.DataConnection,
                    }));
                }

                if (dacpacList != null && dacpacList.Any())
                {
                    psd.PublishDefinitions(dacpacList.Select(m => new DatabaseDefinitionModel
                    {
                        FilePath = m
                    }));
                }

                if (options != null)
                {
                    if (options.FilterSchemas && options.Schemas != null && options.Schemas.Any())
                    {
                        psd.PublishSchemas(options.Schemas);
                    }

                    psd.PublishCodeGenerationMode(options.CodeGenerationMode);

                    if (!string.IsNullOrEmpty(options.UiHint))
                    {
                        psd.PublishUiHint(options.UiHint);
                    }
                }

                var pickDataSourceResult = psd.ShowAndAwaitUserResponse(true);
                if (!pickDataSourceResult.ClosedByOK)
                {
                    return;
                }

                var useEFCore5    = pickDataSourceResult.Payload.IncludeViews;
                var filterSchemas = pickDataSourceResult.Payload.FilterSchemas;
                var schemas       = filterSchemas ? pickDataSourceResult.Payload.Schemas : null;

                _package.Dte2.StatusBar.Text = "Getting ready to connect...";

                DatabaseInfo dbInfo = null;
                if (pickDataSourceResult.Payload.Connection != null)
                {
                    dbInfo = new DatabaseInfo
                    {
                        ConnectionString = pickDataSourceResult.Payload.Connection.ConnectionString,
                        Caption          = pickDataSourceResult.Payload.Connection.ConnectionName,
                        DatabaseType     = pickDataSourceResult.Payload.Connection.DatabaseType,
                        DataConnection   = pickDataSourceResult.Payload.Connection.DataConnection,
                    };
                }
                var dacpacPath = pickDataSourceResult.Payload.Definition?.FilePath;

                if (dbInfo == null)
                {
                    dbInfo = new DatabaseInfo();
                }

                if (!string.IsNullOrEmpty(dacpacPath))
                {
                    dbInfo.DatabaseType     = DatabaseType.SQLServerDacpac;
                    dbInfo.ConnectionString = $"Data Source=(local);Initial Catalog={Path.GetFileNameWithoutExtension(dacpacPath)};Integrated Security=true;";
                    dacpacPath = _package.Dte2.DTE.BuildSqlProj(dacpacPath);
                    if (string.IsNullOrEmpty(dacpacPath))
                    {
                        EnvDteHelper.ShowMessage("Unable to build selected Database Project");
                        return;
                    }
                }

                if (dbInfo.DatabaseType == DatabaseType.SQLCE35 ||
                    dbInfo.DatabaseType == DatabaseType.SQLCE40 ||
                    dbInfo.DatabaseType == DatabaseType.Undefined)
                {
                    EnvDteHelper.ShowError($"Unsupported provider: {dbInfo.ServerVersion}");
                    return;
                }

                _package.Dte2.StatusBar.Text = "Loading database objects...";
                object icon = (short)Microsoft.VisualStudio.Shell.Interop.Constants.SBAI_Build;
                _package.Dte2.StatusBar.Animate(true, icon);
                var predefinedTables = !string.IsNullOrEmpty(dacpacPath)
                                           ? await GetDacpacTablesAsync(dacpacPath, useEFCore5)
                                           : await GetTablesAsync(dbInfo, useEFCore5, schemas);

                _package.Dte2.StatusBar.Animate(false, icon);

                var preselectedTables = new List <SerializationTableModel>();
                if (options != null)
                {
                    dacpacSchema = options.DefaultDacpacSchema;
                    if (options.Tables.Count > 0)
                    {
                        var normalizedTables = reverseEngineerHelper.NormalizeTables(options.Tables, dbInfo.DatabaseType == DatabaseType.SQLServer);
                        preselectedTables.AddRange(normalizedTables);
                    }
                }

                var namingOptionsAndPath = CustomNameOptionsExtensions.TryRead(renamingPath, optionsPath);

                _package.Dte2.StatusBar.Clear();

                var ptd = _package.GetView <IPickTablesDialog>()
                          .AddTables(predefinedTables, namingOptionsAndPath.Item1)
                          .PreselectTables(preselectedTables);

                var pickTablesResult = ptd.ShowAndAwaitUserResponse(true);
                if (!pickTablesResult.ClosedByOK)
                {
                    return;
                }

                _package.Dte2.StatusBar.Text = "Loading options...";

                var classBasis    = VsDataHelper.GetDatabaseName(dbInfo.ConnectionString, dbInfo.DatabaseType);
                var model         = reverseEngineerHelper.GenerateClassName(classBasis) + "Context";
                var packageResult = project.ContainsEfCoreReference(dbInfo.DatabaseType);

                var presets = new ModelingOptionsModel
                {
                    InstallNuGetPackage = !packageResult.Item1,
                    ModelName           = options != null ? options.ContextClassName : model,
                    ProjectName         = project.Name,
                    Namespace           = options != null ? options.ProjectRootNamespace : project.Properties.Item("DefaultNamespace").Value.ToString(),
                    DacpacPath          = dacpacPath,
                };
                if (options != null)
                {
                    presets.UseDataAnnotations         = !options.UseFluentApiOnly;
                    presets.UseDatabaseNames           = options.UseDatabaseNames;
                    presets.UsePluralizer              = options.UseInflector;
                    presets.UseDbContextSplitting      = options.UseDbContextSplitting;
                    presets.UseHandlebars              = options.UseHandleBars;
                    presets.SelectedHandlebarsLanguage = options.SelectedHandlebarsLanguage;
                    presets.IncludeConnectionString    = options.IncludeConnectionString;
                    presets.ModelName             = options.ContextClassName;
                    presets.Namespace             = options.ProjectRootNamespace;
                    presets.OutputPath            = options.OutputPath;
                    presets.OutputContextPath     = options.OutputContextPath;
                    presets.ModelNamespace        = options.ModelNamespace;
                    presets.ContextNamespace      = options.ContextNamespace;
                    presets.SelectedToBeGenerated = options.SelectedToBeGenerated;
                    presets.DacpacPath            = options.Dacpac;
                    presets.UseEf6Pluralizer      = options.UseLegacyPluralizer;
                    presets.MapSpatialTypes       = options.UseSpatial;
                    presets.MapNodaTimeTypes      = options.UseNodaTime;
                    presets.UseBoolPropertiesWithoutDefaultSql = options.UseBoolPropertiesWithoutDefaultSql;
                    presets.UseNoConstructor      = options.UseNoConstructor;
                    presets.UseNoNavigations      = options.UseNoNavigations;
                    presets.UseNullableReferences = options.UseNullableReferences;
                }

                var modelDialog = _package.GetView <IModelingOptionsDialog>()
                                  .ApplyPresets(presets);

                _package.Dte2.StatusBar.Clear();

                var modelingOptionsResult = modelDialog.ShowAndAwaitUserResponse(true);
                if (!modelingOptionsResult.ClosedByOK)
                {
                    return;
                }

                options = new ReverseEngineerOptions
                {
                    UseFluentApiOnly                   = !modelingOptionsResult.Payload.UseDataAnnotations,
                    ConnectionString                   = dbInfo.ConnectionString,
                    ContextClassName                   = modelingOptionsResult.Payload.ModelName,
                    DatabaseType                       = dbInfo.DatabaseType,
                    ProjectPath                        = projectPath,
                    OutputPath                         = modelingOptionsResult.Payload.OutputPath,
                    OutputContextPath                  = modelingOptionsResult.Payload.OutputContextPath,
                    ContextNamespace                   = modelingOptionsResult.Payload.ContextNamespace,
                    ModelNamespace                     = modelingOptionsResult.Payload.ModelNamespace,
                    ProjectRootNamespace               = modelingOptionsResult.Payload.Namespace,
                    UseDatabaseNames                   = modelingOptionsResult.Payload.UseDatabaseNames,
                    UseInflector                       = modelingOptionsResult.Payload.UsePluralizer,
                    UseLegacyPluralizer                = modelingOptionsResult.Payload.UseEf6Pluralizer,
                    UseSpatial                         = modelingOptionsResult.Payload.MapSpatialTypes,
                    UseNodaTime                        = modelingOptionsResult.Payload.MapNodaTimeTypes,
                    UseDbContextSplitting              = modelingOptionsResult.Payload.UseDbContextSplitting,
                    UseHandleBars                      = modelingOptionsResult.Payload.UseHandlebars,
                    SelectedHandlebarsLanguage         = modelingOptionsResult.Payload.SelectedHandlebarsLanguage,
                    IncludeConnectionString            = modelingOptionsResult.Payload.IncludeConnectionString,
                    SelectedToBeGenerated              = modelingOptionsResult.Payload.SelectedToBeGenerated,
                    UseBoolPropertiesWithoutDefaultSql = modelingOptionsResult.Payload.UseBoolPropertiesWithoutDefaultSql,
                    UseNullableReferences              = modelingOptionsResult.Payload.UseNullableReferences,
                    UseNoConstructor                   = modelingOptionsResult.Payload.UseNoConstructor,
                    UseNoNavigations                   = modelingOptionsResult.Payload.UseNoNavigations,
                    Dacpac = dacpacPath,
                    DefaultDacpacSchema = dacpacSchema,
                    Tables             = pickTablesResult.Payload.Objects.ToList(),
                    CustomReplacers    = pickTablesResult.Payload.CustomReplacers.ToList(),
                    FilterSchemas      = filterSchemas,
                    Schemas            = schemas?.ToList(),
                    CodeGenerationMode = pickDataSourceResult.Payload.IncludeViews ? CodeGenerationMode.EFCore5 : CodeGenerationMode.EFCore3,
                    UiHint             = pickDataSourceResult.Payload.UiHint,
                };

                if (options.DatabaseType == DatabaseType.SQLServer &&
                    string.IsNullOrEmpty(options.Dacpac))
                {
                    var rightsAndVersion = reverseEngineerHelper.HasSqlServerViewDefinitionRightsAndVersion(options.ConnectionString);

                    if (rightsAndVersion.Item1 == false)
                    {
                        EnvDteHelper.ShowMessage("The SQL Server user does not have 'VIEW DEFINITION' rights, default constraints may not be available.");
                    }

                    if (rightsAndVersion.Item2.Major < 11)
                    {
                        EnvDteHelper.ShowMessage($"SQL Server version {rightsAndVersion.Item2} may not be supported.");
                    }
                }

                if (modelingOptionsResult.Payload.UseHandlebars)
                {
                    var dropped = (DropTemplates(projectPath, useEFCore5));
                    if (dropped)
                    {
                        project.ProjectItems.AddFromDirectory(Path.Combine(projectPath, "CodeTemplates"));
                    }
                }

                var startTime = DateTime.Now;

                _package.Dte2.StatusBar.Animate(true, icon);
                _package.Dte2.StatusBar.Text = "Generating code...";
                var revEngResult = EfRevEngLauncher.LaunchExternalRunner(options, useEFCore5);
                _package.Dte2.StatusBar.Animate(false, icon);
                if (modelingOptionsResult.Payload.SelectedToBeGenerated == 0 || modelingOptionsResult.Payload.SelectedToBeGenerated == 2)
                {
                    foreach (var filePath in revEngResult.EntityTypeFilePaths)
                    {
                        project.ProjectItems.AddFromFile(filePath);
                    }

                    if (modelingOptionsResult.Payload.SelectedToBeGenerated == 2)
                    {
                        if (File.Exists(revEngResult.ContextFilePath))
                        {
                            File.Delete(revEngResult.ContextFilePath);
                        }
                        foreach (var filePath in revEngResult.ContextConfigurationFilePaths)
                        {
                            if (File.Exists(filePath))
                            {
                                File.Delete(filePath);
                            }
                        }
                    }
                }

                if (modelingOptionsResult.Payload.SelectedToBeGenerated == 0 || modelingOptionsResult.Payload.SelectedToBeGenerated == 1)
                {
                    foreach (var filePath in revEngResult.ContextConfigurationFilePaths)
                    {
                        project.ProjectItems.AddFromFile(filePath);
                    }
                    project.ProjectItems.AddFromFile(revEngResult.ContextFilePath);

                    _package.Dte2.ItemOperations.OpenFile(revEngResult.ContextFilePath);

                    if (modelingOptionsResult.Payload.SelectedToBeGenerated == 1)
                    {
                        foreach (var filePath in revEngResult.EntityTypeFilePaths)
                        {
                            if (File.Exists(filePath))
                            {
                                File.Delete(filePath);
                            }
                        }
                    }
                }

                var duration = DateTime.Now - startTime;

                var missingProviderPackage = packageResult.Item1 ? null : packageResult.Item2;
                if (modelingOptionsResult.Payload.InstallNuGetPackage || modelingOptionsResult.Payload.SelectedToBeGenerated == 2)
                {
                    missingProviderPackage = null;
                }

                _package.Dte2.StatusBar.Text = "Reporting result...";
                var errors = reverseEngineerHelper.ReportRevEngErrors(revEngResult, missingProviderPackage);

                SaveOptions(project, optionsPath, options, new Tuple <List <Schema>, string>(pickTablesResult.Payload.CustomReplacers.ToList(), namingOptionsAndPath.Item2));

                if (modelingOptionsResult.Payload.InstallNuGetPackage)
                {
                    _package.Dte2.StatusBar.Text = "Installing EF Core provider package";
                    var nuGetHelper = new NuGetHelper();
                    await nuGetHelper.InstallPackageAsync(packageResult.Item2, project);
                }

                _package.Dte2.StatusBar.Text = $"Reverse engineer completed in {duration:h\\:mm\\:ss}";

                EnvDteHelper.ShowMessage(errors);

                if (revEngResult.EntityErrors.Count > 0)
                {
                    _package.LogError(revEngResult.EntityErrors, null);
                }
                if (revEngResult.EntityWarnings.Count > 0)
                {
                    _package.LogError(revEngResult.EntityWarnings, null);
                }
                Telemetry.TrackEvent("PowerTools.ReverseEngineer");
            }
            catch (AggregateException ae)
            {
                foreach (var innerException in ae.Flatten().InnerExceptions)
                {
                    _package.LogError(new List <string>(), innerException);
                }
            }
            catch (Exception exception)
            {
                _package.LogError(new List <string>(), exception);
            }
        }
Ejemplo n.º 57
0
        public async void ReverseEngineerCodeFirst(Project project)
        {
            try
            {
                var    dteH         = new EnvDteHelper();
                var    revEng       = new EfCoreReverseEngineer();
                string dacpacSchema = null;

                if (_package.Dte2.Mode == vsIDEMode.vsIDEModeDebug)
                {
                    EnvDteHelper.ShowError("Cannot generate code while debugging");
                    return;
                }

                var startTime    = DateTime.Now;
                var projectPath  = project.Properties.Item("FullPath").Value.ToString();
                var optionsPath  = Path.Combine(projectPath, "efpt.config.json");
                var renamingPath = Path.Combine(projectPath, "efpt.renaming.json");

                var databaseList = EnvDteHelper.GetDataConnections(_package);
                var dacpacList   = _package.Dte2.DTE.GetDacpacFilesInActiveSolution();

                var psd = _package.GetView <IPickServerDatabaseDialog>();

                if (databaseList != null && databaseList.Any())
                {
                    psd.PublishConnections(databaseList.Select(m => new DatabaseConnectionModel
                    {
                        ConnectionName   = m.Value.Caption,
                        ConnectionString = m.Value.ConnectionString,
                        DatabaseType     = m.Value.DatabaseType
                    }));
                }

                if (dacpacList != null && dacpacList.Any())
                {
                    psd.PublishDefinitions(dacpacList.Select(m => new DatabaseDefinitionModel
                    {
                        FilePath = m
                    }));
                }

                var pickDataSourceResult = psd.ShowAndAwaitUserResponse(true);
                if (!pickDataSourceResult.ClosedByOK)
                {
                    return;
                }

                _package.Dte2.StatusBar.Text = "Loading schema information...";

                // Reload the database list, in case the user has added a new database in the dialog
                databaseList = EnvDteHelper.GetDataConnections(_package);

                DatabaseInfo dbInfo = null;
                if (pickDataSourceResult.Payload.Connection != null)
                {
                    dbInfo = databaseList.Single(m => m.Value.ConnectionString == pickDataSourceResult.Payload.Connection?.ConnectionString).Value;
                }
                var dacpacPath = pickDataSourceResult.Payload.Definition?.FilePath;

                if (dbInfo == null)
                {
                    dbInfo = new DatabaseInfo();
                }

                if (!string.IsNullOrEmpty(dacpacPath))
                {
                    dbInfo.DatabaseType     = DatabaseType.SQLServer;
                    dbInfo.ConnectionString = "Data Source=.;Initial Catalog=" + Path.GetFileNameWithoutExtension(dacpacPath);
                    dacpacPath = _package.Dte2.DTE.BuildSqlProj(dacpacPath);
                    if (string.IsNullOrEmpty(dacpacPath))
                    {
                        EnvDteHelper.ShowMessage("Unable to build selected Database Project");
                        return;
                    }
                }

                if (dbInfo.DatabaseType == DatabaseType.SQLCE35)
                {
                    EnvDteHelper.ShowError($"Unsupported provider: {dbInfo.ServerVersion}");
                    return;
                }

                var options = ReverseEngineerOptionsExtensions.TryRead(optionsPath);

                var predefinedTables = !string.IsNullOrEmpty(dacpacPath)
                                           ? revEng.GetDacpacTables(dacpacPath)
                                           : GetTablesFromRepository(dbInfo);

                var preselectedTables = new List <TableInformationModel>();
                if (options != null)
                {
                    dacpacSchema = options.DefaultDacpacSchema;
                    if (options.Tables.Count > 0)
                    {
                        preselectedTables.AddRange(options.Tables);
                    }
                }

                var ptd = _package.GetView <IPickTablesDialog>()
                          .AddTables(predefinedTables)
                          .PreselectTables(preselectedTables);

                var customNameOptions = CustomNameOptionsExtensions.TryRead(renamingPath);

                var pickTablesResult = ptd.ShowAndAwaitUserResponse(true);
                if (!pickTablesResult.ClosedByOK)
                {
                    return;
                }

                var classBasis = string.Empty;
                if (dbInfo.DatabaseType == DatabaseType.Npgsql)
                {
                    classBasis = EnvDteHelper.GetNpgsqlDatabaseName(dbInfo.ConnectionString);
                }
                else if (dbInfo.DatabaseType == DatabaseType.Mysql)
                {
                    classBasis = EnvDteHelper.GetMysqlDatabaseName(dbInfo.ConnectionString);
                }
                else
                {
                    classBasis = RepositoryHelper.GetClassBasis(dbInfo.ConnectionString, dbInfo.DatabaseType);
                }
                var model         = revEng.GenerateClassName(classBasis) + "Context";
                var packageResult = project.ContainsEfCoreReference(dbInfo.DatabaseType);

                var presets = new ModelingOptionsModel
                {
                    InstallNuGetPackage = !packageResult.Item1,
                    ModelName           = options != null ? options.ContextClassName : model,
                    ProjectName         = project.Name,
                    Namespace           = options != null ? options.ProjectRootNamespace : project.Properties.Item("DefaultNamespace").Value.ToString(),
                    DacpacPath          = dacpacPath,
                };
                if (options != null)
                {
                    presets.UseDataAnnotations      = !options.UseFluentApiOnly;
                    presets.UseDatabaseNames        = options.UseDatabaseNames;
                    presets.UsePluralizer           = options.UseInflector;
                    presets.UseHandelbars           = options.UseHandleBars;
                    presets.ReplaceId               = options.IdReplace;
                    presets.IncludeConnectionString = options.IncludeConnectionString;
                    presets.ModelName               = options.ContextClassName;
                    presets.Namespace               = options.ProjectRootNamespace;
                    presets.OutputPath              = options.OutputPath;
                    presets.SelectedTobeGenerated   = options.SelectedToBeGenerated;
                }

                var modelDialog = _package.GetView <IModelingOptionsDialog>()
                                  .ApplyPresets(presets);

                _package.Dte2.StatusBar.Text = "Getting options...";

                var modelingOptionsResult = modelDialog.ShowAndAwaitUserResponse(true);
                if (!modelingOptionsResult.ClosedByOK)
                {
                    return;
                }

                options = new ReverseEngineerOptions
                {
                    UseFluentApiOnly        = !modelingOptionsResult.Payload.UseDataAnnotations,
                    ConnectionString        = dbInfo.ConnectionString,
                    ContextClassName        = modelingOptionsResult.Payload.ModelName,
                    DatabaseType            = (ReverseEngineer20.DatabaseType)dbInfo.DatabaseType,
                    ProjectPath             = projectPath,
                    OutputPath              = modelingOptionsResult.Payload.OutputPath,
                    ProjectRootNamespace    = modelingOptionsResult.Payload.Namespace,
                    UseDatabaseNames        = modelingOptionsResult.Payload.UseDatabaseNames,
                    UseInflector            = modelingOptionsResult.Payload.UsePluralizer,
                    IdReplace               = modelingOptionsResult.Payload.ReplaceId,
                    UseHandleBars           = modelingOptionsResult.Payload.UseHandelbars,
                    IncludeConnectionString = modelingOptionsResult.Payload.IncludeConnectionString,
                    SelectedToBeGenerated   = modelingOptionsResult.Payload.SelectedTobeGenerated,
                    Dacpac = dacpacPath,
                    DefaultDacpacSchema = dacpacSchema,
                    Tables          = pickTablesResult.Payload.ToList(),
                    CustomReplacers = customNameOptions
                };

                _package.Dte2.StatusBar.Text = "Generating code...";

                var  tfm           = project.Properties.Item("TargetFrameworkMoniker").Value.ToString();
                bool isNetStandard = tfm.Contains(".NETStandard,Version=v2.0");

                if (modelingOptionsResult.Payload.UseHandelbars)
                {
                    var dropped = (DropTemplates(projectPath));
                    if (dropped && !project.IsNetCore() && !isNetStandard)
                    {
                        project.ProjectItems.AddFromDirectory(Path.Combine(projectPath, "CodeTemplates"));
                    }
                }

                var revEngResult = revEng.GenerateFiles(options);

                if (modelingOptionsResult.Payload.SelectedTobeGenerated == 0 || modelingOptionsResult.Payload.SelectedTobeGenerated == 2)
                {
                    foreach (var filePath in revEngResult.EntityTypeFilePaths)
                    {
                        project.ProjectItems.AddFromFile(filePath);
                    }
                    if (modelingOptionsResult.Payload.SelectedTobeGenerated == 2)
                    {
                        if (File.Exists(revEngResult.ContextFilePath))
                        {
                            File.Delete(revEngResult.ContextFilePath);
                        }
                    }
                }
                if (modelingOptionsResult.Payload.SelectedTobeGenerated == 0 || modelingOptionsResult.Payload.SelectedTobeGenerated == 1)
                {
                    project.ProjectItems.AddFromFile(revEngResult.ContextFilePath);
                    if (!project.IsNetCore() && !isNetStandard)
                    {
                        _package.Dte2.ItemOperations.OpenFile(revEngResult.ContextFilePath);
                    }
                    if (modelingOptionsResult.Payload.SelectedTobeGenerated == 1)
                    {
                        foreach (var filePath in revEngResult.EntityTypeFilePaths)
                        {
                            if (File.Exists(filePath))
                            {
                                File.Delete(filePath);
                            }
                        }
                    }
                }

                var missingProviderPackage = packageResult.Item1 ? null : packageResult.Item2;
                if (modelingOptionsResult.Payload.InstallNuGetPackage || modelingOptionsResult.Payload.SelectedTobeGenerated == 2)
                {
                    missingProviderPackage = null;
                }

                _package.Dte2.StatusBar.Text = "Reporting result...";
                var errors = ReportRevEngErrors(revEngResult, missingProviderPackage);

                SaveOptions(project, optionsPath, options);

                if (modelingOptionsResult.Payload.InstallNuGetPackage)
                {
                    _package.Dte2.StatusBar.Text = "Installing EF Core provider package";
                    var nuGetHelper = new NuGetHelper();
                    await nuGetHelper.InstallPackageAsync(packageResult.Item2, project);
                }
                var duration = DateTime.Now - startTime;
                _package.Dte2.StatusBar.Text = $"Reverse engineer completed in {duration:h\\:mm\\:ss}";

                EnvDteHelper.ShowMessage(errors);

                if (revEngResult.EntityErrors.Count > 0)
                {
                    _package.LogError(revEngResult.EntityErrors, null);
                }
                if (revEngResult.EntityWarnings.Count > 0)
                {
                    _package.LogError(revEngResult.EntityWarnings, null);
                }
                Telemetry.TrackEvent("PowerTools.ReverseEngineer");
            }
            catch (AggregateException ae)
            {
                foreach (var innerException in ae.Flatten().InnerExceptions)
                {
                    _package.LogError(new List <string>(), innerException);
                }
            }
            catch (Exception exception)
            {
                _package.LogError(new List <string>(), exception);
            }
        }
Ejemplo n.º 58
0
        public static void Update(DatabaseInfo info,
                                  Func <DatabaseInfo, bool> queryUpdate,
                                  ReportUpdateResult report)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }
            if (queryUpdate == null)
            {
                throw new ArgumentNullException("queryUpdate");
            }
            if (report == null)
            {
                throw new ArgumentNullException("report");
            }

            var details     = info.Details;
            var urlInfo     = WebUtils.Deserialize(details.Url);
            var credentials = WebUtils.CreateCredentials(
                urlInfo.User, urlInfo.Password, urlInfo.Domain);

            WebUtils.Download(urlInfo.Url, credentials, (req, getResponse) =>
            {
                if (!queryUpdate(info))
                {
                    return;
                }

                HttpWebResponse res;

                try
                {
                    res = getResponse();
                }
                catch (WebException ex)
                {
                    report(info, SyncResults.Failed, ex.Message);
                    return;
                }

                using (var buffer = new MemoryStream())
                {
                    using (var stream = res.GetResponseStream())
                    {
                        BufferEx.CopyStream(stream, buffer);
                        buffer.Position = 0;
                    }

                    var check = DatabaseVerifier
                                .VerifyUnattened(buffer);

                    if (check.Result == VerifyResultTypes.Error)
                    {
                        report(info, SyncResults.Failed,
                               check.Message);

                        return;
                    }

                    info.SetDatabase(buffer, details);
                    report(info, SyncResults.Downloaded, null);
                }
            });
        }