Package mondrian.calc.impl

Examples of mondrian.calc.impl.AbstractListCalc


        final IntegerCalc integerCalc =
            call.getArgCount() > 1
            ? compiler.compileInteger(call.getArg(1))
            : ConstantCalc.constantInteger(1);
        if (head) {
            return new AbstractListCalc(
                call, new Calc[] {listCalc, integerCalc})
            {
                public List evaluateList(Evaluator evaluator) {
                    evaluator = evaluator.push(false);
                    List list = listCalc.evaluateList(evaluator);
                    int count = integerCalc.evaluateInteger(evaluator);
                    return head(count, list);
                }
            };
        } else {
            return new AbstractListCalc(
                call, new Calc[] {listCalc, integerCalc})
            {
                public List evaluateList(Evaluator evaluator) {
                    evaluator = evaluator.push(false);
                    List list = listCalc.evaluateList(evaluator);
View Full Code Here


        checkCompatible(call.getArg(0), call.getArg(1), null);
        final ListCalc listCalc0 =
                compiler.compileList(call.getArg(0));
        final ListCalc listCalc1 =
                compiler.compileList(call.getArg(1));
        return new AbstractListCalc(call, new Calc[] {listCalc0, listCalc1}) {
            public List evaluateList(Evaluator evaluator) {
                List list0 = listCalc0.evaluateList(evaluator);
                List list1 = listCalc1.evaluateList(evaluator);
                return union(list0, list1, all);
            }
View Full Code Here

    }

    public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) {
        final MemberListCalc listCalc =
            (MemberListCalc) compiler.compileList(call.getArg(0));
        return new AbstractListCalc(call, new Calc[] {listCalc}) {
            public List evaluateList(Evaluator evaluator) {
                final List<Member> list =
                    listCalc.evaluateMemberList(evaluator);
                return addCalculatedMembers(list, evaluator);
            }
View Full Code Here

            call.getArgCount() > 2
                ? compiler.compileInteger(call.getArg(2))
                : null;
        final int arity = ((SetType) listCalc.getType()).getArity();
        if (indexCalc == null) {
            return new AbstractListCalc(call, new Calc[] {listCalc, levelCalc})
            {
                public List evaluateList(Evaluator evaluator) {
                    List<Member> list = listCalc.evaluateList(evaluator);
                    if (list.size() == 0) {
                        return list;
                    }
                    int searchDepth = -1;
                    if (levelCalc != null) {
                        Level level = levelCalc.evaluateLevel(evaluator);
                        searchDepth = level.getDepth();
                    }
                    return drill(searchDepth, list, evaluator);
                }
            };
        } else if (arity == 1) {
            return new AbstractListCalc(call, new Calc[] {listCalc, indexCalc})
            {
                public List evaluateList(Evaluator evaluator) {
                    List<Member> list = listCalc.evaluateList(evaluator);
                    if (list.size() == 0) {
                        return list;
                    }
                    final int index = indexCalc.evaluateInteger(evaluator);
                    List<Member> result = new ArrayList<Member>();
                    final SchemaReader schemaReader =
                        evaluator.getSchemaReader();
                    for (Member member : list) {
                        result.add(member);
                        if (index == 0) {
                            final List<Member> children =
                                schemaReader.getMemberChildren(member);
                            result.addAll(children);
                        }
                    }
                    return result;
                }
            };
        } else {
            return new AbstractListCalc(call, new Calc[] {listCalc, indexCalc})
            {
                public List evaluateList(Evaluator evaluator) {
                    List<Member[]> list = listCalc.evaluateList(evaluator);
                    if (list.size() == 0) {
                        return list;
View Full Code Here

        final Calc orderCalc =
            call.getArgCount() > 2
            ? compiler.compileScalar(call.getArg(2), true)
            : null;
        final int arity = ((SetType) call.getType()).getArity();
        return new AbstractListCalc(
            call,
            new Calc[]{listCalc, integerCalc, orderCalc})
        {
            public List evaluateList(Evaluator evaluator) {
                // Use a native evaluator, if more efficient.
View Full Code Here

        final Type elementType =
            ((SetType) listCalc0.getType()).getElementType();
        if (elementType instanceof TupleType) {
            final TupleListCalc tupleListCalc0 = (TupleListCalc) listCalc0;
            final TupleListCalc tupleListCalc1 = (TupleListCalc) listCalc1;
            return new AbstractListCalc(call, new Calc[] {listCalc0, listCalc1})
            {
                public List evaluateList(Evaluator evaluator) {
                    List<Member[]> list0 =
                        tupleListCalc0.evaluateTupleList(evaluator);
                    if (list0.isEmpty()) {
                        return list0;
                    }
                    List<Member[]> list1 =
                        tupleListCalc1.evaluateTupleList(evaluator);
                    return exceptTuples(list0, list1);
                }
            };
        } else {
            final MemberListCalc memberListCalc0 = (MemberListCalc) listCalc0;
            final MemberListCalc memberListCalc1 = (MemberListCalc) listCalc1;
            return new AbstractListCalc(call, new Calc[] {listCalc0, listCalc1})
            {
                public List evaluateList(Evaluator evaluator) {
                    List<Member> list0 =
                        memberListCalc0.evaluateMemberList(evaluator);
                    if (list0.isEmpty()) {
View Full Code Here

        // Numeric Expression.
        final IntegerCalc indexValueCalc =
                compiler.compileInteger(args[0]);

        return new AbstractListCalc(
            call, new Calc[] {memberCalc, indexValueCalc})
        {
            public List evaluateList(Evaluator evaluator) {
                Member member = memberCalc.evaluateMember(evaluator);
                int indexValue = indexValueCalc.evaluateInteger(evaluator);
View Full Code Here

            return new DistinctFunDef.CalcImpl(call, listCalc);
        }
        final TupleListCalc tupleListCalc = (TupleListCalc) listCalc;
        final int[] extractedOrdinals = toIntArray(extractedOrdinalList);
        if (outArity == 1) {
            return new AbstractListCalc(call, new Calc[] {listCalc}) {
                public List evaluateList(Evaluator evaluator) {
                    List<Member> result = new ArrayList<Member>();
                    List<Member[]> list =
                        tupleListCalc.evaluateTupleList(evaluator);
                    Set<Member> emittedMembers = new HashSet<Member>();
                    for (Member[] members : list) {
                        Member outMember = members[extractedOrdinals[0]];
                        if (emittedMembers.add(outMember)) {
                            result.add(outMember);
                        }
                    }
                    return result;
                }
            };
        } else {
            return new AbstractListCalc(call, new Calc[] {listCalc}) {
                public List evaluateList(Evaluator evaluator) {
                    List<Member[]> result = new ArrayList<Member[]>();
                    List<Member[]> list =
                        tupleListCalc.evaluateTupleList(evaluator);
                    Set<List<Member>> emittedTuples =
View Full Code Here

        final IntegerCalc integerCalc =
            call.getArgCount() > 1
            ? compiler.compileInteger(call.getArg(1))
            : ConstantCalc.constantInteger(1);
        if (head) {
            return new AbstractListCalc(
                call, new Calc[] {listCalc, integerCalc})
            {
                public TupleList evaluateList(Evaluator evaluator) {
                    final int savepoint = evaluator.savepoint();
                    try {
                        evaluator.setNonEmpty(false);
                        TupleList list = listCalc.evaluateList(evaluator);
                        int count = integerCalc.evaluateInteger(evaluator);
                        return head(count, list);
                    } finally {
                        evaluator.restore(savepoint);
                    }
                }
            };
        } else {
            return new AbstractListCalc(
                call, new Calc[] {listCalc, integerCalc})
            {
                public TupleList evaluateList(Evaluator evaluator) {
                    final int savepoint = evaluator.savepoint();
                    try {
View Full Code Here

        checkCompatible(call.getArg(0), call.getArg(1), null);
        final ListCalc listCalc0 =
            compiler.compileList(call.getArg(0));
        final ListCalc listCalc1 =
            compiler.compileList(call.getArg(1));
        return new AbstractListCalc(call, new Calc[] {listCalc0, listCalc1}) {
            public TupleList evaluateList(Evaluator evaluator) {
                TupleList list0 = listCalc0.evaluateList(evaluator);
                TupleList list1 = listCalc1.evaluateList(evaluator);
                return union(list0, list1, all);
            }
View Full Code Here

TOP

Related Classes of mondrian.calc.impl.AbstractListCalc

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.