1 /***
2 * Copyright (c) 2002, Reuters America Inc. All rights reserved.<p>
3 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
4 * conditions are met:<p>
5 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
6 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
7 * in the documentation and/or other materials provided with the distribution. Neither the name of Reuters America Inc. nor the
8 * names of its contributors may be used to endorse or promote products derived from this software without specific prior written
9 * permission.<p>
10 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
11 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
12 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
13 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
14 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
15 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<p>
16 */
17
18 package com.reuters.rc.db.adb;
19
20 import com.reuters.rc.db.*;
21 import com.tibco.tibrv.*;
22
23
24 /***
25 * This class represents a request statement sent to ADB. Each instance of this class
26 * is immutable - instances can be freely shared among threads.
27 * @see AdbRequest
28 * @author Jawaid Hakim.
29 */
30 public class AdbRequestStmt implements DbRequestStmt
31 {
32 /***
33 * Constructor.
34 * @param sql The SQL statement to execute on the ADB.
35 */
36 public AdbRequestStmt(String sql)
37 {
38 init(sql, DEFAULT_MAXROWS);
39 }
40
41 /***
42 * Constructor.
43 * @param sql The SQL statement to execute on the ADB.
44 * @param maxRows Maximum number of result rows returned from request.
45 * @see #getMaxRows()
46 * @see AdbRequestBind
47 */
48 public AdbRequestStmt(String sql, int maxRows)
49 {
50 init(sql, maxRows);
51 }
52
53 /***
54 * Constructor. A reference to the parameter is stored so be careful about
55 * modifying the data.
56 * @param sql The SQL statement to execute on the ADB.
57 * @param bind Bind data.
58 * @see AdbRequestBind
59 */
60 public AdbRequestStmt(String sql, DbRequestBind bind)
61 {
62 init(sql, bind, DEFAULT_MAXROWS);
63 }
64
65 /***
66 * Constructor.
67 * @param sql The SQL statement to execute on the ADB.
68 * @param bind Bind data.
69 * @param maxRows Maximum number of result rows returned from request.
70 * @see #getMaxRows()
71 * @see AdbRequestBind
72 */
73 public AdbRequestStmt(String sql, DbRequestBind bind, int maxRows)
74 {
75 init(sql, bind, maxRows);
76 }
77
78 /***
79 * Constructor. A reference to the parameter is stored so be careful about
80 * modifying the data.
81 * @param sql The SQL statement to execute on the ADB.
82 * @param binds Bind data.
83 * @see AdbRequestBind
84 */
85 public AdbRequestStmt(String sql, DbRequestBind[] binds)
86 {
87 init(sql, binds, DEFAULT_MAXROWS);
88 }
89
90 /***
91 * Constructor. A reference to the parameter is stored so be careful about
92 * modifying the data.
93 * @param sql The SQL statement to execute on the ADB.
94 * @param binds Bind data.
95 * @param maxRows Maximum number of result rows returned from request.
96 * @see #getMaxRows()
97 * @see AdbRequestBind
98 */
99 public AdbRequestStmt(String sql, DbRequestBind[] binds, int maxRows)
100 {
101 init(sql, binds, maxRows);
102 }
103
104 /***
105 * Initialize.
106 * @param sql SQL statement to execute on the ADB.
107 * @param maxRows Maximum number of result rows returned from request.
108 */
109 private void init(String sql, int maxRows)
110 {
111 sql_ = sql;
112 maxRows_ = maxRows;
113 }
114
115 /***
116 * Initialize.
117 * @param sql SQL statement to execute on the ADB.
118 * @param bind Bind data.
119 * @param maxRows Maximum number of result rows returned from request.
120 */
121 private void init(String sql, DbRequestBind bind, int maxRows)
122 {
123 if (bind != null)
124 {
125 AdbRequestBind[] binds = new AdbRequestBind[1];
126 binds_[0] = bind;
127 init(sql, binds, maxRows);
128 }
129 else
130 {
131 init(sql, maxRows);
132 }
133 }
134
135 /***
136 * Initialize.
137 * @param sql SQL statement to execute on the ADB.
138 * @param binds Bind data.
139 * @param maxRows Maximum number of result rows returned from request.
140 */
141 private void init(String sql, DbRequestBind[] binds, int maxRows)
142 {
143 sql_ = sql;
144 binds_ = binds;
145 maxRows_ = maxRows;
146 }
147
148 /***
149 * Get the sql statement.
150 * @return Sql statement.
151 */
152 public final String getSql()
153 {
154 return sql_;
155 }
156
157 /***
158 * Get the maximum number of result rows returned from request. The
159 * default maxRows is set to DEFAULT_MAXROWS which implies no constraints
160 * on the result set size.
161 * @return maxRows Maximum number of result rows returned from request.
162 * @see AdbRequest#sendRequest(TibrvTransport, String)
163 */
164 public final int getMaxRows()
165 {
166 return maxRows_;
167 }
168
169 /***
170 * Build request message.
171 * @return Request message.
172 * @see com.tibco.tibrv.TibrvMsg
173 */
174 public final TibrvMsg getStmt() throws AdbBusinessException, AdbSystemException
175 {
176 try
177 {
178 String sql = getSql();
179 if (sql == null)
180 throw new AdbBusinessException("NULL SQL");
181
182 // Create request statement
183 TibrvMsg stmt = new TibrvMsg();
184
185 stmt.add(ADB_SQL, sql);
186
187 if (getMaxRows() != DEFAULT_MAXROWS)
188 stmt.add(ADB_MAXROWS, getMaxRows());
189
190 if (binds_ != null)
191 {
192 for (int i = 0; i < binds_.length; ++i)
193 stmt.add(ADB_BIND, binds_[i].getBind());
194 }
195 return stmt;
196 }
197 catch (TibrvException ex)
198 {
199 throw new AdbSystemException(ex);
200 }
201 catch (DbBaseException ex)
202 {
203 throw new AdbSystemException(ex);
204 }
205 }
206
207 /***
208 * No limit on number of rows returned.
209 */
210 private static final int DEFAULT_MAXROWS = -1;
211
212 /***
213 * Name of nested SQL statement message.
214 */
215 private static final String ADB_STMT = "stmt";
216
217 /***
218 * Name of message field containing the SQL statement.
219 */
220 private static final String ADB_SQL = "sql";
221
222 /***
223 * Name of message field containing the maxrows option.
224 */
225 private static final String ADB_MAXROWS = "maxrows";
226
227 /***
228 * Name of message field containing the maxrows option.
229 */
230 private static final String ADB_BIND = "bind";
231
232 /***
233 * SQL statement value to send with request.
234 */
235 private String sql_;
236
237 /***
238 * Maxrows value.
239 */
240 private int maxRows_;
241
242 /***
243 * Bind data.
244 */
245 private DbRequestBind[] binds_;
246 }
This page was automatically generated by Maven