【重构】完成ref检查重构
parent
c530331f95
commit
2b03140c68
|
|
@ -117,165 +117,165 @@ namespace Luban.Job.Cfg.DataVisitors
|
|||
{
|
||||
return;
|
||||
}
|
||||
//var defFields = record.ImplType.HierarchyFields;
|
||||
//int i = 0;
|
||||
//foreach (var fieldValue in record.Fields)
|
||||
//{
|
||||
// var defField = (DefField)defFields[i++];
|
||||
// _path.Push(defField.Name);
|
||||
// switch (defField.CType)
|
||||
// {
|
||||
// case TArray a:
|
||||
// {
|
||||
// if (defField.ValueValidators.Count > 0)
|
||||
// {
|
||||
// var arr = (DArray)fieldValue;
|
||||
// int index = 0;
|
||||
// foreach (var value in arr.Datas)
|
||||
// {
|
||||
// _path.Push(index++);
|
||||
// foreach (var v in defField.ValueValidators)
|
||||
// {
|
||||
// v.Validate(Ctx, value, defField.IsNullable);
|
||||
// }
|
||||
// _path.Pop();
|
||||
// }
|
||||
var defFields = record.ImplType.HierarchyFields;
|
||||
int i = 0;
|
||||
foreach (var fieldValue in record.Fields)
|
||||
{
|
||||
var defField = (DefField)defFields[i++];
|
||||
_path.Push(defField.Name);
|
||||
switch (defField.CType)
|
||||
{
|
||||
case TArray a:
|
||||
{
|
||||
if (defField.ValueValidators.Count > 0)
|
||||
{
|
||||
var arr = (DArray)fieldValue;
|
||||
int index = 0;
|
||||
foreach (var value in arr.Datas)
|
||||
{
|
||||
_path.Push(index++);
|
||||
foreach (var v in defField.ValueValidators)
|
||||
{
|
||||
v.Validate(Ctx, value, defField.IsNullable);
|
||||
}
|
||||
_path.Pop();
|
||||
}
|
||||
|
||||
// }
|
||||
// if (a.ElementType is TBean)
|
||||
// {
|
||||
// var arr = (DArray)fieldValue;
|
||||
// int index = 0;
|
||||
// foreach (var value in arr.Datas)
|
||||
// {
|
||||
// _path.Push(index++);
|
||||
// Accept((DBean)value, assembly);
|
||||
// _path.Pop();
|
||||
// }
|
||||
}
|
||||
if (a.ElementType is TBean)
|
||||
{
|
||||
var arr = (DArray)fieldValue;
|
||||
int index = 0;
|
||||
foreach (var value in arr.Datas)
|
||||
{
|
||||
_path.Push(index++);
|
||||
Accept((DBean)value, assembly);
|
||||
_path.Pop();
|
||||
}
|
||||
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// case TList b:
|
||||
// {
|
||||
// if (defField.ValueValidators.Count > 0)
|
||||
// {
|
||||
// var arr = (DList)fieldValue;
|
||||
// int index = 0;
|
||||
// foreach (var value in arr.Datas)
|
||||
// {
|
||||
// _path.Push(index++);
|
||||
// foreach (var v in defField.ValueValidators)
|
||||
// {
|
||||
// v.Validate(Ctx, value, false);
|
||||
// }
|
||||
// _path.Pop();
|
||||
// }
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TList b:
|
||||
{
|
||||
if (defField.ValueValidators.Count > 0)
|
||||
{
|
||||
var arr = (DList)fieldValue;
|
||||
int index = 0;
|
||||
foreach (var value in arr.Datas)
|
||||
{
|
||||
_path.Push(index++);
|
||||
foreach (var v in defField.ValueValidators)
|
||||
{
|
||||
v.Validate(Ctx, value, false);
|
||||
}
|
||||
_path.Pop();
|
||||
}
|
||||
|
||||
// }
|
||||
// if (b.ElementType is TBean tb)
|
||||
// {
|
||||
// var arr = (DList)fieldValue;
|
||||
// int index = 0;
|
||||
// foreach (var value in arr.Datas)
|
||||
// {
|
||||
// _path.Push(index++);
|
||||
// Accept((DBean)value, assembly);
|
||||
// _path.Pop();
|
||||
// }
|
||||
}
|
||||
if (b.ElementType is TBean tb)
|
||||
{
|
||||
var arr = (DList)fieldValue;
|
||||
int index = 0;
|
||||
foreach (var value in arr.Datas)
|
||||
{
|
||||
_path.Push(index++);
|
||||
Accept((DBean)value, assembly);
|
||||
_path.Pop();
|
||||
}
|
||||
|
||||
|
||||
// if (defField.IndexField != null)
|
||||
// {
|
||||
// var indexSet = new HashSet<DType>();
|
||||
// if (!tb.GetBeanAs<DefBean>().TryGetField(defField.Index, out var _, out var indexOfIndexField))
|
||||
// {
|
||||
// throw new Exception("impossible");
|
||||
// }
|
||||
// foreach (var value in arr.Datas)
|
||||
// {
|
||||
// _path.Push(index++);
|
||||
// DType indexValue = ((DBean)value).Fields[indexOfIndexField];
|
||||
// if (!indexSet.Add(indexValue))
|
||||
// {
|
||||
// throw new Exception($"'{TypeUtil.MakeFullName(_path)}' index:'{indexValue}' 重复");
|
||||
// }
|
||||
// _path.Pop();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// case TSet c:
|
||||
// {
|
||||
// if (defField.ValueValidators.Count > 0)
|
||||
// {
|
||||
// var arr = (DSet)fieldValue;
|
||||
// foreach (var value in arr.Datas)
|
||||
// {
|
||||
// foreach (var v in defField.ValueValidators)
|
||||
// {
|
||||
// v.Validate(Ctx, value, false);
|
||||
// }
|
||||
// }
|
||||
if (defField.IndexField != null)
|
||||
{
|
||||
var indexSet = new HashSet<DType>();
|
||||
if (!tb.GetBeanAs<DefBean>().TryGetField(defField.Index, out var _, out var indexOfIndexField))
|
||||
{
|
||||
throw new Exception("impossible");
|
||||
}
|
||||
foreach (var value in arr.Datas)
|
||||
{
|
||||
_path.Push(index++);
|
||||
DType indexValue = ((DBean)value).Fields[indexOfIndexField];
|
||||
if (!indexSet.Add(indexValue))
|
||||
{
|
||||
throw new Exception($"'{TypeUtil.MakeFullName(_path)}' index:'{indexValue}' 重复");
|
||||
}
|
||||
_path.Pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TSet c:
|
||||
{
|
||||
if (defField.ValueValidators.Count > 0)
|
||||
{
|
||||
var arr = (DSet)fieldValue;
|
||||
foreach (var value in arr.Datas)
|
||||
{
|
||||
foreach (var v in defField.ValueValidators)
|
||||
{
|
||||
v.Validate(Ctx, value, false);
|
||||
}
|
||||
}
|
||||
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// case TMap m:
|
||||
// {
|
||||
// DMap map = (DMap)fieldValue;
|
||||
// if (defField.KeyValidators.Count > 0)
|
||||
// {
|
||||
// foreach (var key in map.Datas.Keys)
|
||||
// {
|
||||
// _path.Push(key);
|
||||
// foreach (var v in defField.KeyValidators)
|
||||
// {
|
||||
// v.Validate(Ctx, key, false);
|
||||
// }
|
||||
// _path.Pop();
|
||||
// }
|
||||
// }
|
||||
// if (defField.ValueValidators.Count > 0)
|
||||
// {
|
||||
// foreach (var value in map.Datas.Values)
|
||||
// {
|
||||
// _path.Push(value);
|
||||
// foreach (var v in defField.ValueValidators)
|
||||
// {
|
||||
// v.Validate(Ctx, value, false);
|
||||
// }
|
||||
case TMap m:
|
||||
{
|
||||
DMap map = (DMap)fieldValue;
|
||||
if (defField.KeyValidators.Count > 0)
|
||||
{
|
||||
foreach (var key in map.Datas.Keys)
|
||||
{
|
||||
_path.Push(key);
|
||||
foreach (var v in defField.KeyValidators)
|
||||
{
|
||||
v.Validate(Ctx, key, false);
|
||||
}
|
||||
_path.Pop();
|
||||
}
|
||||
}
|
||||
if (defField.ValueValidators.Count > 0)
|
||||
{
|
||||
foreach (var value in map.Datas.Values)
|
||||
{
|
||||
_path.Push(value);
|
||||
foreach (var v in defField.ValueValidators)
|
||||
{
|
||||
v.Validate(Ctx, value, false);
|
||||
}
|
||||
|
||||
// if (value is DBean dv)
|
||||
// {
|
||||
// Accept(dv, assembly);
|
||||
// }
|
||||
// _path.Pop();
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// case TBean n:
|
||||
// {
|
||||
// Accept((DBean)fieldValue, assembly);
|
||||
// break;
|
||||
// }
|
||||
// default:
|
||||
// {
|
||||
// if (defField.Validators.Count > 0)
|
||||
// {
|
||||
// foreach (var v in defField.Validators)
|
||||
// {
|
||||
// v.Validate(Ctx, fieldValue, defField.IsNullable);
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// _path.Pop();
|
||||
//}
|
||||
if (value is DBean dv)
|
||||
{
|
||||
Accept(dv, assembly);
|
||||
}
|
||||
_path.Pop();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TBean n:
|
||||
{
|
||||
Accept((DBean)fieldValue, assembly);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if (defField.Validators.Count > 0)
|
||||
{
|
||||
foreach (var v in defField.Validators)
|
||||
{
|
||||
v.Validate(Ctx, fieldValue, defField.IsNullable);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
_path.Pop();
|
||||
}
|
||||
}
|
||||
|
||||
public void Accept(DArray type, DefAssembly x)
|
||||
|
|
|
|||
|
|
@ -28,6 +28,12 @@ namespace Luban.Job.Cfg.Defs
|
|||
|
||||
public RefValidator ValueRef { get; private set; }
|
||||
|
||||
public List<IValidator> Validators { get; } = new List<IValidator>();
|
||||
|
||||
public List<IValidator> KeyValidators { get; } = new List<IValidator>();
|
||||
|
||||
public List<IValidator> ValueValidators { get; } = new List<IValidator>();
|
||||
|
||||
// 如果ref了多个表,不再生成 xxx_ref之类的字段,也不会resolve
|
||||
public bool GenRef => Ref != null && Ref.Tables.Count == 1;
|
||||
|
||||
|
|
@ -289,14 +295,17 @@ namespace Luban.Job.Cfg.Defs
|
|||
|
||||
if (Ref != null)
|
||||
{
|
||||
Validators.Add(Ref);
|
||||
ValidateRef(Ref, CType);
|
||||
}
|
||||
if (KeyRef != null)
|
||||
{
|
||||
KeyValidators.Add(KeyRef);
|
||||
ValidateRef(KeyRef, (CType as TMap).KeyType);
|
||||
}
|
||||
if (ValueRef != null)
|
||||
{
|
||||
ValueValidators.Add(ValueRef);
|
||||
switch (this.CType)
|
||||
{
|
||||
case TArray ta:
|
||||
|
|
|
|||
Loading…
Reference in New Issue