Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
0cdcb78c
提交
0cdcb78c
authored
13 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Issue 350: when using instead of triggers, executeUpdate for delete operations always returned 0.
上级
cf0fe420
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
16 行增加
和
9 行删除
+16
-9
Delete.java
h2/src/main/org/h2/command/dml/Delete.java
+6
-6
TestTriggersConstraints.java
h2/src/test/org/h2/test/db/TestTriggersConstraints.java
+10
-3
没有找到文件。
h2/src/main/org/h2/command/dml/Delete.java
浏览文件 @
0cdcb78c
...
...
@@ -66,6 +66,7 @@ public class Delete extends Prepared {
}
try
{
setCurrentRowNumber
(
0
);
int
count
=
0
;
while
(
limitRows
!=
0
&&
tableFilter
.
next
())
{
setCurrentRowNumber
(
rows
.
size
()
+
1
);
if
(
condition
==
null
||
Boolean
.
TRUE
.
equals
(
condition
.
getBooleanValue
(
session
)))
{
...
...
@@ -76,9 +77,10 @@ public class Delete extends Prepared {
}
if
(!
done
)
{
rows
.
add
(
row
);
if
(
limitRows
>=
0
&&
rows
.
size
()
>=
limitRows
)
{
break
;
}
count
++;
if
(
limitRows
>=
0
&&
count
>=
limitRows
)
{
break
;
}
}
}
...
...
@@ -92,15 +94,13 @@ public class Delete extends Prepared {
session
.
log
(
table
,
UndoLogRecord
.
DELETE
,
row
);
}
if
(
table
.
fireRow
())
{
int
count
=
0
;
for
(
rows
.
reset
();
rows
.
hasNext
();)
{
Row
row
=
rows
.
next
();
table
.
fireAfterRow
(
session
,
row
,
null
,
false
);
count
++;
}
}
table
.
fire
(
session
,
Trigger
.
DELETE
,
false
);
return
rows
.
size
()
;
return
count
;
}
finally
{
rows
.
close
();
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/db/TestTriggersConstraints.java
浏览文件 @
0cdcb78c
...
...
@@ -149,16 +149,21 @@ public class TestTriggersConstraints extends TestBase implements Trigger {
stat
.
execute
(
"create view test_view as select * from test"
);
stat
.
execute
(
"create trigger test_view_insert "
+
"instead of insert on test_view for each row call \""
+
TestView
.
class
.
getName
()
+
"\""
);
stat
.
execute
(
"create trigger test_view_delete "
+
"instead of delete on test_view for each row call \""
+
TestView
.
class
.
getName
()
+
"\""
);
if
(!
config
.
memory
)
{
conn
.
close
();
conn
=
getConnection
(
"trigger"
);
stat
=
conn
.
createStatement
();
}
stat
.
execute
(
"insert into test_view values(1)"
);
int
count
=
stat
.
executeUpdate
(
"insert into test_view values(1)"
);
assertEquals
(
1
,
count
);
ResultSet
rs
;
rs
=
stat
.
executeQuery
(
"select * from test"
);
assertTrue
(
rs
.
next
());
assertFalse
(
rs
.
next
());
count
=
stat
.
executeUpdate
(
"delete from test_view"
);
assertEquals
(
1
,
count
);
stat
.
execute
(
"drop view test_view"
);
stat
.
execute
(
"drop table test"
);
conn
.
close
();
...
...
@@ -195,9 +200,11 @@ public class TestTriggersConstraints extends TestBase implements Trigger {
}
public
void
fire
(
Connection
conn
,
Object
[]
oldRow
,
Object
[]
newRow
)
throws
SQLException
{
if
(
newRow
!=
null
)
{
prepInsert
.
setInt
(
1
,
(
Integer
)
newRow
[
0
]);
prepInsert
.
execute
();
}
}
public
void
close
()
{
// ignore
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论