diff --git a/cql3/statements/parsed_statement.hh b/cql3/statements/parsed_statement.hh index 89da9d174d..86948344fd 100644 --- a/cql3/statements/parsed_statement.hh +++ b/cql3/statements/parsed_statement.hh @@ -59,24 +59,24 @@ public: class prepared { public: - const std::unique_ptr statement; + const ::shared_ptr statement; const std::vector<::shared_ptr> bound_names; - prepared(std::unique_ptr&& statement_, const std::vector<::shared_ptr>& bound_names_) + prepared(::shared_ptr statement_, const std::vector<::shared_ptr>& bound_names_) : statement(std::move(statement_)) , bound_names(bound_names_) { } - prepared(std::unique_ptr&& statement_, const variable_specifications& names) - : prepared(std::move(statement_), names.get_specifications()) + prepared(::shared_ptr statement_, const variable_specifications& names) + : prepared(statement_, names.get_specifications()) { } - prepared(std::unique_ptr&& statement_) - : prepared(std::move(statement_), std::vector<::shared_ptr>()) + prepared(::shared_ptr&& statement_) + : prepared(statement_, std::vector<::shared_ptr>()) { } }; - virtual std::unique_ptr prepare(std::unique_ptr&& stmt) = 0; + virtual std::unique_ptr prepare() = 0; virtual bool uses_function(sstring ks_name, sstring function_name) { return false; diff --git a/cql3/statements/schema_altering_statement.hh b/cql3/statements/schema_altering_statement.hh index c51945008a..66ce8b2f6e 100644 --- a/cql3/statements/schema_altering_statement.hh +++ b/cql3/statements/schema_altering_statement.hh @@ -37,7 +37,7 @@ namespace statements { /** * Abstract class for statements that alter the schema. */ -class schema_altering_statement : public cf_statement, public virtual cql_statement { +class schema_altering_statement : public cf_statement, public virtual cql_statement, public ::enable_shared_from_this { private: const bool _is_column_family_level; @@ -63,8 +63,8 @@ protected: } } - virtual std::unique_ptr prepare(std::unique_ptr&& stmt) override { - return std::make_unique(std::move(stmt)); + virtual std::unique_ptr prepare() override { + return std::make_unique(this->shared_from_this()); } #if 0 diff --git a/cql3/statements/truncate_statement.hh b/cql3/statements/truncate_statement.hh index 5063fb9570..9ca3875cf6 100644 --- a/cql3/statements/truncate_statement.hh +++ b/cql3/statements/truncate_statement.hh @@ -34,7 +34,7 @@ namespace cql3 { namespace statements { -class truncate_statement : public cf_statement, public virtual cql_statement { +class truncate_statement : public cf_statement, public virtual cql_statement, public ::enable_shared_from_this { public: truncate_statement(std::experimental::optional&& name) : cf_statement{std::move(name)} @@ -44,8 +44,8 @@ public: return 0; } - virtual std::unique_ptr prepare(std::unique_ptr&& stmt) override { - return std::make_unique(std::move(stmt)); + virtual std::unique_ptr prepare() override { + return std::make_unique(this->shared_from_this()); } virtual void check_access(const service::client_state& state) override { diff --git a/cql3/statements/use_statement.hh b/cql3/statements/use_statement.hh index 1fd15608b9..269efcbe2f 100644 --- a/cql3/statements/use_statement.hh +++ b/cql3/statements/use_statement.hh @@ -32,7 +32,7 @@ namespace cql3 { namespace statements { -class use_statement : public parsed_statement, public virtual cql_statement { +class use_statement : public parsed_statement, public virtual cql_statement, public ::enable_shared_from_this { private: const sstring _keyspace; @@ -45,8 +45,8 @@ public: return 0; } - virtual std::unique_ptr prepare(std::unique_ptr&& stmt) override { - return std::make_unique(std::move(stmt)); + virtual std::unique_ptr prepare() override { + return std::make_unique(this->shared_from_this()); } virtual void check_access(const service::client_state& state) override {