Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
ee98e77a
提交
ee98e77a
authored
15 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
The MERGE statement is now about 30% faster when using a PreparedStatement.
上级
dcbd0115
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
27 行增加
和
26 行删除
+27
-26
changelog.html
h2/src/docsrc/html/changelog.html
+2
-1
Merge.java
h2/src/main/org/h2/command/dml/Merge.java
+21
-21
test-1.2.txt
h2/src/test/org/h2/test/test-1.2.txt
+4
-4
没有找到文件。
h2/src/docsrc/html/changelog.html
浏览文件 @
ee98e77a
...
...
@@ -18,7 +18,8 @@ Change Log
<h1>
Change Log
</h1>
<h2>
Next Version (unreleased)
</h2>
<ul><li>
Multi-column indexes where the second or later column was descending did not always
<ul><li>
The MERGE statement is now about 30% faster when using a PreparedStatement.
</li><li>
Multi-column indexes where the second or later column was descending did not always
produce correct results (rows were missing in the result set, or the result set was empty).
</li><li>
When using large transactions or a small log size, the database could get very slow
(profiling shows the hotspot is in FileObjectDisk.sync()).
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/command/dml/Merge.java
浏览文件 @
ee98e77a
...
...
@@ -80,27 +80,6 @@ public class Merge extends Prepared {
int
count
;
session
.
getUser
().
checkRight
(
table
,
Right
.
INSERT
);
session
.
getUser
().
checkRight
(
table
,
Right
.
UPDATE
);
if
(
keys
==
null
)
{
Index
idx
=
table
.
getPrimaryKey
();
if
(
idx
==
null
)
{
throw
DbException
.
get
(
ErrorCode
.
CONSTRAINT_NOT_FOUND_1
,
"PRIMARY KEY"
);
}
keys
=
idx
.
getColumns
();
}
StatementBuilder
buff
=
new
StatementBuilder
(
"UPDATE "
);
buff
.
append
(
table
.
getSQL
()).
append
(
" SET "
);
for
(
Column
c
:
columns
)
{
buff
.
appendExceptFirst
(
", "
);
buff
.
append
(
c
.
getSQL
()).
append
(
"=?"
);
}
buff
.
append
(
" WHERE "
);
buff
.
resetCount
();
for
(
Column
c
:
keys
)
{
buff
.
appendExceptFirst
(
" AND "
);
buff
.
append
(
c
.
getSQL
()).
append
(
"=?"
);
}
String
sql
=
buff
.
toString
();
update
=
session
.
prepare
(
sql
);
setCurrentRowNumber
(
0
);
session
.
setLastIdentity
(
ValueLong
.
get
(
0
));
if
(
list
.
size
()
>
0
)
{
...
...
@@ -263,6 +242,27 @@ public class Merge extends Prepared {
throw
DbException
.
get
(
ErrorCode
.
COLUMN_COUNT_DOES_NOT_MATCH
);
}
}
if
(
keys
==
null
)
{
Index
idx
=
table
.
getPrimaryKey
();
if
(
idx
==
null
)
{
throw
DbException
.
get
(
ErrorCode
.
CONSTRAINT_NOT_FOUND_1
,
"PRIMARY KEY"
);
}
keys
=
idx
.
getColumns
();
}
StatementBuilder
buff
=
new
StatementBuilder
(
"UPDATE "
);
buff
.
append
(
table
.
getSQL
()).
append
(
" SET "
);
for
(
Column
c
:
columns
)
{
buff
.
appendExceptFirst
(
", "
);
buff
.
append
(
c
.
getSQL
()).
append
(
"=?"
);
}
buff
.
append
(
" WHERE "
);
buff
.
resetCount
();
for
(
Column
c
:
keys
)
{
buff
.
appendExceptFirst
(
" AND "
);
buff
.
append
(
c
.
getSQL
()).
append
(
"=?"
);
}
String
sql
=
buff
.
toString
();
update
=
session
.
prepare
(
sql
);
}
public
boolean
isTransactional
()
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/test-1.2.txt
浏览文件 @
ee98e77a
...
...
@@ -4322,8 +4322,8 @@ EXPLAIN SELECT * FROM TEST WHERE ID=1;
EXPLAIN MERGE INTO TEST VALUES(1, 'Hello');
> PLAN
> ----------------------------------------------------
> MERGE INTO PUBLIC.TEST(ID, NAME) VALUES (1, 'Hello')
> ----------------------------------------------------
--------
> MERGE INTO PUBLIC.TEST(ID, NAME)
KEY(ID)
VALUES (1, 'Hello')
> rows: 1
MERGE INTO TEST VALUES(1, 'Hello');
...
...
@@ -4343,8 +4343,8 @@ MERGE INTO TEST(ID, NAME) VALUES(3, 'How are you');
EXPLAIN MERGE INTO TEST(ID, NAME) VALUES(3, 'How are you');
> PLAN
> ----------------------------------------------------------
> MERGE INTO PUBLIC.TEST(ID, NAME) VALUES (3, 'How are you')
> ----------------------------------------------------------
--------
> MERGE INTO PUBLIC.TEST(ID, NAME)
KEY(ID)
VALUES (3, 'How are you')
> rows: 1
MERGE INTO TEST(ID, NAME) KEY(ID) VALUES(3, 'How do you do');
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论