Пример #1
0
        public ActionResult ShowPlan(string sitename, int revisionId)
        {
            Query query = QueryUtil.GetQueryForRevision(revisionId);

            if (query == null)
            {
                return(PageNotFound());
            }

            var parsedQuery = new ParsedQuery(query.QueryBody, Request.Params);

            if (!parsedQuery.IsExecutionReady)
            {
                return(PageBadRequest());
            }

            CachedResult cache = QueryUtil.GetCachedResults(
                parsedQuery,
                Site.Id
                );

            if (cache == null || cache.ExecutionPlan == null)
            {
                return(PageNotFound());
            }

            return(new QueryPlanResult(cache.ExecutionPlan));
        }
        public ActionResult ShowSingleSiteCsv(string sitename, int revisionId, string slug)
        {
            Query query = QueryUtil.GetQueryForRevision(revisionId);

            if (query == null)
            {
                return(PageNotFound());
            }

            Site site;

            if (!TryGetSite(sitename, out site))
            {
                return(site == null ?  (ActionResult)PageNotFound() : RedirectPermanent(string.Format("/{0}/csv/{1}{2}{3}",
                                                                                                      site.TinyName.ToLower(), revisionId, slug.HasValue() ? "/" + slug : "", Request.Url.Query
                                                                                                      )));
            }

            var parsedQuery = new ParsedQuery(query.QueryBody, Request.Params);

            if (!parsedQuery.IsExecutionReady)
            {
                return(PageBadRequest());
            }

            CachedResult cachedResults = QueryUtil.GetCachedResults(
                parsedQuery,
                Site.Id
                );
            List <ResultSet> resultSets;

            if (cachedResults != null)
            {
                resultSets = JsonConvert.DeserializeObject <List <ResultSet> >(cachedResults.Results, QueryResults.GetSettings());
            }
            else
            {
                resultSets = QueryRunner.GetResults(
                    parsedQuery,
                    site,
                    CurrentUser
                    ).ResultSets;
            }

            return(new CsvResult(resultSets));
        }
Пример #3
0
        public ActionResult ShowSingleSiteCsv(string sitename, int revisionId)
        {
            Query query = QueryUtil.GetQueryForRevision(revisionId);

            if (query == null)
            {
                return(PageNotFound());
            }

            var site = GetSite(sitename);

            if (sitename == null)
            {
                return(PageNotFound());
            }

            var parsedQuery = new ParsedQuery(query.QueryBody, Request.Params);

            if (!parsedQuery.IsExecutionReady)
            {
                return(PageBadRequest());
            }

            CachedResult cachedResults = QueryUtil.GetCachedResults(
                parsedQuery,
                Site.Id
                );
            List <ResultSet> resultSets;

            if (cachedResults != null)
            {
                resultSets = JsonConvert.DeserializeObject <List <ResultSet> >(cachedResults.Results);
            }
            else
            {
                resultSets = QueryRunner.GetResults(
                    parsedQuery,
                    site,
                    CurrentUser
                    ).ResultSets;
            }

            return(new CsvResult(resultSets));
        }
        public ActionResult ShowPlan(string sitename, int revisionId, string slug)
        {
            Query query = QueryUtil.GetQueryForRevision(revisionId);

            if (query == null)
            {
                return(PageNotFound());
            }

            Site site;

            if (!TryGetSite(sitename, out site))
            {
                return(site == null ? (ActionResult)PageNotFound() : RedirectPermanent(string.Format("/{0}/plan/{1}{2}{3}",
                                                                                                     site.TinyName.ToLower(), revisionId, slug.HasValue() ? "/" + slug : "", Request.Url.Query
                                                                                                     )));
            }

            var parsedQuery = new ParsedQuery(query.QueryBody, Request.Params);

            if (!parsedQuery.IsExecutionReady)
            {
                return(PageBadRequest());
            }

            CachedResult cache = QueryUtil.GetCachedResults(
                parsedQuery,
                site.Id
                );

            if (cache == null || cache.ExecutionPlan == null)
            {
                return(PageNotFound());
            }

            return(new QueryPlanResult(cache.ExecutionPlan));
        }
        private ActionResult ShowCommon(Revision revision, string slug, bool latest)
        {
            if (revision == null)
            {
                return(PageNotFound());
            }

            var title   = revision.QuerySet.Title;
            int ownerId = revision.OwnerId ?? 0;

            title = title.URLFriendly();

            // if this query has a title, and the title is missing or does not match, permanently redirect to it
            if (title.HasValue() && (string.IsNullOrEmpty(slug) || slug != title))
            {
                string url = latest ? "/{0}/query/{1}/{3}" : "/{0}/revision/{1}/{2}/{3}";

                return(PageMovedPermanentlyTo(string.Format(url,
                                                            Site.TinyName.ToLower(),
                                                            revision.QuerySet.Id,
                                                            revision.Id,
                                                            title
                                                            ) + Request.Url.Query));
            }

            title = revision.QuerySet.Title;

            if (title.IsNullOrEmpty())
            {
                title = revision.Query.AsTitle();
            }

            SetHeader(title);
            SelectMenuItem("Queries");

            ViewData["GuessedUserId"] = Site.GuessUserId(CurrentUser);

            // Need to revamp voting process
            int totalVotes = Current.DB.Query <int>(@"
                SELECT
                    COUNT(*)
                FROM
                    Votes
                WHERE
                    QuerySetId = @querySetId AND
                    VoteTypeId = @voteType",
                                                    new
            {
                querySetId = revision.QuerySet.Id,
                voteType   = (int)VoteType.Favorite
            }
                                                    ).FirstOrDefault();

            var voting = new QuerySetVoting
            {
                TotalVotes = totalVotes,
                QuerySetId = revision.QuerySet.Id,
                ReadOnly   = CurrentUser.IsAnonymous
            };

            if (!Current.User.IsAnonymous)
            {
                voting.HasVoted = Current.DB.Query <Vote>(@"
                    SELECT
                        *
                    FROM
                        Votes
                    WHERE
                        QuerySetId = @querySetId AND
                        VoteTypeId = @voteType AND
                        UserId = @user",
                                                          new
                {
                    querySetId = revision.QuerySet.Id,
                    voteType   = (int)VoteType.Favorite,
                    user       = Current.User.Id
                }
                                                          ).FirstOrDefault() != null;
            }

            CachedResult cachedResults = QueryUtil.GetCachedResults(
                new ParsedQuery(revision.Query.QueryBody, Request.Params),
                Site.Id
                );

            ViewData["QueryVoting"]  = voting;
            ViewData["query_action"] = "run/" + Site.Id + "/" + revision.QuerySet.Id + "/" + revision.Id;

            if (cachedResults != null)
            {
                // Don't show cached execution plan, since the user didn't ask for it...
                cachedResults.ExecutionPlan = null;

                ViewData["cached_results"] = new QueryResults
                {
                    RevisionId = revision.Id,
                    QuerySetId = revision.QuerySet.Id,
                    SiteId     = Site.Id,
                    SiteName   = Site.TinyName.ToLower(),
                    Slug       = revision.QuerySet.Title.URLFriendly(),
                    Url        = Site.Url
                }.WithCache(cachedResults);
            }

            if (!IsSearchEngine())
            {
                QueryViewTracker.TrackQueryView(GetRemoteIP(), revision.QuerySet.Id);
            }

            var initialRevision = revision.QuerySet.InitialRevision;

            var viewmodel = new QueryViewerData
            {
                QuerySetVoting = voting,
                Revision       = revision
            };

            return(View("Viewer", viewmodel));
        }