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