From e92b4c3dbcfbcfe3ce553e8117dd41d145f651e9 Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Mon, 14 Jan 2019 09:16:22 +0100 Subject: [PATCH] Move user_type_impl out of types.hh to types/user.hh Signed-off-by: Piotr Jastrzebski --- cql3/selection/field_selector.hh | 1 + cql3/user_types.cc | 2 + database.hh | 1 + db/marshal/type_parser.cc | 2 + tests/mutation_source_test.cc | 1 + transport/server.cc | 2 + types.cc | 2 + types.hh | 43 -------------------- types/user.hh | 68 ++++++++++++++++++++++++++++++++ 9 files changed, 79 insertions(+), 43 deletions(-) create mode 100644 types/user.hh diff --git a/cql3/selection/field_selector.hh b/cql3/selection/field_selector.hh index 489677d5b7..e785d10bea 100644 --- a/cql3/selection/field_selector.hh +++ b/cql3/selection/field_selector.hh @@ -42,6 +42,7 @@ #include "selector.hh" #include "types.hh" +#include "types/user.hh" namespace cql3 { diff --git a/cql3/user_types.cc b/cql3/user_types.cc index 91469d21c0..ba7913f824 100644 --- a/cql3/user_types.cc +++ b/cql3/user_types.cc @@ -46,6 +46,8 @@ #include #include +#include "types/user.hh" + namespace cql3 { shared_ptr user_types::field_spec_of(shared_ptr column, size_t field) { diff --git a/database.hh b/database.hh index 20b10deaee..2aeda01cb1 100644 --- a/database.hh +++ b/database.hh @@ -47,6 +47,7 @@ #include #include #include "types.hh" +#include "types/user.hh" #include "compound.hh" #include #include diff --git a/db/marshal/type_parser.cc b/db/marshal/type_parser.cc index ca72fcee1a..684288216e 100644 --- a/db/marshal/type_parser.cc +++ b/db/marshal/type_parser.cc @@ -46,6 +46,8 @@ #include #include +#include "types/user.hh" + namespace db { namespace marshal { diff --git a/tests/mutation_source_test.cc b/tests/mutation_source_test.cc index 6f7e8dad5f..1b217be341 100644 --- a/tests/mutation_source_test.cc +++ b/tests/mutation_source_test.cc @@ -34,6 +34,7 @@ #include "cql3/cql3_type.hh" #include "make_random_string.hh" #include +#include "types/user.hh" // partitions must be sorted by decorated key static void require_no_token_duplicates(const std::vector& partitions) { diff --git a/transport/server.cc b/transport/server.cc index 2571b4c570..63f5b5f944 100644 --- a/transport/server.cc +++ b/transport/server.cc @@ -57,6 +57,8 @@ #include "response.hh" #include "request.hh" +#include "types/user.hh" + namespace cql_transport { static logging::logger clogger("cql_server"); diff --git a/types.cc b/types.cc index 92b4f08d3e..3b6e4df64c 100644 --- a/types.cc +++ b/types.cc @@ -53,6 +53,8 @@ #include "mutation_partition.hh" #include "json.hh" +#include "types/user.hh" + template sstring time_point_to_string(const T& tp) { diff --git a/types.hh b/types.hh index 462a49c57b..332efcc9ed 100644 --- a/types.hh +++ b/types.hh @@ -1674,49 +1674,6 @@ private: data_value make_tuple_value(data_type tuple_type, tuple_type_impl::native_type value); -class user_type_impl : public tuple_type_impl { - using intern = type_interning_helper, std::vector>; -public: - const sstring _keyspace; - const bytes _name; -private: - std::vector _field_names; - std::vector _string_field_names; -public: - using native_type = std::vector; - user_type_impl(sstring keyspace, bytes name, std::vector field_names, std::vector field_types) - : tuple_type_impl(make_name(keyspace, name, field_names, field_types, false /* frozen */), field_types) - , _keyspace(keyspace) - , _name(name) - , _field_names(field_names) { - for (const auto& field_name : _field_names) { - _string_field_names.emplace_back(utf8_type->to_string(field_name)); - } - } - static shared_ptr get_instance(sstring keyspace, bytes name, std::vector field_names, std::vector field_types) { - return intern::get_instance(std::move(keyspace), std::move(name), std::move(field_names), std::move(field_types)); - } - data_type field_type(size_t i) const { return type(i); } - const std::vector& field_types() const { return _types; } - bytes_view field_name(size_t i) const { return _field_names[i]; } - sstring field_name_as_string(size_t i) const { return _string_field_names[i]; } - const std::vector& field_names() const { return _field_names; } - sstring get_name_as_string() const; - virtual shared_ptr as_cql3_type() const override; - virtual bool equals(const abstract_type& other) const override; - virtual bool is_user_type() const override { return true; } - virtual bool references_user_type(const sstring& keyspace, const bytes& name) const override; - virtual std::optional update_user_type(const shared_ptr updated) const override; -private: - static sstring make_name(sstring keyspace, - bytes name, - std::vector field_names, - std::vector field_types, - bool is_multi_cell); -}; - -data_value make_user_value(data_type tuple_type, user_type_impl::native_type value); - using user_type = shared_ptr; using tuple_type = shared_ptr; diff --git a/types/user.hh b/types/user.hh new file mode 100644 index 0000000000..babb1f7e73 --- /dev/null +++ b/types/user.hh @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2014 ScyllaDB + */ + +/* + * This file is part of Scylla. + * + * Scylla is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Scylla is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Scylla. If not, see . + */ + +#pragma once + +#include "types.hh" + +class user_type_impl : public tuple_type_impl { + using intern = type_interning_helper, std::vector>; +public: + const sstring _keyspace; + const bytes _name; +private: + std::vector _field_names; + std::vector _string_field_names; +public: + using native_type = std::vector; + user_type_impl(sstring keyspace, bytes name, std::vector field_names, std::vector field_types) + : tuple_type_impl(make_name(keyspace, name, field_names, field_types, false /* frozen */), field_types) + , _keyspace(keyspace) + , _name(name) + , _field_names(field_names) { + for (const auto& field_name : _field_names) { + _string_field_names.emplace_back(utf8_type->to_string(field_name)); + } + } + static shared_ptr get_instance(sstring keyspace, bytes name, std::vector field_names, std::vector field_types) { + return intern::get_instance(std::move(keyspace), std::move(name), std::move(field_names), std::move(field_types)); + } + data_type field_type(size_t i) const { return type(i); } + const std::vector& field_types() const { return _types; } + bytes_view field_name(size_t i) const { return _field_names[i]; } + sstring field_name_as_string(size_t i) const { return _string_field_names[i]; } + const std::vector& field_names() const { return _field_names; } + sstring get_name_as_string() const; + virtual shared_ptr as_cql3_type() const override; + virtual bool equals(const abstract_type& other) const override; + virtual bool is_user_type() const override { return true; } + virtual bool references_user_type(const sstring& keyspace, const bytes& name) const override; + virtual std::optional update_user_type(const shared_ptr updated) const override; +private: + static sstring make_name(sstring keyspace, + bytes name, + std::vector field_names, + std::vector field_types, + bool is_multi_cell); +}; + +data_value make_user_value(data_type tuple_type, user_type_impl::native_type value); +