Esempio n. 1
0
        public void Document(DatabaseDefinition databaseDefinition)
        {
            Log(LogSeverity.Information, "Starting on {DatabaseName}.", "Documenter", DatabaseName);

            var tables = RemoveKnownTechnicalTables(databaseDefinition.GetTables());

            foreach (var table in tables)
            {
                if (!Customizer.ShouldSkip(table.SchemaAndTableName))
                {
                    _sqlTablesByCategory.Add(new KeyValuePair <string, SqlTable>(Customizer.Category(table.SchemaAndTableName), table));
                }
                else
                {
                    _skippedSqlTablesByCategory.Add(new KeyValuePair <string, SqlTable>(Customizer.Category(table.SchemaAndTableName), table));
                }
            }

            var hasCategories = _sqlTablesByCategory.Any(x => !string.IsNullOrEmpty(x.Key));

            var noOfTables           = databaseDefinition.GetTables().Count;
            var noOfNotSkippedTables = databaseDefinition.GetTables().Count(t => !Customizer.ShouldSkip(t.SchemaAndTableName));

            WriteLine("Database", "Database name", DatabaseName);
            WriteLine("Database", "Number of documented tables", noOfNotSkippedTables);
            WriteLine("Database", "Number of skipped tables", noOfTables - noOfNotSkippedTables);
            WriteLine("Database", "Number of tables", noOfTables);

            if (hasCategories)
            {
                WriteLine("Database");
                WriteLine("Database", "Documented category", "Table count");

                Context.Logger.Log(LogSeverity.Verbose, "Writing tables by category.", "Documenter");

                foreach (var category in _sqlTablesByCategory.Select(kvp => kvp.Key).Distinct().OrderBy(x => x))
                {
                    WriteLine("Database", category ?? "(No category)", _sqlTablesByCategory.Count(kvp => kvp.Key == category));
                }

                if (_skippedSqlTablesByCategory.Count > 0)
                {
                    WriteLine("Database");
                    WriteLine("Database", "Skipped category", "Table count");

                    foreach (var category in _skippedSqlTablesByCategory.Select(kvp => kvp.Key).Distinct().OrderBy(x => x))
                    {
                        WriteLine("Database", category ?? "(No category)", _skippedSqlTablesByCategory.Count(kvp => kvp.Key == category));
                    }
                }

                WriteLine("Tables", "Category", "Schema", "Table Name", "Link", "Number of columns", "Description");

                if (!Context.DocumenterSettings.NoInternalDataTypes)
                {
                    WriteLine("All columns", "Category", "Schema", "Table Name", "Column Name", "Data Type (DbTools)", "Data Type", "Column Length", "Column Scale", "Allow Nulls", "Primary Key", "Identity", "Default Value", "Description");
                }
                else
                {
                    WriteLine("All columns", "Category", "Schema", "Table Name", "Column Name", "Data Type", "Column Length", "Column Scale", "Allow Nulls", "Primary Key", "Identity", "Default Value", "Description");
                }
            }
            else
            {
                WriteLine("Tables", "Schema", "Table Name", "Link", "Number of columns", "Description");
                if (!Context.DocumenterSettings.NoInternalDataTypes)
                {
                    WriteLine("All columns", "Schema", "Table Name", "Column Name", "Data Type (DbTools)", "Data Type", "Column Length", "Column Scale", "Allow Nulls", "Primary Key", "Identity", "Default Value", "Description");
                }
                else
                {
                    WriteLine("All columns", "Schema", "Table Name", "Column Name", "Data Type", "Column Length", "Column Scale", "Allow Nulls", "Primary Key", "Identity", "Default Value", "Description");
                }
            }

            // Ensure sheet order
            if (Customizer is PatternMatchingTableCustomizer)
            {
                Write("Patt.ma.-tables");
                Write("Patt.ma.-patterns");
                Write("Patt.ma.-ma.s w exceptions");
                Write("Patt.ma.-no matches (unused)");
            }

            foreach (var tableKvp in _sqlTablesByCategory.OrderBy(kvp => kvp.Key).ThenBy(t => t.Value.SchemaAndTableName.Schema).ThenBy(t => t.Value.SchemaAndTableName.TableName))
            {
                Context.Logger.Log(LogSeverity.Verbose, "Generating {TableName}.", "Documenter", tableKvp.Value.SchemaAndTableName);
                var category = tableKvp.Key;
                var table    = tableKvp.Value;
                AddTableToTableList(category, table, hasCategories);

                var sheetColor = GetColor(table.SchemaAndTableName);
                if (sheetColor != null)
                {
                    DocumenterWriter.SetSheetColor(Helper.GetSimplifiedSchemaAndTableName(table.SchemaAndTableName), sheetColor.Value);
                }

                AddTableHeader(hasCategories, category, table);

                AddTableDetails(category, table, hasCategories);
            }

            WriteLine("Tables");

            foreach (var tableKvp in _skippedSqlTablesByCategory.OrderBy(kvp => kvp.Key).ThenBy(t => t.Value.SchemaAndTableName.Schema).ThenBy(t => t.Value.SchemaAndTableName.TableName))
            {
                var category = tableKvp.Key;
                var table    = tableKvp.Value;
                AddTableToTableList(category, table, hasCategories);
            }

            Context.Logger.Log(LogSeverity.Verbose, "Generating pattern matching info.", "Documenter");
            AddPatternMatching();
            AddPatternMatchingNoMatch();

            Log(LogSeverity.Information, "Generating Document content.", "Documenter");
            var content = DocumenterWriter.GetContent();

            var fileName = FileName ?? (DatabaseName?.Length == 0 ? "Database.xlsx" : DatabaseName + ".xlsx");

            var path = Context.DocumenterSettings?.WorkingDirectory;

            Log(LogSeverity.Information, "Writing Document file {FileName} to folder {Folder}", "Documenter", fileName, path);

            if (!string.IsNullOrEmpty(path))
            {
                fileName = Path.Combine(path, fileName);
            }

            File.WriteAllBytes(fileName, content);
        }
 public DatabaseCreator(DatabaseDefinition databaseDefinition, SqlStatementExecuter sqlExecuter)
     : base(sqlExecuter)
 {
     DatabaseDefinition = databaseDefinition;
 }
