Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
c91c8608
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
c91c8608
编写于
7月 22, 2020
作者:
A
alexey-milovidov
提交者:
GitHub
7月 22, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #12633 from ClickHouse/alter-update-cast
Fix "There is no supertype" error on ALTER UPDATE #7306
上级
4417a79b
fe5fb271
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
51 addition
and
4 deletion
+51
-4
src/Interpreters/MutationsInterpreter.cpp
src/Interpreters/MutationsInterpreter.cpp
+17
-4
tests/queries/0_stateless/01413_alter_update_supertype.reference
...ueries/0_stateless/01413_alter_update_supertype.reference
+21
-0
tests/queries/0_stateless/01413_alter_update_supertype.sql
tests/queries/0_stateless/01413_alter_update_supertype.sql
+13
-0
未找到文件。
src/Interpreters/MutationsInterpreter.cpp
浏览文件 @
c91c8608
...
@@ -367,15 +367,28 @@ ASTPtr MutationsInterpreter::prepare(bool dry_run)
...
@@ -367,15 +367,28 @@ ASTPtr MutationsInterpreter::prepare(bool dry_run)
affected_materialized
.
emplace
(
mat_column
);
affected_materialized
.
emplace
(
mat_column
);
}
}
/// Just to be sure, that we don't change type
/// When doing UPDATE column = expression WHERE condition
/// after update expression execution.
/// we will replace column to the result of the following expression:
///
/// CAST(if(condition, CAST(expression, type), column), type)
///
/// Inner CAST is needed to make 'if' work when branches have no common type,
/// example: type is UInt64, UPDATE x = -1 or UPDATE x = x - 1.
///
/// Outer CAST is added just in case if we don't trust the returning type of 'if'.
auto
type_literal
=
std
::
make_shared
<
ASTLiteral
>
(
columns_desc
.
getPhysical
(
column
).
type
->
getName
());
const
auto
&
update_expr
=
kv
.
second
;
const
auto
&
update_expr
=
kv
.
second
;
auto
updated_column
=
makeASTFunction
(
"CAST"
,
auto
updated_column
=
makeASTFunction
(
"CAST"
,
makeASTFunction
(
"if"
,
makeASTFunction
(
"if"
,
command
.
predicate
->
clone
(),
command
.
predicate
->
clone
(),
makeASTFunction
(
"CAST"
,
update_expr
->
clone
(),
update_expr
->
clone
(),
type_literal
),
std
::
make_shared
<
ASTIdentifier
>
(
column
)),
std
::
make_shared
<
ASTIdentifier
>
(
column
)),
std
::
make_shared
<
ASTLiteral
>
(
columns_desc
.
getPhysical
(
column
).
type
->
getName
()));
type_literal
);
stages
.
back
().
column_to_updated
.
emplace
(
column
,
updated_column
);
stages
.
back
().
column_to_updated
.
emplace
(
column
,
updated_column
);
}
}
...
...
tests/queries/0_stateless/01413_alter_update_supertype.reference
0 → 100644
浏览文件 @
c91c8608
0
1
2
3
4
5
6
7
8
9
---
0
0
2
2
4
4
6
6
8
8
tests/queries/0_stateless/01413_alter_update_supertype.sql
0 → 100644
浏览文件 @
c91c8608
DROP
TABLE
IF
EXISTS
t
;
CREATE
TABLE
t
(
x
UInt64
)
ENGINE
=
MergeTree
ORDER
BY
tuple
();
INSERT
INTO
t
SELECT
number
FROM
numbers
(
10
);
SELECT
*
FROM
t
;
SET
mutations_sync
=
1
;
ALTER
TABLE
t
UPDATE
x
=
x
-
1
WHERE
x
%
2
=
1
;
SELECT
'---'
;
SELECT
*
FROM
t
;
DROP
TABLE
t
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录