EMMA Coverage Report (generated Sun Mar 01 22:06:14 CET 2015)
[all classes][org.h2.expression]

COVERAGE SUMMARY FOR SOURCE FILE [ExpressionList.java]

nameclass, %method, %block, %line, %
ExpressionList.java100% (1/1)79%  (11/14)64%  (184/289)70%  (35/50)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ExpressionList100% (1/1)79%  (11/14)64%  (184/289)70%  (35/50)
getCost (): int 0%   (0/1)0%   (0/26)0%   (0/4)
getExpressionColumns (Session): Expression [] 0%   (0/1)0%   (0/52)0%   (0/6)
updateAggregate (Session): void 0%   (0/1)0%   (0/21)0%   (0/3)
getSQL (): String 100% (1/1)91%  (40/44)86%  (6/7)
isEverything (ExpressionVisitor): boolean 100% (1/1)92%  (23/25)75%  (3/4)
ExpressionList (Expression []): void 100% (1/1)100% (6/6)100% (3/3)
getDisplaySize (): int 100% (1/1)100% (2/2)100% (1/1)
getPrecision (): long 100% (1/1)100% (2/2)100% (1/1)
getScale (): int 100% (1/1)100% (2/2)100% (1/1)
getType (): int 100% (1/1)100% (2/2)100% (1/1)
getValue (Session): Value 100% (1/1)100% (26/26)100% (4/4)
mapColumns (ColumnResolver, int): void 100% (1/1)100% (22/22)100% (3/3)
optimize (Session): Expression 100% (1/1)100% (37/37)100% (9/9)
setEvaluatable (TableFilter, boolean): void 100% (1/1)100% (22/22)100% (3/3)

1/*
2 * Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0,
3 * and the EPL 1.0 (http://h2database.com/html/license.html).
4 * Initial Developer: H2 Group
5 */
6package org.h2.expression;
7 
8import org.h2.engine.Session;
9import org.h2.table.Column;
10import org.h2.table.ColumnResolver;
11import org.h2.table.TableFilter;
12import org.h2.util.StatementBuilder;
13import org.h2.value.Value;
14import org.h2.value.ValueArray;
15 
16/**
17 * A list of expressions, as in (ID, NAME).
18 * The result of this expression is an array.
19 */
20public class ExpressionList extends Expression {
21 
22    private final Expression[] list;
23 
24    public ExpressionList(Expression[] list) {
25        this.list = list;
26    }
27 
28    @Override
29    public Value getValue(Session session) {
30        Value[] v = new Value[list.length];
31        for (int i = 0; i < list.length; i++) {
32            v[i] = list[i].getValue(session);
33        }
34        return ValueArray.get(v);
35    }
36 
37    @Override
38    public int getType() {
39        return Value.ARRAY;
40    }
41 
42    @Override
43    public void mapColumns(ColumnResolver resolver, int level) {
44        for (Expression e : list) {
45            e.mapColumns(resolver, level);
46        }
47    }
48 
49    @Override
50    public Expression optimize(Session session) {
51        boolean allConst = true;
52        for (int i = 0; i < list.length; i++) {
53            Expression e = list[i].optimize(session);
54            if (!e.isConstant()) {
55                allConst = false;
56            }
57            list[i] = e;
58        }
59        if (allConst) {
60            return ValueExpression.get(getValue(session));
61        }
62        return this;
63    }
64 
65    @Override
66    public void setEvaluatable(TableFilter tableFilter, boolean b) {
67        for (Expression e : list) {
68            e.setEvaluatable(tableFilter, b);
69        }
70    }
71 
72    @Override
73    public int getScale() {
74        return 0;
75    }
76 
77    @Override
78    public long getPrecision() {
79        return Integer.MAX_VALUE;
80    }
81 
82    @Override
83    public int getDisplaySize() {
84        return Integer.MAX_VALUE;
85    }
86 
87    @Override
88    public String getSQL() {
89        StatementBuilder buff = new StatementBuilder("(");
90        for (Expression e: list) {
91            buff.appendExceptFirst(", ");
92            buff.append(e.getSQL());
93        }
94        if (list.length == 1) {
95            buff.append(',');
96        }
97        return buff.append(')').toString();
98    }
99 
100    @Override
101    public void updateAggregate(Session session) {
102        for (Expression e : list) {
103            e.updateAggregate(session);
104        }
105    }
106 
107    @Override
108    public boolean isEverything(ExpressionVisitor visitor) {
109        for (Expression e : list) {
110            if (!e.isEverything(visitor)) {
111                return false;
112            }
113        }
114        return true;
115    }
116 
117    @Override
118    public int getCost() {
119        int cost = 1;
120        for (Expression e : list) {
121            cost += e.getCost();
122        }
123        return cost;
124    }
125 
126    @Override
127    public Expression[] getExpressionColumns(Session session) {
128        ExpressionColumn[] expr = new ExpressionColumn[list.length];
129        for (int i = 0; i < list.length; i++) {
130            Expression e = list[i];
131            Column col = new Column("C" + (i + 1),
132                    e.getType(), e.getPrecision(), e.getScale(),
133                    e.getDisplaySize());
134            expr[i] = new ExpressionColumn(session.getDatabase(), col);
135        }
136        return expr;
137    }
138 
139}

[all classes][org.h2.expression]
EMMA 2.0.5312 (C) Vladimir Roubtsov