public static Crawler Get(TargetSites target, int categoryId, string mode) { Crawler crawler = null; switch (target) { case TargetSites.gamemeca: //crawler = new GameMecaCrawler(); break; case TargetSites.hangame: //crawler = new HangameCrawler(); break; case TargetSites.inven: crawler = new InvenCrawler(); break; case TargetSites.naver: crawler = new NaverCrawler(); break; case TargetSites.thisisgame: //crawler = new ThisIsGameCrawler(); break; default: throw new Exception("Invalid TargetSite parameter"); } crawler.CategoryId = categoryId; crawler.Mode = mode; return crawler; }
public ParsedQuery(string sql, NameValueCollection requestParams, bool executionPlan = false, TargetSites targetSites = Helpers.TargetSites.Current) { IncludeExecutionPlan = executionPlan; TargetSites = targetSites; Parameters = new Dictionary<string, QueryParameter>(); Parse(sql, requestParams); }
public ParsedQuery(string sql, NameValueCollection requestParams, bool executionPlan = false, TargetSites targetSites = Helpers.TargetSites.Current) { IncludeExecutionPlan = executionPlan; TargetSites = targetSites; Parameters = new Dictionary <string, QueryParameter>(); Parse(sql, requestParams); }
private ActionResult GetCsv(string sitename, int revisionId, TargetSites targetSites) { Query query = QueryUtil.GetQueryForRevision(revisionId); if (query == null) { return(PageNotFound()); } var results = QueryRunner.GetResults( new ParsedQuery(query.QueryBody, Request.Params, executionPlan: false, targetSites: targetSites), null, CurrentUser ); return(new CsvResult(results.ResultSets)); }
public ActionResult Save(string sql, string title, string description, int siteId, int? querySetId, bool? textResults, bool? withExecutionPlan, TargetSites? targetSites) { if (CurrentUser.IsAnonymous && !CaptchaController.CaptchaPassed(GetRemoteIP())) { return Json(new { captcha = true }); } ActionResult response = null; try { if (!ValidateTargetSites(targetSites)) { throw new ApplicationException("Invalid target sites selection"); } QuerySet querySet = null; if (querySetId.HasValue) { querySet = Current.DB.QuerySets.Get(querySetId.Value); if (querySet == null) { throw new ApplicationException("Invalid query set ID"); } } var parsedQuery = new ParsedQuery( sql, Request.Params, withExecutionPlan == true, targetSites ?? TargetSites.Current ); QueryResults results = null; Site site = GetSite(siteId); ValidateQuery(parsedQuery, site); if (title.HasValue() && title.Length > 100) { throw new ApplicationException("Title must be no more than 100 characters"); } if (description.HasValue() && description.Length > 1000) { throw new ApplicationException("Description must be no more than 1000 characters"); } var contextData = new QueryContextData { Title = title, Description = description, IsText = textResults == true, QuerySet = querySet }; var asyncResults = AsyncQueryRunner.Execute(parsedQuery, CurrentUser, site, contextData); if (asyncResults.State == AsyncQueryRunner.AsyncState.Failure) { throw asyncResults.Exception; } if (asyncResults.State == AsyncQueryRunner.AsyncState.Success || asyncResults.State == AsyncQueryRunner.AsyncState.Cancelled) { results = asyncResults.QueryResults; } else { return Json(new {running = true, job_id = asyncResults.JobId}); } response = CompleteResponse(results, parsedQuery, contextData, siteId); } catch (Exception ex) { response = TransformExecutionException(ex); } return response; }
private static bool ValidateTargetSites(TargetSites? targetSites) { // We could check if running against only non-meta was allowed too since there's an AppSetting for it, // but I don't think that's necessary return AppSettings.AllowRunOnAllDbsOption || targetSites == null; }
private ActionResult GetCsv(string sitename, int revisionId, TargetSites targetSites) { Query query = QueryUtil.GetQueryForRevision(revisionId); if (query == null) { return PageNotFound(); } var results = QueryRunner.GetResults( new ParsedQuery(query.QueryBody, Request.Params, executionPlan: false, targetSites: targetSites), null, CurrentUser ); return new CsvResult(results.ResultSets); }
public ActionResult Execute(int querySetId, int revisionId, int siteId, bool? textResults, bool? withExecutionPlan, TargetSites? targetSites) { if (CurrentUser.IsAnonymous && !CaptchaController.CaptchaPassed(GetRemoteIP())) { return Json(new { captcha = true }); } ActionResult response = null; try { if (!ValidateTargetSites(targetSites)) { throw new ApplicationException("Invalid target sites selection"); } QuerySet querySet = null; querySet = Current.DB.QuerySets.Get(querySetId); if (querySet == null) { throw new ApplicationException("Invalid query set ID"); } Revision revision = Current.DB.Revisions.Get(revisionId); if (revision == null) { throw new ApplicationException("Invalid revision ID"); } Query query = Current.DB.Queries.Get(revision.QueryId); var parsedQuery = new ParsedQuery( query.QueryBody, Request.Params, withExecutionPlan == true, targetSites ?? TargetSites.Current ); QueryResults results = null; Site site = GetSite(siteId); ValidateQuery(parsedQuery, site); var contextData = new QueryContextData { IsText = textResults == true, QuerySet = querySet, Revision = revision }; var asyncResults = AsyncQueryRunner.Execute(parsedQuery, CurrentUser, site, contextData); if (asyncResults.State == AsyncQueryRunner.AsyncState.Failure) { throw asyncResults.Exception; } if (asyncResults.State == AsyncQueryRunner.AsyncState.Success) { results = asyncResults.QueryResults; } else { return Json(new { running = true, job_id = asyncResults.JobId }); } response = CompleteResponse(results, parsedQuery, contextData, siteId); } catch (Exception ex) { response = TransformExecutionException(ex); } return response; }