/// <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))); }
/// <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); }
/// <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; }
/// <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);
static Task <int> Main(string[] args) => CodeGenConsole .Create("Beef", "Demo") .Supports(entity: true, refData: true, dataModel: true) .EntityScript("TestScript.yaml") .RunAsync(args);
/// <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);