Esempio n. 3
0
        public Cluster Install(bool system, string clusterName, string username, string email, string password)
        {
            cluster = new Cluster(Context)
            {
                Name   = clusterName,
                System = system,
            };
            cluster.Save();

            // Create machine roles and machines

            //      -- controller role
            var mrcont = new MachineRole(cluster)
            {
                Name            = Constants.ControllerMachineRoleName,
                System          = system,
                MachineRoleType = MachineRoleType.StandAlone,
            };

            mrcont.Save();

            var sv = new ServerVersion(mrcont)
            {
                Name   = Constants.ServerVersionName,
                System = system,
            };

            sv.Save();

            var mcont = new Machine(mrcont)
            {
                Name = Constants.ControllerMachineName,
            };

            mcont.Save();

            var sicont = new ServerInstance(mcont)
            {
                Name          = Constants.ServerInstanceName,
                ServerVersion = sv,
            };

            sicont.Save();


            //      -- node role
            var mrnode = new MachineRole(cluster)
            {
                Name            = Constants.NodeMachineRoleName,
                MachineRoleType = MachineRoleType.MirroredSet,
            };

            mrnode.Save();

            var nodesv = new ServerVersion(mrnode)
            {
                Name = Constants.ServerVersionName,
            };

            nodesv.Save();

            //      -- Create a node

            /*
             * Machine mnode = new Machine(Context, mrnode);
             * mnode.Name = Constants.NodeMachineName;
             * mnode.Save();
             *
             * si = new ServerInstance(Context, mnode);
             * si.Name = Constants.ServerInstanceName;
             * si.ServerVersionReference.Value = sv;
             * si.Save();*/

            // Create the shared domain for cluster level databases and users
            var domain = new Domain(cluster)
            {
                Name   = Constants.SharedDomainName,
                Email  = email,
                System = system,
            };

            domain.Save();

            // Create administrator group and user
            GenerateAdminGroup(system);
            GenerateAdmin(system, username, email, password);

            // Create the shared feredation
            var federation = new Federation(domain)
            {
                Name                       = Constants.SharedFederationName,
                Email                      = email,
                System                     = system,
                ControllerMachine          = mcont,
                SchemaSourceServerInstance = sicont,
            };

            federation.Save();

            // Temp database definition
            var tempdd = new DatabaseDefinition(federation)
            {
                Name       = Constants.TempDbName,
                System     = system,
                LayoutType = DatabaseLayoutType.Monolithic,
                DatabaseInstanceNamePattern = Constants.TempDbInstanceNamePattern,
                DatabaseNamePattern         = Constants.TempDbNamePattern,
                SliceCount     = 1,
                PartitionCount = 1,
            };

            tempdd.Save();

            var tempddi = new DatabaseDefinitionInstaller(tempdd);

            tempddi.GenerateDefaultChildren(nodesv, Constants.TempDbName);

            // Create cluster level jobs and queues

            //      -- admin queue definition
            QueueDefinition qd = new QueueDefinition(cluster)
            {
                Name   = Constants.MaintenanceQueueDefinitionName,
                System = system,
            };

            qd.Save();

            QueueInstance qi = new QueueInstance(mcont)
            {
                Name         = Constants.MaintenanceQueueName,
                RunningState = Registry.RunningState.Running,
            };

            qi.QueueDefinitionReference.Value = qd;
            qi.Save();

            //      -- long queue definition
            qd = new QueueDefinition(cluster)
            {
                Name = Constants.LongQueueDefinitionName
            };
            qd.Save();

            qi = new QueueInstance(mcont)
            {
                Name         = Constants.LongQueueName,
                RunningState = Registry.RunningState.Running,
            };
            qi.QueueDefinitionReference.Value = qd;
            qi.Save();

            //      -- quick queue definition
            qd = new QueueDefinition(cluster)
            {
                Name = Constants.QuickQueueDefinitionName,
            };
            qd.Save();

            qi = new QueueInstance(mcont)
            {
                Name         = Constants.QuickQueueName,
                RunningState = Registry.RunningState.Running,
            };
            qi.QueueDefinitionReference.Value = qd;
            qi.Save();

            //      -- database mirror job
            var jd = new JobDefinition(federation)
            {
                Name             = typeof(Jhu.Graywulf.Jobs.MirrorDatabase.MirrorDatabaseJob).Name,
                System           = system,
                WorkflowTypeName = typeof(Jhu.Graywulf.Jobs.MirrorDatabase.MirrorDatabaseJob).AssemblyQualifiedName,
            };

            jd.DiscoverWorkflowParameters();
            jd.Save();

            //      -- test job
            jd = new JobDefinition(federation)
            {
                Name             = typeof(Jhu.Graywulf.Jobs.Test.TestJob).Name,
                System           = system,
                WorkflowTypeName = typeof(Jhu.Graywulf.Jobs.Test.TestJob).AssemblyQualifiedName,
            };
            jd.DiscoverWorkflowParameters();
            jd.Save();

            return(cluster);
        }
