mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-23 10:10:50 +00:00
Merge
This commit is contained in:
commit
dbcb5a1813
@ -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<const ColumnVector<UInt64> *>(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
|
||||
};
|
||||
|
||||
|
@ -39,16 +39,15 @@ Block createSampleBlock(const DictionaryStructure & dict_struct)
|
||||
class DictionarySourceFactory : public Singleton<DictionarySourceFactory>
|
||||
{
|
||||
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
|
||||
};
|
||||
}
|
||||
|
@ -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 <typename T>
|
||||
@ -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
|
||||
};
|
||||
|
||||
|
@ -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 <typename T>
|
||||
@ -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
|
||||
};
|
||||
|
||||
|
@ -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 <typename T>
|
||||
@ -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
|
||||
};
|
||||
|
||||
|
@ -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<CacheDictionary>(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
|
||||
};
|
||||
};
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user