Exemplo n.º 1
0
 /// <summary>
 /// Writes the header information.
 /// </summary>
 private void WriteHeader(CodeGenExecutorArgs args)
 {
     Console.WriteLine(App.Description);
     Console.WriteLine();
     Console.WriteLine($"  Command = {_commandArg.ParsedValue}");
     Console.WriteLine($"  ConnectionString = {_connectionStringArg.Value}");
     CodeGenConsole.LogCodeGenExecutionArgs(args, !(_commandArg.ParsedValue.HasFlag(DatabaseExecutorCommand.CodeGen)));
 }
Exemplo n.º 2
0
        /// <summary>
        /// Creates <see cref="ExecutionManager"/> and coordinates the run (overall execution).
        /// </summary>
        private async Task <int> RunRunAwayAsync() /* Inspired by https://www.youtube.com/watch?v=ikMiQZF-mAY */
        {
            var args = new CodeGenExecutorArgs
            {
                ConfigFile   = new FileInfo(_configOpt.Value()),
                ScriptFile   = new FileInfo(_scriptOpt.Value()),
                TemplatePath = _templateOpt.HasValue() ? new DirectoryInfo(_templateOpt.Value()) : null,
                OutputPath   = new DirectoryInfo(_outputOpt.HasValue() ? _outputOpt.Value() : Environment.CurrentDirectory),
                Parameters   = CodeGenConsole.CreateParamDict(_paramsOpt),
                Assemblies   = _scriptAssemblies
            };

            WriteHeader(args);

            var em = ExecutionManager.Create(() => new DatabaseExecutor(_commandArg.ParsedValue, _connectionStringArg.Value, _scriptAssemblies.ToArray(), args));
            var sw = Stopwatch.StartNew();

            await em.RunAsync();

            sw.Stop();
            WriteFooter(sw);
            return(0);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Execute the database upgrade.
        /// </summary>
        protected override async Task OnRunAsync(ExecutorRunArgs args)
        {
            var ls = new LoggerSink();

            if (_command.HasFlag(DatabaseExecutorCommand.Drop))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB DROP: Checking database existence and dropping where found...");
                await TimeExecutionAsync(() => { DropDatabase.For.SqlDatabase(_connectionString, ls); return(Task.FromResult(true)); }).ConfigureAwait(false);
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Create))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB CREATE: Checking database existence and creating where not found...");
                await TimeExecutionAsync(() => { EnsureDatabase.For.SqlDatabase(_connectionString, ls); return(Task.FromResult(true)); }).ConfigureAwait(false);
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Migrate))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB MIGRATE: Migrating the database...");
                Logger.Default.Info($"Probing for embedded resources: {(string.Join(", ", GetNamespacesWithSuffix($"{MigrationsNamespace}.*.sql")))}");

                DatabaseUpgradeResult?result = null;
                await TimeExecutionAsync(() =>
                {
                    result = DeployChanges.To
                             .SqlDatabase(_connectionString)
                             .WithScripts(GetMigrationScripts(_assemblies))
                             .WithoutTransaction()
                             .LogTo(ls)
                             .Build()
                             .PerformUpgrade();

                    return(Task.FromResult(result.Successful));
                }).ConfigureAwait(false);

                if (!result !.Successful)
                {
                    Logger.Default.Exception(result.Error);
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.CodeGen))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB CODEGEN: Code-gen database objects...");
                CodeGenConsole.LogCodeGenExecutionArgs(_codeGenArgs);

                if (!await TimeExecutionAsync(async() =>
                {
                    var em = ExecutionManager.Create(() => new CodeGenExecutor(_codeGenArgs));
                    await em.RunAsync().ConfigureAwait(false);
                    return(em.StopExecutor?.Exception == null);
                }).ConfigureAwait(false))
                {
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Schema))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB SCHEMA: Drops and creates the database objects...");

                if (!await TimeExecutionAsync(() => DropAndCreateAllObjectsAsync(new string[] { "dbo", "Ref" })).ConfigureAwait(false))
                {
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Reset))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB RESET: Resets database by dropping data from all tables...");

                if (!await TimeExecutionAsync(() => DeleteAllAndResetAsync()).ConfigureAwait(false))
                {
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Data))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB DATA: Insert or merge the embedded YAML data...");

                if (!await TimeExecutionAsync(() => InsertOrMergeYamlDataAsync()).ConfigureAwait(false))
                {
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.ScriptNew))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB SCRIPTNEW: Creating a new SQL script from embedded template...");

                if (!await TimeExecutionAsync(() => CreateScriptNewAsync()).ConfigureAwait(false))
                {
                    return;
                }
            }

            ReturnCode = 0;
        }
Exemplo n.º 4
0
 /// <summary>
 /// Main startup.
 /// </summary>
 /// <param name="args">The startup arguments.</param>
 /// <returns>The status code whereby zero indicates success.</returns>
 public static Task <int> Main(string[] args) => CodeGenConsole.Create("My", "Hr").Supports(entity: true, refData: true).RunAsync(args);
Exemplo n.º 5
0
 static Task <int> Main(string[] args) => CodeGenConsole
 .Create("Beef", "Demo")
 .Supports(entity: true, refData: true, dataModel: true)
 .EntityScript("TestScript.yaml")
 .RunAsync(args);
Exemplo n.º 6
0
 /// <summary>
 /// Main startup.
 /// </summary>
 /// <param name="args">The startup arguments.</param>
 /// <returns>The status code whereby zero indicates success.</returns>
 public static Task <int> Main(string[] args) => CodeGenConsole.Create("Cdr", "Banking").Supports(entity: true, refData: true, dataModel: true).RunAsync(args);