diff --git a/cql3/operation.hh b/cql3/operation.hh index 781fc39d02..6b5a22841c 100644 --- a/cql3/operation.hh +++ b/cql3/operation.hh @@ -170,51 +170,9 @@ public: virtual ::shared_ptr prepare(const sstring& keyspace, column_definition& receiver) = 0; }; + class set_value; + #if 0 - public static class SetValue implements RawUpdate - { - private final Term.Raw value; - - public SetValue(Term.Raw value) - { - this.value = value; - } - - public Operation prepare(String keyspace, ColumnDefinition receiver) throws InvalidRequestException - { - Term v = value.prepare(keyspace, receiver); - - if (receiver.type instanceof CounterColumnType) - throw new InvalidRequestException(String.format("Cannot set the value of counter column %s (counters can only be incremented/decremented, not set)", receiver.name)); - - if (!(receiver.type.isCollection())) - return new Constants.Setter(receiver, v); - - switch (((CollectionType)receiver.type).kind) - { - case LIST: - return new Lists.Setter(receiver, v); - case SET: - return new Sets.Setter(receiver, v); - case MAP: - return new Maps.Setter(receiver, v); - } - throw new AssertionError(); - } - - protected String toString(ColumnSpecification column) - { - return String.format("%s = %s", column, value); - } - - public boolean isCompatibleWith(RawUpdate other) - { - // We don't allow setting multiple time the same column, because 1) - // it's stupid and 2) the result would seem random to the user. - return false; - } - } - public static class SetElement implements RawUpdate { private final Term.Raw selector; diff --git a/cql3/operation_impl.hh b/cql3/operation_impl.hh new file mode 100644 index 0000000000..3be4609725 --- /dev/null +++ b/cql3/operation_impl.hh @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright 2015 Cloudius Systems + * + * Modified by Cloudius Systems + */ + +#pragma once + +#include "operation.hh" +#include "constants.hh" + +namespace cql3 { + +class operation::set_value : public raw_update { +private: + ::shared_ptr _value; +public: + set_value(::shared_ptr value) : _value(std::move(value)) {} + + virtual ::shared_ptr prepare(const sstring& keyspace, column_definition& receiver) override { + auto v = _value->prepare(keyspace, receiver.column_specification); + + if (receiver.type->is_counter()) { + throw exceptions::invalid_request_exception(sprint("Cannot set the value of counter column %s (counters can only be incremented/decremented, not set)", receiver.name_as_text())); + } + + if (!receiver.type->is_collection()) { + return ::make_shared(receiver, v); + } + + throw std::runtime_error("not implemented"); // FIXME +#if 0 + switch (((CollectionType)receiver.type).kind) + { + case LIST: + return new Lists.Setter(receiver, v); + case SET: + return new Sets.Setter(receiver, v); + case MAP: + return new Maps.Setter(receiver, v); + } + throw new AssertionError(); +#endif + } + +#if 0 + protected String toString(ColumnSpecification column) + { + return String.format("%s = %s", column, value); + } +#endif + + virtual bool is_compatible_with(::shared_ptr other) override { + // We don't allow setting multiple time the same column, because 1) + // it's stupid and 2) the result would seem random to the user. + return false; + } +}; + +}