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

COVERAGE SUMMARY FOR SOURCE FILE [CommandContainer.java]

nameclass, %method, %block, %line, %
CommandContainer.java100% (1/1)100% (11/11)100% (183/183)100% (49/49)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class CommandContainer100% (1/1)100% (11/11)100% (183/183)100% (49/49)
CommandContainer (Parser, String, Prepared): void 100% (1/1)100% (11/11)100% (4/4)
getCommandType (): int 100% (1/1)100% (4/4)100% (1/1)
getParameters (): ArrayList 100% (1/1)100% (4/4)100% (1/1)
isCacheable (): boolean 100% (1/1)100% (4/4)100% (1/1)
isQuery (): boolean 100% (1/1)100% (4/4)100% (1/1)
isReadOnly (): boolean 100% (1/1)100% (14/14)100% (4/4)
isTransactional (): boolean 100% (1/1)100% (4/4)100% (1/1)
query (int): ResultInterface 100% (1/1)100% (27/27)100% (8/8)
queryMeta (): ResultInterface 100% (1/1)100% (4/4)100% (1/1)
recompileIfRequired (): void 100% (1/1)100% (78/78)100% (18/18)
update (): int 100% (1/1)100% (29/29)100% (9/9)

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;
7 
8import java.util.ArrayList;
9import org.h2.api.DatabaseEventListener;
10import org.h2.expression.Parameter;
11import org.h2.expression.ParameterInterface;
12import org.h2.result.ResultInterface;
13import org.h2.value.Value;
14import org.h2.value.ValueNull;
15 
16/**
17 * Represents a single SQL statements.
18 * It wraps a prepared statement.
19 */
20class CommandContainer extends Command {
21 
22    private Prepared prepared;
23    private boolean readOnlyKnown;
24    private boolean readOnly;
25 
26    CommandContainer(Parser parser, String sql, Prepared prepared) {
27        super(parser, sql);
28        prepared.setCommand(this);
29        this.prepared = prepared;
30    }
31 
32    @Override
33    public ArrayList<? extends ParameterInterface> getParameters() {
34        return prepared.getParameters();
35    }
36 
37    @Override
38    public boolean isTransactional() {
39        return prepared.isTransactional();
40    }
41 
42    @Override
43    public boolean isQuery() {
44        return prepared.isQuery();
45    }
46 
47    private void recompileIfRequired() {
48        if (prepared.needRecompile()) {
49            // TODO test with 'always recompile'
50            prepared.setModificationMetaId(0);
51            String sql = prepared.getSQL();
52            ArrayList<Parameter> oldParams = prepared.getParameters();
53            Parser parser = new Parser(session);
54            prepared = parser.parse(sql);
55            long mod = prepared.getModificationMetaId();
56            prepared.setModificationMetaId(0);
57            ArrayList<Parameter> newParams = prepared.getParameters();
58            for (int i = 0, size = newParams.size(); i < size; i++) {
59                Parameter old = oldParams.get(i);
60                if (old.isValueSet()) {
61                    Value v = old.getValue(session);
62                    Parameter p = newParams.get(i);
63                    p.setValue(v);
64                }
65            }
66            prepared.prepare();
67            prepared.setModificationMetaId(mod);
68        }
69    }
70 
71    @Override
72    public int update() {
73        recompileIfRequired();
74        setProgress(DatabaseEventListener.STATE_STATEMENT_START);
75        start();
76        session.setLastScopeIdentity(ValueNull.INSTANCE);
77        prepared.checkParameters();
78        int updateCount = prepared.update();
79        prepared.trace(startTime, updateCount);
80        setProgress(DatabaseEventListener.STATE_STATEMENT_END);
81        return updateCount;
82    }
83 
84    @Override
85    public ResultInterface query(int maxrows) {
86        recompileIfRequired();
87        setProgress(DatabaseEventListener.STATE_STATEMENT_START);
88        start();
89        prepared.checkParameters();
90        ResultInterface result = prepared.query(maxrows);
91        prepared.trace(startTime, result.getRowCount());
92        setProgress(DatabaseEventListener.STATE_STATEMENT_END);
93        return result;
94    }
95 
96    @Override
97    public boolean isReadOnly() {
98        if (!readOnlyKnown) {
99            readOnly = prepared.isReadOnly();
100            readOnlyKnown = true;
101        }
102        return readOnly;
103    }
104 
105    @Override
106    public ResultInterface queryMeta() {
107        return prepared.queryMeta();
108    }
109 
110    @Override
111    public boolean isCacheable() {
112        return prepared.isCacheable();
113    }
114 
115    @Override
116    public int getCommandType() {
117        return prepared.getType();
118    }
119 
120}

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