luban/src/Luban.Job.Db/Source/Defs/DefTable.cs

59 lines
1.6 KiB
C#

using Luban.Job.Common.Types;
using Luban.Job.Db.RawDefs;
using Luban.Job.Db.TypeVisitors;
using System;
namespace Luban.Job.Db.Defs
{
class DefTable : DbDefTypeBase
{
public DefTable(Table b)
{
Name = b.Name;
Namespace = b.Namespace;
TableUId = b.Id;
KeyType = b.KeyType;
ValueType = b.ValueType;
IsPersistent = b.IsPersistent;
}
public string KeyType { get; }
public string ValueType { get; }
public bool IsPersistent { get; }
public TType KeyTType { get; private set; }
public TBean ValueTType { get; private set; }
public int TableUId { get; set; }
public string InternalTableType => "_" + Name;
public string BaseTableType => $"Bright.Transaction.TxnTable<{KeyTType.Apply(DbCsDefineTypeVisitor.Ins)},{ValueTType.Apply(DbCsDefineTypeVisitor.Ins)}>";
public override void Compile()
{
var ass = Assembly;
ass.AddDbTable(this);
if ((KeyTType = ass.CreateType(Namespace, KeyType)) == null)
{
throw new Exception($"table:{FullName} key:{KeyType} 类型不合法");
}
if (!(KeyTType is TLong) && !(KeyTType is TString))
{
throw new Exception($"table:{FullName} key:{KeyTType} 不支持。只支持long与string类型");
}
if ((ValueTType = (TBean)ass.CreateType(Namespace, ValueType)) == null)
{
throw new Exception($"table:{FullName} value:{ValueType} 类型不合法");
}
}
}
}