Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
69d39053
Y
YTBP
项目概览
YottaChain
/
YTBP
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
YTBP
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
69d39053
编写于
3月 13, 2018
作者:
A
arhag
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ensure primary key does not change on modify
上级
28771835
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
17 addition
and
4 deletion
+17
-4
contracts/eosiolib/multi_index.hpp
contracts/eosiolib/multi_index.hpp
+4
-2
contracts/test_api_multi_index/test_multi_index.cpp
contracts/test_api_multi_index/test_multi_index.cpp
+13
-2
未找到文件。
contracts/eosiolib/multi_index.hpp
浏览文件 @
69d39053
...
...
@@ -620,15 +620,17 @@ class multi_index
return
index_type
::
extract_secondary_key
(
obj
);
});
auto
pk
=
obj
.
primary_key
();
auto
&
mutableobj
=
const_cast
<
T
&>
(
obj
);
// Do not forget the auto& otherwise it would make a copy and thus not update at all.
updater
(
mutableobj
);
eosio_assert
(
pk
==
obj
.
primary_key
(),
"updater cannot change primary key when modifying an object"
);
char
tmp
[
pack_size
(
obj
)
];
datastream
<
char
*>
ds
(
tmp
,
sizeof
(
tmp
)
);
ds
<<
obj
;
auto
pk
=
obj
.
primary_key
();
db_update_i64
(
objitem
.
__primary_itr
,
payer
,
tmp
,
sizeof
(
tmp
)
);
if
(
pk
>=
_next_primary_key
)
...
...
contracts/test_api_multi_index/test_multi_index.cpp
浏览文件 @
69d39053
...
...
@@ -214,9 +214,18 @@ void test_multi_index::idx128_autoincrement_test()
auto
itr
=
table
.
find
(
3
);
eosio_assert
(
itr
!=
table
.
end
(),
"idx128_autoincrement_test - could not find object with primary key of 3"
);
// The modification below would trigger an error:
/*
table.modify(itr, payer, [&]( auto& r ) {
r.id = 100;
});
*/
table
.
emplace
(
payer
,
[
&
](
auto
&
r
)
{
r
.
id
=
100
;
r
.
sec
=
itr
->
sec
;
});
table
.
erase
(
itr
);
eosio_assert
(
table
.
available_primary_key
()
==
101
,
"idx128_autoincrement_test - next_primary_key was not correct after record modify"
);
}
...
...
@@ -299,9 +308,11 @@ void test_multi_index::idx128_autoincrement_test_part2()
auto
itr
=
table
.
find
(
3
);
eosio_assert
(
itr
!=
table
.
end
(),
"idx128_autoincrement_test_part2 - could not find object with primary key of 3"
);
table
.
modify
(
itr
,
payer
,
[
&
](
auto
&
r
)
{
r
.
id
=
100
;
table
.
emplace
(
payer
,
[
&
](
auto
&
r
)
{
r
.
id
=
100
;
r
.
sec
=
itr
->
sec
;
});
table
.
erase
(
itr
);
eosio_assert
(
table
.
available_primary_key
()
==
101
,
"idx128_autoincrement_test_part2 - next_primary_key was not correct after record update"
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录