clickhouse: fixed [#6201].

This commit is contained in:
Michael Kolupaev 2012-12-12 15:45:08 +00:00
parent 3f2da2d2e3
commit 81883201ec
3 changed files with 11 additions and 11 deletions

View File

@ -110,7 +110,7 @@ public:
Context & context_,
ASTPtr & primary_expr_ast_,
const String & date_column_name_,
const String & sampling_column_name_, /// "", если семплирование не поддерживается.
const ASTPtr & sampling_expression_, /// NULL, если семплирование не поддерживается.
size_t index_granularity_,
const String & sign_column_ = "",
const StorageMergeTreeSettings & settings_ = StorageMergeTreeSettings());
@ -119,7 +119,7 @@ public:
std::string getName() const { return "MergeTree"; }
std::string getTableName() const { return name; }
bool supportsSampling() const { return sampling_column_name != ""; }
bool supportsSampling() const { return !!sampling_expression; }
const NamesAndTypesList & getColumnsList() const { return *columns; }
@ -158,7 +158,7 @@ private:
Context context;
ASTPtr primary_expr_ast;
String date_column_name;
String sampling_column_name; /// "", если семплирование не поддерживается.
ASTPtr sampling_expression;
size_t index_granularity;
size_t min_marks_for_seek;

View File

@ -181,7 +181,7 @@ StoragePtr StorageFactory::get(
size_t arg_offset = args.size() - 3;
String date_column_name = dynamic_cast<ASTIdentifier &>(*args[0]).name;
String sampling_column_name = arg_offset == 0 ? "" : args[1]->getColumnName();
ASTPtr sampling_expression = arg_offset == 0 ? NULL : args[1];
UInt64 index_granularity = boost::get<UInt64>(dynamic_cast<ASTLiteral &>(*args[arg_offset + 2]).value);
ASTFunction & primary_expr_func = dynamic_cast<ASTFunction &>(*args[arg_offset + 1]);
@ -191,7 +191,7 @@ StoragePtr StorageFactory::get(
ASTPtr primary_expr = primary_expr_func.children.at(0);
return new StorageMergeTree(data_path, table_name, columns, context, primary_expr, date_column_name, sampling_column_name, index_granularity);
return new StorageMergeTree(data_path, table_name, columns, context, primary_expr, date_column_name, sampling_expression, index_granularity);
}
else if (name == "CollapsingMergeTree")
{
@ -220,7 +220,7 @@ StoragePtr StorageFactory::get(
size_t arg_offset = args.size() - 4;
String date_column_name = dynamic_cast<ASTIdentifier &>(*args[0]).name;
String sampling_column_name = arg_offset == 0 ? "" : args[1]->getColumnName();
ASTPtr sampling_expression = arg_offset == 0 ? NULL : args[1];
UInt64 index_granularity = boost::get<UInt64>(dynamic_cast<ASTLiteral &>(*args[arg_offset + 2]).value);
String sign_column_name = dynamic_cast<ASTIdentifier &>(*args[arg_offset + 3]).name;
ASTFunction & primary_expr_func = dynamic_cast<ASTFunction &>(*args[arg_offset + 1]);
@ -231,7 +231,7 @@ StoragePtr StorageFactory::get(
ASTPtr primary_expr = primary_expr_func.children.at(0);
return new StorageMergeTree(data_path, table_name, columns, context, primary_expr, date_column_name, sampling_column_name, index_granularity, sign_column_name);
return new StorageMergeTree(data_path, table_name, columns, context, primary_expr, date_column_name, sampling_expression, index_granularity, sign_column_name);
}
else if (name == "SystemNumbers")
{

View File

@ -763,13 +763,13 @@ StorageMergeTree::StorageMergeTree(
const String & path_, const String & name_, NamesAndTypesListPtr columns_,
Context & context_,
ASTPtr & primary_expr_ast_,
const String & date_column_name_, const String & sampling_column_name_,
const String & date_column_name_, const ASTPtr & sampling_expression_,
size_t index_granularity_,
const String & sign_column_,
const StorageMergeTreeSettings & settings_)
: path(path_), name(name_), full_path(path + escapeForFileName(name) + '/'), columns(columns_),
context(context_), primary_expr_ast(primary_expr_ast_->clone()),
date_column_name(date_column_name_), sampling_column_name(sampling_column_name_),
date_column_name(date_column_name_), sampling_expression(sampling_expression_),
index_granularity(index_granularity_),
sign_column(sign_column_),
settings(settings_),
@ -841,7 +841,7 @@ BlockInputStreams StorageMergeTree::read(
{
sample_by_value = true;
sample_column_value_limit = static_cast<UInt64>(size * std::numeric_limits<UInt32>::max());
if (!key_condition.addCondition(sampling_column_name,
if (!key_condition.addCondition(sampling_expression->getColumnName(),
Range::RightBounded(sample_column_value_limit, true)))
throw Exception("Invalid sampling column in storage parameters", ErrorCodes::ILLEGAL_COLUMN);
}
@ -911,7 +911,7 @@ BlockInputStreams StorageMergeTree::read(
/// Добавим фильтрацию: sampling_column_name <= sample_column_value_limit
ASTPtr filter_function_args = new ASTExpressionList;
filter_function_args->children.push_back(new ASTIdentifier(StringRange(), sampling_column_name));
filter_function_args->children.push_back(sampling_expression);
filter_function_args->children.push_back(new ASTLiteral(StringRange(), sample_column_value_limit));
Poco::SharedPtr<ASTFunction> filter_function = new ASTFunction;