Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
03e45626
Unverified
提交
03e45626
authored
7 年前
作者:
Noel Grandin
提交者:
GitHub
7 年前
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #899 from katzyn/on_duplicate_key_update
Fix ON DUPLICATE KEY UPDATE for inserts with multiple rows
上级
5d27e1e6
61aab109
master
version-1.4.198
version-1.4.197
无相关合并请求
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
11 行增加
和
9 行删除
+11
-9
Insert.java
h2/src/main/org/h2/command/dml/Insert.java
+7
-7
TestDuplicateKeyUpdate.java
h2/src/test/org/h2/test/db/TestDuplicateKeyUpdate.java
+4
-2
没有找到文件。
h2/src/main/org/h2/command/dml/Insert.java
浏览文件 @
03e45626
...
@@ -375,12 +375,13 @@ public class Insert extends Prepared implements ResultTarget {
...
@@ -375,12 +375,13 @@ public class Insert extends Prepared implements ResultTarget {
ArrayList
<
String
>
variableNames
=
new
ArrayList
<>(
ArrayList
<
String
>
variableNames
=
new
ArrayList
<>(
duplicateKeyAssignmentMap
.
size
());
duplicateKeyAssignmentMap
.
size
());
Expression
[]
row
=
list
.
get
(
getCurrentRowNumber
()
-
1
);
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
String
key
=
table
.
getSchema
().
getName
()
+
"."
+
String
key
=
table
.
getSchema
().
getName
()
+
"."
+
table
.
getName
()
+
"."
+
columns
[
i
].
getName
();
table
.
getName
()
+
"."
+
columns
[
i
].
getName
();
variableNames
.
add
(
key
);
variableNames
.
add
(
key
);
session
.
setVariable
(
key
,
session
.
setVariable
(
key
,
list
.
get
(
getCurrentRowNumber
()
-
1
)
[
i
].
getValue
(
session
));
row
[
i
].
getValue
(
session
));
}
}
StatementBuilder
buff
=
new
StatementBuilder
(
"UPDATE "
);
StatementBuilder
buff
=
new
StatementBuilder
(
"UPDATE "
);
...
@@ -425,6 +426,7 @@ public class Insert extends Prepared implements ResultTarget {
...
@@ -425,6 +426,7 @@ public class Insert extends Prepared implements ResultTarget {
indexedColumns
=
foundIndex
.
getColumns
();
indexedColumns
=
foundIndex
.
getColumns
();
}
}
Expression
[]
row
=
list
.
get
(
getCurrentRowNumber
()
-
1
);
Expression
condition
=
null
;
Expression
condition
=
null
;
for
(
Column
column
:
indexedColumns
)
{
for
(
Column
column
:
indexedColumns
)
{
ExpressionColumn
expr
=
new
ExpressionColumn
(
session
.
getDatabase
(),
ExpressionColumn
expr
=
new
ExpressionColumn
(
session
.
getDatabase
(),
...
@@ -433,14 +435,12 @@ public class Insert extends Prepared implements ResultTarget {
...
@@ -433,14 +435,12 @@ public class Insert extends Prepared implements ResultTarget {
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
columns
.
length
;
i
++)
{
if
(
expr
.
getColumnName
().
equals
(
columns
[
i
].
getName
()))
{
if
(
expr
.
getColumnName
().
equals
(
columns
[
i
].
getName
()))
{
if
(
condition
==
null
)
{
if
(
condition
==
null
)
{
condition
=
new
Comparison
(
session
,
Comparison
.
EQUAL
,
condition
=
new
Comparison
(
session
,
Comparison
.
EQUAL
,
expr
,
row
[
i
]);
expr
,
list
.
get
(
getCurrentRowNumber
()
-
1
)[
i
++]);
}
else
{
}
else
{
condition
=
new
ConditionAndOr
(
ConditionAndOr
.
AND
,
condition
=
new
ConditionAndOr
(
ConditionAndOr
.
AND
,
condition
,
condition
,
new
Comparison
(
session
,
Comparison
.
EQUAL
,
expr
,
row
[
i
]));
new
Comparison
(
session
,
Comparison
.
EQUAL
,
expr
,
list
.
get
(
0
)[
i
++]));
}
}
break
;
}
}
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/db/TestDuplicateKeyUpdate.java
浏览文件 @
03e45626
...
@@ -109,12 +109,14 @@ public class TestDuplicateKeyUpdate extends TestBase {
...
@@ -109,12 +109,14 @@ public class TestDuplicateKeyUpdate extends TestBase {
assertEquals
(
"UPDATE"
,
rs
.
getNString
(
1
));
assertEquals
(
"UPDATE"
,
rs
.
getNString
(
1
));
stat
.
execute
(
"INSERT INTO table_test2 (a_text, some_text, updatable_text ) "
+
stat
.
execute
(
"INSERT INTO table_test2 (a_text, some_text, updatable_text ) "
+
"VALUES ('b', 'b', 'test') "
+
"VALUES ('b', 'b', 'test')
, ('c', 'c', 'test2')
"
+
"ON DUPLICATE KEY UPDATE updatable_text=values(updatable_text)"
);
"ON DUPLICATE KEY UPDATE updatable_text=values(updatable_text)"
);
rs
=
stat
.
executeQuery
(
"SELECT updatable_text "
+
rs
=
stat
.
executeQuery
(
"SELECT updatable_text "
+
"FROM table_test2 where a_text
= 'b'
"
);
"FROM table_test2 where a_text
in ('b', 'c') order by a_text
"
);
rs
.
next
();
rs
.
next
();
assertEquals
(
"test"
,
rs
.
getNString
(
1
));
assertEquals
(
"test"
,
rs
.
getNString
(
1
));
rs
.
next
();
assertEquals
(
"test2"
,
rs
.
getNString
(
1
));
}
}
private
void
testDuplicateCache
(
Connection
conn
)
throws
SQLException
{
private
void
testDuplicateCache
(
Connection
conn
)
throws
SQLException
{
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论