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 | */ |
6 | package org.h2.command.dml; |
7 | |
8 | import java.util.ArrayList; |
9 | import org.h2.command.CommandInterface; |
10 | import org.h2.command.Prepared; |
11 | import org.h2.engine.Procedure; |
12 | import org.h2.engine.Session; |
13 | import org.h2.expression.Expression; |
14 | import org.h2.expression.Parameter; |
15 | import org.h2.result.ResultInterface; |
16 | import org.h2.util.New; |
17 | |
18 | /** |
19 | * This class represents the statement |
20 | * EXECUTE |
21 | */ |
22 | public class ExecuteProcedure extends Prepared { |
23 | |
24 | private final ArrayList<Expression> expressions = New.arrayList(); |
25 | private Procedure procedure; |
26 | |
27 | public ExecuteProcedure(Session session) { |
28 | super(session); |
29 | } |
30 | |
31 | public void setProcedure(Procedure procedure) { |
32 | this.procedure = procedure; |
33 | } |
34 | |
35 | /** |
36 | * Set the expression at the given index. |
37 | * |
38 | * @param index the index (0 based) |
39 | * @param expr the expression |
40 | */ |
41 | public void setExpression(int index, Expression expr) { |
42 | expressions.add(index, expr); |
43 | } |
44 | |
45 | private void setParameters() { |
46 | Prepared prepared = procedure.getPrepared(); |
47 | ArrayList<Parameter> params = prepared.getParameters(); |
48 | for (int i = 0; params != null && i < params.size() && |
49 | i < expressions.size(); i++) { |
50 | Expression expr = expressions.get(i); |
51 | Parameter p = params.get(i); |
52 | p.setValue(expr.getValue(session)); |
53 | } |
54 | } |
55 | |
56 | @Override |
57 | public boolean isQuery() { |
58 | Prepared prepared = procedure.getPrepared(); |
59 | return prepared.isQuery(); |
60 | } |
61 | |
62 | @Override |
63 | public int update() { |
64 | setParameters(); |
65 | Prepared prepared = procedure.getPrepared(); |
66 | return prepared.update(); |
67 | } |
68 | |
69 | @Override |
70 | public ResultInterface query(int limit) { |
71 | setParameters(); |
72 | Prepared prepared = procedure.getPrepared(); |
73 | return prepared.query(limit); |
74 | } |
75 | |
76 | @Override |
77 | public boolean isTransactional() { |
78 | return true; |
79 | } |
80 | |
81 | @Override |
82 | public ResultInterface queryMeta() { |
83 | Prepared prepared = procedure.getPrepared(); |
84 | return prepared.queryMeta(); |
85 | } |
86 | |
87 | @Override |
88 | public int getType() { |
89 | return CommandInterface.EXECUTE; |
90 | } |
91 | |
92 | } |