Пример #1
0
        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;
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
 public static HashSet <DSSign> Arithmetic(IAExpr aExpr, DSDomain domain) => aExpr switch
 {