public static void LoadDomainData(string domainName) { try { //If not existed in Domain WKL if (!Wkl.MainCtrl.CommonCtrl.CommonProfile.DomainInfos.ContainsKey(domainName)) { DomainInfo domainInfo = Wkl.MainCtrl.CommonCtrl.CreateDomainInfo(domainName); DSDomain domainData = MemorySegment.GetDomain(AssetManager.FileAdapter.DataSegmentDllPath, domainName); domainInfo.DSDomainData = domainData; } } catch (BaseException srvExp) { Services.ServiceException newSrvExp = new Services.ServiceException(ErrorCode.ipe_LoadDomainDataError); newSrvExp.Errors.Add(srvExp); throw newSrvExp; } catch (Exception ex) { Services.ServiceException srvExp = new Services.ServiceException(ErrorCode.ipe_LoadDomainDataError, MessageUtils.Expand(Properties.Resources.ipe_LoadDomainDataError, ex.Message), ex.StackTrace); throw srvExp; } }
public static DSDomain GetDomain(string DllPath, string domain) { hDll = NativeMethods.LoadLibrary(DllPath); if (string.IsNullOrEmpty(domain)) { throw new ArgumentNullException(); } if (dicHeaderInfo == null) { GetAllDomain(DllPath); } if (!dicHeaderInfo.ContainsKey(domain.ToLower())) { return(null); } DSHeaderInfo header = dicHeaderInfo[domain.ToLower()]; DSDomain oDSDomain = (DSDomain)ReadObject(header.StartBlock, header.EndBlock, header.Length, false); NativeMethods.FreeLibrary(hDll); return(oDSDomain); }
/// <summary> /// separate osql to multi paths /// </summary> /// <param name="fullItems"></param> /// <param name="dsDomain"></param> /// <returns></returns> protected List <List <InternalBookmarkItem> > GetPaths(ref GenOsqlParamInfo paramInfo, List <InternalBookmarkItem> fullItems, DSDomain dsDomain) { List <List <InternalBookmarkItem> > paths = new List <List <InternalBookmarkItem> >(); #region calculate used table indexes Dictionary <int, List <InternalBookmarkItem> > usedTableIndexes = new Dictionary <int, List <InternalBookmarkItem> >(); List <int> sortedTableIndexes = new List <int>(); foreach (InternalBookmarkItem ibmItem in fullItems) { if (!usedTableIndexes.ContainsKey(ibmItem.TableIndex)) { usedTableIndexes.Add(ibmItem.TableIndex, new List <InternalBookmarkItem>()); sortedTableIndexes.Add(ibmItem.TableIndex); } usedTableIndexes[ibmItem.TableIndex].Add(ibmItem); } if (!usedTableIndexes.ContainsKey(0)) { usedTableIndexes.Add(0, new List <InternalBookmarkItem>()); sortedTableIndexes.Add(0); } sortedTableIndexes = sortedTableIndexes.OrderBy(c => c).ToList(); #endregion #region get paths string whereClauseName = "WhereClause"; Dictionary <int, bool> checker = new Dictionary <int, bool>(); List <DSRelationRow> dsRelationRows = dsDomain.TableRelations.Rows.Items; DSRelationRow dsWhereRelationRow = dsRelationRows.FirstOrDefault( c => whereClauseName.Equals(c.Name, StringComparison.OrdinalIgnoreCase)); string whereRelations = BitHelper.ToBinaryFormat(dsWhereRelationRow.Data, true); whereRelations = BaseMarkupUtilities.ReverseString(whereRelations); foreach (DSRelationRow dsRelationRow in dsRelationRows) { if (whereClauseName.Equals(dsRelationRow.Name, StringComparison.OrdinalIgnoreCase)) { paramInfo.DSWhereClauseRelationRow = dsRelationRow; continue; } List <InternalBookmarkItem> path = new List <InternalBookmarkItem>(); string relations = BitHelper.ToBinaryFormat(dsRelationRow.Data, true); relations = BaseMarkupUtilities.ReverseString(relations); bool hasTable = false; foreach (int tableIndex in sortedTableIndexes) { int index = tableIndex; if (relations.Length > index && relations[index] == '1') { path.AddRange(usedTableIndexes[tableIndex]); if (!checker.ContainsKey(tableIndex)) { hasTable = true; checker.Add(tableIndex, true); } } } if (hasTable) { int parentTableIndex = GetParentTableInexInJoinClause(dsWhereRelationRow, dsRelationRow); if (!usedTableIndexes.ContainsKey(parentTableIndex)) { usedTableIndexes.Add(parentTableIndex, new List <InternalBookmarkItem>()); } InternalBookmarkItem ibmItem = usedTableIndexes[parentTableIndex].FirstOrDefault( c => c.TableIndex == parentTableIndex && c.DSIconType == DSIconType.Field); if (ibmItem == null) { DSTreeView firstField = paramInfo.DomainInfo.Fields.Values.FirstOrDefault( c => c.TableIndex == parentTableIndex && c.Type == DSIconType.Field); if (firstField != null) { ibmItem = new InternalBookmarkItem() { BizName = firstField.Text, ItemType = "Field", JavaName = firstField.JavaClause, Key = Guid.NewGuid().ToString(), OrderNo = 1, TableIndex = parentTableIndex, TechName = firstField.TechName, Type = XsltType.Select }; usedTableIndexes[parentTableIndex].Insert(0, ibmItem); path.Insert(0, ibmItem); } } paths.Add(path); } } #endregion return(paths); }
public static HashSet <DSSign> Arithmetic(IAExpr aExpr, DSDomain domain) => aExpr switch {