Esempio n. 4
0
        private void Button1_Click(object sender, EventArgs e)
        {
            if (!System.IO.Directory.Exists(Directory))
            {
                MessageBox.Show("You must select an output directory before trying to generate!");
                return;
            }
            var connectionString = this.txt_ConnectionString.Text;

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                Log("Connection string is not provide, process aborted.");
            }
            Log($"Start generate with settings : mode : {mode} | language : {language}");
            Task.Run(() =>
            {
                DatabaseDefinition databaseDefinition = GetDatabaseDefinition(connectionString);
                try
                {
                    switch (mode)
                    {
                    case SupportMode.Model:
                        var provider = language switch
                        {
                            SupportLanguage.CSharp => CSharpModelProvider.Context,
                            SupportLanguage.TypeScript => TypeScriptModelProvider.Context,
                            SupportLanguage.VisualBasic => VisualBasicModelProvider.Context,
                            _ => throw new NotSupportedException()
                        };
                        var modelGenerator              = new ModelBuilder(Directory + "\\Models", Namespace, databaseDefinition);
                        modelGenerator.OnFileGenerated += (f) => Log($"Generated {f}");
                        modelGenerator.Generate(provider);
                        break;

                    case SupportMode.BackendService:
                        var serviceProvider = language switch
                        {
                            SupportLanguage.CSharp => CSharpServiceProvider.Context,
                            SupportLanguage.TypeScript => TypescriptServiceProvider.Context,
                            _ => throw new NotSupportedException()
                        };
                        var serviceGenerator              = new ServiceBuilder(Directory, Namespace, databaseDefinition);
                        serviceGenerator.OnFileGenerated += (f) => Log($"Generated {f}");
                        serviceGenerator.Generate(serviceProvider);
                        //GeneratorFactory.PerformRepositoryGenerate(targetLanguage, targetDatabaseConnector, txt_connectionString.Text, outputDir, txt_namespace.Text);
                        break;

                    case SupportMode.FrontendService:
                        var consumerServiceProvider = language switch
                        {
                            SupportLanguage.CSharp => CSharpConsumerServiceProvider.Context,
                            _ => throw new NotSupportedException()
                        };
                        var consumerGenerator              = new ServiceBuilder(Directory, Namespace, databaseDefinition);
                        consumerGenerator.OnFileGenerated += (f) => Log($"Geenrated {f}");
                        consumerGenerator.Generate(consumerServiceProvider);
                        break;
                    }
                    Log($"All tasks are done.");
                    this.Close();
                }
                catch (Exception ex)
                {
                    Log($"Error with message : {ex.Message}");
                }
            });
        }
