anchor.diff:  import com.metamx.druid.aggregation.post.*;
   import com.metamx.druid.aggregation.*;
   import com.metamx.druid.query.filter.*;
  +import com.metamx.druid.query.dimension.*;
  +import com.metamx.druid.*;
   import com.google.common.base.*;
   import com.google.common.collect.Lists;
   import java.util.*;
  
positive.code:     }
      
      public String unescape(String quoted) {
          String unquote = quoted.replaceFirst("^'(.*)'\$", "\$1");
          return unquote.replace("''", "'");
      }
  
  
negative.code:     ;
  
  where_stmt
      : 'where' f=timeAndDimFilter {
          if($f.filter != null) this.filter = $f.filter;
          this.intervals = Lists.newArrayList($f.interval);
      }
      ;
  
  groupby_stmt
      : GROUP 'by' groupByExpression ( COMMA! groupByExpression )*
      ;
  
  groupByExpression
      : gran=granularityFn {this.granularity = $gran.granularity;}
      | dim=IDENT { this.groupByDimensions.put($dim.text, new DefaultDimensionSpec($dim.text, $dim.text)); }
      ;
  
  datasource
  