跳到主要内容

dbase

简介

提供一个通用的基础数据组件FDbase

主要用法是component pkg.dbase.FDbase;

组件接口

dbase.gs

函数原型函数作用
void update_dbase(object ob, string d, mixed key, mixed value, mixed op = nil)更新目标对象的常驻数据

FDbase.gs

一个通用的基础数据组件

持有的数据分为两类:常驻数据和临时数据

常驻数据的操作接口比临时数据的操作接口丰富

接口函数的几点说明:

  1. 带有"raw_"开头的方法:直接对元数据(_dbase/_temp_dbase)进行操作

  2. 带有"temp"的方法:对临时数据进行操作

  3. 不带有"temp"的方法:对常驻数据进行操作

从操作上来分,大概如下:

  1. 对元数据(_dbase/_temp_dbase)进行增删查改操作的方法

  2. 对数据进行增啥查改操作的方法

  3. 对数据指定路径进行增删查改的方法

  4. 对数据指定词典/数组进行增删查改的方法

函数原型函数作用
void set_dirty(bool dirty)常驻数据:设置常驻数据变更标记
bool is_dirty()常驻数据:常驻数据是否变更
map query_entire_dbase()常驻数据:返回整个数据值
void replace_entire_dbase(map new_dbase)常驻数据:用新的数据替换整个常驻数据
void absorb(map val)常驻数据:吸收一个map值
bool raw_contains_key(string key)常驻数据:是否含有指定的key
void raw_set(string key, mixed val)常驻数据:设置key值
mixed raw_query(string key)常驻数据:获取key值
mixed raw_query_with_create(string key, mixed default_val)常驻数据:通过raw_query方法获取key值,如果key值为nil则raw_set默认值并返回最新的key值
void raw_delete(string key)常驻数据:删除key
mixed raw_add(string key, mixed val)常驻数据:为当前值加上一个指定的值,如果key的当前值为nil时raw_set为指定值
mixed query_with_create(string key, mixed default_val)常驻数据:通过query方法获取key值,如果key值为nil则set为默认值并返回最新的key值
mixed add(string key, mixed val)常驻数据:为key的当前值加上一个指定的值,如果key的当前值为nil时set为指定值
mixed dict_query(string d, mixed key)常驻数据词典类型的键值:获取key值
mixed list_query(string l, int pos)常驻数据列表类型的键值:获取指定位置的值
mixed query_from_map(string path, mixed key)常驻数据中path映射的map:获取key值
void set_to_map(string path, mixed key, mixed val)常驻数据中path映射的map:设置key值
void delete_from_map(string path, mixed key)常驻数据中path映射的map:删除key
void set_by_path(string path, mixed val)常驻数据中基于路径path的操作:设置路径的值
void delete_by_path(string path)常驻数据中基于路径path的操作:删除路径
mixed add_by_path(string path, mixed val)常驻数据中基于路径path的操作:为路径的当前值增加一个指定的值,如果路径的当前值为nil时set_by_path为指定值
map query_entire_temp_dbase()临时数据:返回整个数据值
void replace_entire_temp_dbase(map new_temp_dbase)用新的数据替换整个临时数据
void absorb_temp(map val)临时数据:吸收一个map值
mixed query_temp_with_create(string key, mixed default_val)临时数据:通过query_temp方法获取key值,如果key值为nil则set_temp为默认值并返回最新的key值
void delete_temp(string key)临时数据(虚函数):删除key
mixed add_temp(string key, mixed val)临时数据:为key的当前值加上一个指定的值,如果key的当前值为nil时set_temp为指定值
bool raw_contains_temp_key(string key)临时数据:是否含有指定的key
mixed raw_query_temp(string key)临时数据:获得key值
mixed raw_query_temp_with_create(string key, mixed default_val)临时数据:通过raw_query_temp方法获取key值,如果key值为nil则raw_set_temp默认值并返回最新的key值
void raw_set_temp(string key, mixed val)临时数据:设置key值
void raw_delete_temp(string key)临时数据:删除key
mixed raw_add_temp(string key, mixed val)临时数据:为当前值加上一个指定的值,如果key的当前值为nil时raw_set_temp为指定值
mixed dict_query_temp(string d, mixed key)临时数据词典类型的键值(虚函数):获取key值
mixed list_query_temp(string l, int pos)临时数据列表类型的键值:获取指定位置的值
mixed query_temp_by_path(string path)临时数据中基于路径path的操作:获取路径的值
void set_temp_by_path(string path, mixed val)临时数据中基于路径path的操作:设置路径值
void delete_temp_by_path(string path)临时数据中基于路径path的操作:删除路径
mixed add_temp_by_path(string path, mixed val)临时数据中基于路径path的操作:为路径的当前值增加一个指定的值,如果路径的当前值为nil时set_temp_by_path为指定值
mixed query_temp_from_map(string path, mixed key)临时数据中path映射的map:获取key值
void set_temp_to_map(string path, mixed key, mixed val)临时数据中path映射的map:设置key值
void delete_temp_from_map(string path, mixed key)临时数据中path映射的map:删除key
map multi_query(array key_list)常驻数据:获取一组key值
void multi_set(string key0, mixed value0, ...)常驻数据:设置一批key值
void multi_delete(string key0, ...)常驻数据:删除一批字段
void multi_set_by_path(string path0, mixed value0, ...)常驻数据中基于路径path的操作:设置一批路径的值
void multi_delete_by_path(string path0, ...)常驻数据中基于路径path的操作:删除一批路径
map multi_query_temp(array key_list)临时数据:获取一组key值
void multi_set_temp(string key0, mixed value0, ...)临时数据:设置一批key值
void multi_delete_temp(string key0, ...)临时数据:删除一批字段
void multi_set_temp_by_path(string path0, mixed value0, ...)临时数据中基于路径path的操作:设置一批路径的值
void multi_delete_temp_by_path(string path0, ...)临时数据中基于路径path的操作:删除一批路径