Esempio n. 5
0
        public void Test()
        {
            var dbdef = new DatabaseDefinition()
                .Table("KV")
                    .Column("Key").AsString().NotNull().Table
                    .Column("Value").AsText().NotNull().Table
                    .Index("IX_KV_Key").Asc("Key").Primary().Table
                .Database;



            var db = new EsentDatabase(@"c:\temp\fluesent\a.db");


            using (var instance = db.CreateInstance())
            {
                using (var session = instance.CreateSession(false))
                {
                    session.CreateDatabase(null, CreateDatabaseGrbit.OverwriteExisting);
                    using (var transaction = session.CreateTransaction())
                    {
                        dbdef.Create(transaction);

                        transaction.Commit();
                    }
                }
            }



            using (var instance = db.CreateInstance())
            {
                using (var session = instance.CreateSession())
                {
                    using (var transaction = session.CreateTransaction())
                    {
                        using (var table = transaction.OpenTable("KV"))
                        {
                            table.CreateInsertRecord()
                                .AddString("Key", "A")
                                .AddString("Value", "Some text")
                                .Insert();

                            table.CreateInsertRecord()
                                .AddString("Key", "B")
                                .AddString("Value", "Another text")
                                .Insert();
                            table.CreateInsertRecord()
                                .AddString("Key", "C")
                                .AddString("Value", "Text for C")
                                .Insert();
                        }
                        transaction.Commit();
                    }
                }
            }
            using (var instance = db.CreateInstance())
            {
                using (var session = instance.CreateSession())
                {
                    using (var transaction = session.CreateTransaction())
                    {
                        var stopwatch = new EsentStopwatch();
                        stopwatch.Start();
                        const int n = 100000;
                        using (var table = transaction.OpenTable("KV"))
                        {
                            foreach (var i in Enumerable.Range(0, n))
                            {
                                table.CreateInsertRecord()
                                    .AddString("Key", "key" + i)
                                    .AddString("Value", "akjsdhakhdkadhkajhd")
                                    .Insert();

                                if ((i % 1000) == 999)
                                {
                                    transaction.Pulse();
                                }
                            }
                        }
                        transaction.Commit();
                        stopwatch.Stop();
                        Console.Out.WriteLine("Inserted {0} records in {1}", n, stopwatch.Elapsed);
                    }
                }
            }
            using (var instance = db.CreateInstance())
            {
                using (var session = instance.CreateSession())
                {
                    using (var transaction = session.CreateTransaction())
                    {
                        using (var table = transaction.OpenTable("KV"))
                        {
                            var mapper = new RecordMapper<KvRecord>()
                                .String("Key", (o, s) => o.Key = s)
                                .String("Value", (o, s) => o.Value = s);

                            //var search = table.CreateSearch(mapper);

                            //var a = search.FindEq(
                            //    table.CreateKey().String("A")
                            //    )
                            //    .ToArray();
                            //var b = search.FindEq(
                            //    table.CreateKey().String("B")
                            //    )
                            //    .ToArray();
                        }
                    }
                }
            }

            using (var instance = db.CreateInstance())
            {
                using (var session = instance.CreateSession())
                {
                    session.AttachDatabase();
                    session.OpenDatabase();
                    using (var transaction = session.CreateTransaction())
                    {
                        using (var table = transaction.OpenTable("KV"))
                        {
                            var mapper = new RecordMapper<KvRecord>()
                                .String("Key", (o, s) => o.Key = s)
                                .String("Value", (o, s) => o.Value = s);

                            //var search = table.CreateSearch(mapper);

                            //foreach (var record in search.FindAll().Take(100))
                            //{
                            //    Console.Out.WriteLine("({0},{1})",record.Key,record.Value);
                            //}
                        }
                    }
                }
            }
        }
