mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-25 11:10:49 +00:00
Fixing defaults
This commit is contained in:
parent
4620954d24
commit
1aac3a5c9d
@ -315,15 +315,7 @@ ColumnsDescription InterpreterCreateQuery::getColumnsDescription(const ASTExpres
|
|||||||
Block defaults_sample_block;
|
Block defaults_sample_block;
|
||||||
/// set missing types and wrap default_expression's in a conversion-function if necessary
|
/// set missing types and wrap default_expression's in a conversion-function if necessary
|
||||||
if (!default_expr_list->children.empty())
|
if (!default_expr_list->children.empty())
|
||||||
{
|
defaults_sample_block = validateColumnsDefaultsAndGetSampleBlock(default_expr_list, column_names_and_types, context);
|
||||||
auto syntax_analyzer_result = SyntaxAnalyzer(context).analyze(default_expr_list, column_names_and_types);
|
|
||||||
const auto actions = ExpressionAnalyzer(default_expr_list, syntax_analyzer_result, context).getActions(true);
|
|
||||||
for (auto & action : actions->getActions())
|
|
||||||
if (action.type == ExpressionAction::Type::JOIN || action.type == ExpressionAction::Type::ARRAY_JOIN)
|
|
||||||
throw Exception("Cannot CREATE table. Unsupported default value that requires ARRAY JOIN or JOIN action", ErrorCodes::THERE_IS_NO_DEFAULT_VALUE);
|
|
||||||
|
|
||||||
defaults_sample_block = actions->getSampleBlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnsDescription res;
|
ColumnsDescription res;
|
||||||
auto name_type_it = column_names_and_types.begin();
|
auto name_type_it = column_names_and_types.begin();
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
#include <Parsers/ParserCreateQuery.h>
|
#include <Parsers/ParserCreateQuery.h>
|
||||||
#include <Parsers/parseQuery.h>
|
#include <Parsers/parseQuery.h>
|
||||||
#include <Parsers/queryToString.h>
|
#include <Parsers/queryToString.h>
|
||||||
|
#include <Parsers/ASTSubquery.h>
|
||||||
|
#include <Parsers/ASTSelectQuery.h>
|
||||||
#include <IO/WriteBuffer.h>
|
#include <IO/WriteBuffer.h>
|
||||||
#include <IO/WriteHelpers.h>
|
#include <IO/WriteHelpers.h>
|
||||||
#include <IO/ReadBuffer.h>
|
#include <IO/ReadBuffer.h>
|
||||||
@ -20,7 +22,9 @@
|
|||||||
#include <Storages/IStorage.h>
|
#include <Storages/IStorage.h>
|
||||||
#include <Common/typeid_cast.h>
|
#include <Common/typeid_cast.h>
|
||||||
#include <Compression/CompressionFactory.h>
|
#include <Compression/CompressionFactory.h>
|
||||||
|
#include <Interpreters/ExpressionAnalyzer.h>
|
||||||
|
#include <Interpreters/SyntaxAnalyzer.h>
|
||||||
|
#include <Interpreters/ExpressionActions.h>
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
@ -30,6 +34,7 @@ namespace ErrorCodes
|
|||||||
extern const int NO_SUCH_COLUMN_IN_TABLE;
|
extern const int NO_SUCH_COLUMN_IN_TABLE;
|
||||||
extern const int ILLEGAL_COLUMN;
|
extern const int ILLEGAL_COLUMN;
|
||||||
extern const int CANNOT_PARSE_TEXT;
|
extern const int CANNOT_PARSE_TEXT;
|
||||||
|
extern const int THERE_IS_NO_DEFAULT_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ColumnDescription::ColumnDescription(String name_, DataTypePtr type_, bool is_virtual_)
|
ColumnDescription::ColumnDescription(String name_, DataTypePtr type_, bool is_virtual_)
|
||||||
@ -421,4 +426,21 @@ ColumnsDescription ColumnsDescription::parse(const String & str)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Block validateColumnsDefaultsAndGetSampleBlock(ASTPtr default_expr_list, const NamesAndTypesList & all_columns, const Context & context)
|
||||||
|
{
|
||||||
|
for (const auto & child : default_expr_list->children)
|
||||||
|
if (child->as<ASTSelectQuery>() || child->as<ASTSubquery>())
|
||||||
|
throw Exception("Select query is not allowed in columns DEFAULT expression", ErrorCodes::THERE_IS_NO_DEFAULT_VALUE);
|
||||||
|
|
||||||
|
auto syntax_analyzer_result = SyntaxAnalyzer(context).analyze(default_expr_list, all_columns);
|
||||||
|
const auto actions = ExpressionAnalyzer(default_expr_list, syntax_analyzer_result, context).getActions(true);
|
||||||
|
for (auto & action : actions->getActions())
|
||||||
|
if (action.type == ExpressionAction::Type::JOIN || action.type == ExpressionAction::Type::ARRAY_JOIN)
|
||||||
|
throw Exception(
|
||||||
|
"Unsupported default value that requires ARRAY JOIN or JOIN action",
|
||||||
|
ErrorCodes::THERE_IS_NO_DEFAULT_VALUE);
|
||||||
|
|
||||||
|
return actions->getSampleBlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,4 +114,5 @@ private:
|
|||||||
Container columns;
|
Container columns;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Block validateColumnsDefaultsAndGetSampleBlock(ASTPtr default_expr_list, const NamesAndTypesList & all_columns, const Context & context);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user