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

View File

@ -27,6 +27,37 @@ class {{name}}:
func 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 ~}}
var _data_list
func _init(_json_) -> void:
@ -42,7 +73,6 @@ class {{name}}:
func get(index):
return self._data_list[index]
{{~else~}}
var _data: Dictionary
func _init(_json_) -> void: