public static MigrationStrategyBase GetDatabaseGenerationStrategyBase(LinkedDatabase database)
 {
     if (database.DatabaseType == DatabaseType.SqlServer)
     {
         return(new SqlServerMigrationStrategy());
     }
     throw new NotImplementedException();
 }
예제 #2
0
        private void btnPickOther_Click(object sender, EventArgs e)
        {
            LinkedDatabase[] items = new LinkedDatabase[] { new LinkedDatabase("Populating list...") };
            if (this._allLinkedDatabases != null)
            {
                items = this._allLinkedDatabases;
            }
            ThreadStart start = null;

            using (ListPicker picker = new ListPicker(items, true))
            {
                if (this._allLinkedDatabases == null)
                {
                    if (start == null)
                    {
                        start = delegate {
                            Action method  = null;
                            Action action2 = null;
                            try
                            {
                                this._allLinkedDatabases = this._linkedDbFetcher().ToArray <LinkedDatabase>();
                                if (((this._allLinkedDatabases != null) && this._allLinkedDatabases.Any <LinkedDatabase>()) && !picker.IsDisposed)
                                {
                                    if (method == null)
                                    {
                                        method = () => picker.AllItems = this._allLinkedDatabases;
                                    }
                                    picker.Invoke(method);
                                }
                            }
                            catch (Exception exception)
                            {
                                if (!picker.IsDisposed)
                                {
                                    if (!picker.IsDisposed)
                                    {
                                        if (action2 == null)
                                        {
                                            action2 = () => picker.AllItems = null;
                                        }
                                        picker.Invoke(action2);
                                    }
                                    MessageBox.Show("Error: " + exception.Message, "LINQPad");
                                }
                            }
                        };
                    }
                    new Thread(start).Start();
                }
                if ((picker.ShowDialog() == DialogResult.OK) && (picker.SelectedItems != null))
                {
                    foreach (LinkedDatabase database in picker.SelectedItems)
                    {
                        this.grdOther.Rows.Add(new object[] { database.Server, database.Database });
                    }
                }
            }
        }
예제 #3
0
 private void btnPickOther_Click(object sender, EventArgs e)
 {
     LinkedDatabase[] items = new LinkedDatabase[] { new LinkedDatabase("Populating list...") };
     if (this._allLinkedDatabases != null)
     {
         items = this._allLinkedDatabases;
     }
     ThreadStart start = null;
     using (ListPicker picker = new ListPicker(items, true))
     {
         if (this._allLinkedDatabases == null)
         {
             if (start == null)
             {
                 start = delegate {
                     Action method = null;
                     Action action2 = null;
                     try
                     {
                         this._allLinkedDatabases = this._linkedDbFetcher().ToArray<LinkedDatabase>();
                         if (((this._allLinkedDatabases != null) && this._allLinkedDatabases.Any<LinkedDatabase>()) && !picker.IsDisposed)
                         {
                             if (method == null)
                             {
                                 method = () => picker.AllItems = this._allLinkedDatabases;
                             }
                             picker.Invoke(method);
                         }
                     }
                     catch (Exception exception)
                     {
                         if (!picker.IsDisposed)
                         {
                             if (!picker.IsDisposed)
                             {
                                 if (action2 == null)
                                 {
                                     action2 = () => picker.AllItems = null;
                                 }
                                 picker.Invoke(action2);
                             }
                             MessageBox.Show("Error: " + exception.Message, "LINQPad");
                         }
                     }
                 };
             }
             new Thread(start).Start();
         }
         if ((picker.ShowDialog() == DialogResult.OK) && (picker.SelectedItems != null))
         {
             foreach (LinkedDatabase database in picker.SelectedItems)
             {
                 this.grdOther.Rows.Add(new object[] { database.Server, database.Database });
             }
         }
     }
 }
