anchor.diff:      : relation[$clause] (K_AND relation[$clause])*
       ;
   
  -#if 0
  -orderByClause[Map<ColumnIdentifier.Raw, Boolean> orderings]
  +orderByClause[select_statement::parameters::orderings_type orderings]
       @init{
  -        boolean reversed = false;
  -    }
  -    : c=cident (K_ASC | K_DESC { reversed = true; })? { orderings.put(c, reversed); }
  -    ;
  -#endif
  +        bool reversed = false;
  +    }
  +    : c=cident (K_ASC | K_DESC { reversed = true; })? { orderings.emplace(c, reversed); }
  +    ;
   
   /**
    * INSERT INTO <CF> (<column>, <column>, <column>, ...)
  
positive.code: selectStatement returns [shared_ptr<select_statement::raw_statement> expr]
      @init {
          bool is_distinct = false;
  #if 0
          Term.Raw limit = null;
  #endif
          select_statement::parameters::orderings_type orderings;
          bool allow_filtering = false;
      }
  
negative.code: #endif
                 )
        K_FROM cf=columnFamilyName
        ( K_WHERE wclause=whereClause )?
        ( K_ORDER K_BY orderByClause[orderings] ( ',' orderByClause[orderings] )* )?
        ( K_LIMIT rows=intValue { limit = rows; } )?
        ( K_ALLOW K_FILTERING  { allow_filtering = true; } )?
        {
            auto params = ::make_shared<select_statement::parameters>(std::move(orderings), is_distinct, allow_filtering);
            $expr = ::make_shared<select_statement::raw_statement>(std::move(cf), std::move(params),
              std::move(sclause), std::move(wclause), std::move(limit));
        }
      ;
  
  selectClause returns [std::vector<shared_ptr<raw_selector>> expr]
      : t1=selector { $expr.push_back(t1); } (',' tN=selector { $expr.push_back(tN); })*
      | '*' { }
      ;
  
  selector returns [shared_ptr<raw_selector> s]
  