anchor.diff:      @init { bool if_not_exists = false; }
       : K_CREATE K_COLUMNFAMILY (K_IF K_NOT K_EXISTS { if_not_exists = true; } )?
         cf=columnFamilyName { $expr = make_shared<cql3::statements::create_table_statement::raw_statement>(cf, if_not_exists); }
  -      cfamDefinition[expr]
  -    ;
  -
  -cfamDefinition[shared_ptr<cql3::statements::create_table_statement::raw_statement> expr]
  +      cfamDefinition[*expr]
  +    ;
  +
  +cfamDefinition[cql3::statements::create_table_statement::raw_statement& expr]
       : '(' cfamColumns[expr] ( ',' cfamColumns[expr]? )* ')'
  -      ( K_WITH cfamProperty[$expr->properties()] ( K_AND cfamProperty[$expr->properties()] )*)?
  -    ;
  -
  -cfamColumns[shared_ptr<cql3::statements::create_table_statement::raw_statement> expr]
  +      ( K_WITH cfamProperty[$expr.properties()] ( K_AND cfamProperty[$expr.properties()] )*)?
  +    ;
  +
  +cfamColumns[cql3::statements::create_table_statement::raw_statement& expr]
       @init { bool is_static=false; }
  -    : k=ident v=comparatorType (K_STATIC {is_static = true;})? { $expr->add_definition(k, v, is_static); }
  -        (K_PRIMARY K_KEY { $expr->add_key_aliases(std::vector<shared_ptr<cql3::column_identifier>>{k}); })?
  -    | K_PRIMARY K_KEY '(' pkDef[expr] (',' c=ident { $expr->add_column_alias(c); } )* ')'
  -    ;
  -
  -pkDef[shared_ptr<cql3::statements::create_table_statement::raw_statement> expr]
  +    : k=ident v=comparatorType (K_STATIC {is_static = true;})? { $expr.add_definition(k, v, is_static); }
  +        (K_PRIMARY K_KEY { $expr.add_key_aliases(std::vector<shared_ptr<cql3::column_identifier>>{k}); })?
  +    | K_PRIMARY K_KEY '(' pkDef[expr] (',' c=ident { $expr.add_column_alias(c); } )* ')'
  +    ;
  +
  +pkDef[cql3::statements::create_table_statement::raw_statement& expr]
       @init { std::vector<shared_ptr<cql3::column_identifier>> l; }
  -    : k=ident { $expr->add_key_aliases(std::vector<shared_ptr<cql3::column_identifier>>{k}); }
  -    | '(' k1=ident { l.push_back(k1); } ( ',' kn=ident { l.push_back(kn); } )* ')' { $expr->add_key_aliases(l); }
  +    : k=ident { $expr.add_key_aliases(std::vector<shared_ptr<cql3::column_identifier>>{k}); }
  +    | '(' k1=ident { l.push_back(k1); } ( ',' kn=ident { l.push_back(kn); } )* ')' { $expr.add_key_aliases(l); }
       ;
   
   cfamProperty[cql3::statements::cf_properties& expr]
  -    : property[$expr.properties()]
  +    : property[*$expr.properties()]
       | K_COMPACT K_STORAGE { $expr.set_compact_storage(); }
       | K_CLUSTERING K_ORDER K_BY '(' cfamOrdering[expr] (',' cfamOrdering[expr])* ')'
       ;
  
positive.code:     @init {
          auto props = make_shared<cql3::statements::cf_prop_defs>();
      }
      : K_ALTER K_MATERIALIZED K_VIEW cf=columnFamilyName K_WITH properties[props]
      {
          $expr = ::make_shared<alter_view_statement>(std::move(cf), std::move(props));
      }
  
negative.code:         std::vector<::shared_ptr<index_target::raw>> targets;
      }
      : K_CREATE (K_CUSTOM { props->is_custom = true; })? K_INDEX (K_IF K_NOT K_EXISTS { if_not_exists = true; } )?
          (idxName[*name])? K_ON cf=columnFamilyName '(' (target1=indexIdent { targets.emplace_back(target1); } (',' target2=indexIdent { targets.emplace_back(target2); } )*)? ')'
          (K_USING cls=STRING_LITERAL { props->custom_class = sstring{$cls.text}; })?
          (K_WITH properties[*props])?
        { $expr = ::make_shared<create_index_statement>(cf, name, targets, props, if_not_exists); }
      ;
  
  