예제 #4
0
        public override Database GetDatabase(LinkedDatabase database)
        {
            var sqlServerRepository = new SqlServerDatabaseReader(database);

            return(new Database
            {
                StoredProcedures = sqlServerRepository.GetStoredProcedures(),
                Tables = sqlServerRepository.GetTables()
            });
        }
        public override string GetMigrationScript(LinkedDatabase database)
        {
            var sqlServerStoredProcReader = new StoredProcedureDatabaseReader(database);
            var fileReader = new SqlServerFileReader();

            var storedProcFilePaths = Directory.GetFiles(SubfolderService.GetStoredProceduresFolder(database), ".sql");

            var storedProcDifferentiator = new SqlServerStoredProcedureDifferentiator();

            return(storedProcDifferentiator.GetDifferenceAlterString(fileReader.StoredProcedures(storedProcFilePaths), sqlServerStoredProcReader.GetStoredProcedures()));
        }
        public static string GetStoredProceduresFolder(LinkedDatabase database)
        {
            var directory            = Directory.GetCurrentDirectory();
            var folderName           = Path.Combine(directory, database.Name);
            var storedProcFolderName = Path.Combine(folderName, "Stored Procedures");

            if (!Directory.Exists(storedProcFolderName))
            {
                Directory.CreateDirectory(storedProcFolderName);
            }
            return(storedProcFolderName);
        }
        public static string GetTableFolder(LinkedDatabase database)
        {
            var directory       = Directory.GetCurrentDirectory();
            var folderName      = Path.Combine(directory, database.Name);
            var tableFolderName = Path.Combine(folderName, "Tables");

            if (!Directory.Exists(tableFolderName))
            {
                Directory.CreateDirectory(tableFolderName);
            }
            return(tableFolderName);
        }
예제 #8
0
        public int CreateLinkedDatabaseFolder(string databaseName)
        {
            try
            {
                var directory  = Directory.GetCurrentDirectory();
                var fileName   = Path.Combine(directory, $"{databaseName}.json");
                var folderName = Path.Combine(directory, databaseName);
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }

                if (Directory.Exists(folderName))
                {
                    Directory.Delete(folderName, true);
                }

                Directory.CreateDirectory(folderName);

                using (var file = File.Create(fileName))
                {
                    var database = new LinkedDatabase
                    {
                        Name             = databaseName,
                        DatabaseType     = DatabaseType.NotSetUp,
                        ConnectionString = string.Empty,
                        FolderLocation   = folderName
                    };

                    var json       = JsonConvert.SerializeObject(database, Formatting.Indented);
                    var writeBytes = Encoding.UTF8.GetBytes(json);
                    file.Write(writeBytes, 0, writeBytes.Length);
                }

                return(0);
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception caught:" + e.Message);
                return(1);
            }
        }
예제 #9
0
        public WhenRunningIntegrationTests()
        {
            if (Environment.GetEnvironmentVariable(EnvironmentVariableName) == null)
            {
                Environment.SetEnvironmentVariable(
                    EnvironmentVariableName,
                    "Data Source=localhost;Integrated Security=True;");
            }
            Database = new LinkedDatabase
            {
                DatabaseType     = DatabaseType.SqlServer,
                ConnectionString = Environment.GetEnvironmentVariable(EnvironmentVariableName),
                Name             = EnhancedRandom.String(10, 20)
            };

            using (var conn = new SqlConnection(Database.ConnectionString))
            {
                conn.Open();
                var exists = conn.ExecuteScalar <bool>("SELECT 1 FROM sys.databases WHERE name = @name",
                                                       new
                {
                    name = Database.Name
                });
                if (!exists)
                {
                    conn.Execute($"CREATE DATABASE {Database.Name}");
                }
                else
                {
                    conn.Execute($"DROP DATABASE {Database.Name}");
                    conn.Execute($"CREATE DATABASE {Database.Name}");
                }
            }

            var automapperStartup = new AutomapperStartup();

            automapperStartup.Startup(null);
        }
 public TableDatabaseReader(LinkedDatabase database)
 {
     _database = database;
 }
