title: JQL performance - natural sort for custom text field
body: <p>I am struggling with a JQL query.</p>
  
  <p>We have a custom field called 'Build Reported' which is a text field. It has values like '4.7.323H', '5.1.123L', '3.1.456E', etc.</p>
  
  <p>I need to write a simple query that will give me all issues reported after the user-specified version.</p>
  
  <p>JQL function prototype: searchIssues('Build Integrated', '>', '4.7.323B')</p>
  
  <p>To do this, I am firing a JQL Query that gives me the Build Reported for all the issues, I then iterate through each issue and perform a char-by-char comparison to determine if the Build Reported version of the current issue is greater than the one specified by the user. This seems to take too long to execute since I have to retrieve all the issues from jira database.</p>
  
  <p>Is there a faster way to achieve this? Here is what I have so far:</p>
  
  <pre><code>// Get all the arguments
  java.util.List args = operand.getArgs();
  CustomField cf = customFieldManager.getCustomFieldObjectByName((String)args.get(0));
  Long cfID = cf.getIdAsLong();
  String operator = (String)args.get(1);
  String userVersion = (String)args.get(2);
  String jiraVersion = "";
  
  java.util.List issues;
  Iterator issuesIterator;
  Issue issue;
  
  issues = getAllIssues(user, interestedInVersion, cfID);
  issuesIterator = issues.iterator();
  
  // Iterate over all the issues
  while(issuesIterator.hasNext())
  {
      issue = (Issue)issuesIterator.next();
  
      // Get the Build reported value
      jiraVersion = (String)issue.getCustomFieldValue(cf);
  
      if(jiraVersion != null &amp;&amp;
         !jiraVersion.equals(""))
      {
          // Compare user-specified version to the one retrieved from database
          if(compareVersions(jiraVersion, userVersion, operator))
          {
              // Add the issue to the result set
              literals.add(new QueryLiteral(operand, issue.getId()));
          }
      }
  }
  
  // cfID is the ID for the custom field Build Reported
  private java.util.List getAllIssues(User user, Long cfID) throws SearchException, ParseException
  {
      JqlQueryBuilder builder = JqlQueryBuilder.newBuilder();
      builder.where().project("SDEV").and().customField(cfID).isNotEmpty();
      Query query = builder.buildQuery();
      SearchResults results = searchService.search(user, query, PagerFilter.getUnlimitedFilter());
      return results.getIssues();
  }
  </code></pre>
  
  <p>Please note that I do not have any other filters that I could use for the JQL Query Builder to help me reduce the size of the result set.</p>