样例

public void pkg_sample()
{
object ob = new_object(FDbase);
defer ob.close();

dbase.update_dbase(ob, nil, "X", {});
gtest.test_equal(ob.query("X"), {});

dbase.update_dbase(ob, "X", "a", 1);
gtest.test_equal(ob.dict_query("X", "a"), 1);
dbase.update_dbase(ob, "X", "a", 2);
gtest.test_equal(ob.dict_query("X", "a"), 2);
dbase.update_dbase(ob, "X", "a", nil);
gtest.test_equal(ob.dict_query("X", "a"), nil);

dbase.update_dbase(ob, nil, "X", nil);
gtest.test_equal(ob.query("X"), nil);

dbase.update_dbase(ob, nil, "Z", []);
gtest.test_equal(ob.query("Z"), []);

dbase.update_dbase(ob, "Z", 0, 1);
dbase.update_dbase(ob, "Z", 0, 2);
gtest.test_equal(ob.query("Z"), [ 2, 1 ]);
dbase.update_dbase(ob, "Z", 0, nil);
gtest.test_equal(ob.query("Z"), [ 1 ]);
dbase.update_dbase(ob, "Z", 0, nil);
gtest.test_equal(ob.query("Z"), []);

dbase.update_dbase(ob, nil, "Z", nil);
gtest.test_equal(ob.query("Z"), nil);

map dbase = ob.query_entire_dbase();
gtest.test_equal(dbase.length() > 0, false);

ob.raw_query_with_create("raw_a", 100);
gtest.test_equal(ob.raw_query("raw_a"), 100);

gtest.test_equal(ob.raw_query("a"), nil);
gtest.test_equal(ob.raw_contains_key("a"), false);

ob.raw_set("a", 1);
gtest.test_equal(ob.raw_contains_key("a"), true);
gtest.test_equal(ob.raw_query("a"), 1);

ob.raw_add("a", 1);
gtest.test_equal(ob.raw_query("a"), 2);

ob.raw_delete("a");
gtest.test_equal(ob.raw_query("a"), nil);
gtest.test_equal(ob.raw_contains_key("a"), false);

gtest.test_equal(ob.query("b"), nil);
gtest.test_equal(ob.contains_key("b"), false);

ob.set("b", 1);
gtest.test_equal(ob.contains_key("b"), true);
gtest.test_equal(ob.query("b"), 1);

ob.add("b", 1);
gtest.test_equal(ob.query("b"), 2);

ob.delete("b");
gtest.test_equal(ob.query("b"), nil);
gtest.test_equal(ob.contains_key("b"), false);

gtest.test_equal(ob.query_temp("c"), nil);
gtest.test_equal(ob.contains_temp_key("c"), false);

ob.set_temp("c", 1);
gtest.test_equal(ob.contains_temp_key("c"), true);
gtest.test_equal(ob.query_temp("c"), 1);

ob.add_temp("c", 1);
gtest.test_equal(ob.query_temp("c"), 2);

ob.delete_temp("c");
gtest.test_equal(ob.query_temp("c"), nil);
gtest.test_equal(ob.contains_temp_key("c"), false);

gtest.test_equal(ob.raw_query_temp("d"), nil);
gtest.test_equal(ob.raw_contains_temp_key("d"), false);

ob.raw_set_temp("d", 1);
gtest.test_equal(ob.raw_contains_temp_key("d"), true);
gtest.test_equal(ob.raw_query_temp("d"), 1);

ob.raw_add_temp("d", 1);
gtest.test_equal(ob.raw_query_temp("d"), 2);

ob.raw_delete_temp("d");
gtest.test_equal(ob.raw_query_temp("d"), nil);
gtest.test_equal(ob.raw_contains_temp_key("d"), false);

// dict op
map raw_dict = ob.raw_query_with_create("dict", {});
gtest.test_equal(raw_dict, {});
gtest.test_equal(ob.dict_query("dict", "a"), nil);

ob.dict_set("dict", "a", 1);
gtest.test_equal(raw_dict, { "a" : 1 });
gtest.test_equal(ob.dict_query("dict", "a"), 1);

ob.dict_add("dict", "a", 1);
gtest.test_equal(raw_dict, { "a" : 2 });
gtest.test_equal(ob.dict_query("dict", "a"), 2);

ob.dict_delete("dict", "a");
gtest.test_equal(raw_dict, {});
gtest.test_equal(ob.dict_query("dict", "a"), nil);

// list op
array raw_list = ob.raw_query_with_create("list", []);
ob.list_push_back("list", 5);
gtest.test_equal(raw_list, [ 5 ]);
ob.list_insert("list", 0, 1);
gtest.test_equal(raw_list, [ 1, 5 ]);
ob.list_insert("list", 1, 2);
gtest.test_equal(raw_list, [ 1, 2, 5 ]);
ob.list_insert("list", 2, 3);
gtest.test_equal(raw_list, [ 1, 2, 3, 5 ]);
ob.list_insert("list", 3, 4);
gtest.test_equal(raw_list, [ 1, 2, 3, 4, 5 ]);

// temp dict op
map raw_temp_dict = ob.raw_query_temp_with_create("dict", {});
gtest.test_equal(raw_temp_dict, {});
gtest.test_equal(ob.dict_query_temp("dict", "a"), nil);

ob.dict_set_temp("dict", "a", 1);
gtest.test_equal(raw_temp_dict, { "a" : 1 });
gtest.test_equal(ob.dict_query_temp("dict", "a"), 1);

ob.dict_add_temp("dict", "a", 1);
gtest.test_equal(raw_temp_dict, { "a" : 2 });
gtest.test_equal(ob.dict_query_temp("dict", "a"), 2);

ob.dict_delete_temp("dict", "a");
gtest.test_equal(raw_temp_dict, {});
gtest.test_equal(ob.dict_query_temp("dict", "a"), nil);

// temp list op
array raw_temp_list = ob.raw_query_temp_with_create("list", []);
ob.list_push_back_temp("list", 5);
gtest.test_equal(raw_temp_list, [ 5 ]);
ob.list_insert_temp("list", 0, 1);
gtest.test_equal(raw_temp_list, [ 1, 5 ]);
ob.list_insert_temp("list", 1, 2);
gtest.test_equal(raw_temp_list, [ 1, 2, 5 ]);
ob.list_insert_temp("list", 2, 3);
gtest.test_equal(raw_temp_list, [ 1, 2, 3, 5 ]);
ob.list_insert_temp("list", 3, 4);
gtest.test_equal(raw_temp_list, [ 1, 2, 3, 4, 5 ]);
}