예제 #11
0
 public SqlServerDatabaseReader(LinkedDatabase database)
 {
     _database    = database;
     _tableReader = new TableDatabaseReader(database);
     _spReader    = new StoredProcedureDatabaseReader(database);
 }
예제 #12
0
        public Database GetDatabase(LINQPad.Repository r, LinkedDatabase serverLinkedDb, bool sameServerLink, string systemSchema)
        {
            Func <LINQPad.Repository, Database> selector = null;
            Func <LinkedDatabase, Database>     func2    = null;
            Database database;

            if (systemSchema != null)
            {
                sameServerLink = true;
            }
            this._repository   = r;
            this._serverPrefix = (serverLinkedDb == null) ? "" : (serverLinkedDb.QualifiedPrefix + ".");
            this._excludeFuncs = serverLinkedDb != null;
            this._systemSchema = systemSchema;
            using (this._cx = (SqlConnection)this._repository.Open())
            {
                this.PopulateVersionAndTypes();
                using (SqlDataReader reader = this.GetMainSchemaReader())
                {
                    HashSet <string> keys = new HashSet <string>(this.ReadPKeys(reader));
                    reader.NextResult();
                    List <Column> columns = this.ReadColumns(reader, keys).ToList <Column>();
                    reader.NextResult();
                    List <ColumnAssociation> associations = this.ReadAssociations(columns, reader).ToList <ColumnAssociation>();
                    reader.NextResult();
                    List <Parameter> routineParameters = this.ReadParameters(reader).ToList <Parameter>();
                    if (serverLinkedDb != null)
                    {
                        return(new Database(serverLinkedDb.Server, serverLinkedDb.Database, systemSchema, r.DynamicSchemaOptions, columns, associations, routineParameters, null));
                    }
                    if (sameServerLink || (systemSchema != null))
                    {
                        return(new Database(null, r.Database, systemSchema, r.DynamicSchemaOptions, columns, associations, routineParameters, null));
                    }
                    List <Database> list4 = new List <Database>();
                    if (this.AllowOtherDatabases)
                    {
                        if ((r.IncludeSystemObjects && (r.Database != "master")) && (string.IsNullOrEmpty(this._sqlVersion) || (this._sqlVersion[0] != '8')))
                        {
                            LINQPad.Repository repository = r.Clone();
                            repository.LinkedDatabases      = null;
                            repository.IncludeSystemObjects = false;
                            if (this.ThunkToMasterForSystemSchemas)
                            {
                                repository.Database = "master";
                            }
                            repository.AttachFile     = false;
                            repository.AttachFileName = "";
                            list4.Add(this.CreateNew().GetDatabase(repository, null, true, "sys"));
                            list4.Add(this.CreateNew().GetDatabase(repository, null, true, "INFORMATION_SCHEMA"));
                        }
                        if (selector == null)
                        {
                            selector = lr => this.CreateNew().GetDatabase(lr, null, true, null);
                        }
                        list4.AddRange(r.GetSameServerLinkedRepositories().Select <LINQPad.Repository, Database>(selector));
                        if (func2 == null)
                        {
                            func2 = ld => this.CreateNew().GetDatabase(r, ld, false, null);
                        }
                        list4.AddRange(r.GetOtherServerLinkedDatabases().Select <LinkedDatabase, Database>(func2));
                    }
                    database = new Database(null, null, null, r.DynamicSchemaOptions, columns, associations, routineParameters, list4.ToArray());
                }
            }
            return(database);
        }
예제 #13
0
 public abstract Database GetDatabase(LinkedDatabase database);
예제 #14
0
 public abstract string GetMigrationScript(LinkedDatabase database);
예제 #15
0
 public StoredProcedureDatabaseReader(LinkedDatabase database)
 {
     _database = database;
 }