Esempio n. 6
0
 public AppOptions()
 {
     _source        = new DatabaseDefinition();
     _target        = new DatabaseDefinition();
     ExcludeSchemas = new HashSet <string>();
 }
Esempio n. 7
0
 public AppOptions()
 {
     _source = new DatabaseDefinition();
 }
Esempio n. 8
0
        public void CreateBackup2(string fullPath)
        {
            // Current version of backup system
            int backupVersion = 2;

            string sql             = "select top 1 [DatabaseVersion] from [EasyBaseSystems]";
            int    databaseVersion = Convert.ToInt32(Connection.GetScalar(sql));

            if (databaseVersion != DatabaseDefinition.DatabaseVersion)
            {
                throw new DatabaseVersionException("Wrong database version. The database's version is " + databaseVersion + ", but the current version of the application is " + DatabaseDefinition.DatabaseVersion + ". Backup is not possible.");
            }

            DatabaseSchema savedDatabase = new DatabaseSchema(DatabaseDefinition.GetDatabaseXmlDefinition(DatabaseDefinition.DatabaseVersion));

            long totalRowsInDB = 0;

            sql = "select (";
            string plus = "";

            foreach (TableSchema table in savedDatabase.Tables)
            {
                sql  = sql + plus + "(select count(*) from [" + table.TableName + "])";
                plus = "+";
            }

            sql += ")";

            totalRowsInDB = Convert.ToInt64(Connection.GetScalar(sql));

            StreamWriter streamWriter = new StreamWriter(fullPath);

            streamWriter.Write("[" + backupVersion + ";" + CurrentApplication.Name + ";" + DatabaseDefinition.DatabaseVersion + ";" + totalRowsInDB + "]");

            foreach (TableSchema table in savedDatabase.Tables)
            {
                StringBuilder commaSeparatedFields = new StringBuilder();
                string        comma = "";
                foreach (FieldSchema field in table.DatabaseFields)
                {
                    commaSeparatedFields.Append(comma + "[" + field.FieldName + "]");
                    comma = ", ";
                }

                sql = "select " + commaSeparatedFields + " from [" + table.TableName + "]";
                DataTable dataTable = new DataTable();

                Connection.GetTable(dataTable, sql);

                streamWriter.Write("[" + table.TableName + ";" + dataTable.Rows.Count + "]");

                if (dataTable.Rows.Count > 0)
                {
                    foreach (FieldSchema field in table.DatabaseFields)
                    {
                        streamWriter.Write("[" + field.FieldName + "]");

                        foreach (DataRow dataRow in dataTable.Rows)
                        {
                            string data = field.SerializeData(dataRow[field.FieldName]);
                            streamWriter.Write(data);
                        }
                    }
                }
            }

            streamWriter.Flush();
            streamWriter.Close();
        }
Esempio n. 9
0
 public AppOptions()
 {
     _source = new DatabaseDefinition();
     _target = new DatabaseDefinition();
     Files   = new HashSet <string>();
 }
Esempio n. 10
0
 public Task UpdateDatabaseAsync(DatabaseDefinition databaseDefinition)
 {
     throw new NotImplementedException();
 }
