/* * Copyright (C) 2022-present ScyllaDB */ /* * SPDX-License-Identifier: AGPL-3.0-or-later */ #pragma once #include "cql3/expr/expression.hh" #include "cql3/query_options.hh" #include "cql3/selection/selection.hh" #include "data_dictionary/data_dictionary.hh" #include "data_dictionary/impl.hh" #include "data_dictionary/keyspace_metadata.hh" #include "db/config.hh" #include "types/list.hh" #include "types/map.hh" #include "types/set.hh" namespace cql3 { namespace expr { namespace test_utils { raw_value make_empty_raw(); raw_value make_bool_raw(bool val); raw_value make_int_raw(int32_t val); raw_value make_text_raw(const sstring_view& text); constant make_empty_const(data_type type); constant make_bool_const(bool val); constant make_int_const(int32_t val); constant make_text_const(const sstring_view& text); // This function implements custom serialization of collection values. // Some tests require the collection to contain unset_value or an empty value, // which is impossible to express using the existing code. cql3::raw_value make_collection_raw(size_t size_to_write, const std::vector& elements_to_write); raw_value make_list_raw(const std::vector& values); raw_value make_set_raw(const std::vector& values); raw_value make_map_raw(const std::vector>& values); // This function implements custom serialization of tuples. // Some tests require the tuple to contain unset_value or an empty value, // which is impossible to express using the existing code. raw_value make_tuple_raw(const std::vector& values); constant make_list_const(const std::vector& vals, data_type elements_type); constant make_list_const(const std::vector& vals, data_type elements_type); constant make_set_const(const std::vector& vals, data_type elements_type); constant make_set_const(const std::vector& vals, data_type elements_type); constant make_map_const(const std::vector>& vals, data_type key_type, data_type value_type); constant make_map_const(const std::vector>& vals, data_type key_type, data_type value_type); constant make_tuple_const(const std::vector& vals, const std::vector& element_types); constant make_tuple_const(const std::vector& vals, const std::vector& element_types); raw_value make_int_list_raw(const std::vector& values); raw_value make_int_set_raw(const std::vector& values); raw_value make_int_int_map_raw(const std::vector>& values); constant make_int_list_const(const std::vector& values); constant make_int_set_const(const std::vector& values); constant make_int_int_map_const(const std::vector>& values); collection_constructor make_list_constructor(std::vector elements, data_type elements_type); collection_constructor make_set_constructor(std::vector elements, data_type elements_type); collection_constructor make_map_constructor(const std::vector elements, data_type key_type, data_type element_type); collection_constructor make_map_constructor(const std::vector>& elements, data_type key_type, data_type element_type); tuple_constructor make_tuple_constructor(std::vector elements, std::vector element_types); usertype_constructor make_usertype_constructor(std::vector> field_values); struct evaluation_inputs_data { std::vector partition_key; std::vector clustering_key; std::vector static_and_regular_columns; ::shared_ptr selection; query_options options; }; using column_values = std::map; // Creates evaluation_inputs that can be used to evaluate columns and bind variables using evaluate() std::pair> make_evaluation_inputs( const schema_ptr& table_schema, const column_values& column_vals, const std::vector& bind_marker_values = {}); } // namespace test_utils } // namespace expr } // namespace cql3