/// <summary> /// Executes the underlying <see cref="DatabaseConsole"/> using the database tooling arguments. /// </summary> /// <param name="args">The code generation arguments.</param> /// <returns><b>Zero</b> indicates success; otherwise, unsucessful.</returns> public int Run(string[] args) { using (var app = new CommandLineApplication(false) { Name = "beef.database.core", Description = "Business Entity Execution Framework (Beef) Database Tooling." }) { var cmd = app.Argument <DatabaseExecutorCommand>("command", "Database command.").IsRequired(); var cs = app.Option("-cs|--connectionString", "Override the database connection string.", CommandOptionType.SingleValue); var eo = app.Option("-eo|--entry-assembly-only", "Override assemblies to use the entry assembly only.", CommandOptionType.NoValue); var ct = app.Option("-create|--scriptnew-create-table", "ScriptNew: use create '[schema.]table' template.", CommandOptionType.SingleValue); var at = app.Option("-alter|--scriptnew-alter-table", "ScriptNew: use alter '[schema.]table' template.", CommandOptionType.SingleValue); app.OnExecute(() => { var sb = new StringBuilder(); if (eo.HasValue()) { sb.Append(ReplaceMoustache(CommandLineAssemblyTemplate, null, null, Assembly.GetEntryAssembly().FullName)); } else { Assemblies.ForEach(a => sb.Append(ReplaceMoustache(CommandLineAssemblyTemplate, null, null, a.FullName))); } var rargs = ReplaceMoustache(CommandLineTemplate, cmd.Value, cs.Value() ?? ConnectionString, sb.ToString()); if (ct.HasValue()) { rargs += GetTableSchemaParams("Create", ct.Value()); } else if (at.HasValue()) { rargs += GetTableSchemaParams("Alter", at.Value()); } DatabaseConsole.Create().Run(rargs); }); try { return(app.Execute(args)); } catch (CommandParsingException cpex) { Console.WriteLine(cpex.Message); return(-1); } } }
/// <summary> /// The main entry point. /// </summary> /// <param name="args">The console arguments.</param> /// <returns>A statuc code.</returns> public static Task <int> Main(string[] args) { return(DatabaseConsole.Create().RunAsync(args)); }
/// <summary> /// Executes the underlying <see cref="DatabaseConsole"/> using the database tooling arguments. /// </summary> /// <param name="args">The code generation arguments.</param> /// <returns><b>Zero</b> indicates success; otherwise, unsucessful.</returns> public async Task <int> RunAsync(string[] args) { using var app = new CommandLineApplication() { Name = "beef.database.core", Description = "Business Entity Execution Framework (Beef) Database Tooling." }; var cmd = app.Argument <DatabaseExecutorCommand>("command", "Database command.").IsRequired(); var sn = app.Argument("parameters", "Additional parameters used by the ScriptNew command.", multipleValues: true); var cs = app.Option("-cs|--connectionstring", "Override the database connection string.", CommandOptionType.SingleValue); var eo = app.Option("-eo|--entry-assembly-only", "Override assemblies to use the entry assembly only.", CommandOptionType.NoValue); var x2y = app.Option("-x2y|--xmlToYaml", "Convert the XML configuration into YAML equivalent (will not codegen).", CommandOptionType.NoValue); var evn = app.Option("-evn|--environmentVariableName", "Override the default environment variable name for the connection string.", CommandOptionType.SingleValue); var ps = app.Option("-p|--param", "Name=Value pair.", CommandOptionType.MultipleValue).Accepts(v => v.Use(new ParamsValidator())); var so = app.Option("-s|--script", "Override the script resource name.", CommandOptionType.SingleValue); app.OnExecuteAsync(async(_) => { if (x2y.HasValue()) { if (cmd.ParsedValue != DatabaseExecutorCommand.CodeGen) { throw new CommandParsingException(app, $"Command '{cmd.ParsedValue}' is not compatible with --xmlToYaml; the command must be '{DatabaseExecutorCommand.CodeGen}'."); } DatabaseConsole.WriteMasthead(); return(await CodeGenFileManager.ConvertXmlToYamlAsync(CommandType.Database, CodeGenFileManager.GetConfigFilename(_exeDir, CommandType.Database, Company, AppName)).ConfigureAwait(false)); } var script = so.HasValue() ? so.Value() : _script; var sb = new StringBuilder(); if (eo.HasValue()) { sb.Append(ReplaceMoustache(CommandLineAssemblyTemplate, null !, null !, Assembly.GetEntryAssembly()?.FullName !, script !)); } else { _assemblies.ForEach(a => sb.Append(ReplaceMoustache(CommandLineAssemblyTemplate, null !, null !, a.FullName !, script !))); } var rargs = ReplaceMoustache(CommandLineTemplate, cmd.Value !, cs.Value() ?? ConnectionString, sb.ToString(), script !); for (int i = 0; i < sn.Values.Count; i++) { rargs += $" -p Param{i}={sn.Values[i]}"; } foreach (var p in ps.Values) { rargs += $" -p {p}"; } _schemaOrder.ForEach(so => rargs += $" -so {so}"); return(await DatabaseConsole.Create().RunAsync(rargs).ConfigureAwait(false)); }); try { return(await app.ExecuteAsync(args).ConfigureAwait(false)); } catch (CommandParsingException cpex) { Console.Error.WriteLine(cpex.Message); return(-1); } }
/// <summary> /// The main entry point. /// </summary> /// <param name="args">The console arguments.</param> /// <returns><b>Zero</b> indicates success; otherwise, unsuccessful.</returns> public static Task <int> Main(string[] args) => DatabaseConsole.Create().RunAsync(args);