未验证 提交 922ea182 编写于 作者: D Daniel Larimer 提交者: GitHub

Merge pull request #1294 from EOSIO/dan

add i64xi64 index that behaves like i128x128 index
...@@ -1044,6 +1044,7 @@ void chain_controller::_initialize_indexes() { ...@@ -1044,6 +1044,7 @@ void chain_controller::_initialize_indexes() {
_db.add_index<contracts::key_value_index>(); _db.add_index<contracts::key_value_index>();
_db.add_index<contracts::keystr_value_index>(); _db.add_index<contracts::keystr_value_index>();
_db.add_index<contracts::key128x128_value_index>(); _db.add_index<contracts::key128x128_value_index>();
_db.add_index<contracts::key64x64_value_index>();
_db.add_index<contracts::key64x64x64_value_index>(); _db.add_index<contracts::key64x64x64_value_index>();
_db.add_index<global_property_multi_index>(); _db.add_index<global_property_multi_index>();
......
...@@ -155,6 +155,44 @@ namespace eosio { namespace chain { namespace contracts { ...@@ -155,6 +155,44 @@ namespace eosio { namespace chain { namespace contracts {
> >
>; >;
struct key64x64_value_object : public chainbase::object<key64x64_value_object_type, key64x64_value_object> {
OBJECT_CTOR(key64x64_value_object, (value))
typedef uint64_t key_type;
static const int number_of_keys = 2;
id_type id;
table_id t_id;
uint64_t primary_key;
uint64_t secondary_key;
shared_string value;
};
using key64x64_value_index = chainbase::shared_multi_index_container<
key64x64_value_object,
indexed_by<
ordered_unique<tag<by_id>, member<key64x64_value_object, key64x64_value_object::id_type, &key64x64_value_object::id>>,
ordered_unique<tag<by_scope_primary>,
composite_key< key64x64_value_object,
member<key64x64_value_object, table_id, &key64x64_value_object::t_id>,
member<key64x64_value_object, uint64_t, &key64x64_value_object::primary_key>,
member<key64x64_value_object, uint64_t, &key64x64_value_object::secondary_key>
>,
composite_key_compare< std::less<table_id>,std::less<uint64_t>,std::less<uint64_t> >
>,
ordered_unique<tag<by_scope_secondary>,
composite_key< key64x64_value_object,
member<key64x64_value_object, table_id, &key64x64_value_object::t_id>,
member<key64x64_value_object, uint64_t, &key64x64_value_object::secondary_key>,
member<key64x64_value_object, typename key64x64_value_object::id_type, &key64x64_value_object::id>
>,
composite_key_compare< std::less<table_id>,std::less<uint64_t>,std::less<typename key64x64_value_object::id_type> >
>
>
>;
struct key64x64x64_value_object : public chainbase::object<key64x64x64_value_object_type, key64x64x64_value_object> { struct key64x64x64_value_object : public chainbase::object<key64x64x64_value_object_type, key64x64x64_value_object> {
OBJECT_CTOR(key64x64x64_value_object, (value)) OBJECT_CTOR(key64x64x64_value_object, (value))
...@@ -208,10 +246,12 @@ CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::table_id_object, eosio::chain: ...@@ -208,10 +246,12 @@ CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::table_id_object, eosio::chain:
CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::key_value_object, eosio::chain::contracts::key_value_index) CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::key_value_object, eosio::chain::contracts::key_value_index)
CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::keystr_value_object, eosio::chain::contracts::keystr_value_index) CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::keystr_value_object, eosio::chain::contracts::keystr_value_index)
CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::key128x128_value_object, eosio::chain::contracts::key128x128_value_index) CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::key128x128_value_object, eosio::chain::contracts::key128x128_value_index)
CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::key64x64_value_object, eosio::chain::contracts::key64x64_value_index)
CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::key64x64x64_value_object, eosio::chain::contracts::key64x64x64_value_index) CHAINBASE_SET_INDEX_TYPE(eosio::chain::contracts::key64x64x64_value_object, eosio::chain::contracts::key64x64x64_value_index)
FC_REFLECT(eosio::chain::contracts::table_id_object, (id)(scope)(code)(table) ) FC_REFLECT(eosio::chain::contracts::table_id_object, (id)(scope)(code)(table) )
FC_REFLECT(eosio::chain::contracts::key_value_object, (id)(t_id)(primary_key)(value) ) FC_REFLECT(eosio::chain::contracts::key_value_object, (id)(t_id)(primary_key)(value) )
FC_REFLECT(eosio::chain::contracts::keystr_value_object, (id)(t_id)(primary_key)(value) ) FC_REFLECT(eosio::chain::contracts::keystr_value_object, (id)(t_id)(primary_key)(value) )
FC_REFLECT(eosio::chain::contracts::key128x128_value_object, (id)(t_id)(primary_key)(secondary_key)(value) ) FC_REFLECT(eosio::chain::contracts::key128x128_value_object, (id)(t_id)(primary_key)(secondary_key)(value) )
FC_REFLECT(eosio::chain::contracts::key64x64_value_object, (id)(t_id)(primary_key)(secondary_key)(value) )
FC_REFLECT(eosio::chain::contracts::key64x64x64_value_object, (id)(t_id)(primary_key)(secondary_key)(tertiary_key)(value) ) FC_REFLECT(eosio::chain::contracts::key64x64x64_value_object, (id)(t_id)(primary_key)(secondary_key)(tertiary_key)(value) )
...@@ -120,6 +120,7 @@ namespace eosio { namespace chain { ...@@ -120,6 +120,7 @@ namespace eosio { namespace chain {
action_code_object_type, action_code_object_type,
key_value_object_type, key_value_object_type,
key128x128_value_object_type, key128x128_value_object_type,
key64x64_value_object_type,
action_permission_object_type, action_permission_object_type,
global_property_object_type, global_property_object_type,
dynamic_global_property_object_type, dynamic_global_property_object_type,
...@@ -172,6 +173,7 @@ FC_REFLECT_ENUM(eosio::chain::object_type, ...@@ -172,6 +173,7 @@ FC_REFLECT_ENUM(eosio::chain::object_type,
(action_code_object_type) (action_code_object_type)
(key_value_object_type) (key_value_object_type)
(key128x128_value_object_type) (key128x128_value_object_type)
(key64x64_value_object_type)
(action_permission_object_type) (action_permission_object_type)
(global_property_object_type) (global_property_object_type)
(dynamic_global_property_object_type) (dynamic_global_property_object_type)
......
...@@ -935,11 +935,14 @@ REGISTER_INTRINSICS(memory_api, ...@@ -935,11 +935,14 @@ REGISTER_INTRINSICS(memory_api,
using db_api_key_value_object = db_api<key_value_object>; using db_api_key_value_object = db_api<key_value_object>;
using db_api_keystr_value_object = db_api<keystr_value_object>; using db_api_keystr_value_object = db_api<keystr_value_object>;
using db_api_key128x128_value_object = db_api<key128x128_value_object>; using db_api_key128x128_value_object = db_api<key128x128_value_object>;
using db_api_key64x64_value_object = db_api<key64x64_value_object>;
using db_api_key64x64x64_value_object = db_api<key64x64x64_value_object>; using db_api_key64x64x64_value_object = db_api<key64x64x64_value_object>;
using db_index_api_key_value_index_by_scope_primary = db_index_api<key_value_index,by_scope_primary>; using db_index_api_key_value_index_by_scope_primary = db_index_api<key_value_index,by_scope_primary>;
using db_index_api_keystr_value_index_by_scope_primary = db_index_api<keystr_value_index,by_scope_primary>; using db_index_api_keystr_value_index_by_scope_primary = db_index_api<keystr_value_index,by_scope_primary>;
using db_index_api_key128x128_value_index_by_scope_primary = db_index_api<key128x128_value_index,by_scope_primary>; using db_index_api_key128x128_value_index_by_scope_primary = db_index_api<key128x128_value_index,by_scope_primary>;
using db_index_api_key128x128_value_index_by_scope_secondary = db_index_api<key128x128_value_index,by_scope_secondary>; using db_index_api_key128x128_value_index_by_scope_secondary = db_index_api<key128x128_value_index,by_scope_secondary>;
using db_index_api_key64x64_value_index_by_scope_primary = db_index_api<key64x64_value_index,by_scope_primary>;
using db_index_api_key64x64_value_index_by_scope_secondary = db_index_api<key64x64_value_index,by_scope_secondary>;
using db_index_api_key64x64x64_value_index_by_scope_primary = db_index_api<key64x64x64_value_index,by_scope_primary>; using db_index_api_key64x64x64_value_index_by_scope_primary = db_index_api<key64x64x64_value_index,by_scope_primary>;
using db_index_api_key64x64x64_value_index_by_scope_secondary = db_index_api<key64x64x64_value_index,by_scope_secondary>; using db_index_api_key64x64x64_value_index_by_scope_secondary = db_index_api<key64x64x64_value_index,by_scope_secondary>;
using db_index_api_key64x64x64_value_index_by_scope_tertiary = db_index_api<key64x64x64_value_index,by_scope_tertiary>; using db_index_api_key64x64x64_value_index_by_scope_tertiary = db_index_api<key64x64x64_value_index,by_scope_tertiary>;
...@@ -947,12 +950,15 @@ using db_index_api_key64x64x64_value_index_by_scope_tertiary = db_index_api<key ...@@ -947,12 +950,15 @@ using db_index_api_key64x64x64_value_index_by_scope_tertiary = db_index_api<key
REGISTER_INTRINSICS(db_api_key_value_object, DB_METHOD_SEQ(i64)); REGISTER_INTRINSICS(db_api_key_value_object, DB_METHOD_SEQ(i64));
REGISTER_INTRINSICS(db_api_keystr_value_object, DB_METHOD_SEQ(str)); REGISTER_INTRINSICS(db_api_keystr_value_object, DB_METHOD_SEQ(str));
REGISTER_INTRINSICS(db_api_key128x128_value_object, DB_METHOD_SEQ(i128i128)); REGISTER_INTRINSICS(db_api_key128x128_value_object, DB_METHOD_SEQ(i128i128));
REGISTER_INTRINSICS(db_api_key64x64_value_object, DB_METHOD_SEQ(i64i64));
REGISTER_INTRINSICS(db_api_key64x64x64_value_object, DB_METHOD_SEQ(i64i64i64)); REGISTER_INTRINSICS(db_api_key64x64x64_value_object, DB_METHOD_SEQ(i64i64i64));
REGISTER_INTRINSICS(db_index_api_key_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(i64)); REGISTER_INTRINSICS(db_index_api_key_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(i64));
REGISTER_INTRINSICS(db_index_api_keystr_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(str)); REGISTER_INTRINSICS(db_index_api_keystr_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(str));
REGISTER_INTRINSICS(db_index_api_key128x128_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(primary_i128i128)); REGISTER_INTRINSICS(db_index_api_key128x128_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(primary_i128i128));
REGISTER_INTRINSICS(db_index_api_key128x128_value_index_by_scope_secondary, DB_INDEX_METHOD_SEQ(secondary_i128i128)); REGISTER_INTRINSICS(db_index_api_key128x128_value_index_by_scope_secondary, DB_INDEX_METHOD_SEQ(secondary_i128i128));
REGISTER_INTRINSICS(db_index_api_key64x64_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(primary_i64i64));
REGISTER_INTRINSICS(db_index_api_key64x64_value_index_by_scope_secondary, DB_INDEX_METHOD_SEQ(secondary_i64i64));
REGISTER_INTRINSICS(db_index_api_key64x64x64_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(primary_i64i64i64)); REGISTER_INTRINSICS(db_index_api_key64x64x64_value_index_by_scope_primary, DB_INDEX_METHOD_SEQ(primary_i64i64i64));
REGISTER_INTRINSICS(db_index_api_key64x64x64_value_index_by_scope_secondary, DB_INDEX_METHOD_SEQ(secondary_i64i64i64)); REGISTER_INTRINSICS(db_index_api_key64x64x64_value_index_by_scope_secondary, DB_INDEX_METHOD_SEQ(secondary_i64i64i64));
REGISTER_INTRINSICS(db_index_api_key64x64x64_value_index_by_scope_tertiary, DB_INDEX_METHOD_SEQ(tertiary_i64i64i64)); REGISTER_INTRINSICS(db_index_api_key64x64x64_value_index_by_scope_tertiary, DB_INDEX_METHOD_SEQ(tertiary_i64i64i64));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册