Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
1b70401a
提交
1b70401a
authored
8 年前
作者:
dyorgio
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added support to define last IDENTIFIER on a Trigger - missing another point.
Implemented unit test.
上级
5366bc3c
master
noel-pr1
stumc-Issue#576
version-1.4.198
version-1.4.197
version-1.4.196
version-1.4.195
version-1.4.194
version-1.4.193
无相关合并请求
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
86 行增加
和
1 行删除
+86
-1
TriggerObject.java
h2/src/main/org/h2/schema/TriggerObject.java
+6
-1
TestTriggersConstraints.java
h2/src/test/org/h2/test/db/TestTriggersConstraints.java
+80
-0
没有找到文件。
h2/src/main/org/h2/schema/TriggerObject.java
浏览文件 @
1b70401a
...
...
@@ -167,7 +167,12 @@ public class TriggerObject extends SchemaObjectBase {
throw
DbException
.
get
(
ErrorCode
.
ERROR_EXECUTING_TRIGGER_3
,
e
,
getName
(),
triggerClassName
!=
null
?
triggerClassName
:
"..source.."
,
e
.
toString
());
}
finally
{
session
.
setLastScopeIdentity
(
identity
);
if
(
session
.
getLastTriggerIdentity
()
!=
null
)
{
session
.
setLastScopeIdentity
(
session
.
getLastTriggerIdentity
());
session
.
setLastTriggerIdentity
(
null
);
}
else
{
session
.
setLastScopeIdentity
(
identity
);
}
if
(
type
!=
Trigger
.
SELECT
)
{
session
.
setCommitOrRollbackDisabled
(
old
);
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/db/TestTriggersConstraints.java
浏览文件 @
1b70401a
...
...
@@ -15,9 +15,12 @@ import java.util.HashSet;
import
org.h2.api.ErrorCode
;
import
org.h2.api.Trigger
;
import
org.h2.engine.Session
;
import
org.h2.jdbc.JdbcConnection
;
import
org.h2.test.TestBase
;
import
org.h2.tools.TriggerAdapter
;
import
org.h2.util.Task
;
import
org.h2.value.ValueLong
;
/**
* Tests for trigger and constraints.
...
...
@@ -44,6 +47,7 @@ public class TestTriggersConstraints extends TestBase implements Trigger {
testTriggerAdapter
();
testTriggerSelectEachRow
();
testViewTrigger
();
testViewTriggerGeneratedKeys
();
testTriggerBeforeSelect
();
testTriggerAlterTable
();
testTriggerAsSource
();
...
...
@@ -202,6 +206,44 @@ public class TestTriggersConstraints extends TestBase implements Trigger {
stat
.
execute
(
"drop table test"
);
conn
.
close
();
}
private
void
testViewTriggerGeneratedKeys
()
throws
SQLException
{
Connection
conn
;
Statement
stat
;
conn
=
getConnection
(
"trigger"
);
stat
=
conn
.
createStatement
();
stat
.
execute
(
"drop table if exists test"
);
stat
.
execute
(
"create table test(id int identity)"
);
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 \""
+
TestViewGeneratedKeys
.
class
.
getName
()
+
"\""
);
if
(!
config
.
memory
)
{
conn
.
close
();
conn
=
getConnection
(
"trigger"
);
stat
=
conn
.
createStatement
();
}
PreparedStatement
pstat
;
pstat
=
conn
.
prepareStatement
(
"insert into test_view values()"
,
Statement
.
RETURN_GENERATED_KEYS
);
int
count
=
pstat
.
executeUpdate
();
assertEquals
(
1
,
count
);
ResultSet
gkRs
;
gkRs
=
pstat
.
getGeneratedKeys
();
assertTrue
(
gkRs
.
next
());
assertEquals
(
1
,
gkRs
.
getInt
(
1
));
assertFalse
(
gkRs
.
next
());
ResultSet
rs
;
rs
=
stat
.
executeQuery
(
"select * from test"
);
assertTrue
(
rs
.
next
());
assertFalse
(
rs
.
next
());
stat
.
execute
(
"drop view test_view"
);
stat
.
execute
(
"drop table test"
);
conn
.
close
();
}
/**
* A test trigger adapter implementation.
...
...
@@ -286,6 +328,44 @@ public class TestTriggersConstraints extends TestBase implements Trigger {
}
}
public
static
class
TestViewGeneratedKeys
implements
Trigger
{
PreparedStatement
prepInsert
;
@Override
public
void
init
(
Connection
conn
,
String
schemaName
,
String
triggerName
,
String
tableName
,
boolean
before
,
int
type
)
throws
SQLException
{
prepInsert
=
conn
.
prepareStatement
(
"insert into test values(?)"
,
Statement
.
RETURN_GENERATED_KEYS
);
}
@Override
public
void
fire
(
Connection
conn
,
Object
[]
oldRow
,
Object
[]
newRow
)
throws
SQLException
{
if
(
newRow
!=
null
)
{
prepInsert
.
setInt
(
1
,
(
Integer
)
newRow
[
0
]);
prepInsert
.
execute
();
ResultSet
rs
=
prepInsert
.
getGeneratedKeys
();
if
(
rs
.
next
())
{
JdbcConnection
jconn
=
(
JdbcConnection
)
conn
;
Session
session
=
(
Session
)
jconn
.
getSession
();
session
.
setLastTriggerIdentity
(
ValueLong
.
get
(
rs
.
getLong
(
1
)));
}
}
}
@Override
public
void
close
()
{
// ignore
}
@Override
public
void
remove
()
{
// ignore
}
}
private
void
testTriggerBeforeSelect
()
throws
SQLException
{
Connection
conn
;
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论