Esempio n. 11
0
        /// <summary>
        /// Designed for SQL Server, might not work with other DB Provider.
        /// </summary>
        /// <typeparam name="TDatabase"></typeparam>
        /// <typeparam name="TParameter"></typeparam>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        public static DatabaseDefinition GetDatabaseDefinition <TDatabase, TParameter>(string connectionString, Func <string, string> tableNameTransformer = null)
            where TDatabase : DbConnection, new()
            where TParameter : DbParameter, new()
        {
            using var connection = new TDatabase()
                  {
                      ConnectionString = connectionString
                  };
            connection.Open();
            var result = new DatabaseDefinition();

            result.Tables           = new List <Table>();
            result.ConnectionString = connectionString;
            result.DatabaseProvider = typeof(TDatabase);
            result.DatabaseProviderParameterType = typeof(TParameter);
            try
            {
                result.StoredProcedures = connection.GetStoredProcedures().ToList();
            }
            catch
            {
                result.StoredProcedures = Enumerable.Empty <StoredProcedureSchema>().ToList();
            }
            using var tables = connection.GetSchema(SchemaRestriction.Tables);
            foreach (DataRow row in tables.Rows)
            {
                try
                {
                    var database  = row[0].ToString();
                    var schema    = row[1].ToString();
                    var tableName = row[2].ToString();
                    var type      = row[3].ToString();

                    var schemaSearchName = tableNameTransformer != null?tableNameTransformer(tableName) : tableName;

                    var    columns    = connection.GetTableSchema(schemaSearchName);
                    string?primaryKey = null;
                    using var indexes = connection.GetSchema("IndexColumns", new[] { null, null, tableName });
                    if (indexes != null)
                    {
                        foreach (DataRow rowInfo in indexes.Rows)
                        {
                            primaryKey = rowInfo["column_name"].ToString();
                        }
                    }
                    var table = new Table()
                    {
                        Name               = tableName,
                        Columns            = columns,
                        PrimaryKey         = primaryKey,
                        ConnectionProvider = typeof(TDatabase).FullName,
                        ConnectionProviderParameterType = typeof(TParameter).FullName
                    };
                    result.Tables.Add(table);
                }
                catch
                {
                    //continue;
                }
            }
            return(result);
        }
Esempio n. 12
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var outputDir = txt_outputDir.Content.ToString();

            if (!Directory.Exists(outputDir))
            {
                MessageBox.Show("You must select an output directory before trying to generate!");
                return;
            }
            btn_Generate.IsEnabled = false;
            var connectionString = txt_connectionString.Text;
            var @namespace       = txt_namespace.Text;

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                Log("Connection string is not provide, process aborted.");
            }
            Log($"Start generate with settings : mode : {mode} | language : {language}");
            Task.Run(async() =>
            {
                try
                {
                    DatabaseDefinition databaseDefinition = GetDatabaseDefinition(connectionString);
                    switch (mode)
                    {
                    case SupportMode.Model:
                        var provider = language switch
                        {
                            SupportLanguage.CSharp => CSharpModelProvider.Context,
                            SupportLanguage.TypeScript => TypeScriptModelProvider.Context,
                            SupportLanguage.VisualBasic => VisualBasicModelProvider.Context,
                            _ => throw new NotSupportedException()
                        };
                        var modelGenerator              = new ModelBuilder(outputDir, @namespace, databaseDefinition);
                        modelGenerator.OnFileGenerated += (f) => Log($"Generated {f}");
                        modelGenerator.Generate(provider);

                        break;

                    case SupportMode.FrontendService:
                        var consumerServiceProvider = language switch
                        {
                            SupportLanguage.CSharp => CSharpConsumerServiceProvider.Context,
                            SupportLanguage.TypeScript => TypescriptServiceProvider.Context,
                            _ => throw new NotSupportedException()
                        };
                        var consumerGenerator              = new ServiceBuilder(outputDir, @namespace, databaseDefinition);
                        consumerGenerator.OnFileGenerated += (f) => Log($"Geenrated {f}");
                        consumerGenerator.Generate(consumerServiceProvider);
                        break;

                    case SupportMode.BackendService:
                        IServiceBuilderProvider serviceProvider = language switch
                        {
                            SupportLanguage.CSharp => CSharpServiceProvider.Context,
                            _ => throw new NotSupportedException()
                        };
                        var serviceGenerator              = new ServiceBuilder(outputDir, @namespace, databaseDefinition);
                        serviceGenerator.OnFileGenerated += (f) => Log($"Generated {f}");
                        serviceGenerator.Generate(serviceProvider);
                        //GeneratorFactory.PerformRepositoryGenerate(targetLanguage, targetDatabaseConnector, txt_connectionString.Text, outputDir, txt_namespace.Text);
                        break;

                    case SupportMode.Controller:
                        IControllerProvider controllerProvider = language switch
                        {
                            SupportLanguage.CSharp => CSharpControllerProvider.Context,
                            _ => throw new NotSupportedException()
                        };
                        var controllerGenerator              = new ControllerBuilder(outputDir, @namespace, databaseDefinition);
                        controllerGenerator.OnFileGenerated += (f) => Log($"Generated {f}");
                        controllerGenerator.Generate(controllerProvider);
                        break;
                    }
                    Log($"All tasks are done.");
                    Process.Start("explorer.exe", outputDir);
                }
                catch (Exception ex)
                {
                    Log($"Error with message : {ex.Message}");
                }
            });
            btn_Generate.IsEnabled = true;
        }
