1 /*
2  *  Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License, version 2.0,
6  *  as published by the Free Software Foundation.
7  *
8  *  This program is also distributed with certain software (including
9  *  but not limited to OpenSSL) that is licensed under separate terms,
10  *  as designated in a particular file or component or in included license
11  *  documentation.  The authors of MySQL hereby grant you an additional
12  *  permission to link the program and your derivative works with the
13  *  separately licensed software that they have included with MySQL.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License, version 2.0, for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with this program; if not, write to the Free Software
22  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
23  */
24 
25 package com.mysql.clusterj.jdbc;
26 
27 import java.math.BigDecimal;
28 import java.math.BigInteger;
29 import java.sql.Date;
30 import java.sql.SQLException;
31 import java.sql.Time;
32 import java.sql.Timestamp;
33 
34 import com.mysql.clusterj.ClusterJDatastoreException;
35 import com.mysql.clusterj.ClusterJFatalInternalException;
36 import com.mysql.clusterj.ColumnMetadata;
37 import com.mysql.clusterj.core.spi.DomainTypeHandler;
38 import com.mysql.clusterj.core.spi.ValueHandler;
39 import com.mysql.clusterj.core.util.I18NHelper;
40 import com.mysql.clusterj.core.util.Logger;
41 import com.mysql.clusterj.core.util.LoggerFactoryService;
42 
43 import com.mysql.jdbc.ParameterBindings;
44 
45 /** This class handles retrieving parameter values from the parameterBindings
46  * associated with a PreparedStatement.
47  */
48 public class ValueHandlerImpl implements ValueHandler {
49 
50     /** My message translator */
51     static final I18NHelper local = I18NHelper.getInstance(ValueHandlerImpl.class);
52 
53     /** My logger */
54     static final Logger logger = LoggerFactoryService.getFactory().getInstance(ValueHandlerImpl.class);
55 
56     private ParameterBindings parameterBindings;
57     private int[] fieldNumberMap;
58 
59     /** The offset into the parameter bindings, used for batch processing */
60     private int offset;
61 
ValueHandlerImpl(ParameterBindings parameterBindings, int[] fieldNumberMap, int offset)62     public ValueHandlerImpl(ParameterBindings parameterBindings, int[] fieldNumberMap, int offset) {
63         this.parameterBindings = parameterBindings;
64         this.fieldNumberMap = fieldNumberMap;
65         this.offset = offset;
66     }
67 
ValueHandlerImpl(ParameterBindings parameterBindings, int[] fieldNumberMap)68     public ValueHandlerImpl(ParameterBindings parameterBindings, int[] fieldNumberMap) {
69         this(parameterBindings, fieldNumberMap, 0);
70     }
71 
getBigDecimal(int fieldNumber)72     public BigDecimal getBigDecimal(int fieldNumber) {
73         try {
74             return parameterBindings.getBigDecimal(offset + fieldNumberMap[fieldNumber]);
75         } catch (SQLException e) {
76             throw new ClusterJDatastoreException(e);
77         }
78     }
79 
getBigInteger(int fieldNumber)80     public BigInteger getBigInteger(int fieldNumber) {
81         try {
82             return parameterBindings.getBigDecimal(offset + fieldNumberMap[fieldNumber]).toBigInteger();
83         } catch (SQLException e) {
84             throw new ClusterJDatastoreException(e);
85         }
86     }
87 
getBoolean(int fieldNumber)88     public boolean getBoolean(int fieldNumber) {
89         try {
90             return parameterBindings.getBoolean(offset + fieldNumberMap[fieldNumber]);
91         } catch (SQLException e) {
92             throw new ClusterJDatastoreException(e);
93         }
94     }
95 
getBooleans(int fieldNumber)96     public boolean[] getBooleans(int fieldNumber) {
97         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
98     }
99 
getByte(int fieldNumber)100     public byte getByte(int fieldNumber) {
101         try {
102             return parameterBindings.getByte(offset + fieldNumberMap[fieldNumber]);
103         } catch (SQLException e) {
104             throw new ClusterJDatastoreException(e);
105         }
106     }
107 
getBytes(int fieldNumber)108     public byte[] getBytes(int fieldNumber) {
109         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
110     }
111 
getDouble(int fieldNumber)112     public double getDouble(int fieldNumber) {
113         try {
114             return parameterBindings.getDouble(offset + fieldNumberMap[fieldNumber]);
115         } catch (SQLException e) {
116             throw new ClusterJDatastoreException(e);
117         }
118     }
119 
getFloat(int fieldNumber)120     public float getFloat(int fieldNumber) {
121         try {
122             return parameterBindings.getFloat(offset + fieldNumberMap[fieldNumber]);
123         } catch (SQLException e) {
124             throw new ClusterJDatastoreException(e);
125         }
126     }
127 
getInt(int fieldNumber)128     public int getInt(int fieldNumber) {
129         try {
130             return parameterBindings.getInt(offset + fieldNumberMap[fieldNumber]);
131         } catch (SQLException e) {
132             throw new ClusterJDatastoreException(e);
133         }
134     }
135 
getJavaSqlDate(int fieldNumber)136     public Date getJavaSqlDate(int fieldNumber) {
137         try {
138             return parameterBindings.getDate(offset + fieldNumberMap[fieldNumber]);
139         } catch (SQLException e) {
140             throw new ClusterJDatastoreException(e);
141         }
142     }
143 
getJavaSqlTime(int fieldNumber)144     public Time getJavaSqlTime(int fieldNumber) {
145         try {
146             return parameterBindings.getTime(offset + fieldNumberMap[fieldNumber]);
147         } catch (SQLException e) {
148             throw new ClusterJDatastoreException(e);
149         }
150     }
151 
getJavaSqlTimestamp(int fieldNumber)152     public Timestamp getJavaSqlTimestamp(int fieldNumber) {
153         try {
154             return parameterBindings.getTimestamp(offset + fieldNumberMap[fieldNumber]);
155         } catch (SQLException e) {
156             throw new ClusterJDatastoreException(e);
157         }
158     }
159 
getJavaUtilDate(int fieldNumber)160     public java.util.Date getJavaUtilDate(int fieldNumber) {
161         try {
162             return parameterBindings.getDate(offset + fieldNumberMap[fieldNumber]);
163         } catch (SQLException e) {
164             throw new ClusterJDatastoreException(e);
165         }
166     }
167 
getLong(int fieldNumber)168     public long getLong(int fieldNumber) {
169         try {
170             return parameterBindings.getLong(offset + fieldNumberMap[fieldNumber]);
171         } catch (SQLException e) {
172             throw new ClusterJDatastoreException(e);
173         }
174     }
175 
getObjectBoolean(int fieldNumber)176     public Boolean getObjectBoolean(int fieldNumber) {
177         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
178     }
179 
getObjectByte(int fieldNumber)180     public Byte getObjectByte(int fieldNumber) {
181         try {
182             return parameterBindings.getByte(offset + fieldNumberMap[fieldNumber]);
183         } catch (SQLException e) {
184             throw new ClusterJDatastoreException(e);
185         }
186     }
187 
getObjectDouble(int fieldNumber)188     public Double getObjectDouble(int fieldNumber) {
189         try {
190             return parameterBindings.getDouble(offset + fieldNumberMap[fieldNumber]);
191         } catch (SQLException e) {
192             throw new ClusterJDatastoreException(e);
193         }
194     }
195 
getObjectFloat(int fieldNumber)196     public Float getObjectFloat(int fieldNumber) {
197         try {
198             return parameterBindings.getFloat(offset + fieldNumberMap[fieldNumber]);
199         } catch (SQLException e) {
200             throw new ClusterJDatastoreException(e);
201         }
202     }
203 
getObjectInt(int fieldNumber)204     public Integer getObjectInt(int fieldNumber) {
205         try {
206             return parameterBindings.getInt(offset + fieldNumberMap[fieldNumber]);
207         } catch (SQLException e) {
208             throw new ClusterJDatastoreException(e);
209         }
210     }
211 
getObjectLong(int fieldNumber)212     public Long getObjectLong(int fieldNumber) {
213         try {
214             return parameterBindings.getLong(offset + fieldNumberMap[fieldNumber]);
215         } catch (SQLException e) {
216             throw new ClusterJDatastoreException(e);
217         }
218     }
219 
getObjectShort(int fieldNumber)220     public Short getObjectShort(int fieldNumber) {
221         try {
222             return parameterBindings.getShort(offset + fieldNumberMap[fieldNumber]);
223         } catch (SQLException e) {
224             throw new ClusterJDatastoreException(e);
225         }
226     }
227 
getShort(int fieldNumber)228     public short getShort(int fieldNumber) {
229         try {
230             return parameterBindings.getShort(offset + fieldNumberMap[fieldNumber]);
231         } catch (SQLException e) {
232             throw new ClusterJDatastoreException(e);
233         }
234     }
235 
getString(int fieldNumber)236     public String getString(int fieldNumber) {
237         try {
238             return parameterBindings.getString(offset + fieldNumberMap[fieldNumber]);
239         } catch (SQLException e) {
240             throw new ClusterJDatastoreException(e);
241         }
242     }
243 
isModified(int fieldNumber)244     public boolean isModified(int fieldNumber) {
245         return fieldNumberMap[fieldNumber] != -1;
246     }
247 
isNull(int fieldNumber)248     public boolean isNull(int fieldNumber) {
249         try {
250             return parameterBindings.isNull(offset + fieldNumberMap[fieldNumber]);
251         } catch (SQLException e) {
252             throw new ClusterJDatastoreException(e);
253         }
254     }
255 
markModified(int fieldNumber)256     public void markModified(int fieldNumber) {
257         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
258     }
259 
pkToString(DomainTypeHandler<?> domainTypeHandler)260     public String pkToString(DomainTypeHandler<?> domainTypeHandler) {
261         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
262     }
263 
resetModified()264     public void resetModified() {
265         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
266     }
267 
setBigDecimal(int fieldNumber, BigDecimal value)268     public void setBigDecimal(int fieldNumber, BigDecimal value) {
269         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
270     }
271 
setBigInteger(int fieldNumber, BigInteger bigIntegerExact)272     public void setBigInteger(int fieldNumber, BigInteger bigIntegerExact) {
273         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
274     }
275 
setBoolean(int fieldNumber, boolean b)276     public void setBoolean(int fieldNumber, boolean b) {
277         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
278     }
279 
setBooleans(int fieldNumber, boolean[] b)280     public void setBooleans(int fieldNumber, boolean[] b) {
281         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
282     }
283 
setByte(int fieldNumber, byte value)284     public void setByte(int fieldNumber, byte value) {
285         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
286     }
287 
setBytes(int fieldNumber, byte[] value)288     public void setBytes(int fieldNumber, byte[] value) {
289         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
290     }
291 
setDouble(int fieldNumber, double value)292     public void setDouble(int fieldNumber, double value) {
293         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
294     }
295 
setFloat(int fieldNumber, float value)296     public void setFloat(int fieldNumber, float value) {
297         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
298     }
299 
setInt(int fieldNumber, int value)300     public void setInt(int fieldNumber, int value) {
301         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
302     }
303 
setJavaSqlDate(int fieldNumber, Date value)304     public void setJavaSqlDate(int fieldNumber, Date value) {
305         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
306     }
307 
setJavaSqlTime(int fieldNumber, Time value)308     public void setJavaSqlTime(int fieldNumber, Time value) {
309         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
310     }
311 
setJavaSqlTimestamp(int fieldNumber, Timestamp value)312     public void setJavaSqlTimestamp(int fieldNumber, Timestamp value) {
313         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
314     }
315 
setJavaUtilDate(int fieldNumber, java.util.Date value)316     public void setJavaUtilDate(int fieldNumber, java.util.Date value) {
317         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
318     }
319 
setLong(int fieldNumber, long value)320     public void setLong(int fieldNumber, long value) {
321         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
322     }
323 
setObject(int fieldNumber, Object value)324     public void setObject(int fieldNumber, Object value) {
325         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
326     }
327 
setObjectBoolean(int fieldNumber, Boolean value)328     public void setObjectBoolean(int fieldNumber, Boolean value) {
329         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
330     }
331 
setObjectByte(int fieldNumber, Byte value)332     public void setObjectByte(int fieldNumber, Byte value) {
333         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
334     }
335 
setObjectDouble(int fieldNumber, Double value)336     public void setObjectDouble(int fieldNumber, Double value) {
337         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
338     }
339 
setObjectFloat(int fieldNumber, Float value)340     public void setObjectFloat(int fieldNumber, Float value) {
341         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
342     }
343 
setObjectInt(int fieldNumber, Integer value)344     public void setObjectInt(int fieldNumber, Integer value) {
345         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
346     }
347 
setObjectLong(int fieldNumber, Long value)348     public void setObjectLong(int fieldNumber, Long value) {
349         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
350     }
351 
setObjectShort(int fieldNumber, Short value)352     public void setObjectShort(int fieldNumber, Short value) {
353         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
354     }
355 
setShort(int fieldNumber, short value)356     public void setShort(int fieldNumber, short value) {
357         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
358     }
359 
setString(int fieldNumber, String value)360     public void setString(int fieldNumber, String value) {
361         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
362     }
363 
columnMetadata()364     public ColumnMetadata[] columnMetadata() {
365         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
366     }
367 
found()368     public Boolean found() {
369         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
370     }
371 
found(Boolean found)372     public void found(Boolean found) {
373         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
374     }
375 
get(int columnNumber)376     public Object get(int columnNumber) {
377         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
378     }
379 
set(int columnNumber, Object value)380     public void set(int columnNumber, Object value) {
381         throw new ClusterJFatalInternalException(local.message("ERR_Should_Not_Occur"));
382     }
383 
384 }
385