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

COVERAGE SUMMARY FOR SOURCE FILE [ConditionExists.java]

nameclass, %method, %block, %line, %
ConditionExists.java100% (1/1)89%  (8/9)99%  (72/73)94%  (17/18)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ConditionExists100% (1/1)89%  (8/9)99%  (72/73)94%  (17/18)
updateAggregate (Session): void 0%   (0/1)0%   (0/1)0%   (0/1)
ConditionExists (Query): void 100% (1/1)100% (6/6)100% (3/3)
getCost (): int 100% (1/1)100% (4/4)100% (1/1)
getSQL (): String 100% (1/1)100% (16/16)100% (1/1)
getValue (Session): Value 100% (1/1)100% (22/22)100% (5/5)
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)

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.command.dml.Query;
9import org.h2.engine.Session;
10import org.h2.result.LocalResult;
11import org.h2.table.ColumnResolver;
12import org.h2.table.TableFilter;
13import org.h2.util.StringUtils;
14import org.h2.value.Value;
15import org.h2.value.ValueBoolean;
16 
17/**
18 * An 'exists' condition as in WHERE EXISTS(SELECT ...)
19 */
20public class ConditionExists extends Condition {
21 
22    private final Query query;
23 
24    public ConditionExists(Query query) {
25        this.query = query;
26    }
27 
28    @Override
29    public Value getValue(Session session) {
30        query.setSession(session);
31        LocalResult result = query.query(1);
32        session.addTemporaryResult(result);
33        boolean r = result.getRowCount() > 0;
34        return ValueBoolean.get(r);
35    }
36 
37    @Override
38    public Expression optimize(Session session) {
39        query.prepare();
40        return this;
41    }
42 
43    @Override
44    public String getSQL() {
45        return "EXISTS(\n" + StringUtils.indent(query.getPlanSQL(), 4, false) + ")";
46    }
47 
48    @Override
49    public void updateAggregate(Session session) {
50        // TODO exists: is it allowed that the subquery contains aggregates?
51        // probably not
52        // select id from test group by id having exists (select * from test2
53        // where id=count(test.id))
54    }
55 
56    @Override
57    public void mapColumns(ColumnResolver resolver, int level) {
58        query.mapColumns(resolver, level + 1);
59    }
60 
61    @Override
62    public void setEvaluatable(TableFilter tableFilter, boolean b) {
63        query.setEvaluatable(tableFilter, b);
64    }
65 
66    @Override
67    public boolean isEverything(ExpressionVisitor visitor) {
68        return query.isEverything(visitor);
69    }
70 
71    @Override
72    public int getCost() {
73        return query.getCostAsExpression();
74    }
75 
76}

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