public ActionResult Execute(int id)
        {
            var model = _dbContext
                .Queries
                .Where(q => q.Id == id)
                .FirstOrDefault();
            var viewModel = new RunningQueryViewModel(model);

            if (!viewModel.Done)
                HttpContext.Response.AddHeader("refresh", "2");
            return View(viewModel);
        }
        /// <summary>
        /// Return query result as html table, so we can copy it and paste to excel
        /// </summary>
        public ActionResult Raw(int id)
        {
            var model = _dbContext
                .Queries
                .Where(q => q.Id == id)
                .FirstOrDefault();

            var viewModel = new RunningQueryViewModel(model);
            StringBuilder output = new StringBuilder();
            bool hasColumns = false;
            output.Append("<table>");
            foreach (var result in viewModel.Results)
            {
                if (!hasColumns)
                {
                    output.Append("<tr>");
                    output.Append("<th>country</th>");
                    output.Append(
                        string.Join(
                            string.Empty,
                            result
                                .Columns
                                .Select(col => string.Format("<th>{0}</th>", col))
                            )
                        );

                    output.Append("</tr>");
                    hasColumns = true;
                }

                foreach (var row in result.Rows)
                {
                    output.Append("<tr>");
                    output.Append(string.Format("<td>{0}</td>", result.DatabaseId));

                    output.Append(
                        string.Join(
                            string.Empty,
                            row
                                .Select(val => string.Format("<td>{0}</td>", val))
                            )
                        );

                    output.Append("</tr>");
                }
            }
            output.Append("</table>");

            Response.ContentType = "text/html";
            return Content(output.ToString());
        }
        /// <summary>
        /// Return query result as .csv file
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Save(int id)
        {
            var model = _dbContext
                .Queries
                .Where(q => q.Id == id)
                .FirstOrDefault();

            var viewModel = new RunningQueryViewModel(model);
            StringBuilder output = new StringBuilder();
            bool hasColumns = false;
            foreach (var result in viewModel.Results)
            {
                if (!hasColumns)
                {
                    output.Append("country");
                    output.Append("\t");
                    output.Append(string.Join("\t", result.Columns));
                    output.Append("\r\n");
                    hasColumns = true;
                }

                foreach (var row in result.Rows)
                {
                    output.Append(result.DatabaseId);
                    output.Append("\t");
                    output.Append(string.Join("\t", row));
                    output.Append("\r\n");
                }
            }

            Response.AddHeader("Content-Disposition", "attachment; filename=query_result.tsv");
            Response.ContentType = "text/tab-separated-values";
            return Content(output.ToString());
        }