Skip to content

Commit 15e38c8

Browse files
Merge pull request #10563 from azat/SELECT-ALIAS-CAST
Fix SELECT of column ALIAS which default expression type different from column type
2 parents 6149638 + d2c813f commit 15e38c8

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

src/Interpreters/InterpreterSelectQuery.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#include <Interpreters/InterpreterSetQuery.h>
4545
#include <Interpreters/evaluateConstantExpression.h>
4646
#include <Interpreters/convertFieldToType.h>
47+
#include <Interpreters/addTypeConversionToAST.h>
4748
#include <Interpreters/ExpressionAnalyzer.h>
4849
#include <Interpreters/getTableExpressions.h>
4950
#include <Interpreters/JoinToSubqueryTransformVisitor.h>
@@ -1210,7 +1211,12 @@ void InterpreterSelectQuery::executeFetchColumns(
12101211
const auto column_default = storage_columns.getDefault(column);
12111212
bool is_alias = column_default && column_default->kind == ColumnDefaultKind::Alias;
12121213
if (is_alias)
1213-
column_expr = setAlias(column_default->expression->clone(), column);
1214+
{
1215+
auto column_decl = storage_columns.get(column);
1216+
/// TODO: can make CAST only if the type is different (but requires SyntaxAnalyzer).
1217+
auto cast_column_default = addTypeConversionToAST(column_default->expression->clone(), column_decl.type->getName());
1218+
column_expr = setAlias(cast_column_default->clone(), column);
1219+
}
12141220
else
12151221
column_expr = std::make_shared<ASTIdentifier>(column);
12161222

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
UInt8
2+
0
3+
UInt8
4+
0
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
DROP TABLE IF EXISTS data_01269;
2+
CREATE TABLE data_01269
3+
(
4+
key Int32,
5+
value Nullable(Int32),
6+
alias UInt8 ALIAS value>0
7+
)
8+
ENGINE = MergeTree()
9+
ORDER BY key;
10+
INSERT INTO data_01269 VALUES (1, 0);
11+
12+
-- after PR#10441
13+
SELECT toTypeName(alias) FROM data_01269;
14+
SELECT any(alias) FROM data_01269;
15+
16+
-- even without PR#10441
17+
ALTER TABLE data_01269 DROP COLUMN alias;
18+
ALTER TABLE data_01269 ADD COLUMN alias UInt8 ALIAS value>0;
19+
SELECT toTypeName(alias) FROM data_01269;
20+
SELECT any(alias) FROM data_01269;
21+
22+
DROP TABLE data_01269;

0 commit comments

Comments
 (0)