anchor.diff:  #include "cql3/statements/create_view_statement.hh"
   #include "cql3/statements/create_type_statement.hh"
   #include "cql3/statements/create_function_statement.hh"
  +#include "cql3/statements/create_aggregate_statement.hh"
   #include "cql3/statements/create_service_level_statement.hh"
   #include "cql3/statements/sl_prop_defs.hh"
   #include "cql3/statements/attach_service_level_statement.hh"
  
positive.code:       (
          K_INITCOND ival = term
        )?
        { $expr = new CreateAggregateStatement(fn, argsTypes, sfunc, stype, ffunc, ival, orReplace, ifNotExists); }
      ;
  
  dropAggregateStatement returns [DropAggregateStatement expr]
      @init {
          boolean ifExists = false;
          List<CQL3Type.Raw> argsTypes = new ArrayList<>();
          boolean argsPresent = false;
      }
      : K_DROP K_AGGREGATE
        (K_IF K_EXISTS { ifExists = true; } )?
        fn=functionName
        (
          '('
            (
              v=comparatorType { argsTypes.add(v); }
              ( ',' v=comparatorType { argsTypes.add(v); } )*
            )?
          ')'
          { argsPresent = true; }
        )?
        { $expr = new DropAggregateStatement(fn, argsTypes, argsPresent, ifExists); }
      ;
  #endif
  
  createFunctionStatement returns [std::unique_ptr<cql3::statements::create_function_statement> expr]
      @init {
  
negative.code: #include "cql3/statements/drop_table_statement.hh"
  #include "cql3/statements/drop_view_statement.hh"
  #include "cql3/statements/drop_function_statement.hh"
  #include "cql3/statements/drop_aggregate_statement.hh"
  #include "cql3/statements/drop_service_level_statement.hh"
  #include "cql3/statements/detach_service_level_statement.hh"
  #include "cql3/statements/truncate_statement.hh"
  