/// <summary> /// 用于DesignTree加载时 /// </summary> internal static async Task <Dictionary <string, CheckoutInfo> > LoadAllAsync() { var list = new Dictionary <string, CheckoutInfo>(); #if FUTURE var q = new TableScan(Consts.SYS_CHECKOUT_MODEL_ID); #else var q = new SqlQuery(Consts.SYS_CHECKOUT_MODEL_ID); #endif var res = await q.ToListAsync(); if (res != null) { for (int i = 0; i < res.Count; i++) { var info = new CheckoutInfo((DesignNodeType)res[i].GetByte(Consts.CHECKOUT_NODETYPE_ID), res[i].GetString(Consts.CHECKOUT_TARGETID_ID), (uint)res[i].GetInt32(Consts.CHECKOUT_VERSION_ID), res[i].GetString(Consts.CHECKOUT_DEVELOPERNAME_ID), res[i].GetGuid(Consts.CHECKOUT_DEVELOPERID_ID)); list.Add(info.GetKey(), info); } } return(list); }
/// <summary> /// 加载挂起项目 /// </summary> /// <param name="onlyModelsAndFolders">true用于DesignTree加载; false用于发布时加载</param> internal static async Task <StagedItems> LoadStagedAsync(bool onlyModelsAndFolders) { //TODO:考虑用于DesignTree加载时连服务模型的代码一并加载 var developerID = RuntimeContext.Current.CurrentSession.LeafOrgUnitID; #if FUTURE var q = new TableScan(Consts.SYS_STAGED_MODEL_ID); if (onlyModelsAndFolders) { q.Filter(q.GetGuid(Consts.STAGED_DEVELOPERID_ID) == developerID & q.GetByte(Consts.STAGED_TYPE_ID) <= (byte)StagedType.Folder); } else { q.Filter(q.GetGuid(Consts.STAGED_DEVELOPERID_ID) == developerID); } #else var q = new SqlQuery(Consts.SYS_STAGED_MODEL_ID); if (onlyModelsAndFolders) { q.Where(q.T["DeveloperId"] == developerID & q.T["Type"] <= (byte)StagedType.Folder); } else { q.Where(q.T["DeveloperId"] == developerID); } #endif var res = await q.ToListAsync(); return(new StagedItems(res)); }
internal static async ValueTask <string> LoadViewRuntimeCode(ulong viewModelId) { var developerID = RuntimeContext.Current.CurrentSession.LeafOrgUnitID; #if FUTURE var q = new TableScan(Consts.SYS_STAGED_MODEL_ID); q.Filter(q.GetGuid(Consts.STAGED_DEVELOPERID_ID) == developerID & q.GetString(Consts.STAGED_MODELID_ID) == viewModelId.ToString() & q.GetByte(Consts.STAGED_TYPE_ID) == (byte)StagedType.ViewRuntimeCode); #else var q = new SqlQuery(Consts.SYS_STAGED_MODEL_ID); q.Where(q.T["DeveloperId"] == developerID & q.T["ModelId"] == viewModelId.ToString() & q.T["Type"] == (byte)StagedType.ViewRuntimeCode); #endif var res = await q.ToListAsync(); if (res == null || res.Count == 0) { return(null); } var data = res[0].GetBytes(Consts.STAGED_DATA_ID); ModelCodeUtil.DecodeViewRuntimeCode(data, out string runtimeCode); return(runtimeCode); }
private static async Task SaveAsync(StagedType type, string modelId, byte[] data) { var developerID = RuntimeContext.Current.CurrentSession.LeafOrgUnitID; var model = await RuntimeContext.Current.GetModelAsync <EntityModel>(Consts.SYS_STAGED_MODEL_ID); //TODO:使用SelectForUpdate or BatchDelete #if FUTURE var q = new TableScan(Consts.SYS_STAGED_MODEL_ID); byte typeValue = (byte)type; q.Filter(q.GetByte(Consts.STAGED_TYPE_ID) == typeValue & q.GetString(Consts.STAGED_MODELID_ID) == modelId & q.GetGuid(Consts.STAGED_DEVELOPERID_ID) == developerID); var txn = await Transaction.BeginAsync(); #else var q = new SqlQuery(Consts.SYS_STAGED_MODEL_ID); q.Where(q.T["Type"] == (byte)type & q.T["ModelId"] == modelId & q.T["DeveloperId"] == developerID); using var conn = await SqlStore.Default.OpenConnectionAsync(); using var txn = conn.BeginTransaction(); #endif var res = await q.ToListAsync(); if (res != null && res.Count > 0) { //TODO:*****临时先删除再重新插入 for (int i = 0; i < res.Count; i++) { #if FUTURE await EntityStore.DeleteEntityAsync(model, res[i].Id, txn); #else await SqlStore.Default.DeleteAsync(res[i], txn); #endif } } var obj = new Entity(model); obj.SetByte(Consts.STAGED_TYPE_ID, (byte)type); obj.SetString(Consts.STAGED_MODELID_ID, modelId); obj.SetGuid(Consts.STAGED_DEVELOPERID_ID, developerID); obj.SetBytes(Consts.STAGED_DATA_ID, data); #if FUTURE await EntityStore.InsertEntityAsync(obj, txn); await txn.CommitAsync(); #else await SqlStore.Default.InsertAsync(obj, txn); txn.Commit(); #endif }
public void beforeFirst(Constant searchkey) {//将索引定位在包含指定搜索键的第一条索引记录前 close(); this.searchkey = searchkey; int bucket = searchkey.GetHashCode() % NUM_BUCKETS;//根据searchkey的大小判断当前在哪一个桶 string tblname = idxname + bucket; TableInfo ri = new TableInfo(tblname, sch); ts = new TableScan(ri, tx); }
public async Task <object> Handle(DesignHub hub, InvokeArgs args) { var modelId = args.GetString(); var modelNode = hub.DesignTree.FindModelNode(ModelType.Entity, ulong.Parse(modelId)); if (modelNode == null) { throw new Exception($"Cannot find EntityModel: {modelId}"); } var model = (EntityModel)modelNode.Model; if (model.StoreOptions == null) { throw new Exception("DTO can't load data."); } if (model.PersistentState == PersistentState.Detached) { //TODO:考虑根据设计时模型生成一条伪记录给前端 throw new Exception("EntityModel is new, can't load data."); } if (model.SysStoreOptions != null) { #if FUTURE var q = new TableScan(model.Id); var res = await q.Take(20).ToListAsync(); if (res == null || res.Count == 0) { throw new Exception("no record"); //TODO: 同上 } return(res); #endif } if (model.SqlStoreOptions != null) { var q = new SqlQuery(model.Id); return(await q.Take(20).ToListAsync()); } if (model.CqlStoreOptions != null) { var q = new CqlQuery(model.Id) { Limit = 20 }; return(await q.ToListAsync()); } throw new NotSupportedException(); }
private static async Task <byte[]> LoadCodeDataAsync(ulong modelId) { var developerID = RuntimeContext.Current.CurrentSession.LeafOrgUnitID; #if FUTURE var q = new TableScan(Consts.SYS_STAGED_MODEL_ID); q.Filter(q.GetGuid(Consts.STAGED_DEVELOPERID_ID) == developerID & q.GetString(Consts.STAGED_MODELID_ID) == modelId.ToString() & q.GetByte(Consts.STAGED_TYPE_ID) == (byte)StagedType.SourceCode); #else var q = new SqlQuery(Consts.SYS_STAGED_MODEL_ID); q.Where(q.T["DeveloperId"] == developerID & q.T["ModelId"] == modelId.ToString() & q.T["Type"] == (byte)StagedType.SourceCode); #endif var res = await q.ToListAsync(); if (res == null || res.Count == 0) { return(null); } return(res[0].GetBytes(Consts.STAGED_DATA_ID)); }
public IEnumerable <WebSite> GetLocalSites() { return(TableScan.Where(o => !string.IsNullOrEmpty(o.LocalRootPath)) .SelectAll() .OrderBy(it => it.Name)); }
public async Task <IActionResult> Post([FromBody] LoginRequire require) { if (string.IsNullOrEmpty(require.User) || string.IsNullOrEmpty(require.Password)) { return(Ok(new { Succeed = false, Error = "User account or password is null" })); } #if FUTURE //TODO:以下逻辑合并至ServerMessageDispatcher.ProcessLoginRequire //根据账号索引查询 var q = new IndexGet(appbox.Consts.SYS_EMPLOEE_MODEL_ID, appbox.Consts.EMPLOEE_UI_ACCOUNT_ID); q.Where(new KeyPredicate(appbox.Consts.EMPLOEE_ACCOUNT_ID, KeyPredicateType.Equal, require.User)); var res = await q.ToIndexRowAsync(); if (res.IsEmpty) { return(Ok(new { Succeed = false, Error = "User account not exists" })); } Guid emploeeID = res.TargetEntityId; byte[] passData = res.ValueTuple.GetBytes(appbox.Consts.EMPLOEE_PASSWORD_ID); res.Dispose(); //验证密码 if (!RuntimeContext.PasswordHasher.VerifyHashedPassword(passData, require.Password)) { return(Ok(new { Succeed = false, Error = "Password not match" })); } //TODO:****暂全表扫描获取Emploee对应的OrgUnits,待用Include EntitySet实现 var q1 = new TableScan(appbox.Consts.SYS_ORGUNIT_MODEL_ID); q1.Filter(q1.GetGuid(appbox.Consts.ORGUNIT_BASEID_ID) == emploeeID); var ous = await q1.ToListAsync(); if (ous == null || ous.Count == 0) { return(Ok(new { Succeed = false, Error = "User must mapped to OrgUnit" })); } TreeNodePath path = await EntityStore.LoadTreeNodePathAsync( appbox.Consts.SYS_ORGUNIT_MODEL_ID, ous[0].Id, appbox.Consts.ORGUNIT_PARENT_ID, appbox.Consts.ORGUNIT_NAME_ID); #else //查找账号并验证密码 var q = new SqlQuery(appbox.Consts.SYS_EMPLOEE_MODEL_ID); q.Where(q.T["Account"] == require.User); var emp = await q.ToSingleAsync(); if (emp == null) { return(Ok(new { Succeed = false, Error = "User account not exists" })); } Guid emploeeID = emp.GetGuid(StoreInitiator.PK_Member_Id); byte[] passData = emp.GetBytes(appbox.Consts.EMPLOEE_PASSWORD_ID); if (passData == null) { return(Ok(new { Succeed = false, Error = "User password not exists" })); } if (!RuntimeContext.PasswordHasher.VerifyHashedPassword(passData, require.Password)) { return(Ok(new { Succeed = false, Error = "Password not match" })); } //查找对应的OrgUnits var q1 = new SqlQuery(appbox.Consts.SYS_ORGUNIT_MODEL_ID); q1.Where(q1.T["BaseId"] == emploeeID); var ous = await q1.ToListAsync(); if (ous == null || ous.Count == 0) { return(Ok(new { Succeed = false, Error = "User must mapped to OrgUnit" })); } var q2 = new SqlQuery(appbox.Consts.SYS_ORGUNIT_MODEL_ID); q2.Where(q2.T["Id"] == ous[0].GetGuid(StoreInitiator.PK_Member_Id)); TreeNodePath path = await q2.ToTreeNodePathAsync(q2.T["Parent"], q2.T["Name"]); #endif object returnUserInfo = new { ous[0].Id, Name = path[0].Text, Account = require.User }; //注册会话 var id = (ulong)StringHelper.GetHashCode(require.User); //TODO:***** 暂简单hash var session = new WebSession(id, path, emploeeID, null /*TODO:tag暂null*/); HttpContext.Session.SaveWebSession(session); //返回登录成功 Log.Debug($"用户[{session.GetFullName()}]登录."); return(Ok(new { Succeed = true, UserInfo = returnUserInfo })); }
public async Task <EntityList <Entities.OrgUnit> > LoadTreeList() { var q = new TableScan <Entities.OrgUnit>(); return(await q.ToTreeListAsync(t => t.Childs)); }