Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
55869c8f
提交
55869c8f
authored
7 年前
作者:
XEHA6284
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add support for INSERT IGNORE from SELECT in MySQL Mode
上级
9f7ef4b1
master
version-1.4.198
无相关合并请求
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
585 行增加
和
561 行删除
+585
-561
Insert.java
h2/src/main/org/h2/command/dml/Insert.java
+487
-483
insertIgnore.sql
h2/src/test/org/h2/test/scripts/dml/insertIgnore.sql
+98
-78
没有找到文件。
h2/src/main/org/h2/command/dml/Insert.java
浏览文件 @
55869c8f
...
...
@@ -205,10 +205,16 @@ public class Insert extends Prepared implements ResultTarget {
query
.
query
(
0
,
this
);
}
else
{
ResultInterface
rows
=
query
.
query
(
0
);
int
updatedRows
=
0
;
while
(
rows
.
next
())
{
generatedKeys
.
nextRow
();
Value
[]
r
=
rows
.
currentRow
();
try
{
Expression
[]
exp
=
new
Expression
[
columns
.
length
];
for
(
int
j
=
0
,
len
=
columns
.
length
;
j
<
len
;
j
++)
{
exp
[
j
]
=
ValueExpression
.
get
(
r
[
j
]);
}
addRow
(
exp
);
Row
newRow
=
addRowImpl
(
r
);
if
(
newRow
!=
null
)
{
generatedKeys
.
confirmRow
(
newRow
);
...
...
@@ -217,7 +223,7 @@ public class Insert extends Prepared implements ResultTarget {
if
(
handleOnDuplicate
(
de
))
{
// MySQL returns 2 for updated row
// TODO: detect no-op change
rowNumber
++;
updatedRows
++;
}
else
{
// INSERT IGNORE case
rowNumber
--;
...
...
@@ -225,6 +231,7 @@ public class Insert extends Prepared implements ResultTarget {
}
}
rows
.
close
();
rowNumber
+=
updatedRows
;
}
}
table
.
fire
(
session
,
Trigger
.
INSERT
,
false
);
...
...
@@ -239,14 +246,12 @@ public class Insert extends Prepared implements ResultTarget {
private
Row
addRowImpl
(
Value
[]
values
)
{
Row
newRow
=
table
.
getTemplateRow
();
setCurrentRowNumber
(++
rowNumber
);
Expression
[]
exp
=
new
Expression
[
columns
.
length
];
for
(
int
j
=
0
,
len
=
columns
.
length
;
j
<
len
;
j
++)
{
Column
c
=
columns
[
j
];
int
index
=
c
.
getColumnId
();
try
{
Value
v
=
c
.
convert
(
values
[
j
],
session
.
getDatabase
().
getMode
());
newRow
.
setValue
(
index
,
v
);
exp
[
j
]
=
ValueExpression
.
get
(
v
);
}
catch
(
DbException
ex
)
{
throw
setRow
(
ex
,
rowNumber
,
getSQL
(
values
));
}
...
...
@@ -254,7 +259,6 @@ public class Insert extends Prepared implements ResultTarget {
table
.
validateConvertUpdateSequence
(
session
,
newRow
);
boolean
done
=
table
.
fireBeforeRow
(
session
,
null
,
newRow
);
if
(!
done
)
{
addRow
(
exp
);
table
.
addRow
(
session
,
newRow
);
session
.
log
(
table
,
UndoLogRecord
.
INSERT
,
newRow
);
table
.
fireAfterRow
(
session
,
null
,
newRow
,
false
);
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/scripts/dml/insertIgnore.sql
浏览文件 @
55869c8f
...
...
@@ -76,3 +76,23 @@ SELECT * FROM TEST ORDER BY ID;
>
6
61
>
7
71
>
rows
(
ordered
):
7
INSERT
INTO
TESTREF
VALUES
(
8
,
81
),
(
9
,
91
);
>
update
count
:
2
INSERT
INTO
TEST
(
ID
,
VALUE
)
SELECT
ID
,
VALUE
FROM
TESTREF
ON
DUPLICATE
KEY
UPDATE
VALUE
=
83
;
>
update
count
:
10
SELECT
*
FROM
TEST
ORDER
BY
ID
;
>
ID
VALUE
>
-- -----
>
1
83
>
2
83
>
3
30
>
4
40
>
5
52
>
6
83
>
7
83
>
8
81
>
9
91
>
rows
(
ordered
):
9
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论