[change]gdscript 支持多独立主键

main
Dongua 2022-06-11 16:40:15 +08:00
parent 60faab741e
commit ba1a552d3e
2 changed files with 40 additions and 4 deletions

View File

@ -65,6 +65,8 @@ namespace Luban.Job.Cfg.Defs
public bool IsUnionIndex { get; private set; } public bool IsUnionIndex { get; private set; }
public bool MultiKey { get; private set; }
public List<IndexInfo> IndexList { get; } = new(); public List<IndexInfo> IndexList { get; } = new();
public bool NeedExport => Assembly.NeedExport(this.Groups); public bool NeedExport => Assembly.NeedExport(this.Groups);
@ -140,9 +142,12 @@ namespace Luban.Job.Cfg.Defs
foreach (var idx in indexs) foreach (var idx in indexs)
{ {
if (ValueTType.GetBeanAs<DefBean>().TryGetField(idx, out var f, out var i)) if (ValueTType.GetBeanAs<DefBean>().TryGetField(idx, out var f, out var i))
{
if (IndexField == null)
{ {
IndexField = f; IndexField = f;
IndexFieldIdIndex = i; IndexFieldIdIndex = i;
}
this.IndexList.Add(new IndexInfo(f.CType, f, i)); this.IndexList.Add(new IndexInfo(f.CType, f, i));
} }
else else
@ -152,6 +157,7 @@ namespace Luban.Job.Cfg.Defs
} }
// 如果不是 union index, 每个key必须唯一否则 (key1,..,key n)唯一 // 如果不是 union index, 每个key必须唯一否则 (key1,..,key n)唯一
IsUnionIndex = IndexList.Count > 1 && !Index.Contains(','); IsUnionIndex = IndexList.Count > 1 && !Index.Contains(',');
MultiKey = IndexList.Count > 1 && Index.Contains(',');
break; break;
} }
default: throw new Exception($"unknown mode:'{Mode}'"); default: throw new Exception($"unknown mode:'{Mode}'");

View File

@ -27,6 +27,37 @@ class {{name}}:
func get(key): func get(key):
return self._data_map.get(key) return self._data_map.get(key)
{{~else if x.multi_key ~}}
{{~ for INDEX in x.index_list ~}}
var _data_{{INDEX.index_field.convention_name}}_map = {}
{{~ end ~}}
var _data_list = []
func _init(_json_) -> void:
{{~ for INDEX in x.index_list ~}}
self._data_{{INDEX.index_field.convention_name}}_map = {}
{{~ end ~}}
self._data_list = []
for _json2_ in _json_:
var _v
{{gdscript_deserialize_value '_v' '_json2_' value_type}}
self._data_list.append(_v)
{{~ for INDEX in x.index_list ~}}
self._data_{{INDEX.index_field.convention_name}}_map[_v.{{INDEX.index_field.convention_name}}] = _v
{{~ end ~}}
func get_data_map() -> Dictionary:
return self._data_{{x.index_field.convention_name }}_map
func get_data_list() -> Array:
return self._data_list
{{~ for INDEX in x.index_list ~}}
func get_by_{{INDEX.index_field.convention_name}}({{INDEX.index_field.convention_name}}):
return self._data_{{INDEX.index_field.name}}_map.get({{INDEX.index_field.convention_name}})
{{~ end ~}}
func get(key):
return self._data_{{x.index_field.convention_name }}_map.get(key)
{{~else if x.is_list_table ~}} {{~else if x.is_list_table ~}}
var _data_list var _data_list
func _init(_json_) -> void: func _init(_json_) -> void:
@ -42,7 +73,6 @@ class {{name}}:
func get(index): func get(index):
return self._data_list[index] return self._data_list[index]
{{~else~}} {{~else~}}
var _data: Dictionary var _data: Dictionary
func _init(_json_) -> void: func _init(_json_) -> void: