PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/Atlassian.Jira/Linq/JiraQueryProvider.cs

https://bitbucket.org/yyo/atlassian.net-sdk-v2.0
C# | 69 lines | 57 code | 12 blank | 0 comment | 4 complexity | 76283a00cb9ec80129751def345eca5c MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Linq.Expressions;
  6. namespace Atlassian.Jira.Linq
  7. {
  8. public class JiraQueryProvider: IQueryProvider
  9. {
  10. private readonly IJqlExpressionVisitor _translator;
  11. private readonly Jira _jiraServer;
  12. public JiraQueryProvider(IJqlExpressionVisitor translator, Jira jiraInstance)
  13. {
  14. _translator = translator;
  15. _jiraServer = jiraInstance;
  16. }
  17. public IQueryable<T> CreateQuery<T>(Expression expression)
  18. {
  19. return new JiraQueryable<T>(this, expression);
  20. }
  21. public IQueryable CreateQuery(Expression expression)
  22. {
  23. throw new NotImplementedException();
  24. }
  25. public T Execute<T>(Expression expression)
  26. {
  27. bool isEnumerable = (typeof(T).Name == "IEnumerable`1");
  28. return (T)this.Execute(expression, isEnumerable);
  29. }
  30. public object Execute(Expression expression)
  31. {
  32. return Execute(expression, true);
  33. }
  34. private object Execute(Expression expression, bool isEnumerable)
  35. {
  36. var jql = _translator.Process(expression);
  37. if (jql.ProcessCount && _jiraServer.UseRestApi)
  38. {
  39. return _jiraServer.WithToken<int>((token, client) =>
  40. {
  41. return _jiraServer.RemoteService.GetIssueCountFromJqlSearch(jql.Expression);
  42. });
  43. }
  44. IQueryable<Issue> issues = _jiraServer.GetIssuesFromJql(jql.Expression, jql.StartAt, jql.MaxResults ?? _jiraServer.MaxIssuesPerRequest).AsQueryable();
  45. if (isEnumerable)
  46. {
  47. return issues;
  48. }
  49. else
  50. {
  51. var treeCopier = new ExpressionTreeModifier(issues);
  52. Expression newExpressionTree = treeCopier.Visit(expression);
  53. return issues.Provider.Execute(newExpressionTree);
  54. }
  55. }
  56. }
  57. }