/* */ /* * Copyright (C) 2015-present ScyllaDB * * Modified by ScyllaDB */ /* * SPDX-License-Identifier: (AGPL-3.0-or-later and Apache-2.0) */ #pragma once #include "cql3/expr/expression.hh" #include "db/timeout_clock.hh" namespace cql3 { class query_options; class prepare_context; /** * Utility class for the Parser to gather attributes for modification * statements. */ class attributes final { private: std::optional _timestamp; std::optional _time_to_live; std::optional _timeout; public: static std::unique_ptr none(); private: attributes(std::optional&& timestamp, std::optional&& time_to_live, std::optional&& timeout); public: bool is_timestamp_set() const; bool is_time_to_live_set() const; bool is_timeout_set() const; int64_t get_timestamp(int64_t now, const query_options& options); int32_t get_time_to_live(const query_options& options); db::timeout_clock::duration get_timeout(const query_options& options) const; void fill_prepare_context(prepare_context& ctx); class raw final { public: std::optional timestamp; std::optional time_to_live; std::optional timeout; std::unique_ptr prepare(data_dictionary::database db, const sstring& ks_name, const sstring& cf_name) const; private: lw_shared_ptr timestamp_receiver(const sstring& ks_name, const sstring& cf_name) const; lw_shared_ptr time_to_live_receiver(const sstring& ks_name, const sstring& cf_name) const; lw_shared_ptr timeout_receiver(const sstring& ks_name, const sstring& cf_name) const; }; }; }