Ejemplo n.º 1
0
        private static ExprTableAccessEvalStrategy GetTableAccessSubprop(
            ExprTableAccessNodeSubprop subprop,
            TableMetadataColumn column,
            TableAndLockProviderUngrouped ungrouped,
            TableAndLockProviderGrouped grouped)
        {
            if (column is TableMetadataColumnPlain)
            {
                var plain = (TableMetadataColumnPlain)column;
                if (ungrouped != null)
                {
                    return(new ExprTableEvalStrategyUngroupedProp(
                               ungrouped, plain.IndexPlain, subprop.OptionalPropertyEnumEvaluator));
                }
                if (subprop.GroupKeyEvaluators.Length > 1)
                {
                    return(new ExprTableEvalStrategyGroupByPropMulti(
                               grouped, plain.IndexPlain, subprop.OptionalPropertyEnumEvaluator, subprop.GroupKeyEvaluators));
                }
                return(new ExprTableEvalStrategyGroupByPropSingle(
                           grouped, plain.IndexPlain, subprop.OptionalPropertyEnumEvaluator, subprop.GroupKeyEvaluators[0]));
            }

            var aggcol = (TableMetadataColumnAggregation)column;

            if (ungrouped != null)
            {
                if (!aggcol.Factory.IsAccessAggregation)
                {
                    return(new ExprTableEvalStrategyUngroupedMethod(ungrouped, aggcol.MethodOffset));
                }
                var pair = aggcol.AccessAccessorSlotPair;
                return(new ExprTableEvalStrategyUngroupedAccess(ungrouped, pair.Slot, pair.Accessor));
            }

            var columnAggregation = (TableMetadataColumnAggregation)column;

            if (!columnAggregation.Factory.IsAccessAggregation)
            {
                if (subprop.GroupKeyEvaluators.Length > 1)
                {
                    return(new ExprTableEvalStrategyGroupByMethodMulti(
                               grouped, columnAggregation.MethodOffset, subprop.GroupKeyEvaluators));
                }
                return(new ExprTableEvalStrategyGroupByMethodSingle(
                           grouped, columnAggregation.MethodOffset, subprop.GroupKeyEvaluators[0]));
            }
            if (subprop.GroupKeyEvaluators.Length > 1)
            {
                return(new ExprTableEvalStrategyGroupByAccessMulti(
                           grouped, columnAggregation.AccessAccessorSlotPair, subprop.GroupKeyEvaluators));
            }
            return(new ExprTableEvalStrategyGroupByAccessSingle(
                       grouped, columnAggregation.AccessAccessorSlotPair, subprop.GroupKeyEvaluators[0]));
        }
Ejemplo n.º 2
0
        private static ExprTableAccessEvalStrategy GetTableAccessSubprop(ILockable @lock, ExprTableAccessNodeSubprop subprop, TableMetadataColumn column, TableStateInstanceGroupBy grouped, TableStateInstanceUngrouped ungrouped)
        {
            if (column is TableMetadataColumnPlain)
            {
                var plain = (TableMetadataColumnPlain)column;
                if (ungrouped != null)
                {
                    return(new ExprTableEvalStrategyUngroupedProp(@lock, ungrouped.EventReference, plain.IndexPlain, subprop.OptionalPropertyEnumEvaluator));
                }
                if (subprop.GroupKeyEvaluators.Length > 1)
                {
                    return(new ExprTableEvalStrategyGroupByPropMulti(@lock, grouped.Rows, plain.IndexPlain, subprop.OptionalPropertyEnumEvaluator, subprop.GroupKeyEvaluators));
                }
                return(new ExprTableEvalStrategyGroupByPropSingle(@lock, grouped.Rows, plain.IndexPlain, subprop.OptionalPropertyEnumEvaluator, subprop.GroupKeyEvaluators[0]));
            }

            var aggcol = (TableMetadataColumnAggregation)column;

            if (ungrouped != null)
            {
                if (!aggcol.Factory.IsAccessAggregation)
                {
                    return(new ExprTableEvalStrategyUngroupedMethod(@lock, ungrouped.EventReference, aggcol.MethodOffset));
                }
                var pair = aggcol.AccessAccessorSlotPair;
                return(new ExprTableEvalStrategyUngroupedAccess(@lock, ungrouped.EventReference, pair.Slot, pair.Accessor));
            }

            var columnAggregation = (TableMetadataColumnAggregation)column;

            if (!columnAggregation.Factory.IsAccessAggregation)
            {
                if (subprop.GroupKeyEvaluators.Length > 1)
                {
                    return(new ExprTableEvalStrategyGroupByMethodMulti(@lock, grouped.Rows, columnAggregation.MethodOffset, subprop.GroupKeyEvaluators));
                }
                return(new ExprTableEvalStrategyGroupByMethodSingle(@lock, grouped.Rows, columnAggregation.MethodOffset, subprop.GroupKeyEvaluators[0]));
            }
            if (subprop.GroupKeyEvaluators.Length > 1)
            {
                return(new ExprTableEvalStrategyGroupByAccessMulti(@lock, grouped.Rows, columnAggregation.AccessAccessorSlotPair, subprop.GroupKeyEvaluators));
            }
            return(new ExprTableEvalStrategyGroupByAccessSingle(@lock, grouped.Rows, columnAggregation.AccessAccessorSlotPair, subprop.GroupKeyEvaluators[0]));
        }