diff --git a/dbms/include/DB/Dictionaries/CacheDictionary.h b/dbms/include/DB/Dictionaries/CacheDictionary.h index 15bbe05cb19..995f4945865 100644 --- a/dbms/include/DB/Dictionaries/CacheDictionary.h +++ b/dbms/include/DB/Dictionaries/CacheDictionary.h @@ -31,7 +31,7 @@ public: { if (!this->source_ptr->supportsSelectiveLoad()) throw Exception{ - "Source cannot be used with CacheDictionary", + name + ": source cannot be used with CacheDictionary", ErrorCodes::UNSUPPORTED_METHOD }; @@ -98,7 +98,7 @@ public: auto & attribute = getAttribute(attribute_name);\ if (attribute.type != AttributeUnderlyingType::TYPE)\ throw Exception{\ - "Type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type),\ + name + ": type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type),\ ErrorCodes::TYPE_MISMATCH\ };\ \ @@ -120,7 +120,7 @@ public: auto & attribute = getAttribute(attribute_name); if (attribute.type != AttributeUnderlyingType::String) throw Exception{ - "Type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type), + name + ": type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type), ErrorCodes::TYPE_MISMATCH }; @@ -173,7 +173,7 @@ private: if (hierarchical_attribute->type != AttributeUnderlyingType::UInt64) throw Exception{ - "Hierarchical attribute must be UInt64.", + name + ": hierarchical attribute must be UInt64.", ErrorCodes::TYPE_MISMATCH }; } @@ -422,7 +422,7 @@ private: const auto id_column = typeid_cast *>(block.getByPosition(0).column.get()); if (!id_column) throw Exception{ - "Id column has type different from UInt64.", + name + ": id column has type different from UInt64.", ErrorCodes::TYPE_MISMATCH }; @@ -576,7 +576,7 @@ private: const auto it = attribute_index_by_name.find(attribute_name); if (it == std::end(attribute_index_by_name)) throw Exception{ - "No such attribute '" + attribute_name + "'", + name + ": no such attribute '" + attribute_name + "'", ErrorCodes::BAD_ARGUMENTS }; diff --git a/dbms/include/DB/Dictionaries/DictionarySourceFactory.h b/dbms/include/DB/Dictionaries/DictionarySourceFactory.h index b2b73faf24a..26bae7f74e4 100644 --- a/dbms/include/DB/Dictionaries/DictionarySourceFactory.h +++ b/dbms/include/DB/Dictionaries/DictionarySourceFactory.h @@ -39,16 +39,15 @@ Block createSampleBlock(const DictionaryStructure & dict_struct) class DictionarySourceFactory : public Singleton { public: - DictionarySourcePtr create(Poco::Util::AbstractConfiguration & config, - const std::string & config_prefix, - const DictionaryStructure & dict_struct, - Context & context) const + DictionarySourcePtr create( + const std::string & name, Poco::Util::AbstractConfiguration & config, const std::string & config_prefix, + const DictionaryStructure & dict_struct, Context & context) const { Poco::Util::AbstractConfiguration::Keys keys; config.keys(config_prefix, keys); if (keys.size() != 1) throw Exception{ - "Element dictionary.source should have exactly one child element", + name +": element dictionary.source should have exactly one child element", ErrorCodes::EXCESSIVE_ELEMENT_IN_CONFIG }; @@ -73,7 +72,7 @@ public: } throw Exception{ - "Unknown dictionary source type: " + source_type, + name + ": unknown dictionary source type: " + source_type, ErrorCodes::UNKNOWN_ELEMENT_IN_CONFIG }; } diff --git a/dbms/include/DB/Dictionaries/FlatDictionary.h b/dbms/include/DB/Dictionaries/FlatDictionary.h index 0c1c2fb33e5..19aced48322 100644 --- a/dbms/include/DB/Dictionaries/FlatDictionary.h +++ b/dbms/include/DB/Dictionaries/FlatDictionary.h @@ -93,7 +93,7 @@ public: const auto & attribute = getAttribute(attribute_name);\ if (attribute.type != AttributeUnderlyingType::TYPE)\ throw Exception{\ - "Type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type),\ + name + ": type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type),\ ErrorCodes::TYPE_MISMATCH\ };\ \ @@ -115,7 +115,7 @@ public: const auto & attribute = getAttribute(attribute_name); if (attribute.type != AttributeUnderlyingType::String) throw Exception{ - "Type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type), + name + ": type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type), ErrorCodes::TYPE_MISMATCH }; @@ -170,7 +170,7 @@ private: if (hierarchical_attribute->type != AttributeUnderlyingType::UInt64) throw Exception{ - "Hierarchical attribute must be UInt64.", + name + ": hierarchical attribute must be UInt64.", ErrorCodes::TYPE_MISMATCH }; } @@ -201,7 +201,10 @@ private: stream->readSuffix(); if (require_nonempty && 0 == element_count) - throw Exception("Dictionary source is empty and 'require_nonempty' property is set.", ErrorCodes::DICTIONARY_IS_EMPTY); + throw Exception{ + name + ": dictionary source is empty and 'require_nonempty' property is set.", + ErrorCodes::DICTIONARY_IS_EMPTY + }; } template @@ -307,7 +310,7 @@ private: { if (id >= max_array_size) throw Exception{ - "Identifier should be less than " + toString(max_array_size), + name + ": identifier should be less than " + toString(max_array_size), ErrorCodes::ARGUMENT_OUT_OF_BOUND }; @@ -341,7 +344,7 @@ private: const auto it = attribute_index_by_name.find(attribute_name); if (it == std::end(attribute_index_by_name)) throw Exception{ - "No such attribute '" + attribute_name + "'", + name + ": no such attribute '" + attribute_name + "'", ErrorCodes::BAD_ARGUMENTS }; diff --git a/dbms/include/DB/Dictionaries/HashedDictionary.h b/dbms/include/DB/Dictionaries/HashedDictionary.h index a73f8869f81..32d4c0b4777 100644 --- a/dbms/include/DB/Dictionaries/HashedDictionary.h +++ b/dbms/include/DB/Dictionaries/HashedDictionary.h @@ -91,7 +91,7 @@ public: const auto & attribute = getAttribute(attribute_name);\ if (attribute.type != AttributeUnderlyingType::TYPE)\ throw Exception{\ - "Type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type),\ + name + ": type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type),\ ErrorCodes::TYPE_MISMATCH\ };\ \ @@ -113,7 +113,7 @@ public: const auto & attribute = getAttribute(attribute_name); if (attribute.type != AttributeUnderlyingType::String) throw Exception{ - "Type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type), + name + ": type mismatch: attribute " + attribute_name + " has type " + toString(attribute.type), ErrorCodes::TYPE_MISMATCH }; @@ -168,7 +168,7 @@ private: if (hierarchical_attribute->type != AttributeUnderlyingType::UInt64) throw Exception{ - "Hierarchical attribute must be UInt64.", + name + ": hierarchical attribute must be UInt64.", ErrorCodes::TYPE_MISMATCH }; } @@ -199,7 +199,10 @@ private: stream->readSuffix(); if (require_nonempty && 0 == element_count) - throw Exception("Dictionary source is empty and 'require_nonempty' property is set.", ErrorCodes::DICTIONARY_IS_EMPTY); + throw Exception{ + name + ": dictionary source is empty and 'require_nonempty' property is set.", + ErrorCodes::DICTIONARY_IS_EMPTY + }; } template @@ -327,7 +330,7 @@ private: const auto it = attribute_index_by_name.find(attribute_name); if (it == std::end(attribute_index_by_name)) throw Exception{ - "No such attribute '" + attribute_name + "'", + name + ": no such attribute '" + attribute_name + "'", ErrorCodes::BAD_ARGUMENTS }; diff --git a/dbms/include/DB/Dictionaries/RangeHashedDictionary.h b/dbms/include/DB/Dictionaries/RangeHashedDictionary.h index 888173b8940..a102760bb0c 100644 --- a/dbms/include/DB/Dictionaries/RangeHashedDictionary.h +++ b/dbms/include/DB/Dictionaries/RangeHashedDictionary.h @@ -187,7 +187,7 @@ private: if (attribute.hierarchical) throw Exception{ - "Hierarchical attributes not supported by " + getName() + " dictionary.", + name + ": hierarchical attributes not supported by " + getName() + " dictionary.", ErrorCodes::BAD_ARGUMENTS }; } @@ -221,7 +221,10 @@ private: stream->readSuffix(); if (require_nonempty && 0 == element_count) - throw Exception("Dictionary source is empty and 'require_nonempty' property is set.", ErrorCodes::DICTIONARY_IS_EMPTY); + throw Exception{ + name + ": dictionary source is empty and 'require_nonempty' property is set.", + ErrorCodes::DICTIONARY_IS_EMPTY + }; } template @@ -391,7 +394,7 @@ private: const auto it = attribute_index_by_name.find(attribute_name); if (it == std::end(attribute_index_by_name)) throw Exception{ - "No such attribute '" + attribute_name + "'", + name + ": no such attribute '" + attribute_name + "'", ErrorCodes::BAD_ARGUMENTS }; @@ -403,7 +406,7 @@ private: const auto & attribute = getAttribute(name); if (attribute.type != type) throw Exception{ - "Type mismatch: attribute " + name + " has type " + toString(attribute.type), + name + ": type mismatch: attribute " + name + " has type " + toString(attribute.type), ErrorCodes::TYPE_MISMATCH }; diff --git a/dbms/src/Interpreters/DictionaryFactory.cpp b/dbms/src/Interpreters/DictionaryFactory.cpp index 688fe114f20..1346b800f0a 100644 --- a/dbms/src/Interpreters/DictionaryFactory.cpp +++ b/dbms/src/Interpreters/DictionaryFactory.cpp @@ -20,14 +20,14 @@ DictionaryPtr DictionaryFactory::create(const std::string & name, Poco::Util::Ab config.keys(layout_prefix, keys); if (keys.size() != 1) throw Exception{ - "Element dictionary.layout should have exactly one child element", + name + ": element dictionary.layout should have exactly one child element", ErrorCodes::EXCESSIVE_ELEMENT_IN_CONFIG }; const DictionaryStructure dict_struct{config, config_prefix + ".structure"}; auto source_ptr = DictionarySourceFactory::instance().create( - config, config_prefix + ".source", dict_struct, context); + name, config, config_prefix + ".source", dict_struct, context); const DictionaryLifetime dict_lifetime{config, config_prefix + ".lifetime"}; @@ -39,7 +39,7 @@ DictionaryPtr DictionaryFactory::create(const std::string & name, Poco::Util::Ab { if (dict_struct.range_min.empty() || dict_struct.range_min.empty()) throw Exception{ - "Dictionary of layout 'range_hashed' requires .structure.range_min and .structure.range_max", + name + ": dictionary of layout 'range_hashed' requires .structure.range_min and .structure.range_max", ErrorCodes::BAD_ARGUMENTS }; @@ -49,9 +49,10 @@ DictionaryPtr DictionaryFactory::create(const std::string & name, Poco::Util::Ab { if (!dict_struct.range_min.empty() || !dict_struct.range_min.empty()) throw Exception{ - "Elements .structure.range_min and .structure.range_max should be defined only " + name + ": elements .structure.range_min and .structure.range_max should be defined only " "for a dictionary of layout 'range_hashed'", - ErrorCodes::BAD_ARGUMENTS}; + ErrorCodes::BAD_ARGUMENTS + }; if ("flat" == layout_type) { @@ -66,20 +67,22 @@ DictionaryPtr DictionaryFactory::create(const std::string & name, Poco::Util::Ab const auto size = config.getInt(layout_prefix + ".cache.size_in_cells"); if (size == 0) throw Exception{ - "Dictionary of layout 'cache' cannot have 0 cells", - ErrorCodes::TOO_SMALL_BUFFER_SIZE}; + name + ": dictionary of layout 'cache' cannot have 0 cells", + ErrorCodes::TOO_SMALL_BUFFER_SIZE + }; if (require_nonempty) throw Exception{ - "Dictionary of layout 'cache' cannot have 'require_nonempty' attribute set", - ErrorCodes::BAD_ARGUMENTS}; + name + ": dictionary of layout 'cache' cannot have 'require_nonempty' attribute set", + ErrorCodes::BAD_ARGUMENTS + }; return std::make_unique(name, dict_struct, std::move(source_ptr), dict_lifetime, size); } } throw Exception{ - "Unknown dictionary layout type: " + layout_type, + name + ": unknown dictionary layout type: " + layout_type, ErrorCodes::UNKNOWN_ELEMENT_IN_CONFIG }; }; diff --git a/dbms/src/Storages/StorageSystemDictionaries.cpp b/dbms/src/Storages/StorageSystemDictionaries.cpp index ae50b91e3be..e7c4dbc3661 100644 --- a/dbms/src/Storages/StorageSystemDictionaries.cpp +++ b/dbms/src/Storages/StorageSystemDictionaries.cpp @@ -128,11 +128,12 @@ BlockInputStreams StorageSystemDictionaries::read( } catch (const Exception & e) { - col_last_exception.column->insert("DB::Exception. Code " + toString(e.code()) + ". " + e.message()); + col_last_exception.column->insert("DB::Exception. Code " + toString(e.code()) + ". " + + std::string{e.displayText()}); } catch (const Poco::Exception & e) { - col_last_exception.column->insert("Poco::Exception. " + e.message()); + col_last_exception.column->insert("Poco::Exception. " + std::string{e.displayText()}); } catch (const std::exception & e) {