コード例 #1
0
        public static ISet<string> GetUniqueCandidateProperties(
            IList<ViewFactoryForge> forges,
            Attribute[] annotations)
        {
            var disableUniqueImplicit = HintEnum.DISABLE_UNIQUE_IMPLICIT_IDX.GetHint(annotations) != null;
            if (forges == null || forges.IsEmpty()) {
                return null;
            }

            if (forges[0] is GroupByViewFactoryForge) {
                var grouped = (GroupByViewFactoryForge) forges[0];
                var criteria = grouped.CriteriaExpressions;
                var groupedCriteria = ExprNodeUtilityQuery.GetPropertyNamesIfAllProps(criteria);
                if (groupedCriteria == null) {
                    return null;
                }

                var inner = grouped.Groupeds[0];
                if (inner is DataWindowViewForgeUniqueCandidate && !disableUniqueImplicit) {
                    var uniqueFactory = (DataWindowViewForgeUniqueCandidate) inner;
                    var uniqueCandidates = uniqueFactory.UniquenessCandidatePropertyNames;
                    if (uniqueCandidates != null) {
                        uniqueCandidates.AddAll(groupedCriteria);
                    }

                    return uniqueCandidates;
                }

                return null;
            }

            if (forges[0] is DataWindowViewForgeUniqueCandidate && !disableUniqueImplicit) {
                var uniqueFactory = (DataWindowViewForgeUniqueCandidate) forges[0];
                return uniqueFactory.UniquenessCandidatePropertyNames;
            }

            if (forges[0] is VirtualDWViewFactoryForge) {
                var vdw = (VirtualDWViewFactoryForge) forges[0];
                return vdw.UniqueKeys;
            }

            return null;
        }