Пример #1
0
        /// <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);
                }
            }
        }
Пример #2
0
 /// <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));
 }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
 /// <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);