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

COVERAGE SUMMARY FOR SOURCE FILE [Call.java]

nameclass, %method, %block, %line, %
Call.java100% (1/1)100% (11/11)97%  (153/158)95%  (37/39)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Call100% (1/1)100% (11/11)97%  (153/158)95%  (37/39)
update (): int 100% (1/1)74%  (14/19)67%  (4/6)
Call (Session): void 100% (1/1)100% (4/4)100% (2/2)
getType (): int 100% (1/1)100% (2/2)100% (1/1)
isCacheable (): boolean 100% (1/1)100% (7/7)100% (1/1)
isQuery (): boolean 100% (1/1)100% (2/2)100% (1/1)
isReadOnly (): boolean 100% (1/1)100% (5/5)100% (1/1)
isTransactional (): boolean 100% (1/1)100% (2/2)100% (1/1)
prepare (): void 100% (1/1)100% (33/33)100% (6/6)
query (int): ResultInterface 100% (1/1)100% (48/48)100% (11/11)
queryMeta (): ResultInterface 100% (1/1)100% (32/32)100% (7/7)
setExpression (Expression): void 100% (1/1)100% (4/4)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.command.dml;
7 
8import java.sql.ResultSet;
9import org.h2.command.CommandInterface;
10import org.h2.command.Prepared;
11import org.h2.engine.Session;
12import org.h2.expression.Expression;
13import org.h2.expression.ExpressionVisitor;
14import org.h2.result.LocalResult;
15import org.h2.result.ResultInterface;
16import org.h2.value.Value;
17 
18/**
19 * This class represents the statement
20 * CALL.
21 */
22public class Call extends Prepared {
23 
24    private boolean isResultSet;
25    private Expression expression;
26    private Expression[] expressions;
27 
28    public Call(Session session) {
29        super(session);
30    }
31 
32    @Override
33    public ResultInterface queryMeta() {
34        LocalResult result;
35        if (isResultSet) {
36            Expression[] expr = expression.getExpressionColumns(session);
37            result = new LocalResult(session, expr, expr.length);
38        } else {
39            result = new LocalResult(session, expressions, 1);
40        }
41        result.done();
42        return result;
43    }
44 
45    @Override
46    public int update() {
47        Value v = expression.getValue(session);
48        int type = v.getType();
49        switch(type) {
50        case Value.RESULT_SET:
51            // this will throw an exception
52            // methods returning a result set may not be called like this.
53            return super.update();
54        case Value.UNKNOWN:
55        case Value.NULL:
56            return 0;
57        default:
58            return v.getInt();
59        }
60    }
61 
62    @Override
63    public ResultInterface query(int maxrows) {
64        setCurrentRowNumber(1);
65        Value v = expression.getValue(session);
66        if (isResultSet) {
67            v = v.convertTo(Value.RESULT_SET);
68            ResultSet rs = v.getResultSet();
69            return LocalResult.read(session, rs, maxrows);
70        }
71        LocalResult result = new LocalResult(session, expressions, 1);
72        Value[] row = { v };
73        result.addRow(row);
74        result.done();
75        return result;
76    }
77 
78    @Override
79    public void prepare() {
80        expression = expression.optimize(session);
81        expressions = new Expression[] { expression };
82        isResultSet = expression.getType() == Value.RESULT_SET;
83        if (isResultSet) {
84            prepareAlways = true;
85        }
86    }
87 
88    public void setExpression(Expression expression) {
89        this.expression = expression;
90    }
91 
92    @Override
93    public boolean isQuery() {
94        return true;
95    }
96 
97    @Override
98    public boolean isTransactional() {
99        return true;
100    }
101 
102    @Override
103    public boolean isReadOnly() {
104        return expression.isEverything(ExpressionVisitor.READONLY_VISITOR);
105 
106    }
107 
108    @Override
109    public int getType() {
110        return CommandInterface.CALL;
111    }
112 
113    @Override
114    public boolean isCacheable() {
115        return !isResultSet;
116    }
117 
118}

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