cql3: Take reference to storage_proxy and call instance methods

This commit is contained in:
Tomasz Grabiec
2015-02-06 12:56:56 +01:00
parent 28915bf673
commit 9530a372cc
7 changed files with 25 additions and 23 deletions

View File

@@ -28,6 +28,7 @@
#include "transport/messages/result_message.hh"
#include "service/client_state.hh"
#include "service/query_state.hh"
#include "service/storage_proxy.hh"
#include "cql3/query_options.hh"
#include "database.hh"
@@ -62,7 +63,7 @@ public:
* @param options options for this query (consistency, variables, pageSize, ...)
*/
virtual future<std::experimental::optional<transport::messages::result_message>>
execute(service::query_state& state, const query_options& options) = 0;
execute(service::storage_proxy& proxy, service::query_state& state, const query_options& options) = 0;
/**
* Variant of execute used for internal query against the system tables, and thus only query the local node = 0.
@@ -70,7 +71,7 @@ public:
* @param state the current query state
*/
virtual future<std::experimental::optional<transport::messages::result_message>>
execute_internal(service::query_state& state, const query_options& options) = 0;
execute_internal(database& db, service::query_state& state, const query_options& options) = 0;
virtual bool uses_function(const sstring& ks_name, const sstring& function_name) const = 0;
};

View File

@@ -278,23 +278,23 @@ modification_statement::build_partition_keys(const query_options& options) {
}
future<std::experimental::optional<transport::messages::result_message>>
modification_statement::execute(service::query_state& qs, const query_options& options) {
modification_statement::execute(service::storage_proxy& proxy, service::query_state& qs, const query_options& options) {
if (has_conditions() && options.get_protocol_version() == 1) {
throw new exceptions::invalid_request_exception("Conditional updates are not supported by the protocol version in use. You need to upgrade to a driver using the native protocol v2.");
}
if (has_conditions()) {
return execute_with_condition(qs, options);
return execute_with_condition(proxy, qs, options);
}
return execute_without_condition(qs, options).then([] {
return execute_without_condition(proxy, qs, options).then([] {
return make_ready_future<std::experimental::optional<transport::messages::result_message>>(
std::experimental::optional<transport::messages::result_message>{});
});
}
future<>
modification_statement::execute_without_condition(service::query_state& qs, const query_options& options) {
modification_statement::execute_without_condition(service::storage_proxy& proxy, service::query_state& qs, const query_options& options) {
auto cl = options.get_consistency();
if (is_counter()) {
db::validate_counter_for_write(s, cl);
@@ -302,16 +302,16 @@ modification_statement::execute_without_condition(service::query_state& qs, cons
db::validate_for_write(s->ks_name, cl);
}
return get_mutations(options, false, options.get_timestamp(qs)).then([cl] (auto mutations) {
return get_mutations(options, false, options.get_timestamp(qs)).then([cl, &proxy] (auto mutations) {
if (mutations.empty()) {
return now();
}
return service::storage_proxy::mutate_with_triggers(std::move(mutations), cl, false);
return proxy.mutate_with_triggers(std::move(mutations), cl, false);
});
}
future<std::experimental::optional<transport::messages::result_message>>
modification_statement::execute_with_condition(service::query_state& qs, const query_options& options) {
modification_statement::execute_with_condition(service::storage_proxy& proxy, service::query_state& qs, const query_options& options) {
unimplemented::lwt();
#if 0
List<ByteBuffer> keys = buildPartitionKeyNames(options);

View File

@@ -296,19 +296,19 @@ public:
}
virtual future<std::experimental::optional<transport::messages::result_message>>
execute(service::query_state& qs, const query_options& options) override;
execute(service::storage_proxy& proxy, service::query_state& qs, const query_options& options) override;
virtual future<std::experimental::optional<transport::messages::result_message>>
execute_internal(service::query_state& qs, const query_options& options) override {
execute_internal(database& db, service::query_state& qs, const query_options& options) override {
throw std::runtime_error("not implemented");
}
private:
future<>
execute_without_condition(service::query_state& qs, const query_options& options);
execute_without_condition(service::storage_proxy& proxy, service::query_state& qs, const query_options& options);
future<std::experimental::optional<transport::messages::result_message>>
execute_with_condition(service::query_state& qs, const query_options& options);
execute_with_condition(service::storage_proxy& proxy, service::query_state& qs, const query_options& options);
#if 0
public void addConditions(Composite clusteringPrefix, CQL3CasRequest request, QueryOptions options) throws InvalidRequestException

View File

@@ -82,7 +82,7 @@ protected:
#endif
virtual future<std::experimental::optional<transport::messages::result_message>>
execute(service::query_state& state, const query_options& options) override {
execute(service::storage_proxy& proxy, service::query_state& state, const query_options& options) override {
throw std::runtime_error("not implemented");
#if 0
// If an IF [NOT] EXISTS clause was used, this may not result in an actual schema change. To avoid doing
@@ -97,7 +97,7 @@ protected:
}
virtual future<std::experimental::optional<transport::messages::result_message>>
execute_internal(service::query_state& state, const query_options& options) override {
execute_internal(database& db, service::query_state& state, const query_options& options) override {
throw std::runtime_error("unsupported operation");
#if 0
try

View File

@@ -63,7 +63,7 @@ public:
}
virtual future<std::experimental::optional<transport::messages::result_message>>
execute(service::query_state& state, const query_options& options) override {
execute(service::storage_proxy& proxy, service::query_state& state, const query_options& options) override {
throw std::runtime_error("not implemented");
#if 0
try
@@ -87,7 +87,7 @@ public:
}
virtual future<std::experimental::optional<transport::messages::result_message>>
execute_internal(service::query_state& state, const query_options& options) override {
execute_internal(database& db, service::query_state& state, const query_options& options) override {
throw std::runtime_error("unsupported operation");
}
};

View File

@@ -61,7 +61,7 @@ public:
}
virtual future<std::experimental::optional<transport::messages::result_message>>
execute(service::query_state& state, const query_options& options) override {
execute(service::storage_proxy& proxy, service::query_state& state, const query_options& options) override {
throw std::runtime_error("not implemented");
#if 0
state.getClientState().setKeyspace(keyspace);
@@ -70,7 +70,7 @@ public:
}
virtual future<std::experimental::optional<transport::messages::result_message>>
execute_internal(service::query_state& state, const query_options& options) override {
execute_internal(database& db, service::query_state& state, const query_options& options) override {
// Internal queries are exclusively on the system keyspace and 'use' is thus useless
throw std::runtime_error("unsupported operation");
}

View File

@@ -25,6 +25,7 @@
#pragma once
#include "database.hh"
#include "db/consistency_level.hh"
namespace service {
@@ -39,10 +40,10 @@ public:
* @param mutations the mutations to be applied across the replicas
* @param consistency_level the consistency level for the operation
*/
static future<> mutate(std::vector<mutation> mutations, db::consistency_level cl);
future<> mutate(std::vector<mutation> mutations, db::consistency_level cl);
static future<> mutate_with_triggers(std::vector<mutation> mutations,
db::consistency_level cl, bool should_mutate_atomically);
future<> mutate_with_triggers(std::vector<mutation> mutations, db::consistency_level cl,
bool should_mutate_atomically);
/**
* See mutate. Adds additional steps before and after writing a batch.
@@ -53,7 +54,7 @@ public:
* @param mutations the Mutations to be applied across the replicas
* @param consistency_level the consistency level for the operation
*/
static future<> mutate_atomically(std::vector<mutation> mutations, db::consistency_level cl);
future<> mutate_atomically(std::vector<mutation> mutations, db::consistency_level cl);
};
}