Esempio n. 13
0
        public void RestoreBackup(string fullPath, int toDatabaseVersion)
        {
            var reader = new StreamReader(fullPath);
            var header = new StringBuilder();

            int    backupVersion           = 0;
            int    databaseVersion         = 0;
            string databaseApplicationName = "";
            long   totalRowsInDB           = 0;

            try {
                // Read header
                char token = ' ';
                while (token != ']')
                {
                    token = (char)reader.Read();
                    if (token != '[' && token != ']')
                    {
                        header.Append(token);
                    }
                }

                string[] headerArray = header.ToString().Split(";".ToCharArray());
                backupVersion           = int.Parse(headerArray[0]);
                databaseVersion         = 0;
                databaseApplicationName = "";

                if (backupVersion == 1)
                {
                    databaseVersion = int.Parse(headerArray[1]);
                }
                else
                {
                    databaseApplicationName = headerArray[1];
                    databaseVersion         = int.Parse(headerArray[2]);
                    totalRowsInDB           = long.Parse(headerArray[3]);
                }
            }
            catch (Exception ex) {
                throw new BackupException("Backupfilens huvud har ett felaktigt format.", ex);
            }

            if (backupVersion >= 2)
            {
                if (databaseApplicationName != CurrentApplication.Name)
                {
                    throw new BackupException("Den aktuella backupen tillhör inte det här programmet. Backupen är en backup för programmet \"" + databaseApplicationName + "\".");
                }
            }

            // Create database
            var database = new DatabaseSchema(DatabaseDefinition.GetDatabaseXmlDefinition(databaseVersion));

            CreateDatabaseNoConstraints(databaseVersion);

            // Call function that reads all table contents from the backup file.
            switch (backupVersion)
            {
            case 1:
                RestoreBackup1(reader, database, backupVersion);
                break;

            case 2:
                RestoreBackup2(reader, database, backupVersion, totalRowsInDB);
                break;

            default:
                throw new NotImplementedException("Backup version " + backupVersion + " is not implemented.");
            }

            // Efter inläsning, uppdatera databasen till senaste versionen
            RunSqlUpdateCommands(CollectSqlUpdateDatabase(false, toDatabaseVersion));
        }
Esempio n. 14
0
 public SqlParameter(DatabaseDefinition databaseDefinition)
 {
     DatabaseDefinition = databaseDefinition;
 }
Esempio n. 15
0
 internal void Add(String key, DatabaseDefinition value)
 {
     databaseDefinitions.Add(key, value);
 }
