public async Task <IEnumerable <BuildInfo> > GetBuildsInfo(CommitsRange commitsRange)
        {
            string connectionString = this.appConfiguration.ImportDatabaseConnectionString;

            var tableName = this.appConfiguration.ImportBuildStatusTableName;

            var projectName = this.appConfiguration.ImportProjectName;

            using (MySqlConnection conn = new MySqlConnection(connectionString))
            {
                conn.Open();

                StringBuilder sql = new StringBuilder(@"SELECT git_trigger_commit, gh_project_name, tr_status, gh_pushed_at ");
                sql.AppendLine($"FROM {tableName} WHERE gh_project_name = '{projectName}' AND gh_pushed_at IS NOT NULL");

                if (!string.IsNullOrEmpty(commitsRange?.CommitFrom))
                {
                    sql.AppendLine($"AND tr_build_id >= (SELECT tr_build_id FROM {tableName} WHERE git_trigger_commit=:COMMIT_FROM)");
                }

                if (!string.IsNullOrEmpty(commitsRange?.CommitTo))
                {
                    sql.AppendLine($"AND tr_build_id <= (SELECT tr_build_id FROM {tableName} WHERE git_trigger_commit=:COMMIT_TO) ");
                }

                sql.AppendLine("ORDER BY tr_build_id DESC ");

                MySqlCommand cmd = new MySqlCommand(sql.ToString(), conn);

                if (!string.IsNullOrEmpty(commitsRange?.CommitFrom))
                {
                    cmd.Parameters.Add(new MySqlParameter("COMMIT_FROM", MySqlDbType.Text)
                    {
                        Value = commitsRange.CommitFrom
                    });
                }

                if (!string.IsNullOrEmpty(commitsRange?.CommitTo))
                {
                    cmd.Parameters.Add(new MySqlParameter("COMMIT_TO", MySqlDbType.Text)
                    {
                        Value = commitsRange.CommitTo
                    });
                }

                using (var rdr = await cmd.ExecuteReaderAsync())
                {
                    var infos = new List <BuildInfo>();

                    while (rdr.Read())
                    {
                        infos.Add(ParseBuildInfo(rdr));
                    }
                    return(infos);
                }
            }
        }
        public async Task <IEnumerable <BuildInfo> > GetBuildsInfo(CommitsRange commitsRange)
        {
            using (var connection = await this.CreateConnection())
            {
                using (var command = connection.CreateCommand())
                {
                    this.ConfigureCommand(command, commitsRange);

                    using (var reader = await command.ExecuteReaderAsync())
                    {
                        var infos = new List <BuildInfo>();

                        while (reader.Read())
                        {
                            infos.Add(ParseBuildInfo(reader));
                        }

                        return(infos);
                    }
                }
            }
        }
        private void ConfigureCommand(OracleCommand command, CommitsRange commitsRange)
        {
            var tableName = this.appConfiguration.ImportBuildStatusTableName;

            var builder = new StringBuilder();

            builder.Append($@"
                        SELECT 
                            CSID, 
                            NAME, 
                            STATE,
                            DATE_ADDED
                        FROM 
                            {tableName}
                        WHERE 1=1 ");

            if (!string.IsNullOrEmpty(commitsRange?.CommitFrom))
            {
                builder.AppendLine($"AND ID >= (SELECT ID FROM {tableName} WHERE CSID=:COMMIT_FROM)");
                command.Parameters.Add(new OracleParameter("COMMIT_FROM", OracleDbType.Varchar2)
                {
                    Value = commitsRange.CommitFrom
                });
            }

            if (!string.IsNullOrEmpty(commitsRange?.CommitTo))
            {
                builder.AppendLine($"AND ID <= (SELECT ID FROM {tableName} WHERE CSID=:COMMIT_TO) ");
                command.Parameters.Add(new OracleParameter("COMMIT_TO", OracleDbType.Varchar2)
                {
                    Value = commitsRange.CommitTo
                });
            }

            builder.AppendLine("ORDER BY ID DESC ");

            command.CommandText = builder.ToString();
        }