anchor.diff:      : c=cident (K_ASC | K_DESC { reversed = true; })? { orderings.emplace_back(c, reversed); }
       ;
   
  -jsonValue returns [::shared_ptr<cql3::term::raw> value]
  +jsonValue returns [cql3::expr::expression value]
       :
  -    | s=STRING_LITERAL { $value = cql3::expr::as_term_raw(cql3::expr::untyped_constant{cql3::expr::untyped_constant::string, $s.text}); }
  -    | ':' id=ident     { $value = cql3::expr::as_term_raw(new_bind_variables(id)); }
  -    | QMARK            { $value = cql3::expr::as_term_raw(new_bind_variables(shared_ptr<cql3::column_identifier>{})); }
  +    | s=STRING_LITERAL { $value = cql3::expr::untyped_constant{cql3::expr::untyped_constant::string, $s.text}; }
  +    | ':' id=ident     { $value = new_bind_variables(id); }
  +    | QMARK            { $value = new_bind_variables(shared_ptr<cql3::column_identifier>{}); }
       ;
   
   /**
  
positive.code:               { $clauses.emplace_back(cql3::multi_column_relation::create_single_marker_in_relation(ids, tupleInMarker)); }
            | literals=tupleOfTupleLiterals /* (a, b, c) IN ((1, 2, 3), (4, 5, 6), ...) */
                {
                    $clauses.emplace_back(cql3::multi_column_relation::create_in_relation(ids, boost::copy_range<std::vector<cql3::expr::expression>>(literals | boost::adaptors::transformed(cql3::expr::as_expression))));
                }
            | markers=tupleOfMarkersForTuples /* (a, b, c) IN (?, ?, ...) */
                { $clauses.emplace_back(cql3::multi_column_relation::create_in_relation(ids, boost::copy_range<std::vector<cql3::expr::expression>>(markers | boost::adaptors::transformed(cql3::expr::as_expression)))); }
            )
        | type=relationType literal=tupleLiteral /* (a, b, c) > (1, 2, 3) or (a, b, c) > (?, ?, ?) */
            {
                $clauses.emplace_back(cql3::multi_column_relation::create_non_in_relation(ids, type, cql3::expr::as_term_raw(literal)));
            }
        | type=relationType K_SCYLLA_CLUSTERING_BOUND literal=tupleLiteral /* (a, b, c) > (1, 2, 3) or (a, b, c) > (?, ?, ?) */
            {
                $clauses.emplace_back(cql3::multi_column_relation::create_scylla_clustering_bound_non_in_relation(ids, type, cql3::expr::as_term_raw(literal)));
            }
        | type=relationType tupleMarker=markerForTuple /* (a, b, c) >= ? */
            { $clauses.emplace_back(cql3::multi_column_relation::create_non_in_relation(ids, type, tupleMarker)); }
  
negative.code:     | K_COUNT                       { $s = "count"; }
      ;
  
  functionArgs returns [std::vector<cql3::expr::expression> a]
      : '(' ')'
      | '(' t1=term { a.push_back(std::move(t1)); }
            ( ',' tn=term { a.push_back(std::move(tn)); } )*
         ')'
      ;
  
  term returns [cql3::expr::expression term1]
      : v=value                          { $term1 = std::move(v); }
      | f=functionName args=functionArgs { $term1 = cql3::expr::function_call{std::move(f), std::move(args)}; }
      | '(' c=comparatorType ')' t=term  { $term1 = cql3::expr::cast{std::move(t), c}; }
      ;
  
  columnOperation[operations_type& operations]
  