Esempio n. 16
0
    public static RelationalModel Convert(DatabaseDefinition sourceDefinition, string defaultSourceSchemaName, CaseInsensitiveStringKeyDictionary <string> schemaNameMap = null, Func <SqlTable, bool> filterDelegate = null)
    {
        var newDefaultSchemaName = schemaNameMap?[defaultSourceSchemaName] ?? defaultSourceSchemaName;
        var newModel             = new RelationalModel(newDefaultSchemaName);
        var sourceTablesOrdered  = sourceDefinition.GetTables()
                                   .Where(x => filterDelegate?.Invoke(x) != false)
                                   .OrderBy(x => x.SchemaAndTableName.SchemaAndName)
                                   .ToList();

        foreach (var sourceTable in sourceTablesOrdered)
        {
            var newSchemaName = schemaNameMap?[sourceTable.SchemaAndTableName.Schema] ?? sourceTable.SchemaAndTableName.Schema ?? newDefaultSchemaName;

            var newSchema = newModel[newSchemaName]
                            ?? newModel.AddSchema(newSchemaName);

            var primaryKey = sourceTable.Properties.OfType <PrimaryKey>().FirstOrDefault();
            var newTable   = newSchema.AddTable(sourceTable.SchemaAndTableName.TableName);

            foreach (var property in sourceTable.Properties.OfType <DwhTableFlagProperty>())
            {
                newTable.SetFlag(property.Name, true);
            }

            foreach (var property in sourceTable.Properties.OfType <DwhTableDataProperty>())
            {
                newTable.SetAdditionalData(property.Name, property.Value);
            }

            if (sourceTable.HasProperty <EtlRunInfoDisabledProperty>())
            {
                newTable.SetEtlRunInfoDisabled();
            }

            if (sourceTable.HasProperty <HasHistoryTableProperty>())
            {
                newTable.SetHasHistoryTable();
            }

            var sourceTableNameOverrideProperty = sourceTable.Properties.OfType <SourceTableNameOverrideProperty>().FirstOrDefault();
            if (sourceTableNameOverrideProperty != null)
            {
                newTable.SetSourceTableNameOverride(sourceTableNameOverrideProperty.SourceTableName);
            }

            foreach (var sourceColumn in sourceTable.Columns)
            {
                var partOfPrimaryKey = primaryKey?.SqlColumns.Any(x => x.SqlColumn == sourceColumn) == true;
                var newColumn        = newTable.AddColumn(sourceColumn.Name, partOfPrimaryKey);

                foreach (var property in sourceColumn.Properties.OfType <DwhColumnFlagProperty>())
                {
                    newColumn.SetFlag(property.Name, true);
                }

                foreach (var property in sourceColumn.Properties.OfType <DwhColumnDataProperty>())
                {
                    newColumn.SetAdditionalData(property.Name, property.Value);
                }

                if (sourceColumn.HasProperty <Identity>())
                {
                    newColumn.SetIdentity();
                }

                if (sourceColumn.HasProperty <HistoryDisabledProperty>())
                {
                    newColumn.SetHistoryDisabled();
                }

                if (sourceColumn.HasProperty <RecordTimestampIndicatorProperty>())
                {
                    newColumn.SetRecordTimestampIndicator();
                }
            }
        }

        foreach (var table in sourceTablesOrdered)
        {
            var newSourceSchemaName = schemaNameMap?[table.SchemaAndTableName.Schema] ?? table.SchemaAndTableName.Schema ?? newDefaultSchemaName;

            var newSourceSchema = newModel[newSourceSchemaName];
            var newSourceTable  = newSourceSchema[table.SchemaAndTableName.TableName];

            foreach (var fk in table.Properties.OfType <ForeignKey>())
            {
                var newTargetSchemaName = schemaNameMap?[fk.ReferredTable.SchemaAndTableName.Schema] ?? fk.ReferredTable.SchemaAndTableName.Schema ?? newDefaultSchemaName;

                var newTargetSchema = newModel[newTargetSchemaName];
                var newTargetTable  = newTargetSchema[fk.ReferredTable.SchemaAndTableName.TableName];

                if (newTargetTable == null) // target table is filtered out
                {
                    continue;
                }

                var newFk = newSourceTable.AddForeignKeyTo(newTargetTable);
                foreach (var map in fk.ForeignKeyColumns)
                {
                    var sourceColumn = newSourceTable[map.ForeignKeyColumn.Name];
                    var targetColumn = newTargetTable[map.ReferredColumn.Name];
                    newFk.AddColumnPair(sourceColumn, targetColumn);
                }
            }
        }

        return(newModel);
    }
Esempio n. 17
0
 private void Application_Startup(object sender, StartupEventArgs e)
 {
     AppConfig.Init();
     DatabaseDefinition.CreateDatabase();
     DatabaseDefinition.SeedDatabase();
 }