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

COVERAGE SUMMARY FOR SOURCE FILE [Subquery.java]

nameclass, %method, %block, %line, %
Subquery.java100% (1/1)88%  (14/16)95%  (167/175)95%  (42/44)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Subquery100% (1/1)88%  (14/16)95%  (167/175)95%  (42/44)
getExpressionColumns (Session): Expression [] 0%   (0/1)0%   (0/5)0%   (0/1)
getQuery (): Query 0%   (0/1)0%   (0/3)0%   (0/1)
Subquery (Query): void 100% (1/1)100% (6/6)100% (3/3)
getCost (): int 100% (1/1)100% (4/4)100% (1/1)
getDisplaySize (): int 100% (1/1)100% (4/4)100% (1/1)
getExpression (): Expression 100% (1/1)100% (47/47)100% (10/10)
getPrecision (): long 100% (1/1)100% (4/4)100% (1/1)
getSQL (): String 100% (1/1)100% (13/13)100% (1/1)
getScale (): int 100% (1/1)100% (4/4)100% (1/1)
getType (): int 100% (1/1)100% (4/4)100% (1/1)
getValue (Session): Value 100% (1/1)100% (52/52)100% (14/14)
isEverything (ExpressionVisitor): boolean 100% (1/1)100% (5/5)100% (1/1)
mapColumns (ColumnResolver, int): void 100% (1/1)100% (8/8)100% (2/2)
optimize (Session): Expression 100% (1/1)100% (5/5)100% (2/2)
setEvaluatable (TableFilter, boolean): void 100% (1/1)100% (6/6)100% (2/2)
updateAggregate (Session): void 100% (1/1)100% (5/5)100% (2/2)

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 java.util.ArrayList;
9 
10import org.h2.api.ErrorCode;
11import org.h2.command.dml.Query;
12import org.h2.engine.Session;
13import org.h2.message.DbException;
14import org.h2.result.ResultInterface;
15import org.h2.table.ColumnResolver;
16import org.h2.table.TableFilter;
17import org.h2.value.Value;
18import org.h2.value.ValueArray;
19import org.h2.value.ValueNull;
20 
21/**
22 * A query returning a single value.
23 * Subqueries are used inside other statements.
24 */
25public class Subquery extends Expression {
26 
27    private final Query query;
28    private Expression expression;
29 
30    public Subquery(Query query) {
31        this.query = query;
32    }
33 
34    @Override
35    public Value getValue(Session session) {
36        query.setSession(session);
37        ResultInterface result = query.query(2);
38        try {
39            int rowcount = result.getRowCount();
40            if (rowcount > 1) {
41                throw DbException.get(ErrorCode.SCALAR_SUBQUERY_CONTAINS_MORE_THAN_ONE_ROW);
42            }
43            Value v;
44            if (rowcount <= 0) {
45                v = ValueNull.INSTANCE;
46            } else {
47                result.next();
48                Value[] values = result.currentRow();
49                if (result.getVisibleColumnCount() == 1) {
50                    v = values[0];
51                } else {
52                    v = ValueArray.get(values);
53                }
54            }
55            return v;
56        } finally {
57            result.close();
58        }
59    }
60 
61    @Override
62    public int getType() {
63        return getExpression().getType();
64    }
65 
66    @Override
67    public void mapColumns(ColumnResolver resolver, int level) {
68        query.mapColumns(resolver, level + 1);
69    }
70 
71    @Override
72    public Expression optimize(Session session) {
73        query.prepare();
74        return this;
75    }
76 
77    @Override
78    public void setEvaluatable(TableFilter tableFilter, boolean b) {
79        query.setEvaluatable(tableFilter, b);
80    }
81 
82    @Override
83    public int getScale() {
84        return getExpression().getScale();
85    }
86 
87    @Override
88    public long getPrecision() {
89        return getExpression().getPrecision();
90    }
91 
92    @Override
93    public int getDisplaySize() {
94        return getExpression().getDisplaySize();
95    }
96 
97    @Override
98    public String getSQL() {
99        return "(" + query.getPlanSQL() + ")";
100    }
101 
102    @Override
103    public void updateAggregate(Session session) {
104        query.updateAggregate(session);
105    }
106 
107    private Expression getExpression() {
108        if (expression == null) {
109            ArrayList<Expression> expressions = query.getExpressions();
110            int columnCount = query.getColumnCount();
111            if (columnCount == 1) {
112                expression = expressions.get(0);
113            } else {
114                Expression[] list = new Expression[columnCount];
115                for (int i = 0; i < columnCount; i++) {
116                    list[i] = expressions.get(i);
117                }
118                expression = new ExpressionList(list);
119            }
120        }
121        return expression;
122    }
123 
124    @Override
125    public boolean isEverything(ExpressionVisitor visitor) {
126        return query.isEverything(visitor);
127    }
128 
129    public Query getQuery() {
130        return query;
131    }
132 
133    @Override
134    public int getCost() {
135        return query.getCostAsExpression();
136    }
137 
138    @Override
139    public Expression[] getExpressionColumns(Session session) {
140        return getExpression().getExpressionColumns(session);
141    }
142}

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