diff --git a/cql3/Cql.g b/cql3/Cql.g index 723e9ffa5b..7756ff07a5 100644 --- a/cql3/Cql.g +++ b/cql3/Cql.g @@ -35,6 +35,7 @@ options { #include "cql3/statements/property_definitions.hh" #include "cql3/statements/select_statement.hh" #include "cql3/statements/update_statement.hh" +#include "cql3/statements/delete_statement.hh" #include "cql3/statements/use_statement.hh" #include "cql3/statements/ks_prop_defs.hh" #include "cql3/selection/raw_selector.hh" @@ -273,8 +274,8 @@ cqlStatement returns [shared_ptr stmt] | st3= updateStatement { $stmt = st3; } #if 0 | st4= batchStatement { $stmt = st4; } - | st5= deleteStatement { $stmt = st5; } #endif + | st5= deleteStatement { $stmt = st5; } | st6= useStatement { $stmt = st6; } #if 0 | st7= truncateStatement { $stmt = st7; } @@ -467,8 +468,6 @@ updateConditions returns [conditions_type conditions] : columnCondition[conditions] ( K_AND columnCondition[conditions] )* ; -#if 0 - /** * DELETE name1, name2 * FROM @@ -476,42 +475,47 @@ updateConditions returns [conditions_type conditions] * WHERE KEY = keyname [IF (EXISTS | name = value, ...)]; */ -deleteStatement returns [DeleteStatement.Parsed expr] +deleteStatement returns [::shared_ptr expr] @init { - Attributes.Raw attrs = new Attributes.Raw(); - List columnDeletions = Collections.emptyList(); - boolean ifExists = false; + auto attrs = ::make_shared(); + std::vector<::shared_ptr> column_deletions; + bool if_exists = false; + delete_statement::parsed::conditions_vector conditions; } - : K_DELETE ( dels=deleteSelection { columnDeletions = dels; } )? + : K_DELETE ( dels=deleteSelection { column_deletions = std::move(dels); } )? K_FROM cf=columnFamilyName ( usingClauseDelete[attrs] )? K_WHERE wclause=whereClause - ( K_IF ( K_EXISTS { ifExists = true; } | conditions=updateConditions ))? +#if 0 + ( K_IF ( K_EXISTS { if_exists = true; } | conditions=updateConditions ))? +#endif { - return new DeleteStatement.Parsed(cf, - attrs, - columnDeletions, - wclause, - conditions == null ? Collections.>emptyList() : conditions, - ifExists); + return ::make_shared(cf, + std::move(attrs), + std::move(column_deletions), + std::move(wclause), + std::move(conditions), + if_exists); } ; -deleteSelection returns [List operations] - : { $operations = new ArrayList(); } - t1=deleteOp { $operations.add(t1); } - (',' tN=deleteOp { $operations.add(tN); })* +deleteSelection returns [std::vector<::shared_ptr> operations] + : t1=deleteOp { $operations.emplace_back(std::move(t1)); } + (',' tN=deleteOp { $operations.emplace_back(std::move(tN)); })* ; -deleteOp returns [Operation.RawDeletion op] - : c=cident { $op = new Operation.ColumnDeletion(c); } - | c=cident '[' t=term ']' { $op = new Operation.ElementDeletion(c, t); } +deleteOp returns [::shared_ptr op] + : c=cident { $op = ::make_shared(std::move(c)); } +#if 0 + | c=cident '[' t=term ']' { $op = ::make_shared attrs] + : K_USING K_TIMESTAMP ts=intValue { attrs->timestamp = ts; } ; +#if 0 /** * BEGIN BATCH * UPDATE SET name1 = value1 WHERE KEY = keyname1; @@ -1195,7 +1199,7 @@ specializedColumnOperation[std::vector>>& operations, shared_ptr key, shared_ptr k] - + : '=' t=term { add_raw_update(operations, key, make_shared(k, t));