mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Merge pull request #10563 from azat/SELECT-ALIAS-CAST
Fix SELECT of column ALIAS which default expression type different from column type
This commit is contained in:
commit
15e38c8b44
@ -44,6 +44,7 @@
|
||||
#include <Interpreters/InterpreterSetQuery.h>
|
||||
#include <Interpreters/evaluateConstantExpression.h>
|
||||
#include <Interpreters/convertFieldToType.h>
|
||||
#include <Interpreters/addTypeConversionToAST.h>
|
||||
#include <Interpreters/ExpressionAnalyzer.h>
|
||||
#include <Interpreters/getTableExpressions.h>
|
||||
#include <Interpreters/JoinToSubqueryTransformVisitor.h>
|
||||
@ -1210,7 +1211,12 @@ void InterpreterSelectQuery::executeFetchColumns(
|
||||
const auto column_default = storage_columns.getDefault(column);
|
||||
bool is_alias = column_default && column_default->kind == ColumnDefaultKind::Alias;
|
||||
if (is_alias)
|
||||
column_expr = setAlias(column_default->expression->clone(), column);
|
||||
{
|
||||
auto column_decl = storage_columns.get(column);
|
||||
/// TODO: can make CAST only if the type is different (but requires SyntaxAnalyzer).
|
||||
auto cast_column_default = addTypeConversionToAST(column_default->expression->clone(), column_decl.type->getName());
|
||||
column_expr = setAlias(cast_column_default->clone(), column);
|
||||
}
|
||||
else
|
||||
column_expr = std::make_shared<ASTIdentifier>(column);
|
||||
|
||||
|
@ -0,0 +1,4 @@
|
||||
UInt8
|
||||
0
|
||||
UInt8
|
||||
0
|
22
tests/queries/0_stateless/01269_alias_type_differs.sql
Normal file
22
tests/queries/0_stateless/01269_alias_type_differs.sql
Normal file
@ -0,0 +1,22 @@
|
||||
DROP TABLE IF EXISTS data_01269;
|
||||
CREATE TABLE data_01269
|
||||
(
|
||||
key Int32,
|
||||
value Nullable(Int32),
|
||||
alias UInt8 ALIAS value>0
|
||||
)
|
||||
ENGINE = MergeTree()
|
||||
ORDER BY key;
|
||||
INSERT INTO data_01269 VALUES (1, 0);
|
||||
|
||||
-- after PR#10441
|
||||
SELECT toTypeName(alias) FROM data_01269;
|
||||
SELECT any(alias) FROM data_01269;
|
||||
|
||||
-- even without PR#10441
|
||||
ALTER TABLE data_01269 DROP COLUMN alias;
|
||||
ALTER TABLE data_01269 ADD COLUMN alias UInt8 ALIAS value>0;
|
||||
SELECT toTypeName(alias) FROM data_01269;
|
||||
SELECT any(alias) FROM data_01269;
|
||||
|
||||
DROP TABLE data_01269;
|
Loading…
Reference in New Issue
Block a user